[freetds] BUG?: incorrect struct tds_microsoft_dbdaterec

Frediano Ziglio freddy77 at gmail.com
Sun Aug 22 09:34:54 EDT 2010


Il giorno 20/ago/2010, alle ore 10.03, LacaK <lacak at zoznam.sk> ha  
scritto:

> 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.

Current there is no binary compatibility between our lib and MS one.  
Bug reporting in sf is not that used but active.

Freddy77



More information about the FreeTDS mailing list