Support for SQLSetPos() (odbc-sql-set-pos) and SQLBulkOperations()
(odbc-sql-bulk-operations)
This commit is contained in:
parent
7ddfc3211c
commit
78b653e815
102
scsh/odbc/odbc.c
102
scsh/odbc/odbc.c
|
@ -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)
|
s48_value odbc_sql_fetch(s48_value stmt_handle)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -2743,6 +2843,8 @@ void s48_init_odbc(void)
|
||||||
/* PART 7 */
|
/* PART 7 */
|
||||||
S48_EXPORT_FUNCTION(odbc_sql_row_count);
|
S48_EXPORT_FUNCTION(odbc_sql_row_count);
|
||||||
S48_EXPORT_FUNCTION(odbc_sql_get_data);
|
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_fetch);
|
||||||
S48_EXPORT_FUNCTION(odbc_sql_num_result_cols);
|
S48_EXPORT_FUNCTION(odbc_sql_num_result_cols);
|
||||||
S48_EXPORT_FUNCTION(odbc_sql_describe_col);
|
S48_EXPORT_FUNCTION(odbc_sql_describe_col);
|
||||||
|
|
|
@ -237,6 +237,17 @@ s48_value odbc_sql_get_data(s48_value stmt_handle,
|
||||||
s48_value column_number,
|
s48_value column_number,
|
||||||
s48_value target_type);
|
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);
|
void check_sql_get_data_result(SQLRETURN retval, SQLHSTMT stmt_handle);
|
||||||
|
|
||||||
s48_value odbc_sql_fetch(s48_value stmt_handle);
|
s48_value odbc_sql_fetch(s48_value stmt_handle);
|
||||||
|
|
|
@ -388,6 +388,23 @@
|
||||||
(define sql-ensure 1)
|
(define sql-ensure 1)
|
||||||
(define sql-quick 0)
|
(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
|
;;; ODBC return values
|
||||||
(define sql-error -1)
|
(define sql-error -1)
|
||||||
(define sql-success 0)
|
(define sql-success 0)
|
||||||
|
@ -660,6 +677,24 @@
|
||||||
(stmt-handle column-number target-type)
|
(stmt-handle column-number target-type)
|
||||||
"odbc_sql_get_data")
|
"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)
|
(define (odbc-sql-fetch stmt-handle)
|
||||||
(check-arg statement-handle-handle stmt-handle odbc-sql-fetch)
|
(check-arg statement-handle-handle stmt-handle odbc-sql-fetch)
|
||||||
(odbc-sql-fetch-internal (statement-handle-handle stmt-handle)))
|
(odbc-sql-fetch-internal (statement-handle-handle stmt-handle)))
|
||||||
|
|
Loading…
Reference in New Issue