diff options
Diffstat (limited to 'src/interfaces/odbc/odbcapi30.c')
-rw-r--r-- | src/interfaces/odbc/odbcapi30.c | 550 |
1 files changed, 0 insertions, 550 deletions
diff --git a/src/interfaces/odbc/odbcapi30.c b/src/interfaces/odbc/odbcapi30.c deleted file mode 100644 index cf73924065e..00000000000 --- a/src/interfaces/odbc/odbcapi30.c +++ /dev/null @@ -1,550 +0,0 @@ -/*------- - * Module: odbcapi30.c - * - * Description: This module contains routines related to ODBC 3.0 - * most of their implementations are temporary - * and must be rewritten properly. - * 2001/07/23 inoue - * - * Classes: n/a - * - * API functions: SQLAllocHandle, SQLBindParam, SQLCloseCursor, - SQLColAttribute, SQLCopyDesc, SQLEndTran, - SQLFetchScroll, SQLFreeHandle, SQLGetDescField, - SQLGetDescRec, SQLGetDiagField, SQLGetDiagRec, - SQLGetEnvAttr, SQLGetConnectAttr, SQLGetStmtAttr, - SQLSetConnectAttr, SQLSetDescField, SQLSetDescRec, - SQLSetEnvAttr, SQLSetStmtAttr, SQLBulkOperations - *------- - */ - -#ifndef ODBCVER -#define ODBCVER 0x0300 -#endif -#include "psqlodbc.h" -#include <stdio.h> -#include <string.h> - -#include "environ.h" -#include "connection.h" -#include "statement.h" -#include "pgapifunc.h" - -/* SQLAllocConnect/SQLAllocEnv/SQLAllocStmt -> SQLAllocHandle */ -RETCODE SQL_API -SQLAllocHandle(SQLSMALLINT HandleType, - SQLHANDLE InputHandle, SQLHANDLE * OutputHandle) -{ - mylog("[[SQLAllocHandle]]"); - switch (HandleType) - { - case SQL_HANDLE_ENV: - return PGAPI_AllocEnv(OutputHandle); - case SQL_HANDLE_DBC: - return PGAPI_AllocConnect(InputHandle, OutputHandle); - case SQL_HANDLE_STMT: - return PGAPI_AllocStmt(InputHandle, OutputHandle); - default: - break; - } - return SQL_ERROR; -} - -/* SQLBindParameter/SQLSetParam -> SQLBindParam */ -RETCODE SQL_API -SQLBindParam(HSTMT StatementHandle, - SQLUSMALLINT ParameterNumber, SQLSMALLINT ValueType, - SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision, - SQLSMALLINT ParameterScale, PTR ParameterValue, - SQLINTEGER *StrLen_or_Ind) -{ - int BufferLength = 512; /* Is it OK ? */ - - mylog("[[SQLBindParam]]"); - SC_clear_error((StatementClass *) StatementHandle); - return PGAPI_BindParameter(StatementHandle, ParameterNumber, SQL_PARAM_INPUT, ValueType, ParameterType, LengthPrecision, ParameterScale, ParameterValue, BufferLength, StrLen_or_Ind); -} - -/* New function */ -RETCODE SQL_API -SQLCloseCursor(HSTMT StatementHandle) -{ - mylog("[[SQLCloseCursor]]"); - SC_clear_error((StatementClass *) StatementHandle); - return PGAPI_FreeStmt(StatementHandle, SQL_CLOSE); -} - -/* SQLColAttributes -> SQLColAttribute */ -RETCODE SQL_API -SQLColAttribute(HSTMT StatementHandle, - SQLUSMALLINT ColumnNumber, SQLUSMALLINT FieldIdentifier, - PTR CharacterAttribute, SQLSMALLINT BufferLength, - SQLSMALLINT *StringLength, PTR NumericAttribute) -{ - mylog("[[SQLColAttribute]]"); - SC_clear_error((StatementClass *) StatementHandle); - return PGAPI_ColAttributes(StatementHandle, ColumnNumber, - FieldIdentifier, CharacterAttribute, BufferLength, - StringLength, NumericAttribute); -} - -static HSTMT -descHandleFromStatementHandle(HSTMT StatementHandle, SQLINTEGER descType) -{ - switch (descType) - { - case SQL_ATTR_APP_ROW_DESC: /* 10010 */ - return StatementHandle; /* this is bogus */ - case SQL_ATTR_APP_PARAM_DESC: /* 10011 */ - return (HSTMT) ((SQLUINTEGER) StatementHandle + 1) ; /* this is bogus */ - case SQL_ATTR_IMP_ROW_DESC: /* 10012 */ - return (HSTMT) ((SQLUINTEGER) StatementHandle + 2); /* this is bogus */ - case SQL_ATTR_IMP_PARAM_DESC: /* 10013 */ - return (HSTMT) ((SQLUINTEGER) StatementHandle + 3); /* this is bogus */ - } - return (HSTMT) 0; -} -static HSTMT -statementHandleFromDescHandle(HSTMT DescHandle, SQLINTEGER *descType) -{ - SQLUINTEGER res = (SQLUINTEGER) DescHandle % 4; - switch (res) - { - case 0: *descType = SQL_ATTR_APP_ROW_DESC; /* 10010 */ - break; - case 1: *descType = SQL_ATTR_APP_PARAM_DESC; /* 10011 */ - break; - case 2: *descType = SQL_ATTR_IMP_ROW_DESC; /* 10012 */ - break; - case 3: *descType = SQL_ATTR_IMP_PARAM_DESC; /* 10013 */ - break; - } - return (HSTMT) ((SQLUINTEGER) DescHandle - res); -} - -/* new function */ -RETCODE SQL_API -SQLCopyDesc(SQLHDESC SourceDescHandle, - SQLHDESC TargetDescHandle) -{ - mylog("[[SQLCopyDesc]]\n"); - mylog("Error not implemented\n"); - return SQL_ERROR; -} - -/* SQLTransact -> SQLEndTran */ -RETCODE SQL_API -SQLEndTran(SQLSMALLINT HandleType, SQLHANDLE Handle, - SQLSMALLINT CompletionType) -{ - mylog("[[SQLEndTran]]"); - switch (HandleType) - { - case SQL_HANDLE_ENV: - return PGAPI_Transact(Handle, SQL_NULL_HDBC, CompletionType); - case SQL_HANDLE_DBC: - CC_clear_error((ConnectionClass *) Handle); - return PGAPI_Transact(SQL_NULL_HENV, Handle, CompletionType); - default: - break; - } - return SQL_ERROR; -} - -/* SQLExtendedFetch -> SQLFetchScroll */ -RETCODE SQL_API -SQLFetchScroll(HSTMT StatementHandle, - SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset) -{ - static char *func = "SQLFetchScroll"; - StatementClass *stmt = (StatementClass *) StatementHandle; - RETCODE ret; - IRDFields *irdopts = SC_get_IRD(stmt); - SQLUSMALLINT *rowStatusArray = irdopts->rowStatusArray; - SQLINTEGER *pcRow = irdopts->rowsFetched, bkmarkoff = 0; - - mylog("[[%s]] %d,%d\n", func, FetchOrientation, FetchOffset); - SC_clear_error(stmt); - if (FetchOrientation == SQL_FETCH_BOOKMARK) - { - if (stmt->options.bookmark_ptr) - { - bkmarkoff = FetchOffset; - FetchOffset = *((Int4 *) stmt->options.bookmark_ptr); -mylog("bookmark=%u FetchOffset = %d\n", FetchOffset, bkmarkoff); - } - else - { - stmt->errornumber = STMT_SEQUENCE_ERROR; - stmt->errormsg = "Bookmark isn't specifed yet"; - SC_log_error(func, "", stmt); - return SQL_ERROR; - } - } - ret = PGAPI_ExtendedFetch(StatementHandle, FetchOrientation, FetchOffset, - pcRow, rowStatusArray, bkmarkoff); - if (ret != SQL_SUCCESS) - mylog("%s return = %d\n", func, ret); - return ret; -} - -/* SQLFree(Connect/Env/Stmt) -> SQLFreeHandle */ -RETCODE SQL_API -SQLFreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle) -{ - mylog("[[SQLFreeHandle]]"); - switch (HandleType) - { - case SQL_HANDLE_ENV: - return PGAPI_FreeEnv(Handle); - case SQL_HANDLE_DBC: - return PGAPI_FreeConnect(Handle); - case SQL_HANDLE_STMT: - return PGAPI_FreeStmt(Handle, SQL_DROP); - default: - break; - } - return SQL_ERROR; -} - -/* new function */ -RETCODE SQL_API -SQLGetDescField(SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, - PTR Value, SQLINTEGER BufferLength, - SQLINTEGER *StringLength) -{ - mylog("[[SQLGetDescField]]\n"); - return PGAPI_GetDescField(DescriptorHandle, RecNumber, FieldIdentifier, - Value, BufferLength, StringLength); -} - -/* new function */ -RETCODE SQL_API -SQLGetDescRec(SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, SQLCHAR *Name, - SQLSMALLINT BufferLength, SQLSMALLINT *StringLength, - SQLSMALLINT *Type, SQLSMALLINT *SubType, - SQLINTEGER *Length, SQLSMALLINT *Precision, - SQLSMALLINT *Scale, SQLSMALLINT *Nullable) -{ - mylog("[[SQLGetDescRec]]\n"); - mylog("Error not implemented\n"); - return SQL_ERROR; -} - -/* new function */ -RETCODE SQL_API -SQLGetDiagField(SQLSMALLINT HandleType, SQLHANDLE Handle, - SQLSMALLINT RecNumber, SQLSMALLINT DiagIdentifier, - PTR DiagInfo, SQLSMALLINT BufferLength, - SQLSMALLINT *StringLength) -{ - mylog("[[SQLGetDiagField]] Handle=(%u,%x) Rec=%d Id=%d\n", HandleType, Handle, RecNumber, DiagIdentifier); - return PGAPI_GetDiagField(HandleType, Handle, RecNumber, DiagIdentifier, - DiagInfo, BufferLength, StringLength); -} - -/* SQLError -> SQLDiagRec */ -RETCODE SQL_API -SQLGetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle, - SQLSMALLINT RecNumber, SQLCHAR *Sqlstate, - SQLINTEGER *NativeError, SQLCHAR *MessageText, - SQLSMALLINT BufferLength, SQLSMALLINT *TextLength) -{ - mylog("[[SQLGetDiagRec]]\n"); - return PGAPI_GetDiagRec(HandleType, Handle, RecNumber, Sqlstate, - NativeError, MessageText, BufferLength, TextLength); -} - -/* new function */ -RETCODE SQL_API -SQLGetEnvAttr(HENV EnvironmentHandle, - SQLINTEGER Attribute, PTR Value, - SQLINTEGER BufferLength, SQLINTEGER *StringLength) -{ - EnvironmentClass *env = (EnvironmentClass *) EnvironmentHandle; - - mylog("[[SQLGetEnvAttr]] %d\n", Attribute); - switch (Attribute) - { - case SQL_ATTR_CONNECTION_POOLING: - *((unsigned int *) Value) = SQL_CP_OFF; - break; - case SQL_ATTR_CP_MATCH: - *((unsigned int *) Value) = SQL_CP_RELAXED_MATCH; - break; - case SQL_ATTR_ODBC_VERSION: - *((unsigned int *) Value) = EN_is_odbc2(env) ? SQL_OV_ODBC2 : SQL_OV_ODBC3; - break; - case SQL_ATTR_OUTPUT_NTS: - *((unsigned int *) Value) = SQL_TRUE; - break; - default: - env->errornumber = CONN_INVALID_ARGUMENT_NO; - return SQL_ERROR; - } - return SQL_SUCCESS; -} - -/* SQLGetConnectOption -> SQLGetconnectAttr */ -RETCODE SQL_API -SQLGetConnectAttr(HDBC ConnectionHandle, - SQLINTEGER Attribute, PTR Value, - SQLINTEGER BufferLength, SQLINTEGER *StringLength) -{ - mylog("[[SQLGetConnectAttr]] %d\n", Attribute); - CC_clear_error((ConnectionClass *) ConnectionHandle); - return PGAPI_GetConnectAttr(ConnectionHandle, Attribute,Value, - BufferLength, StringLength); -} - -/* SQLGetStmtOption -> SQLGetStmtAttr */ -RETCODE SQL_API -SQLGetStmtAttr(HSTMT StatementHandle, - SQLINTEGER Attribute, PTR Value, - SQLINTEGER BufferLength, SQLINTEGER *StringLength) -{ - static char *func = "SQLGetStmtAttr"; - - mylog("[[%s]] Handle=%u %d\n", func, StatementHandle, Attribute); - SC_clear_error((StatementClass *) StatementHandle); - return PGAPI_GetStmtAttr(StatementHandle, Attribute, Value, - BufferLength, StringLength); -} - -/* SQLSetConnectOption -> SQLSetConnectAttr */ -RETCODE SQL_API -SQLSetConnectAttr(HDBC ConnectionHandle, - SQLINTEGER Attribute, PTR Value, - SQLINTEGER StringLength) -{ - ConnectionClass *conn = (ConnectionClass *) ConnectionHandle; - - mylog("[[SQLSetConnectAttr]] %d\n", Attribute); - CC_clear_error(conn); - return PGAPI_SetConnectAttr(ConnectionHandle, Attribute, Value, - StringLength); -} - -/* new function */ -RETCODE SQL_API -SQLSetDescField(SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, SQLSMALLINT FieldIdentifier, - PTR Value, SQLINTEGER BufferLength) -{ - RETCODE ret; - - mylog("[[SQLSetDescField]] h=%u rec=%d field=%d val=%x\n", DescriptorHandle, RecNumber, FieldIdentifier, Value); - ret = PGAPI_SetDescField(DescriptorHandle, RecNumber, FieldIdentifier, - Value, BufferLength); - return ret; -} - -/* new fucntion */ -RETCODE SQL_API -SQLSetDescRec(SQLHDESC DescriptorHandle, - SQLSMALLINT RecNumber, SQLSMALLINT Type, - SQLSMALLINT SubType, SQLINTEGER Length, - SQLSMALLINT Precision, SQLSMALLINT Scale, - PTR Data, SQLINTEGER *StringLength, - SQLINTEGER *Indicator) -{ - const char *func = "SQLSetDescRec"; - - mylog("[[SQLSetDescRec]]\n"); - mylog("Error not implemented\n"); - return SQL_ERROR; -} - -/* new function */ -RETCODE SQL_API -SQLSetEnvAttr(HENV EnvironmentHandle, - SQLINTEGER Attribute, PTR Value, - SQLINTEGER StringLength) -{ - EnvironmentClass *env = (EnvironmentClass *) EnvironmentHandle; - - mylog("[[SQLSetEnvAttr]] att=%d,%u\n", Attribute, Value); - switch (Attribute) - { - case SQL_ATTR_CONNECTION_POOLING: - if ((SQLUINTEGER) Value == SQL_CP_OFF) - return SQL_SUCCESS; - break; - case SQL_ATTR_CP_MATCH: - /* *((unsigned int *) Value) = SQL_CP_RELAXED_MATCH; */ - return SQL_SUCCESS; - case SQL_ATTR_ODBC_VERSION: - if ((SQLUINTEGER) Value == SQL_OV_ODBC2) - EN_set_odbc2(env); - else - EN_set_odbc3(env); - return SQL_SUCCESS; - break; - case SQL_ATTR_OUTPUT_NTS: - if ((SQLUINTEGER) Value == SQL_TRUE) - return SQL_SUCCESS; - break; - default: - env->errornumber = CONN_INVALID_ARGUMENT_NO; - return SQL_ERROR; - } - env->errornumber = CONN_OPTION_VALUE_CHANGED; - env->errormsg = "SetEnv changed to "; - return SQL_SUCCESS_WITH_INFO; -} - -/* SQLSet(Param/Scroll/Stmt)Option -> SQLSetStmtAttr */ -RETCODE SQL_API -SQLSetStmtAttr(HSTMT StatementHandle, - SQLINTEGER Attribute, PTR Value, - SQLINTEGER StringLength) -{ - static char *func = "SQLSetStmtAttr"; - StatementClass *stmt = (StatementClass *) StatementHandle; - - mylog("[[%s]] Handle=%u %d,%u\n", func, StatementHandle, Attribute, Value); - SC_clear_error(stmt); - return PGAPI_SetStmtAttr(StatementHandle, Attribute, Value, StringLength); -} - -#define SQL_FUNC_ESET(pfExists, uwAPI) \ - (*(((UWORD*) (pfExists)) + ((uwAPI) >> 4)) \ - |= (1 << ((uwAPI) & 0x000F)) \ - ) -RETCODE SQL_API -PGAPI_GetFunctions30(HDBC hdbc, UWORD fFunction, UWORD FAR * pfExists) -{ - ConnectionClass *conn = (ConnectionClass *) hdbc; - ConnInfo *ci = &(conn->connInfo); - - CC_clear_error(conn); - if (fFunction != SQL_API_ODBC3_ALL_FUNCTIONS) - return SQL_ERROR; - memset(pfExists, 0, sizeof(UWORD) * SQL_API_ODBC3_ALL_FUNCTIONS_SIZE); - - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLALLOCCONNECT); 1 deprecated */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLALLOCENV); 2 deprecated */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLALLOCSTMT); 3 deprecated */ - - /* - * for (i = SQL_API_SQLBINDCOL; i <= 23; i++) SQL_FUNC_ESET(pfExists, - * i); - */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLBINDCOL); /* 4 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLCANCEL); /* 5 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLCOLATTRIBUTE); /* 6 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLCONNECT); /* 7 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLDESCRIBECOL); /* 8 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLDISCONNECT); /* 9 */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLERROR); 10 deprecated */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLEXECDIRECT); /* 11 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLEXECUTE); /* 12 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLFETCH); /* 13 */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLFREECONNECT); 14 deprecated */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLFREEENV); 15 deprecated */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLFREESTMT); /* 16 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETCURSORNAME); /* 17 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLNUMRESULTCOLS); /* 18 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLPREPARE); /* 19 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLROWCOUNT); /* 20 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLSETCURSORNAME); /* 21 */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLSETPARAM); 22 deprecated */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLTRANSACT); 23 deprecated */ - - /* - * for (i = 40; i < SQL_API_SQLEXTENDEDFETCH; i++) - * SQL_FUNC_ESET(pfExists, i); - */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLCOLUMNS); /* 40 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLDRIVERCONNECT); /* 41 */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLGETCONNECTOPTION); 42 deprecated */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDATA); /* 43 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETFUNCTIONS); /* 44 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETINFO); /* 45 */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLGETSTMTOPTION); 46 deprecated */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETTYPEINFO); /* 47 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLPARAMDATA); /* 48 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLPUTDATA); /* 49 */ - - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLSETCONNECTIONOPTION); 50 deprecated */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLSETSTMTOPTION); 51 deprecated */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLSPECIALCOLUMNS); /* 52 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLSTATISTICS); /* 53 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLTABLES); /* 54 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLBROWSECONNECT); /* 55 */ - if (ci->drivers.lie) - SQL_FUNC_ESET(pfExists, SQL_API_SQLCOLUMNPRIVILEGES); /* 56 not implemented yet */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLDATASOURCES); /* 57 */ - if (ci->drivers.lie) - SQL_FUNC_ESET(pfExists, SQL_API_SQLDESCRIBEPARAM); /* 58 not properly implemented */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLEXTENDEDFETCH); /* 59 deprecated ? */ - - /* - * for (++i; i < SQL_API_SQLBINDPARAMETER; i++) - * SQL_FUNC_ESET(pfExists, i); - */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLFOREIGNKEYS); /* 60 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLMORERESULTS); /* 61 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLNATIVESQL); /* 62 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLNUMPARAMS); /* 63 */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLPARAMOPTIONS); 64 deprecated */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLPRIMARYKEYS); /* 65 */ - if (ci->drivers.lie) - SQL_FUNC_ESET(pfExists, SQL_API_SQLPROCEDURECOLUMNS); /* 66 not implemeted yet */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLPROCEDURES); /* 67 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLSETPOS); /* 68 */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLSETSCROLLOPTIONS); 69 deprecated */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLTABLEPRIVILEGES); /* 70 */ - /* SQL_FUNC_ESET(pfExists, SQL_API_SQLDRIVERS); */ /* 71 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLBINDPARAMETER); /* 72 */ - - SQL_FUNC_ESET(pfExists, SQL_API_SQLALLOCHANDLE); /* 1001 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLBINDPARAM); /* 1002 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLCLOSECURSOR); /* 1003 */ - if (ci->drivers.lie) - SQL_FUNC_ESET(pfExists, SQL_API_SQLCOPYDESC); /* 1004 not implemented yet */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLENDTRAN); /* 1005 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLFREEHANDLE); /* 1006 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETCONNECTATTR); /* 1007 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDESCFIELD); /* 1008 */ - if (ci->drivers.lie) - { - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDESCREC); /* 1009 not implemented yet */ - } - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDIAGFIELD); /* 1010 minimal implementation */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETDIAGREC); /* 1011 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETENVATTR); /* 1012 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLGETSTMTATTR); /* 1014 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLSETCONNECTATTR); /* 1016 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLSETDESCFIELD); /* 1017 */ - if (ci->drivers.lie) - { - SQL_FUNC_ESET(pfExists, SQL_API_SQLSETDESCREC); /* 1018 not implemented yet */ - } - SQL_FUNC_ESET(pfExists, SQL_API_SQLSETENVATTR); /* 1019 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLSETSTMTATTR); /* 1020 */ - SQL_FUNC_ESET(pfExists, SQL_API_SQLFETCHSCROLL); /* 1021 */ - if (ci->updatable_cursors) - SQL_FUNC_ESET(pfExists, SQL_API_SQLBULKOPERATIONS); /* 24 */ - - return SQL_SUCCESS; -} - -RETCODE SQL_API -SQLBulkOperations(HSTMT hstmt, SQLSMALLINT operation) -{ - static char *func = "SQLBulkOperations"; -#ifndef DRIVER_CURSOR_IMPLEMENT - StatementClass *stmt = (StatementClass *) hstmt; - stmt->errornumber = STMT_NOT_IMPLEMENTED_ERROR; - stmt->errormsg = "driver must be compiled with the DRIVER_CURSOR_IMPLEMENT option"; - SC_log_error(func, "", stmt); - return SQL_ERROR; -#else - mylog("[[%s]] Handle=%u %d\n", func, hstmt, operation); - SC_clear_error((StatementClass *) hstmt); - return PGAPI_BulkOperations(hstmt, operation); -#endif /* DRIVER_CURSOR_IMPLEMENT */ -} |