diff options
Diffstat (limited to 'src/interfaces/odbc/info30.c')
-rw-r--r-- | src/interfaces/odbc/info30.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/interfaces/odbc/info30.c b/src/interfaces/odbc/info30.c index b606f0dc622..414110b8938 100644 --- a/src/interfaces/odbc/info30.c +++ b/src/interfaces/odbc/info30.c @@ -47,14 +47,15 @@ PGAPI_GetInfo30(HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue, break; case SQL_KEYSET_CURSOR_ATTRIBUTES1: len = 4; - value = SQL_CA1_NEXT | SQL_CA1_ABSOLUTE + value = 0; + if (ci->updatable_cursors || ci->drivers.lie) + value |= (SQL_CA1_NEXT | SQL_CA1_ABSOLUTE | SQL_CA1_RELATIVE | SQL_CA1_BOOKMARK | SQL_CA1_LOCK_NO_CHANGE | SQL_CA1_POS_POSITION | SQL_CA1_POS_UPDATE | SQL_CA1_POS_DELETE - | SQL_CA1_POS_REFRESH; + | SQL_CA1_POS_REFRESH); if (ci->drivers.lie) - value |= - ( SQL_CA1_BULK_ADD + value |= (SQL_CA1_BULK_ADD | SQL_CA1_BULK_UPDATE_BY_BOOKMARK | SQL_CA1_BULK_DELETE_BY_BOOKMARK | SQL_CA1_BULK_FETCH_BY_BOOKMARK @@ -68,13 +69,14 @@ PGAPI_GetInfo30(HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue, break; case SQL_KEYSET_CURSOR_ATTRIBUTES2: len = 4; - value = SQL_CA2_OPT_ROWVER_CONCURRENCY + value = 0; + if (ci->updatable_cursors || ci->drivers.lie) + value |= (SQL_CA2_OPT_ROWVER_CONCURRENCY | SQL_CA2_SENSITIVITY_ADDITIONS | SQL_CA2_SENSITIVITY_DELETIONS - | SQL_CA2_SENSITIVITY_UPDATES; + | SQL_CA2_SENSITIVITY_UPDATES); if (ci->drivers.lie) - value |= - ( SQL_CA2_READ_ONLY_CONCURRENCY + value |= (SQL_CA2_READ_ONLY_CONCURRENCY | SQL_CA2_LOCK_CONCURRENCY | SQL_CA2_OPT_VALUES_CONCURRENCY | SQL_CA2_MAX_ROWS_SELECT @@ -95,16 +97,19 @@ PGAPI_GetInfo30(HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue, len = 4; value = SQL_CA1_NEXT | SQL_CA1_ABSOLUTE | SQL_CA1_RELATIVE | SQL_CA1_BOOKMARK - | SQL_CA1_LOCK_NO_CHANGE | SQL_CA1_POS_POSITION - | SQL_CA1_POS_UPDATE | SQL_CA1_POS_DELETE - | SQL_CA1_POS_REFRESH; + | SQL_CA1_LOCK_NO_CHANGE | SQL_CA1_POS_POSITION; + if (ci->updatable_cursors) + value |= (SQL_CA1_POS_UPDATE | SQL_CA1_POS_DELETE + | SQL_CA1_POS_REFRESH); break; case SQL_STATIC_CURSOR_ATTRIBUTES2: len = 4; - value = SQL_CA2_OPT_ROWVER_CONCURRENCY + value = 0; + if (ci->updatable_cursors) + value |= (SQL_CA2_OPT_ROWVER_CONCURRENCY | SQL_CA2_SENSITIVITY_ADDITIONS | SQL_CA2_SENSITIVITY_DELETIONS - | SQL_CA2_SENSITIVITY_UPDATES; + | SQL_CA2_SENSITIVITY_UPDATES); break; case SQL_ODBC_INTERFACE_CONFORMANCE: |