Re: db-lib: support for new MS SQL 2008 data types - part 4
Frediano Ziglio <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <CAHt6W4e3FyhKnpiO6bwLLb9F9V8PUNUyC7eym_g7Ju1Bzt7eHw@mail.gmail.com> |
2014-05-21 12:47 GMT+01:00 LacaK <[email protected]>: > Hi, > please see attached small patches, which introduce new constant > DATETIME2BIND used for supporting binding to local variables of type > TDS_DATETIMEALL. > Any comment welcome of course. > Thanks > -Laco. > > > --- sybdb.h.ori Sun May 18 10:41:16 2014 > +++ sybdb.h Wed May 21 13:30:54 2014 > @@ -459,7 +459,7 @@ typedef int (*MHANDLEFUNC) (DBPROCESS * > #define STRINGBIND 1 > #define NTBSTRINGBIND 2 > #define VARYCHARBIND 3 > -#define VARYBINBIND 4 > +#define VARYBINBIND 4 > #define TINYBIND 6 > #define SMALLBIND 7 > #define INTBIND 8 > @@ -474,7 +474,8 @@ typedef int (*MHANDLEFUNC) (DBPROCESS * > #define NUMERICBIND 17 > #define DECIMALBIND 18 > #define BIGINTBIND 30 > -#define MAXBINDTYPES 31 /* keep last */ > +#define DATETIME2BIND 31 > +#define MAXBINDTYPES 32 /* keep last */ > > #define DBPRCOLSEP 21 > #define DBPRLINELEN 22 > > --- dblib.c.ori Sun May 18 10:41:16 2014 > +++ dblib.c Wed May 21 13:38:42 2014 > @@ -452,6 +452,7 @@ static const DBDATETIME4 null_SMALLDATET > static const DBMONEY null_MONEY = { 0, 0 }; > static const DBMONEY4 null_SMALLMONEY = {0}; > static const DBNUMERIC null_NUMERIC = { 0, 0, {0} }; > +static const TDS_DATETIMEALL null_DATETIMEALL = { 0, 0, 0, 0 }; > > static NULLREP default_null_representations[MAXBINDTYPES] = { > /* CHARBIND 0 */ { NULL, 0 } > @@ -485,7 +486,8 @@ static NULLREP default_null_representati > /* 28 */ , { NULL, 0 } > /* 29 */ , { NULL, 0 } > /* BIGINTBIND 30 */ , { (BYTE*) &null_BIGINT, > sizeof(null_BIGINT) } > - /* MAXBINDTYPES 31 */ > + /* DATETIME2BIND 31 */ , { (BYTE*) &null_DATETIMEALL, > sizeof(null_DATETIMEALL) } > + /* MAXBINDTYPES 32 */ > }; > > static int > @@ -518,7 +520,13 @@ dbbindtype(int datatype) > > case SYBMONEY: return MONEYBIND; > case SYBMONEY4: return SMALLMONEYBIND; > - > + > + case SYBMSDATE: > + case SYBMSTIME: > + case SYBMSDATETIME2: > + case SYBMSDATETIMEOFFSET: > + return DATETIME2BIND; > + > default: > assert(0 == "no such datatype"); > } > @@ -2157,6 +2165,9 @@ dblib_bound_type(int bindtype) > case DECIMALBIND: > return SYBDECIMAL; > break; > + case DATETIME2BIND: > + return SYBMSDATETIME2; > + break; > default: > return -1; > break; Why not SYBMSDATETIMEOFFSET > @@ -7321,6 +7332,14 @@ copy_data_to_host_var(DBPROCESS * dbproc > memcpy(dest, src, ret); > break; > > + case SYBMSDATE: > + case SYBMSTIME: > + case SYBMSDATETIME2: > + case SYBMSDATETIMEOFFSET: > + ret = sizeof(TDS_DATETIMEALL); > + memcpy(dest, src, ret); > + break; > + > default: > break; > } > @@ -7427,6 +7446,12 @@ copy_data_to_host_var(DBPROCESS * dbproc > break; > case SYBUNIQUE: > memcpy(dest, &(dres.u), sizeof(TDS_UNIQUE)); > + break; > + case SYBMSDATE: > + case SYBMSTIME: > + case SYBMSDATETIME2: > + case SYBMSDATETIMEOFFSET: > + memcpy(dest, &(dres.dta), sizeof(TDS_DATETIMEALL)); > break; > case SYBCHAR: > case SYBVARCHAR: > The rest looks fine. Can I apply with the type changed or there is a specific reason why you choose this type? Frediano