aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/odbc/info30.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/odbc/info30.c')
-rw-r--r--src/interfaces/odbc/info30.c31
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: