Bug in bcp.c
Libin Qi <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <[email protected]> |
0.82 release. When I call bcp_sendrow() If I pass a non-numeric string e.g. "xx" to an integer field in database, the conversion would fail, but instead of returning a -1, the library core-dumped. Line 3485 in bcp.c, the assertion failed. After modifying code like this, it started working: 3483: bindcol->bcp_column_data->datalen = converted_data_size; 3484: if(bindcol->bcp_column_data->datalen < 0) 3485: return (FAIL) ; 3486: bindcol->bcp_column_data->is_null = 0; 3487: assert(converted_data_size > 0); --- On Fri, 8/20/10, [email protected] <[email protected]> wrote: From: [email protected] <[email protected]> Subject: FreeTDS Digest, Vol 91, Issue 13 To: [email protected] Date: Friday, August 20, 2010, 5:22 PM Send FreeTDS mailing list submissions to [email protected] To subscribe or unsubscribe via the World Wide Web, visit http://lists.ibiblio.org/mailman/listinfo/freetds or, via email, send a message with subject or body 'help' to [email protected] You can reach the person managing the list at [email protected] When replying, please edit your Subject line so it is more specific than "Re: Contents of FreeTDS digest..." Today's Topics: 1. Re: HOWTO compille FreeTDS under Windows (Luis de Vasconcelos) 2. Re: HOWTO compille FreeTDS under Windows (David Dick) 3. Request for change in dblib.c in dbsetlversion (LacaK) 4. Re: HOWTO compille FreeTDS under Windows (LacaK) 5. BUG?: incorrect struct tds_microsoft_dbdaterec (LacaK) ---------------------------------------------------------------------- Message: 1 Date: Thu, 19 Aug 2010 20:08:41 +0200 From: "Luis de Vasconcelos" <[email protected]> To: "'FreeTDS Development Group'" <[email protected]> Subject: Re: [freetds] HOWTO compille FreeTDS under Windows Message-ID: <[email protected]> Content-Type: text/plain; charset="us-ascii" > Hm, > so nobody is ATM using (compiling) FreeTDS under Windows ? Here's one way to compile it under Windows: http://docs.moodle.org/en/Development:Compiling_FreeTDS_under_Windows ------------------------------ Message: 2 Date: Fri, 20 Aug 2010 06:52:26 +1000 From: David Dick <[email protected]> To: FreeTDS Development Group <[email protected]> Subject: Re: [freetds] HOWTO compille FreeTDS under Windows Message-ID: <[email protected]> Content-Type: text/plain; charset=UTF-8; format=flowed On 16/08/10 23:05, LacaK wrote: > Hi, > sometime ago I posted in this list question with subject "FreeTDS on > Windows", but with no reply ATM. > So I am trying again. > My basic question is how to compile (which compiler) under windows ? I used Visual Studio 6 to compile what i needed (libct for the perl DBD::Sybase library. I needed to apply some very simple patches to 0.82, which were applied by freddy77, but my compile step was msdev "$freetds_src_path\\win32\\msvc6\\FreeTDS.dsw" /MAKE 'libct - Win32 Release' /OUT > I need dblib.dll (plus may be some others dlls) as a final product. I imagine dblib requires a very similar process. For the record, freetds on win32 has been very stable for me and happily passes 10K application tests including some for stress testing the db connection. ------------------------------ Message: 3 Date: Fri, 20 Aug 2010 07:14:41 +0200 From: LacaK <[email protected]> To: [email protected] Subject: [freetds] Request for change in dblib.c in dbsetlversion Message-ID: <[email protected]> Content-Type: text/plain; charset=X-MAC-CE; format=flowed Hi *, I am playng with "db-lib" as a DB API for my FreePascal project. I want use dblib.dll to connect to MS SQL Server 7+ So I want to set appropriate TDS protocol version using call to "dbsetlversion" (Yes, I know that I can set TDS protocol version by env.var. TDSVER or freetds.conf, but I am looking for way how to set it in program). So I use dbsetlversion with DBVER60 (becase it accepts only DBVER42 (which is too old and does not support new features) and DBVER60) DBVER60 is defined like DBVERSION_70 (and DBVERSION_70 is used when TDS70 is defined), but in code is set: login->tds_login->tds_version=0x600 In this case in log file appears: ... net.c:225:Connecting to 10.0.0.2 port 1433 (TDS version 6.0) net.c:281:tds_open_socket: connect(2) returned "WSAEWOULDBLOCK: Resource temporarily unavailable." net.c:321:tds_open_socket() succeeded util.c:156:Changed query state from DEAD to IDLE *login.c:575:Unknown protocol version!* *login.c:462:login packet rejected* util.c:156:Changed query state from IDLE to DEAD util.c:331:tdserror(02290500, 02290840, 20002, 0) dblib.c:7861:dbperror(02290610, 20002, 0) dblib.c:7913:20002: "Adaptive Server connection failed" ... So IMHO TDS version 6.0 is bad (http://www.freetds.org/tds.html) and should be changed to 7.0 : (Sybase does not defines dbsetlversion, so only Microsoft is in game http://www.freetds.org/userguide/dblib.api.summary.htm) *login->tds_login->tds_version=0x700* And/or if possible add also other cases: case DBVERSION_71: login->tds_login->tds_version = 0x710; return SUCCEED; ... TIA -Laco. ------------------------------ Message: 4 Date: Fri, 20 Aug 2010 07:59:27 +0200 From: LacaK <[email protected]> To: [email protected], FreeTDS Development Group <[email protected]> Subject: Re: [freetds] HOWTO compille FreeTDS under Windows Message-ID: <[email protected]> Content-Type: text/plain; charset=ISO-8859-1; format=flowed >> Hm, so nobody is ATM using (compiling) FreeTDS under Windows ? >> > > Here's one way to compile it under Windows: > http://docs.moodle.org/en/Development:Compiling_FreeTDS_under_Windows > > > Thanks, but steps described leads to dblib.lib, but I need dblib.dll. I think, that in mean time I found solution for VC++ 2005 Express: When I import project, then in project properties I must change: General Configuration type: Dynamic library (instead of Static library) Linker Input Add dependencies: ws2_32.lib Module definition: ..\dblib.def (this is new file, which I created and contains EXPORTS for routines in sybdb.h) I am not sure if this is correct way (I am not C/C++ programmer at all), but after experimenting this leads to successful build of dblib.dll (if they are correct then it will be good include them in FreeTDS sources to make process of bulding more simple) Also it will be great if in sources of FreeTDS will be added "Project definition" for VC 2005+ (win32/msvc7???) L. > > > > > _______________________________________________ > FreeTDS mailing list > [email protected] > http://lists.ibiblio.org/mailman/listinfo/freetds > > ------------------------------ Message: 5 Date: Fri, 20 Aug 2010 10:03:53 +0200 From: LacaK <[email protected]> To: FreeTDS Development Group <[email protected]> Subject: [freetds] BUG?: incorrect struct tds_microsoft_dbdaterec Message-ID: <[email protected]> Content-Type: text/plain; charset=X-MAC-CE; format=flowed Hi, I am not sure if this is right place to report bug or not, but I do not know if bug-tracker on sourceforge.net is active. (if there is active bug tracke, let me know please) There is in sybdb.h defined: struct tds_microsoft_dbdaterec { DBINT year; /* 1753 - 9999 */ DBINT quarter; /* 1 - 4 */ DBINT month; /* 1 - 12 */ DBINT day; /* 1 - 31 */ DBINT dayofyear; /* 1 - 366 */ DBINT week; /* 1 - 54 (for leap years) */ DBINT weekday; /* 1 - 7 (Mon. - Sun.) */ DBINT hour; /* 0 - 23 */ DBINT minute; /* 0 - 59 */ DBINT second; /* 0 - 59 */ DBINT millisecond; /* 0 - 999 */ DBINT tzone; /* 0 - 127 (Sybase only) */ }; But Microsoft uses slightly different format, see: http://msdn.microsoft.com/en-us/library/aa937027(v=SQL.80).aspx |typedef struct dbdaterec { int year; // 1753 - 9999 int quarter; // 1 - 4 int month; // 1 - 12 int dayofyear; // 1 - 366 int day; // 1 - 31 int week; // 1 - 54 (for leap years) int weekday; // 1 - 7 (Mon. - Sun.) int hour; // 0 - 23 int minute; // 0 - 59 int second; // 0 - 59 int millisecond; // 0 - 999 } DBDATEREC;| * "day" and "dayofyear" are exchanged !!!* So I think, that struct tds_microsoft_dbdaterec and function dbdatecrack (which only uses dbdaterec) must be adjusted: (to keep "binnary" compatibilty with Microsoft implementation in ntwdblib.dll) ... if (dbproc ? dbproc->msdblib : msdblib) { ++di->quarter; ++di->datemonth; ++di->datedweek; //add these two lines: di->datedmonth = dr.dayofyear; di->datedyear = dr.day; } ... -Laco. ------------------------------ _______________________________________________ FreeTDS mailing list [email protected] http://lists.ibiblio.org/mailman/listinfo/freetds End of FreeTDS Digest, Vol 91, Issue 13 ***************************************