Jeremy Faith wrote:
> I have been experimenting with SQLBulkOperations to see if it is faster
> at inserting rows than using individual insert statements.
> But when I run the attached(bo.c) example program it segfaults(note,
> this program works correctly with an Oracle ODBC connection).
> The program requires the following table.
> create table customer
> cust_num integer not null,
> first_name char(20),
> last_name char(20)
> Also the odb_db_open function call uses a hard coded DSN=pg_cdc_w,
> username=username and password=password.
> I am using the latest versions of pgsql+postgres on Linux i.e.
> I turned on the ODBC debug log and added some log output to the driver
> and found that the segfault is occurring in the results.c:SC_pos_add
> In particular the log shows
> POS ADD fi=(nil) ti=(nil)
> and the segfault occurs on this line:-
> if (*used != SQL_IGNORE && fi[i]->updatable)
> So fi is NULL but is being referenced.
> I did a bit more checking and found that parse_statement sets up
> stmt->ird->irdopts.fi i.e.
> if (SC_update_not_ready(stmt))
> parse_statement(s.stmt, TRUE); /* not preferable */
> so adding
> after parse_statement gets past this segfault.
> But then another segfault occurs in the results.c:positioned_load
> function as stmt->load_stmt is NULL
> so strlen(stmt->load_stmt) segfaults.
> The code is complicated and I have not been able to determine how to fix
> this, it seems likely to me that even the fi fix may be covering up an
> earlier problem somewhere else in the code.
Before calling SQLExecDirect(), please set the SQL_ATTR_CURSOR_TYPE
to SQL_CURSOR_STATIC or SQL_CURSOR_KEYSET_DRIVER and also set the
SQL_ATTR_CONCURRENCY to SQL_CONCUR_ROWVER.
In response to
pgsql-odbc by date
|Next:||From: Jeremy Faith||Date: 2008-04-21 10:19:16|
|Subject: Re: SQLBulkOperations Segfault|
|Previous:||From: Jeff Crumbley||Date: 2008-04-18 20:15:31|
|Subject: 32-bit ODBC Linked Server from 64 bit SQL Server|