Thread: SQLColAttributes and SQL_DESC_NULLABLE
Hello, I'm using .Net Odbc Data Provider, ODBC driver 8.1.x and PostgreSQL 8.1.0. To find out whether column can be null, the .NET calls ODBC function SQLColAttributes. Problem is, that this function allways returns SQL_NULLABLE, even for columns declared as NOT NULL. I tried to enable "Parse Statements" option of the driver, but it didn't help. I downloaded the latest sources, compiled them to see what's going on inside and found this: It seems that for SQLColAttributes to return something else than SQL_NULLABLE, "Parse Statements" option MUST be turned on. Am i right? For some reason stmt->manual_result is true, which causes that the statement is not parsed. What does this stmt->manual_result mean? Thanks in advance. Robert Jires
> SQLColAttributes. Problem is, that this function allways returns > SQL_NULLABLE, even for columns declared as NOT NULL. I tried to enable > "Parse Statements" option of the driver, but it didn't help. Please, could you add this bug report to pgfoundry? Feel free to try patch it. > I downloaded the latest sources, compiled them to see what's going on > inside and found this: > It seems that for SQLColAttributes to return something else than > SQL_NULLABLE, "Parse Statements" option MUST be turned on. Am i right? > For some reason stmt->manual_result is true, which causes that the > statement is not parsed. What does this stmt->manual_result mean? We think manual_result is only way to get result now. This problem was create during convert to using libpq. The driver isn't fully cleaned after rewrite to libpq support. You can contact me directly in czech ;-) as my english is poor. Luf
> It seems that for SQLColAttributes to return something else than > SQL_NULLABLE, "Parse Statements" option MUST be turned on. Am i right? > For some reason stmt->manual_result is true, which causes that the > statement is not parsed. What does this stmt->manual_result mean? I attach patch which solve this problem. Thanks to Robert to point it and find the solution. I don't know if it works with declare/fetch or server side prepare (maybe other options could break it too). Please is there someone who can test it? I can upload Windows DLL to test it if you want. Thanks Luf
Attachment
> -----Original Message----- > From: pgsql-odbc-owner@postgresql.org > [mailto:pgsql-odbc-owner@postgresql.org] On Behalf Of Ludek Finstrle > Sent: 06 December 2005 22:55 > To: Robert Jireš > Cc: pgsql-odbc@postgresql.org > Subject: Re: [ODBC] SQLColAttributes and SQL_DESC_NULLABLE > > > It seems that for SQLColAttributes to return something else than > > SQL_NULLABLE, "Parse Statements" option MUST be turned on. > Am i right? > > For some reason stmt->manual_result is true, which causes that the > > statement is not parsed. What does this stmt->manual_result mean? > > I attach patch which solve this problem. Thanks to Robert to point > it and find the solution. > > I don't know if it works with declare/fetch or server side prepare > (maybe other options could break it too). Please is there someone > who can test it? I can upload Windows DLL to test it if you want. No regressions I can find - patch applied, thanks! *However*, whilst testing I did find an issue with SQLTables that seems surprisingly similar to the one you fixed before.It's pretty easy to recreate in the Microsoft test suite. - Connect to a data source with Declare/Fetch enabled. - SQLExecDirect "SELECT * FROM pg_class" - Get Data All (from the results menu) - SQLTables - Get Data All It never stops retrieving data! Seems that you need to do the SQLExecDirect first - SQLExecute doesn't trigger the problem.SQLColumns is similarly affected - perhaps there are more as well. Wanna take a look, or shall I log a bug until one of us gets time? Regards, Dave.
> *However*, whilst testing I did find an issue with SQLTables that > seems surprisingly similar to the one you fixed before. It's pretty > easy to recreate in the Microsoft test suite. I didn't fix something similar. I don't remember it at least. Could you be more specific? I only point at Prepare, Execute, Execute or ExecDirect, ExecDirect problem. > - Connect to a data source with Declare/Fetch enabled. > - SQLExecDirect "SELECT * FROM pg_class" > - Get Data All (from the results menu) > - SQLTables > - Get Data All > > It never stops retrieving data! Seems that you need to do the > SQLExecDirect first - SQLExecute doesn't trigger the problem. > SQLColumns is similarly affected - perhaps there are more as well. I'm unable reproduce it here. I have CVS source with autocommit_off patch. It stops when I expect. I tried it againist ANSI (debug) driver (PgSQL 8.1 Win) with these options: - SSL Mode = disable - default settings except: - Use Declare/Fetch - checked - MyLog - checked > Wanna take a look, or shall I log a bug until one of us gets time? Please send me your mylog output and driver for testing purposes (maybe zipped source code too ?). Feel free to log a bug. Bug tracer is here for this purpose ;-) Regards, Luf