From 3b2dbc5f65e1c2ccad69a19e6606f2cd0e85002f Mon Sep 17 00:00:00 2001 From: eknauel Date: Sun, 21 Apr 2002 08:56:53 +0000 Subject: [PATCH] Basic support for ODBC 3.0 API. Tested partially: handle allocation, connection, prepare, execute Missing: Support for SQLBindCol & several catalog functions. The scsh 0.53 API abstraction need s to be implemented on top of the ODBC 3 API. --- scsh/odbc/odbc.scm | 215 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 scsh/odbc/odbc.scm diff --git a/scsh/odbc/odbc.scm b/scsh/odbc/odbc.scm new file mode 100644 index 0000000..b8e994d --- /dev/null +++ b/scsh/odbc/odbc.scm @@ -0,0 +1,215 @@ + +;;; record types + +;(define-record-type sql-date :sql-date +; (make-sql-date year month day) +; sql-date? +; (year sql-date-year sql-date-year!) +; (month sql-date-month sql-date-month!) +; (day sql-date-day sql-date-day!)) +;(define-record-type sql-time :sql-time +; (make-sql-time hour minute second) +; sql-time? +; (hour sql-time-hour sql-time-hour!) +; (minute sql-time-minute sql-time-minute!) +; (second sql-time-second sql-time-second!)) + +;(define-record-type sql-timestamp :sql-timestamp +; (make-sql-timestamp year month day hour minute second fraction) +; sql-timestamp? +; (year sql-timestamp-year sql-timestamp-year!) +; (month sql-timestamp-month sql-timestamp-month!) +; (day sql-timestamp-day sql-timestamp-day!) +; (hour sql-timestamp-hour sql-timestamp-hour!) +; (minute sql-timestamp-minute sql-timestamp-minute!) +; (second sql-timestamp-second sql-timestamp-second!) +; (fraction sql-timestamp-fraction sql-timestamp-fraction!)) + +;(define-record-type sql-numeric :sql-numeric +; (make-sql-numeric precision scale sign value) +; sql-numeric? +; (precision sql-precision sql-precision!) +; (scale sql-scale sql-scale!) +; (sign sql-sign sql-sign!) +; (value sql-value sql-value!)) + +;;; handle type identifiers from sql.h +(define handle-type-env 1) +(define handle-type-dbc 2) +(define handle-type-stmt 3) +(define handle-type-desc 4) + +;;; options for SQLFreeStmt from sql.h +(define sql-disconnect-opt-close 0) +(define sql-disconnect-opt-drop 1) +(define sql-disconnect-opt-unbind 2) +(define sql-disconnect-opt-reset-params 3) + +;;; options for SQLDataSource from sql.h +(define sql-datasources-fetch-next 1) +(define sql-datasources-fetch-first 2) + +;;;; just for testing purposes, will disappear soon +;(define open-db +; (lambda (server user auth) +; (let* ((env-handle (odbc-alloc-environment-handle)) +; (conn-handle (odbc-alloc-connection-handle env-handle))) +; (odbc-sql-connect conn-handle server user auth)))) + +;(define list-datasources +; (lambda () +; (let ((env-handle (odbc-alloc-environment-handle))) +; (odbc-sql-data-sources env-handle sql-datasources-fetch-first)))) + +;(define list-drivers +; (lambda () +; (let ((env-handle (odbc-alloc-environment-handle))) +; (odbc-sql-drivers env-handle)))) + +;(define free-handle +; (lambda (handle handle-type) +; (odbc-sql-free-handle handle-type handle))) + +;(define free-environment-handle +; (lambda (handle) +; (free-handle handle handle-type-env))) + +;(define free-connection-handle +; (lambda (handle) +; (free-handle handle handle-type-dbc))) + +;(define free-statement-handle +; (lambda (handle) +; (free-handle handle handle-type-stmt))) + +;(define free-description-handle +; (lambda (handle) +; (free-handle handle handle-type-desc))) + +;;; PART 1 + +(import-lambda-definition odbc-alloc-environment-handle + () + "odbc_alloc_environment_handle") + +(import-lambda-definition odbc-alloc-connection-handle + (env-handle) + "odbc_alloc_connection_handle") + +(import-lambda-definition odbc-alloc-statement-handle + (db-handle) + "odbc_alloc_statement_handle") + +(import-lambda-definition odbc-sql-connect + (conn-handle server-name user-name auth) + "odbc_sql_connect") + +;;; PART 2 + +(import-lambda-definition odbc-sql-data-sources + (env-handle direction) + "odbc_sql_data_sources") + +(import-lambda-definition odbc-sql-drivers + (env-handle) + "odbc_sql_drivers") + +(import-lambda-definition odbc-sql-get-info-int + (conn-handle info-key) + "odbc_sql_get_info_int") + +(import-lambda-definition odbc-sql-get-info-string + (conn-handle info-key) + "odbc_sql_get_info_string") + +(import-lambda-definition odbc-sql-get-func-exists + (conn-handle fun-id) + "odbc_sql_get_func_exists") + +(import-lambda-definition odbc-sql-get-type-info + (stmt-handle data-type) + "odbc_sql_get_type_info") + +;;; PART 3 + +(import-lambda-definition odbc-sql-set-connect-attr-int + (conn-handle attribute value) + "odbc_sql_set_connect_attr_int") + +(import-lambda-definition odbc-sql-set-connect-attr-string + (conn-handle attribute value) + "odbc_sql_set_connect_attr_string") + +(import-lambda-definition odbc-sql-get-connect-attr-string + (conn-handle attribute) + "odbc_sql_get_connect_attr_string") + +(import-lambda-definition odbc-sql-get-connect-attr-int + (conn-handle attribute) + "odbc_sql_get_connect_attr_int") + +(import-lambda-definition odbc-sql-set-env-attr-int + (env-handle attribute value) + "odbc_sql_set_env_attr_int") + +(import-lambda-definition odbc-sql-get-env-attr-int + (env-handle attribute value) + "odbc_sql_get_env_attr_int") + +(import-lambda-definition odbc-sql-set-stmt-attr-int + (stmt-handle attribute value) + "odbc_sql_set_stmt_attr_int") + +(import-lambda-definition odbc-sql-set-stmt-attr-string + (stmt-handle attribute value) + "odbc_sql_set_stmt_attr_string") + +(import-lambda-definition odbc-sql-get-stmt-attr-int + (stmt-handle attribute) + "odbc_sql_get_stmt_attr_int") + +(import-lambda-definition odbc-sql-get-stmt-attr-string + (stmt-handle attribute) + "odbc_sql_get_stmt_attr_string") + +;;; PART 4 + +;;; PART 5 + +(import-lambda-definition odbc-sql-prepare + (stmt-handle stmt-txt) + "odbc_sql_prepare") + +;;; PART 6 +(import-lambda-definition odbc-sql-execute + (stmt-handle) + "odbc_sql_execute") + + +;;; PART 7 + +;;; PART 8 + +;;; PART 9 + +(import-lambda-definition odbc-sql-free-statement + (stmt-handle option) + "odbc_sql_free_statement") + +(import-lambda-definition odbc-sql-close-cursor + (stmt-handle) + "odbc_sql_close_cursor") + +(import-lambda-definition odbc-sql-cancel + (stmt-handle) + "odbc_sql_cancel") + +;;; PART 10 + +(import-lambda-definition odbc-sql-disconnect + (conn-handle) + "odbc_sql_disconnect") + +(import-lambda-definition odbc-sql-free-handle + (handle-type handle) + "odbc_sql_free_handle")