Re: ODBC v08.02.0100

From: greg(dot)campbell(at)us(dot)michelin(dot)com
To: pgsql-odbc(at)postgresql(dot)org
Subject: Re: ODBC v08.02.0100
Date: 2006-08-31 20:56:07
Message-ID: OF78233DAA.8B8D974F-ON852571DB.0072F2CD-852571DB.0073008D@michelin.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Ahh, I see.

In the LEFT OUTER JOIN, the resultset has potential NULLs, for all fields
from the table on the right side of "LEFT OUTER JOIN".
Per the PostgreSQL documents, in the section on SQL,
the LEFT OUTER JOIN, example: test LEFT OUTER JOIN test2
will first do an inner join to find all matching rows
(test.fk_test2=test2.id), and then records from the left table (test) but
which have no matching records from the right table (test2), will be
added and the right table (test2) fields will be filled with NULLs.

Back to your example:
The result of your left outer join should be such that
resultset.id and
resultset.field1 --- can never be NULL. This is no surprise.

resultset.fk_test2 and
resultset.field 2 and
resultset.field3 --- can be expected to be NULL sometimes. This is no
surprise.

while
resultset.id2
resultset.field4
resultset.field5
can all also be expected to be NULL potentially, when there is a records in
test but no matching records in test2 (per test.fk_test2=test2.id).

So I think your issue is that for the resultset it should not have NOT NULL
as a constraint for
resultset. id2 and resultset.field4. Everything from test2 is nullable.
Yes, it sound like you found a bug.

And, you say fk_test2 will actually be NULL sometimes. This will cause the
resultset to always have a row with NULL in id2, field4, and field5
because NULL is never equal to NULL. test.fk_test2 = test.id is always
false when fk_test2 is NULL, even if test2.id is NULL.
Futher test2.id probably should not be null, Hopefully it is a primary key.

Greg Campbell ENG-ASE/Michelin US5
Lexington, South Carolina
803-951-5561, x75561
Fax: 803-951-5531
greg(dot)campbell(at)us(dot)michelin(dot)com


"luiz"
<luiz(at)planit(dot)com(dot)
br> To
Sent by: greg(dot)campbell(at)us(dot)michelin(dot)com
pgsql-odbc-owner@ cc
postgresql.org pgsql-odbc(at)postgresql(dot)org
Subject
Re: [ODBC] ODBC v08.02.0100
08/31/2006 16:09




Hi Greg

I'm sorry if I'm not can express clearly what I need to explain.
My english is litle.

In a left outer join like below, field4 may have null values when
test.fk_test2 is null,
now the result is a char(3) empty field, then I presume that this is a
incorrect resultset

On Thu, 31 Aug 2006 15:26:04 -0400, greg.campbell wrote
> So your issue is that now the field types including NULL constraints
match the underlying tables?
> Is the change caused just from changing pgODBC driver versions, while the
database version stayed the same.?
> Isn't this the result we would expect if we were using psql at the
command line?
> I don't mean to be rude, but does your application expect a resultset
where certain field never have a NULL value, but where the database design
has the fields specified as nullable (no specification of NOT NULL)? For
instance in your example fk_test2 is designed to allow NULL, but perhaps an
application does not anticipate the possibility that NULL may be its value.

>
> Perhaps the old behavior was a bug.
>
> Greg Campbell ENG-ASE/Michelin US5
> Lexington, South Carolina
> 803-951-5561, x75561
> Fax: 803-951-5531
> greg(dot)campbell(at)us(dot)michelin(dot)com
>
> "luiz" <luiz(at)planit(dot)com(dot)br>
>
>

"luiz"
<luiz(at)planit(dot)c
om.br>
> Sent by: >
pgsql-odbc-own > To
er(at)postgresql(dot)
org >
> 08/31/2006 pgsql-odbc(at)postgre
14:14 sql.org

>
> cc

>

>
> Subject

> [ODBC] ODBC
v08.02.0100





> Hi all,
>
> I make some tests with this new version and i notice a diference in the
> behaviour about the structures of tables returned by queries trough
this
> version and older versions of odbc
>
> I'm using Visual FoxPro with postgres 8.1.4.
>
> In previous version all fields are marked to accept null values.
> In this version (8.02.0100) some fields now don't accept null values,
seemed
> to me that now use the same definition of source table structure, like
this:
>
> CREATE TABLE test (
>  id serial NOT NULL,
>  fk_test2 int4,
>  field1 char(3) NOT NULL,
>  field2 varchar(10),
>  field3 date );
>
> CREATE TABLE test2 (
>  id serial NOT NULL,
>  field4 char(3) NOT NULL,
>  field5 char(3) );
>
> SELECT test.*
>     , test2.id as id2
>     , test2.field4
>     , test2.field5
>  from test LEFT OUTER JOIN test2 on test.fk_test2 = test2.id;
>
> The fields of resultset will be now this:
>
> id int4 NOT NULL
> fk_test2 int4
> field1 char(3) NOT NULL
> field2 varchar(10)
> field3 date
> id2 int4 NOT NULL
> field4 char(3) NOT NULL
> field5 char(3)
>
> with odbc version 8.01.0200 all fields accept null values.
>
> I'm not sure about what is the correct behaviour, but this can be
considered
> as a bug in the new version ?
>
> Thanks in Advance
>
> Luiz
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings
>

--
Plan IT Tecnologia Informatica Ltda.

Browse pgsql-odbc by date

  From Date Subject
Next Message Hiroshi Inoue 2006-08-31 21:13:19 Re: ODBC v08.02.0100
Previous Message luiz 2006-08-31 20:09:56 Re: ODBC v08.02.0100