Thread: ODBC: Declare/Fetch & SELECT INTO

ODBC: Declare/Fetch & SELECT INTO

From
Dave Page
Date:
Hi,

A recent problem with an installation of pgAdmin in which a SELECT INTO
query failed has been caused by the 'Use Declare/Fetch' option in the ODBC
driver being switched on (this has now been proven in 3 seperate cases). I'm
assuming that declare/fetch should not cause this behaviour.

The following is from the commlog - the table is not created, and no error
is raised:

conn=52758652, query='BEGIN'
conn=52758652, query='declare SQL_CUR0325413C cursor for SELECT * INTO
pgadmin_desc FROM pg_description WHERE objoid > 18655'
conn=52758652, query='fetch 100 in SQL_CUR0325413C'   [ fetched 13 rows ]
conn=52758652, query='declare SQL_CUR03288FE8 cursor for select u.usename,
c.relname, a.attname, a.atttypid, t.typname, a.attnum, a.attlen,
a.atttypmod, a.attnotnull, c.relhasrules from pg_user u, pg_class c,
pg_attribute a, pg_type t where u.usesysid = c.relowner and c.oid=
a.attrelid and a.atttypid = t.oid and (a.attnum > 0) and c.relname like
'pg_description' order by attnum'
conn=52758652, query='fetch 100 in SQL_CUR03288FE8'   [ fetched 2 rows ]
SQLColumns:
table='pg_description',field_name='objoid',type=26,sqltype=268501632,name='o
id'
SQLColumns:
table='pg_description',field_name='description',type=25,sqltype=268501632,na
me='text'
conn=52758652, query='close SQL_CUR03288FE8'
conn=52758652, query='close SQL_CUR0325413C'
conn=52758652, query='END'

Regards,  
Dave.  
-- 
Disclaimer: the above is the author's personal opinion and is not the
opinion or policy of his employer or of the little green men that have been
following him all day.
http://www.vale-housing.co.uk/ - http://www.pgadmin.freeserve.co.uk/


Re: ODBC: Declare/Fetch & SELECT INTO

From
Tom Lane
Date:
Dave Page <dpage@vale-housing.co.uk> writes:
> The following is from the commlog - the table is not created, and no error
> is raised:
> conn=52758652, query='declare SQL_CUR0325413C cursor for SELECT * INTO
> pgadmin_desc FROM pg_description WHERE objoid > 18655'

Hmm.  I'd say that that should raise an error, since you are giving the
backend conflicting instructions about where to deliver the selected
tuples (through the cursor, or into a new table).  I think right now
the code simply ignores the INTO clause when the context is a cursor
declaration, but giving an error if both are specified seems more
appropriate.

However, that might not help you very much :-(.  I take it you are
just issuing a SELECT INTO command yourself, and ODBC is tacking on
the DECLARE CURSOR part?  Seems ODBC needs to know not to do that
for a SELECT INTO.
        regards, tom lane


RE: ODBC: Declare/Fetch & SELECT INTO

From
Dave Page
Date:
> -----Original Message-----
> From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
> Sent: 31 August 2000 21:47
> To: Dave Page
> Cc: 'pgsql-interfaces@postgresql.org'
> Subject: Re: [INTERFACES] ODBC: Declare/Fetch & SELECT INTO 
> 
> 
> Dave Page <dpage@vale-housing.co.uk> writes:
> > The following is from the commlog - the table is not 
> created, and no error
> > is raised:
> > conn=52758652, query='declare SQL_CUR0325413C cursor for 
> SELECT * INTO
> > pgadmin_desc FROM pg_description WHERE objoid > 18655'
> 
> Hmm.  I'd say that that should raise an error, since you are 
> giving the
> backend conflicting instructions about where to deliver the selected
> tuples (through the cursor, or into a new table).  I think right now
> the code simply ignores the INTO clause when the context is a cursor
> declaration, but giving an error if both are specified seems more
> appropriate.
> 
> However, that might not help you very much :-(.  I take it you are
> just issuing a SELECT INTO command yourself, and ODBC is tacking on
> the DECLARE CURSOR part?  Seems ODBC needs to know not to do that
> for a SELECT INTO.

Yeah, that's exactly what I'm doing. My understanding was that that's what
the Declare/Fetch option does - ie. forces the use of server side cursors
for selects (but not 'select into' if all was well), presumably useful for
handling particuarly large resultsets. 

One for someone familiar with the ODBC driver code methinks :-)

Regards,  
Dave.  
-- 
Disclaimer: the above is the author's personal opinion and is not the
opinion or policy of his employer or of the little green men that have been
following him all day.
http://www.vale-housing.co.uk/ - http://www.pgadmin.freeserve.co.uk/