Re: ODBC Boolean handling - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Re: ODBC Boolean handling |
Date | |
Msg-id | 200108020300.f72305X06103@candle.pha.pa.us Whole thread Raw |
In response to | ODBC Boolean handling (Aidan Mountford <Aidan@oz.to>) |
List | pgsql-patches |
I have reviewed the current CVS code and it looks quite different from the patch you submitted. Any chance of you downloading the snapshot and sending a context diff, rather than an ordinary one. I could apply that easily. > I had a few issues with boolean handling in ODBC driver. > > 1) When a row is retrieved, and then a SQL_FETCH_FIRST is issued, the check > in convert.c > does not consider the fact that the value in the field has been altered to > be a '1' if the > backend handed it a 't'. The net result being that the first row on any > subsequent queries > has all it's boolean set to 0. > > 2) I had issues with some utilities that, when casting from string to > boolean, and having > the global 'bools as char' set, require that -1 = True, and 0 = false. > > The following patch fixes both of these issues.. > > Cheers for building a fantastic product > > Aidan > > > > cvs diff convert.c (in directory C:\CVS-POSTGRES\pgsql\src\interfaces\odbc\) > Index: convert.c > =================================================================== > RCS file: /home/projects/pgsql/cvsroot/pgsql/src/interfaces/odbc/convert.c,v > retrieving revision 1.44 > diff -r1.44 convert.c > 295c295,307 > < if (s[0] == 'T' || s[0] == 't') > --- > > /* Aidan Mountford (aidan@oz.to) 1/08/2001: > > > > > >> if (s[0] == 'T' || s[0] == 't') > <<< This wont work... > > > > When MoveFirst is called twice on > one set of tuples, > > this will have the effect of setting > s[0] to 1 on the > > first pass, and s[0] on the second. > > > > This is bad ;) > > > > */ > > > > if (s[0] == 'T' || s[0] == 't' || s[0] == > '1') > 415c428 > < len = 1; > --- > > > 418c431,449 > < strcpy(rgbValueBindRow, value); > --- > > /* Aidan Mountford (aidan@oz.to) > 1/08/2001: > > > > When returning a CHAR > datatype, return -1 > > instead of +1. > > > > That way if someone casts it > back to a boolean > > again - it will work. > > */ > > if ( *(char *) value = '1') > > { > > strcpy(rgbValueBindRow, "-1"); > > len = 2; > > } > > else > > { > > strcpy(rgbValueBindRow, "0"); > > len = 1; > > } > > > 1160a1192,1193 > > > > > 1161a1195 > > > > > ..................................................... > . Cisco Certified Network Associate > . Microsoft Certified Professional > . 3Com 3Wizard > . > . Technical Director > . MindVision Interactive Pty. Ltd. > . http://www.mindvision.com.au > . PH: +61-8-8212-9544 > . FAX: +61-8-8212-9644 > . 48 Light Square > . Adelaide SA > . AUSTRALIA 5000 > ..................................................... > > "Remember, There is always scope for things to be worse" > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
pgsql-patches by date: