Support for SQLSetPos() (odbc-sql-set-pos) and SQLBulkOperations()

(odbc-sql-bulk-operations)
This commit is contained in:
eknauel 2002-09-04 13:32:21 +00:00
parent 7ddfc3211c
commit 78b653e815
3 changed files with 148 additions and 0 deletions

View File

@ -1517,6 +1517,106 @@ void check_sql_get_data_result(SQLRETURN retval, SQLHSTMT stmt_handle)
}
}
/* Positions a cursor within a fetched block of data and allows an application
to refresh data in the rowset or to update or delete data in the result
set */
s48_value odbc_sql_set_pos(s48_value stmt_handle, s48_value row_number,
s48_value operation, s48_value lock_type)
{
SQLHSTMT sh;
SQLUSMALLINT rn, op, lt;
SQLRETURN retval;
ODBC_DEBUG_PRINTF("odbc_sql_set_pos\n");
sh = (SQLHSTMT) s48_extract_integer(stmt_handle);
rn = (SQLUSMALLINT) s48_extract_integer(row_number);
op = (SQLUSMALLINT) s48_extract_integer(operation);
lt = (SQLUSMALLINT) s48_extract_integer(lock_type);
retval = SQLSetPos(sh, rn, op, lt);
switch (retval)
{
case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO:
{
return S48_TRUE;
}
case SQL_NEED_DATA:
{
return s48_enter_integer(SQL_NEED_DATA);
}
case SQL_STILL_EXECUTING:
{
ODBC_RAISE_EXCEPTION("SQLSetPos returned SQL_STILL_EXECUTING. Not implemented");
break;
}
case SQL_ERROR:
{
ODBC_RAISE_EXCEPTION("SQLSetPos returned SQL_ERROR");
break;
}
case SQL_INVALID_HANDLE:
{
ODBC_RAISE_EXCEPTION("SQLSetPos got invalid handle");
break;
}
default:
{
ODBC_RAISE_EXCEPTION("SQLSetPos returned unknown error code");
break;
}
}
}
/* Performs bulk insertions and bulk bookmark operations, including
update, delete, and fetch by bookmark. */
s48_value odbc_sql_bulk_operations(s48_value stmt_handle, s48_value operation)
{
SQLHSTMT sh;
SQLUSMALLINT op;
SQLRETURN retval;
ODBC_DEBUG_PRINTF("odbc_sql_bulk_operations\n");
sh = (SQLHSTMT) s48_extract_integer(stmt_handle);
op = (SQLUSMALLINT) s48_extract_integer(operation);
retval = SQLBulkOperations(sh, op);
switch (retval)
{
case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO:
{
return S48_TRUE;
}
case SQL_NEED_DATA:
{
return s48_enter_integer(SQL_NEED_DATA);
}
case SQL_STILL_EXECUTING:
{
ODBC_RAISE_EXCEPTION("SQLBulkOperations returned SQL_STILL_EXECUTING. Not implemented");
break;
}
case SQL_ERROR:
{
ODBC_RAISE_EXCEPTION("SQLBulkOperations returned SQL_ERROR");
break;
}
case SQL_INVALID_HANDLE:
{
ODBC_RAISE_EXCEPTION("SQLBulkOperations got invalid handle");
break;
}
default:
{
ODBC_RAISE_EXCEPTION("SQLBulkOperations returned unknown error code");
break;
}
}
}
s48_value odbc_sql_fetch(s48_value stmt_handle)
{
@ -2743,6 +2843,8 @@ void s48_init_odbc(void)
/* PART 7 */
S48_EXPORT_FUNCTION(odbc_sql_row_count);
S48_EXPORT_FUNCTION(odbc_sql_get_data);
S48_EXPORT_FUNCTION(odbc_sql_set_pos);
S48_EXPORT_FUNCTION(odbc_sql_bulk_operations);
S48_EXPORT_FUNCTION(odbc_sql_fetch);
S48_EXPORT_FUNCTION(odbc_sql_num_result_cols);
S48_EXPORT_FUNCTION(odbc_sql_describe_col);

View File

@ -237,6 +237,17 @@ s48_value odbc_sql_get_data(s48_value stmt_handle,
s48_value column_number,
s48_value target_type);
/* Positions a cursor within a fetched block of data and allows an application
to refresh data in the rowset or to update or delete data in the result
set */
s48_value odbc_sql_set_pos(s48_value stmt_handle, s48_value row_number,
s48_value operation, s48_value lock_type);
/* Performs bulk insertions and bulk bookmark operations, including
update, delete, and fetch by bookmark. */
s48_value odbc_sql_bulk_operations(s48_value stmt_handle, s48_value operation);
void check_sql_get_data_result(SQLRETURN retval, SQLHSTMT stmt_handle);
s48_value odbc_sql_fetch(s48_value stmt_handle);

View File

@ -388,6 +388,23 @@
(define sql-ensure 1)
(define sql-quick 0)
; possible operation arguments for SQLSetPos() (odbc-sql-set-pos)
(define sql-position 0)
(define sql-refresh 1)
(define sql-update 2)
(define sql-delete 3)
; possible lock-type arguments for SQLSetPos() (odbc-sql-set-pos)
(define sql-lock-no-change 0)
(define sql-lock-exclusive 1)
(define sql-lock-unlock 2)
; possible operation arguments for SQLBulkOperations() (odbc-sql-bulk-operations)
(define sql-add 4)
(define sql-update-by-bookmark 5)
(define sql-delete-by-bookmark 6)
(define sql-fetch-by-bookmark 7)
;;; ODBC return values
(define sql-error -1)
(define sql-success 0)
@ -660,6 +677,24 @@
(stmt-handle column-number target-type)
"odbc_sql_get_data")
(define (odbc-sql-set-pos stmt-handle row-number operation lock-type)
(check-arg statement-handle? stmt-handle odbc-sql-set-pos)
(odbc-sql-set-pos-internal (statement-handle-handle stmt-handle)
row-number operation lock-type))
(import-lambda-definition odbc-sql-set-pos-internal
(stmt-handle row-number operation lock-type)
"odbc_sql_set_pos")
(define (odbc-sql-bulk-operations stmt-handle operation)
(check-arg statement-handle? stmt-handle odbc-sql-bulk-operations)
(odbc-sql-bulk-operations-internal (statement-handle-handle stmt-handle)
operation))
(import-lambda-definition odbc-sql-bulk-operations-internal
(stmt-handle operation)
"odbc_sql_bulk_operations")
(define (odbc-sql-fetch stmt-handle)
(check-arg statement-handle-handle stmt-handle odbc-sql-fetch)
(odbc-sql-fetch-internal (statement-handle-handle stmt-handle)))