Re: ODBC Boolean handling

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Aidan Mountford <Aidan(at)oz(dot)to>
Cc: "'pgsql-patches(at)postgresql(dot)org'" <pgsql-patches(at)postgresql(dot)org>
Subject: Re: ODBC Boolean handling
Date: 2001-08-02 03:00:05
Message-ID: 200108020300.f72305X06103@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)oz(dot)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(at)oz(dot)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(at)postgresql(dot)org)
>

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-patches by date

  From Date Subject
Next Message Paul Ramsey 2001-08-02 03:56:04 Re: contrib/postgis
Previous Message Bruce Momjian 2001-08-02 02:39:49 Re: Patch for Improved Syntax Error Reporting