Thread: Re: [BUGS] Behavior change of FK info query

Re: [BUGS] Behavior change of FK info query

From
Tom Lane
Date:
Zahid Khan <khanzahid235@yahoo.com> writes:
> In my application we are getting different results in 8.2� and 8.3 servers. if we execute the query no 3 below after
creatingtable even on psql.As psqlODBC drives executes query no 3 below to get foreign key information.if we want to
reproducethis , we can executes the following queries on psql in sequence we are getting different results in 8.2� and
8.3. 

8.3 does not store any foreign-key information in pg_trigger.tgargs
anymore.  If psqlODBC is depending on this query then that's a psqlODBC
bug.  It'd be better to look at pg_constraint.

            regards, tom lane

Re: [BUGS] Behavior change of FK info query

From
"Hiroshi Saito"
Date:
Hi.

> Zahid Khan <khanzahid235@yahoo.com> writes:
>> In my application we are getting different results in 8.2\xA0 and 8.3 servers. if we execute the
>> query no 3 below after creating table even on psql.As psqlODBC drives executes query no 3 below
>> to get foreign key information.if we want to reproduce this , we can executes the following
>> queries on psql in sequence we are getting different results in 8.2\xA0 and 8.3 .
>
> 8.3 does not store any foreign-key information in pg_trigger.tgargs
> anymore.  If psqlODBC is depending on this query then that's a psqlODBC
> bug.  It'd be better to look at pg_constraint.

Ahh, About foreign key, it will solve by 08.03.0300.
http://psqlodbc.projects.postgresql.org/release.html
I think that it is solvable by 4.).

It seems that I did what point of that mistake.

We has forgotten the information of a release.....sorry.
and, It seems that the test of UUID was not enough.
http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/psqlodbc/psqlodbc/convert.c.diff?r1=1.173&r2=1.174
One more condition fell out.
http://archives.postgresql.org/pgsql-odbc/2008-10/msg00010.php

Furthermore, I think it good to use libpq by which 8.3.5 was released.
So, it is better to pack up 08.03.0310.?

to Dave and Inoue-san.
What do you think?

Regards,
Hiroshi Saito


Re: [BUGS] Behavior change of FK info query

From
"Dave Page"
Date:
2008/11/4 Hiroshi Saito <z-saito@guitar.ocn.ne.jp>:

> Furthermore, I think it good to use libpq by which 8.3.5 was released.
> So, it is better to pack up 08.03.0310.?
>
> to Dave and Inoue-san.
> What do you think?

08.03.0400 sounds better to me.


--
Dave Page
EnterpriseDB UK:   http://www.enterprisedb.com

Re: [BUGS] Behavior change of FK info query

From
"Hiroshi Saito"
Date:
Ok, agree. I will prepare it.
Then, I need carefully packaging.

----- Original Message -----
From: "Dave Page" <dpage@pgadmin.org>


> 2008/11/4 Hiroshi Saito <z-saito@guitar.ocn.ne.jp>:
>
>> Furthermore, I think it good to use libpq by which 8.3.5 was released.
>> So, it is better to pack up 08.03.0310.?
>>
>> to Dave and Inoue-san.
>> What do you think?
>
> 08.03.0400 sounds better to me.
>
>
> --
> Dave Page
> EnterpriseDB UK:   http://www.enterprisedb.com
>
> --
> Sent via pgsql-odbc mailing list (pgsql-odbc@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-odbc

Bug fix request for 08.03.0400 ( was [BUGS] Behavior change of FK info query)

From
"Luiz K. Matsumura"
Date:
Hi,

There are some chance to implement also correction for this bug:

http://pgfoundry.org/tracker/index.php?func=detail&aid=1010303&group_id=1000125&atid=538
?

I attached a path for a change made on info.c of release 08.03.0300 source.
I tested it with postgres 8.0 , 8.1 , 8.2 and 8.3 server and works fine.


This is just a change on one query made by PGAPI_Columns function as
showed bellow

.
.
.
(line 2066)
    /*
     * Create the query to find out the columns (Note: pre 6.3 did not
     * have the atttypmod field)
     */
    op_string = gen_opestr(like_or_eq, conn);
    if (conn->schema_support)
    {
        strncpy(columns_query,
            "select n.nspname, c.relname, a.attname"
            ", case when t.typtype = 'd' then t.typbasetype else
a.atttypid end as atttypid"
            ", coalesce(bt.typname, t.typname ) AS typname, a.attnum,
a.attlen"
            ", case when t.typtype = 'd' then t.typtypmod else
a.atttypmod end as atttypmod"
            ", a.attnotnull, c.relhasrules, c.relkind, c.oid, d.adsrc"
            " from (((pg_catalog.pg_class c inner join
pg_catalog.pg_namespace n on n.oid = c.relnamespace",
            sizeof(columns_query));
        if (search_by_ids)
            snprintf_add(columns_query, sizeof(columns_query), " and
c.oid = %u", reloid);
        else
        {
            if (escTableName)
                snprintf_add(columns_query, sizeof(columns_query), " and
c.relname %s'%s'", op_string, escTableName);
            schema_strcat1(columns_query, " and n.nspname %s'%.*s'",
op_string, escSchemaName, SQL_NTS, szTableName, cbTableName, conn);
        }
        strcat(columns_query, ") inner join pg_catalog.pg_attribute a"
            " on (not a.attisdropped)");
        if (0 == attnum && (NULL == escColumnName || like_or_eq != eqop))
            strcat(columns_query, " and a.attnum > 0");
        if (search_by_ids)
        {
            if (attnum != 0)
                snprintf_add(columns_query, sizeof(columns_query), " and
a.attnum = %d", attnum);
        }
        else if (escColumnName)
            snprintf_add(columns_query, sizeof(columns_query), " and
a.attname %s'%s'", op_string, escColumnName);
        strcat(columns_query,
            " and a.attrelid = c.oid)"
            " inner join pg_catalog.pg_type t on t.oid = a.atttypid)"
            " left outer join pg_attrdef d on a.atthasdef and d.adrelid
= a.attrelid and d.adnum = a.attnum"
            " left outer join pg_type bt on t.typtype = 'd' and
t.typbasetype = bt.oid" );
        strcat(columns_query, " order by n.nspname, c.relname, attnum");
    }


I will be really happy if this can be fixed.

Best Regards


Hiroshi Saito wrote:
> Ok, agree. I will prepare it.
> Then, I need carefully packaging.
>
> ----- Original Message ----- From: "Dave Page" <dpage@pgadmin.org>
>
>
>> 2008/11/4 Hiroshi Saito <z-saito@guitar.ocn.ne.jp>:
>>
>>> Furthermore, I think it good to use libpq by which 8.3.5 was released.
>>> So, it is better to pack up 08.03.0310.?
>>>
>>> to Dave and Inoue-san.
>>> What do you think?
>>
>> 08.03.0400 sounds better to me.
>>
>>
>> --
>> Dave Page
>> EnterpriseDB UK:   http://www.enterprisedb.com
>>
>> --
>> Sent via pgsql-odbc mailing list (pgsql-odbc@postgresql.org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-odbc
>

--
Luiz K. Matsumura
Plan IT Tecnologia Informática Ltda.

2074,2077c2074,2079
<             "select n.nspname, c.relname, a.attname, a.atttypid"
<                ", t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull"
<             ", c.relhasrules, c.relkind, c.oid, d.adsrc from (((pg_catalog.pg_class c"
<             " inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace",
---
>             "select n.nspname, c.relname, a.attname"
>             ", case when t.typtype = 'd' then t.typbasetype else a.atttypid end as atttypid"
>             ", coalesce(bt.typname, t.typname ) AS typname, a.attnum, a.attlen"
>             ", case when t.typtype = 'd' then t.typtypmod else a.atttypmod end as atttypmod"
>             ", a.attnotnull, c.relhasrules, c.relkind, c.oid, d.adsrc"
>             " from (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace",
2099,2101c2101,2104
<             " and a.attrelid = c.oid) inner join pg_catalog.pg_type t"
<             " on t.oid = a.atttypid) left outer join pg_attrdef d"
<             " on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum");
---
>             " and a.attrelid = c.oid)"
>             " inner join pg_catalog.pg_type t on t.oid = a.atttypid)"
>             " left outer join pg_attrdef d on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum"
>             " left outer join pg_type bt on t.typtype = 'd' and t.typbasetype = bt.oid" );

Re: Bug fix request for 08.03.0400 ( was [BUGS] Behavior change of FK info query)

From
"Hiroshi Saito"
Date:
Hi Luiz-san.

Sorry, very late reaction....
Release timing was being fixed.

It seems that your proposal needs a complicated verification. I consider like an
improvement rather than a bug. then, there are some worries. it is lo type etc..
However, It seems that Inoue-san review passes. but, it is next release.

I appreciate your perseverance. thanks!

Regards,
Hiroshi Saito

----- Original Message -----
From: "Luiz K. Matsumura" <luiz@planit.com.br>


> Hi,
>
> There are some chance to implement also correction for this bug:
>
> http://pgfoundry.org/tracker/index.php?func=detail&aid=1010303&group_id=1000125&atid=538
> ?
>
> I attached a path for a change made on info.c of release 08.03.0300 source.
> I tested it with postgres 8.0 , 8.1 , 8.2 and 8.3 server and works fine.
>
>
> This is just a change on one query made by PGAPI_Columns function as
> showed bellow
>
> .
> .
> .
> (line 2066)
>    /*
>     * Create the query to find out the columns (Note: pre 6.3 did not
>     * have the atttypmod field)
>     */
>    op_string = gen_opestr(like_or_eq, conn);
>    if (conn->schema_support)
>    {
>        strncpy(columns_query,
>            "select n.nspname, c.relname, a.attname"
>            ", case when t.typtype = 'd' then t.typbasetype else
> a.atttypid end as atttypid"
>            ", coalesce(bt.typname, t.typname ) AS typname, a.attnum,
> a.attlen"
>            ", case when t.typtype = 'd' then t.typtypmod else
> a.atttypmod end as atttypmod"
>            ", a.attnotnull, c.relhasrules, c.relkind, c.oid, d.adsrc"
>            " from (((pg_catalog.pg_class c inner join
> pg_catalog.pg_namespace n on n.oid = c.relnamespace",
>            sizeof(columns_query));
>        if (search_by_ids)
>            snprintf_add(columns_query, sizeof(columns_query), " and
> c.oid = %u", reloid);
>        else
>        {
>            if (escTableName)
>                snprintf_add(columns_query, sizeof(columns_query), " and
> c.relname %s'%s'", op_string, escTableName);
>            schema_strcat1(columns_query, " and n.nspname %s'%.*s'",
> op_string, escSchemaName, SQL_NTS, szTableName, cbTableName, conn);
>        }
>        strcat(columns_query, ") inner join pg_catalog.pg_attribute a"
>            " on (not a.attisdropped)");
>        if (0 == attnum && (NULL == escColumnName || like_or_eq != eqop))
>            strcat(columns_query, " and a.attnum > 0");
>        if (search_by_ids)
>        {
>            if (attnum != 0)
>                snprintf_add(columns_query, sizeof(columns_query), " and
> a.attnum = %d", attnum);
>        }
>        else if (escColumnName)
>            snprintf_add(columns_query, sizeof(columns_query), " and
> a.attname %s'%s'", op_string, escColumnName);
>        strcat(columns_query,
>            " and a.attrelid = c.oid)"
>            " inner join pg_catalog.pg_type t on t.oid = a.atttypid)"
>            " left outer join pg_attrdef d on a.atthasdef and d.adrelid
> = a.attrelid and d.adnum = a.attnum"
>            " left outer join pg_type bt on t.typtype = 'd' and
> t.typbasetype = bt.oid" );
>        strcat(columns_query, " order by n.nspname, c.relname, attnum");
>    }
>
>
> I will be really happy if this can be fixed.
>
> Best Regards
>
>
> Hiroshi Saito wrote:
>> Ok, agree. I will prepare it.
>> Then, I need carefully packaging.
>>
>> ----- Original Message ----- From: "Dave Page" <dpage@pgadmin.org>
>>
>>
>>> 2008/11/4 Hiroshi Saito <z-saito@guitar.ocn.ne.jp>:
>>>
>>>> Furthermore, I think it good to use libpq by which 8.3.5 was released.
>>>> So, it is better to pack up 08.03.0310.?
>>>>
>>>> to Dave and Inoue-san.
>>>> What do you think?
>>>
>>> 08.03.0400 sounds better to me.
>>>
>>>
>>> --
>>> Dave Page
>>> EnterpriseDB UK:   http://www.enterprisedb.com
>>>
>>> --
>>> Sent via pgsql-odbc mailing list (pgsql-odbc@postgresql.org)
>>> To make changes to your subscription:
>>> http://www.postgresql.org/mailpref/pgsql-odbc
>>
>
> --
> Luiz K. Matsumura
> Plan IT Tecnologia Inform?ica Ltda.
>
>


--------------------------------------------------------------------------------


> 2074,2077c2074,2079
> < "select n.nspname, c.relname, a.attname, a.atttypid"
> <    ", t.typname, a.attnum, a.attlen, a.atttypmod, a.attnotnull"
> < ", c.relhasrules, c.relkind, c.oid, d.adsrc from (((pg_catalog.pg_class c"
> < " inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace",
> ---
>> "select n.nspname, c.relname, a.attname"
>> ", case when t.typtype = 'd' then t.typbasetype else a.atttypid end as atttypid"
>> ", coalesce(bt.typname, t.typname ) AS typname, a.attnum, a.attlen"
>> ", case when t.typtype = 'd' then t.typtypmod else a.atttypmod end as atttypmod"
>> ", a.attnotnull, c.relhasrules, c.relkind, c.oid, d.adsrc"
>> " from (((pg_catalog.pg_class c inner join pg_catalog.pg_namespace n on n.oid = c.relnamespace",
> 2099,2101c2101,2104
> < " and a.attrelid = c.oid) inner join pg_catalog.pg_type t"
> < " on t.oid = a.atttypid) left outer join pg_attrdef d"
> < " on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum");
> ---
>> " and a.attrelid = c.oid)"
>> " inner join pg_catalog.pg_type t on t.oid = a.atttypid)"
>> " left outer join pg_attrdef d on a.atthasdef and d.adrelid = a.attrelid and d.adnum = a.attnum"
>> " left outer join pg_type bt on t.typtype = 'd' and t.typbasetype = bt.oid" );
>


--------------------------------------------------------------------------------


>
> --
> Sent via pgsql-odbc mailing list (pgsql-odbc@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-odbc
>