vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| I've found the change made in version psqlodbc 8.2.0501 and later (reference: http://archives.postgresql.org/pgsql...0/msg00420.php) 4. Be more careful about <for locking clause> in UseDeclareFetch mode. Add missing? "for read only" clause for read only queries for 8.3 or later servers for safety. Here is a cvs link to the actual code change: http://cvs.pgfoundry.org/cgi-bin/cvs...1.163&r2=1.164 This change breaks existing code that sends a single sql statement with a trailing semicolon. What happens is the odbc driver sees UseDeclareFetch=1 and for sql statements appends " for read only" at the end of the statement. This is fine except for the situation where the statement has a trailing semicolon. In that case the statement ends up being (say) "select blah blah; for read only", which gives a syntax error like: ERROR: syntax error at or near "for" SQL state: 42601 Setting UseDeclareFetch=0 fixes the problem, or using psqlodbc 8.2.0500 or earlier, or using PostgreSQL 8.2.6--any one of these prevents the " for read only" from being appended to the end of the sql statement. The quick fix was to remove the trailing semicolons in my code, but a better fix would be to make the parser smart enough to put the " for read only" clause in front of an existing semicolon, not after it. Thanks...jack -- ******************************************** Who: L Jack Wilson Where: ljwilson@dNiOgSiPtAaMlav.com How: Remove Capital Letters from above for a valid email address Why: Standard Disclaimer fits nicely here. |
| |||
| Hi Jack, Jack Wilson wrote: > > I've found the change made in version psqlodbc 8.2.0501 and later > (reference: > http://archives.postgresql.org/pgsql...0/msg00420.php) > > 4. Be more careful about <for locking clause> in UseDeclareFetch mode. > Add missing? "for read only" clause for read only queries for 8.3 > or later servers for safety. > > Here is a cvs link to the actual code change: > http://cvs.pgfoundry.org/cgi-bin/cvs...1.163&r2=1.164 > > > This change breaks existing code that sends a single sql statement with > a trailing semicolon. What happens is the odbc driver sees > UseDeclareFetch=1 and for sql statements appends " for read only" at the > end of the statement. This is fine except for the situation where the > statement has a trailing semicolon. In that case the statement ends up > being (say) "select blah blah; for read only", which gives a syntax > error like: > > ERROR: syntax error at or near "for" > SQL state: 42601 > > Setting UseDeclareFetch=0 fixes the problem, or using psqlodbc 8.2.0500 > or earlier, or using PostgreSQL 8.2.6--any one of these prevents the " > for read only" from being appended to the end of the sql statement. Oops my fault. Unfortunately I'm very busy and please wait for a while. regards, Hiroshi Inoue -- Sent via pgsql-odbc mailing list (pgsql-odbc@postgresql.org) To make changes to your subscription: http://mail.postgresql.org/mj/mj_www...tra=pgsql-odbc |
| |||
| Hiroshi, No problem. I understand perfectly. Thanks for looking at it! ....jack -- ******************************************** Who: L Jack Wilson Where: ljwilson@dNiOgSiPtAaMlav.com How: Remove Capital Letters from above for a valid email address Why: Standard Disclaimer fits nicely here. |
| |||
| Jack Wilson wrote: > > Hiroshi, > > No problem. I understand perfectly. I can't test my change with 8.3 servers by myself now. Could you try the driver testing for 8.3.0101 at http://www.geocities.jp/inocchichich...dbc/index.html ? regards, Hiroshi Inoue -- Sent via pgsql-odbc mailing list (pgsql-odbc@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-odbc |
| ||||
| Hiroshi, I get slightly different error now: Error: 42601 ERROR: syntax error at or near "a"; Here is the sql statement with the trailing semicolon I'm testing with--substitute a valid table name for the word 'my_table' below: SELECT pg_attribute.attname, pg_attribute.attnotnull, pg_attribute.atttypmod, pg_type.typname FROM pg_attribute JOIN pg_class ON pg_attribute.attrelid = pg_class.oid JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace JOIN pg_type on pg_type.oid = pg_attribute.atttypid where pg_namespace.nspname = 'public' AND pg_class.relname = 'my_table' and pg_class.relkind = 'r' and pg_attribute.attnum > 0 ORDER BY pg_attribute.attnum; Thanks...jack -- ******************************************** Who: L Jack Wilson Where: ljwilson@dNiOgSiPtAaMlav.com How: Remove Capital Letters from above for a valid email address Why: Standard Disclaimer fits nicely here. |