diff --git a/scsh/odbc/odbc.c b/scsh/odbc/odbc.c index b9ecf7f..511db5c 100644 --- a/scsh/odbc/odbc.c +++ b/scsh/odbc/odbc.c @@ -1402,6 +1402,42 @@ s48_value odbc_sql_execute_direct(s48_value stmt_handle, * */ +s48_value odbc_sql_row_count(s48_value stmt_handle) +{ + SQLHSTMT sh; + SQLRETURN retval; + SQLINTEGER rowcount; + + sh = (SQLHSTMT) s48_extract_integer(stmt_handle); + + ODBC_DEBUG_PRINTF("odbc_sql_row_count\n"); + + retval = SQLRowCount(sh, &rowcount); + + switch (retval) + { + case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: + { + return s48_enter_integer(rowcount); + } + case SQL_ERROR: + { + ODBC_RAISE_EXCEPTION("SQLRowCount returned SQL_ERROR"); + break; + } + case SQL_INVALID_HANDLE: + { + ODBC_RAISE_EXCEPTION("SQLRowCount got invalid handle"); + break; + } + default: + { + ODBC_RAISE_EXCEPTION("SQLRowCount returned unknown error code"); + break; + } + } +} + s48_value odbc_sql_get_data(s48_value stmt_handle, s48_value column_number, s48_value target_type) @@ -2182,6 +2218,7 @@ void s48_init_odbc(void) S48_EXPORT_FUNCTION(odbc_sql_execute_direct); /* PART 7 */ + S48_EXPORT_FUNCTION(odbc_sql_row_count); S48_EXPORT_FUNCTION(odbc_sql_get_data); S48_EXPORT_FUNCTION(odbc_sql_fetch); S48_EXPORT_FUNCTION(odbc_sql_num_result_cols); diff --git a/scsh/odbc/odbc.h b/scsh/odbc/odbc.h index 775f77e..778cf57 100644 --- a/scsh/odbc/odbc.h +++ b/scsh/odbc/odbc.h @@ -231,9 +231,11 @@ s48_value odbc_sql_execute_direct(s48_value stmt_handle, s48_value stmt); * */ +s48_value odbc_sql_row_count(s48_value stmt_handle); + s48_value odbc_sql_get_data(s48_value stmt_handle, - s48_value column_number, - s48_value target_type); + s48_value column_number, + s48_value target_type); void check_sql_get_data_result(SQLRETURN retval, SQLHSTMT stmt_handle); @@ -273,7 +275,7 @@ s48_value odbc_sql_cancel(s48_value stmt_handle); /* Commits or rolls back a transaction */ s48_value odbc_sql_endtran(s48_value handle_type, s48_value handle, - s48_value completion_type); + s48_value completion_type); /* * diff --git a/scsh/odbc/odbc.scm b/scsh/odbc/odbc.scm index 2360d4d..b40bb9e 100644 --- a/scsh/odbc/odbc.scm +++ b/scsh/odbc/odbc.scm @@ -622,6 +622,14 @@ ;;; PART 7 +(define (odbc-sql-row-count stmt-handle) + (check-arg statement-handle? stmt-handle odbc-sql-row-count) + (odbc-sql-row-count-internal (statement-handle-handle stmt-handle))) + +(import-lambda-definition odbc-sql-row-count-internal + (stmt-handle) + "odbc_sql_row_count") + (define (odbc-sql-get-data stmt-handle column-number target-type) (check-arg statement-handle? stmt-handle odbc-sql-get-data) (odbc-sql-get-data-internal (statement-handle-handle stmt-handle)