diff --git a/scsh/odbc/odbc.c b/scsh/odbc/odbc.c index b99051b..b940482 100644 --- a/scsh/odbc/odbc.c +++ b/scsh/odbc/odbc.c @@ -12,7 +12,6 @@ * call odbc_set_environment to set the ODBC version */ s48_value odbc_alloc_environment_handle() { - SQLHENV henv; SQLRETURN retval; @@ -20,23 +19,14 @@ s48_value odbc_alloc_environment_handle() ODBC_DEBUG_PRINTF_2("odbc_alloc_environment(): %x\n", henv); switch (retval) - { - case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: - { - odbc_sql_set_env_attr(henv); - return s48_enter_integer((long)henv); - } - case SQL_ERROR: - { - ODBC_RAISE_EXCEPTION("SQLAllocHandle returned SQL_ERROR"); - break; - } - default: - { - ODBC_RAISE_EXCEPTION("SQLAllocHandle unknown return value"); - break; - } - } + { + case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: + return s48_enter_integer(henv); + case SQL_ERROR: + ODBC_RAISE_EXCEPTION("SQLAllocHandle returned SQL_ERROR"); + default: + ODBC_RAISE_EXCEPTION("SQLAllocHandle unknown return value"); + } } /* given a valid environment handle (type SQLHENV) this function @@ -147,6 +137,72 @@ s48_value odbc_alloc_statement_handle(s48_value conn_handle) { } } +/* for ODBC 1.0 compatibility */ +s48_value odbc_sql_alloc_env() +{ + SQLRETURN retval; + SQLHENV eh; + + ODBC_DEBUG_PRINTF("odbc_sql_alloc_env()\n"); + + retval = SQLAllocEnv(&eh); + switch (retval) + { + case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: + return s48_enter_inteeger(eh); + case SQL_ERROR: + ODBC_RAISE_EXCEPTION("SQLAllocHandle() returned SQL_ERROR"); + default: + ODBC_RAISE_EXCEPTION("SQLAllocHandle() returned unknown error code"); + } +} + +s48_value odbc_sql_alloc_connect(s48_value env_handle) +{ + SQLRETURN retval; + SQLHENV eh; + SQLHDBC ch; + + eh = (SQLHENV) s48_extract_integer(env_handle); + ODBC_DEBUG_PRINTF("odbc_sql_alloc_connect(): eh:%d\n"); + + retval = SQLAllocConnect(ch, &eh); + switch (retval) + { + case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: + return s48_enter_integer(ch); + case SQL_ERROR: + ODBC_RAISE_EXCEPTION("SQLAllocConnect returned SQL_ERROR"); + case SQL_INVALID_HANDLE: + ODBC_RAISE_EXCEPTION("SQLAllocConnect got invalid handle"); + default: + ODBC_RAISE_EXCEPTION("SQLAllocConnect returned unknown error"); + } +} + +s48_value odbc_sql_alloc_stmt(s48_value conn_handle) +{ + SQLRETURN retval; + SQLHDBC ch; + SQLHSTMT sh; + + ch = (SQLHDBC) s48_extract_integer(conn_handle); + ODBC_DEBUG_PRINTF("odbc_sql_alloc_stmt(): ch:%d\n"); + + retval = SQLAllocStmt(ch, &eh); + switch (retval) + { + case SQL_SUCCESS: case SQL_SUCCESS_WITH_INFO: + return s48_enter_integer(eh); + case SQL_ERROR: + ODBC_RAISE_EXCEPTION("SQLAllocStmt returned SQL_ERROR"); + case SQL_INVALID_HANDLE: + ODBC_RAISE_EXCEPTION("SQLAllocStmt got invalid handle"); + default: + ODBC_RAISE_EXCEPTION("SQLAllocStmt returned unknown error code"); + } +} + /* Connect to a server */ s48_value odbc_sql_connect(s48_value connection_handle, s48_value ds_name, @@ -794,7 +850,6 @@ s48_value odbc_sql_set_env_attr_int(s48_value env_handle, s48_value attribute, s48_value value) { - SQLHENV eh; SQLINTEGER attr; SQLUINTEGER val; diff --git a/scsh/odbc/odbc.h b/scsh/odbc/odbc.h index f812b18..156d873 100644 --- a/scsh/odbc/odbc.h +++ b/scsh/odbc/odbc.h @@ -178,6 +178,11 @@ s48_value odbc_alloc_connection_handle(s48_value env_handle); /* Given a valid connection handle get a statement handle */ s48_value odbc_alloc_statement_handle(s48_value stmt_handle); +/* for ODBC 1.0 compatibility */ +s48_value odbc_sql_alloc_env(); +s48_value odbc_sql_alloc_connect(s48_value env_handle); +s48_value odbc_sql_alloc_stmt(s48_value conn_handle); + /* Connect to a server */ s48_value odbc_sql_connect(s48_value connection_handle, s48_value ds_name, diff --git a/scsh/odbc/odbc.scm b/scsh/odbc/odbc.scm index fb00f22..4401de6 100644 --- a/scsh/odbc/odbc.scm +++ b/scsh/odbc/odbc.scm @@ -439,7 +439,8 @@ ;;; PART 1 (define (odbc-alloc-environment-handle) - (let ((env-handle (really-make-environment-handle (odbc-alloc-environment-handle-internal)))) + (let ((env-handle (really-make-environment-handle + (odbc-alloc-environment-handle-internal)))) (add-finalizer! env-handle odbc-sql-free-handle) env-handle))