📄 odbc.py.i
字号:
%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szPkCatalogName, SQLSMALLINT cbPkCatalogName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szPkSchemaName, SQLSMALLINT cbPkSchemaName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szPkTableName, SQLSMALLINT cbPkTableName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szFkCatalogName, SQLSMALLINT cbFkCatalogName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szFkSchemaName, SQLSMALLINT cbFkSchemaName)};%apply (SQLWCHAR *STRING, int LENGTH) {(SQLWCHAR *szFkTableName, SQLSMALLINT cbFkTableName)};// SQLGetConnectAttr, SQLGetEnvAttr, SQLGetStmtAttr// SQLGetConnectAttrA, SQLGetEnvAttrA, SQLGetStmtAttrA have the same// argument names as SQLGetConnectAttrW, SQLGetEnvAttrW,// SQLGetStmtAttrW, but behave the same as SQLGetConnectAttr,// SQLGetEnvAttr, SQLGetStmtAttr (i.e. not unicode). Also see the// dirty trick in the %init section.%ignore SQLGetConnectAttrA;%ignore SQLGetEnvAttrA;%ignore SQLGetStmtAttrA;%typemap(in, numinputs=1) (SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER *StringLength) (char tempbuf[BUFLEN], $*4_type len) { $1 = ($1_type) PyInt_AsLong($input); if (PyErr_Occurred()) SWIG_fail; $2 = tempbuf; $3 = len = sizeof(tempbuf); $4 = &len;};%typemap(argout,fragment="t_output_helper") (SQLINTEGER Attribute, SQLPOINTER Value, SQLINTEGER BufferLength, SQLINTEGER *StringLength) { PyObject *o; switch ($1) { /* SQLGetConnectAttr values */ case SQL_ATTR_ACCESS_MODE: case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_AUTO_IPD: case SQL_ATTR_AUTOCOMMIT: case SQL_ATTR_CONNECTION_DEAD: case SQL_ATTR_CONNECTION_TIMEOUT: case SQL_ATTR_LOGIN_TIMEOUT: case SQL_ATTR_METADATA_ID: case SQL_ATTR_ODBC_CURSORS: case SQL_ATTR_PACKET_SIZE: case SQL_ATTR_TRACE: case SQL_ATTR_TRANSLATE_OPTION: /* 32-bit value */ case SQL_ATTR_TXN_ISOLATION: /* 32-bit value */ /* SQLGetEnvAttr values */ case SQL_ATTR_CONNECTION_POOLING: case SQL_ATTR_CP_MATCH: case SQL_ATTR_ODBC_VERSION:#if SQL_ATTR_AUTO_IPD != SQL_ATTR_OUTPUT_NTS case SQL_ATTR_OUTPUT_NTS:#endif /* SQLGetStmtAttr values */ case SQL_ATTR_CONCURRENCY: case SQL_ATTR_CURSOR_SCROLLABLE: case SQL_ATTR_CURSOR_SENSITIVITY: case SQL_ATTR_CURSOR_TYPE: case SQL_ATTR_ENABLE_AUTO_IPD: case SQL_ATTR_KEYSET_SIZE: case SQL_ATTR_MAX_LENGTH: case SQL_ATTR_MAX_ROWS: case SQL_ATTR_NOSCAN: case SQL_ATTR_PARAM_BIND_TYPE: case SQL_ATTR_PARAMSET_SIZE: case SQL_ATTR_QUERY_TIMEOUT: case SQL_ATTR_RETRIEVE_DATA: case SQL_ATTR_ROW_ARRAY_SIZE: case SQL_ATTR_ROW_BIND_TYPE: case SQL_ATTR_ROW_NUMBER: case SQL_ATTR_SIMULATE_CURSOR: case SQL_ATTR_USE_BOOKMARKS: /* SQLUINTEGER */ o = PyInt_FromLong((long) * (SQLUINTEGER *) $2); break; case SQL_ATTR_CURRENT_CATALOG: case SQL_ATTR_TRACEFILE: case SQL_ATTR_TRANSLATE_LIB: /* string */ o = PyString_FromStringAndSize((char *) $2, *$4 >= $3 ? $3 - 1 : *$4); break; case SQL_ATTR_QUIET_MODE: case SQL_ATTR_APP_PARAM_DESC: case SQL_ATTR_APP_ROW_DESC: case SQL_ATTR_IMP_PARAM_DESC: case SQL_ATTR_IMP_ROW_DESC: /* handle */ if (* (SQLHANDLE *) $2) o = SWIG_NewPointerObj((void *) * (SQLHANDLE *) $2, $descriptor(SQLHANDLE *), 0); else { o = Py_None; Py_INCREF(o); } break; case SQL_ATTR_FETCH_BOOKMARK_PTR: /* pointer to binary bookmark value */ /* TODO: implement */ o = Py_None; Py_INCREF(o); break; case SQL_ATTR_PARAM_BIND_OFFSET_PTR: case SQL_ATTR_PARAMS_PROCESSED_PTR: case SQL_ATTR_ROW_BIND_OFFSET_PTR: case SQL_ATTR_ROWS_FETCHED_PTR: /* pointer to integer */ /* TODO: implement */ o = Py_None; Py_INCREF(o); break; case SQL_ATTR_PARAM_OPERATION_PTR: case SQL_ATTR_PARAM_STATUS_PTR: case SQL_ATTR_ROW_OPERATION_PTR: case SQL_ATTR_ROW_STATUS_PTR: /* pointer to array of SQLUSMALLINT */ /* TODO: implement */ o = Py_None; Py_INCREF(o); break; } $result = t_output_helper($result, o);}// SQLGetConnectAttrW, SQLGetEnvAttrW, SQLGetStmtAttrW%typemap(in, numinputs=1) (SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER *pcbValue) (char tempbuf[BUFLEN], $*4_type len) { $1 = ($1_type) PyInt_AsLong($input); if (PyErr_Occurred()) SWIG_fail; $2 = tempbuf; $3 = len = sizeof(tempbuf); $4 = &len;};%typemap(argout,fragment="t_output_helper") (SQLINTEGER fAttribute, SQLPOINTER rgbValue, SQLINTEGER cbValueMax, SQLINTEGER *pcbValue) { PyObject *o; switch ($1) { /* SQLGetConnectAttr values */ case SQL_ATTR_ACCESS_MODE: case SQL_ATTR_ASYNC_ENABLE: case SQL_ATTR_AUTO_IPD: case SQL_ATTR_AUTOCOMMIT: case SQL_ATTR_CONNECTION_DEAD: case SQL_ATTR_CONNECTION_TIMEOUT: case SQL_ATTR_LOGIN_TIMEOUT: case SQL_ATTR_METADATA_ID: case SQL_ATTR_ODBC_CURSORS: case SQL_ATTR_PACKET_SIZE: case SQL_ATTR_TRACE: case SQL_ATTR_TRANSLATE_OPTION: /* 32-bit value */ case SQL_ATTR_TXN_ISOLATION: /* 32-bit value */ /* SQLGetEnvAttr values */ case SQL_ATTR_CONNECTION_POOLING: case SQL_ATTR_CP_MATCH: case SQL_ATTR_ODBC_VERSION:#if SQL_ATTR_AUTO_IPD != SQL_ATTR_OUTPUT_NTS case SQL_ATTR_OUTPUT_NTS:#endif /* SQLGetStmtAttr values */ case SQL_ATTR_CONCURRENCY: case SQL_ATTR_CURSOR_SCROLLABLE: case SQL_ATTR_CURSOR_SENSITIVITY: case SQL_ATTR_CURSOR_TYPE: case SQL_ATTR_ENABLE_AUTO_IPD: case SQL_ATTR_KEYSET_SIZE: case SQL_ATTR_MAX_LENGTH: case SQL_ATTR_MAX_ROWS: case SQL_ATTR_NOSCAN: case SQL_ATTR_PARAM_BIND_TYPE: case SQL_ATTR_PARAMSET_SIZE: case SQL_ATTR_QUERY_TIMEOUT: case SQL_ATTR_RETRIEVE_DATA: case SQL_ATTR_ROW_ARRAY_SIZE: case SQL_ATTR_ROW_BIND_TYPE: case SQL_ATTR_ROW_NUMBER: case SQL_ATTR_SIMULATE_CURSOR: case SQL_ATTR_USE_BOOKMARKS: /* SQLUINTEGER */ o = PyInt_FromLong((long) * (SQLUINTEGER *) $2); break; case SQL_ATTR_CURRENT_CATALOG: case SQL_ATTR_TRACEFILE: case SQL_ATTR_TRANSLATE_LIB: /* string */ o = PyUnicode_FromSqlWChar((SQLWCHAR *) $2, (*$4 >= $3 ? (SQLINTEGER) ($3 - sizeof(SQLWCHAR)) : *$4) / sizeof(SQLWCHAR)); break; case SQL_ATTR_QUIET_MODE: case SQL_ATTR_APP_PARAM_DESC: case SQL_ATTR_APP_ROW_DESC: case SQL_ATTR_IMP_PARAM_DESC: case SQL_ATTR_IMP_ROW_DESC: /* handle */ if (* (SQLHANDLE *) $2) o = SWIG_NewPointerObj((void *) * (SQLHANDLE *) $2, $descriptor(SQLHANDLE *), 0); else { o = Py_None; Py_INCREF(o); } break; case SQL_ATTR_FETCH_BOOKMARK_PTR: /* pointer to binary bookmark value */ /* TODO: implement */ o = Py_None; Py_INCREF(o); break; case SQL_ATTR_PARAM_BIND_OFFSET_PTR: case SQL_ATTR_PARAMS_PROCESSED_PTR: case SQL_ATTR_ROW_BIND_OFFSET_PTR: case SQL_ATTR_ROWS_FETCHED_PTR: /* pointer to integer */ /* TODO: implement */ o = Py_None; Py_INCREF(o); break; case SQL_ATTR_PARAM_OPERATION_PTR: case SQL_ATTR_PARAM_STATUS_PTR: case SQL_ATTR_ROW_OPERATION_PTR: case SQL_ATTR_ROW_STATUS_PTR: /* pointer to array of SQLUSMALLINT */ /* TODO: implement */ o = Py_None; Py_INCREF(o); break; } $result = t_output_helper($result, o);}// SQLGetConnectOption, SQLGetStmtOption%typemap(in, numinputs=1) (SQLUSMALLINT Option, SQLPOINTER Value) (char tempbuf[BUFLEN]) { $1 = ($1_type) PyInt_AsLong($input); if (PyErr_Occurred()) SWIG_fail; $2 = tempbuf;};%typemap(argout,fragment="t_output_helper") (SQLUSMALLINT Option, SQLPOINTER Value) { PyObject *o; switch ($1) { case SQL_ACCESS_MODE: case SQL_AUTOCOMMIT: case SQL_LOGIN_TIMEOUT: case SQL_ODBC_CURSORS: case SQL_OPT_TRACE: case SQL_PACKET_SIZE: case SQL_QUIET_MODE: case SQL_TRANSLATE_OPTION: case SQL_TXN_ISOLATION: case SQL_QUERY_TIMEOUT: case SQL_MAX_ROWS: case SQL_NOSCAN: case SQL_MAX_LENGTH: case SQL_ASYNC_ENABLE: case SQL_BIND_TYPE: case SQL_CURSOR_TYPE: case SQL_CONCURRENCY: case SQL_KEYSET_SIZE: case SQL_ROWSET_SIZE: case SQL_SIMULATE_CURSOR: case SQL_RETRIEVE_DATA: case SQL_USE_BOOKMARKS:/* case SQL_GET_BOOKMARKS: is deprecated in ODBC 3.0+ */ case SQL_ROW_NUMBER: /* SQLUINTEGER */ o = PyInt_FromLong((long) * (SQLUINTEGER *) $2); break; case SQL_CURRENT_QUALIFIER: case SQL_OPT_TRACEFILE: case SQL_TRANSLATE_DLL: /* string */ o = PyString_FromString((char *) $2); break; } $result = t_output_helper($result, o);}// SQLGetConnectOptionW%ignore SQLGetConnectOptionA;%typemap(in, numinputs=1) (SQLUSMALLINT fOption, SQLPOINTER pvParam) (char tempbuf[BUFLEN]) { $1 = ($1_type) PyInt_AsLong($input); if (PyErr_Occurred()) SWIG_fail; $2 = tempbuf;};%typemap(argout,fragment="t_output_helper") (SQLUSMALLINT fOption, SQLPOINTER pvParam) { PyObject *o; switch ($1) { case SQL_ACCESS_MODE: case SQL_AUTOCOMMIT: case SQL_LOGIN_TIMEOUT: case SQL_ODBC_CURSORS: case SQL_OPT_TRACE: case SQL_PACKET_SIZE: case SQL_QUIET_MODE: case SQL_TRANSLATE_OPTION: case SQL_TXN_ISOLATION: case SQL_QUERY_TIMEOUT: case SQL_MAX_ROWS: case SQL_NOSCAN: case SQL_MAX_LENGTH: case SQL_ASYNC_ENABLE: case SQL_BIND_TYPE: case SQL_CURSOR_TYPE: case SQL_CONCURRENCY: case SQL_KEYSET_SIZE: case SQL_ROWSET_SIZE: case SQL_SIMULATE_CURSOR: case SQL_RETRIEVE_DATA: case SQL_USE_BOOKMARKS:/* case SQL_GET_BOOKMARKS: is deprecated in ODBC 3.0+ */ case SQL_ROW_NUMBER: /* SQLUINTEGER */ o = PyInt_FromLong((long) * (SQLUINTEGER *) $2); break; case SQL_CURRENT_QUALIFIER: case SQL_OPT_TRACEFILE: case SQL_TRANSLATE_DLL: /* string */ o = PyUnicode_FromSqlWChar((SQLWCHAR *) $2, SQL_NTS); break; } $result = t_output_helper($result, o);}// SQLGetCursorName%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *CursorName, SQLSMALLINT BufferLength, SQLSMALLINT *NameLength)};// SQLGetCursorNameA%apply (char *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLCHAR *szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT *pcbCursor)};// SQLGetCursorNameW%apply (SQLWCHAR *OUTBUF, int BUFSIZE, int *OUTSIZE) {(SQLWCHAR *szCursor, SQLSMALLINT cbCursorMax, SQLSMALLINT *pcbCursor)};// SQLGetData// known problem: if the result value doesn't fit in tempbuf, you only// get part of the result%typemap(in, numinputs=1) (SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLLEN BufferLength, SQLLEN *StrLen_or_Ind) ($*4_type len, SQLCHAR tempbuf[2048]) { $1 = ($1_ltype) PyInt_AsLong($input); if (PyErr_Occurred()) SWIG_fail; $2 = tempbuf; $3 = sizeof(tempbuf); $4 = &len;}%typemap(argout,fragment="t_output_helper") (SQLSMALLINT TargetType, SQLPOINTER TargetValue, SQLLEN BufferLength, SQLLEN *StrLen_or_Ind) { PyObject *o; if (*$4 == SQL_NULL_DATA || *$4 == SQL_NO_TOTAL) { o = Py_None; Py_INCREF(Py_None); } else switch ($1) { case SQL_C_CHAR: case SQL_C_BINARY:#ifdef SQL_C_XML case SQL_C_XML:#endif#if SQL_C_VARBOOKMARK != SQL_C_BINARY case SQL_C_VARBOOKMARK:#endif if (*$4 == SQL_NO_TOTAL) o = PyString_FromStringAndSize((char *) $2, $3 - 1); else o = PyString_FromStringAndSize((char *) $2, *$4 >= $3 ? $3 - 1 : *$4); break; case SQL_C_WCHAR: if (*$4 == SQL_NO_TOTAL) o = PyUnicode_FromSqlWChar((SQLWCHAR *) $2, ($3 - sizeof(SQLWCHAR)) / sizeof(SQLWCHAR)); else o = PyUnicode_FromSqlWChar((SQLWCHAR *) $2, (*$4 >= $3 ? (SQLLEN) ($3 - sizeof(SQLWCHAR)) : *$4) / sizeof(SQLWCHAR)); break; case SQL_C_BIT: o = PyBool_FromLong((long) * (SQLCHAR *) $2); break; case SQL_C_UTINYINT: o = PyInt_FromLong((long) * (SQLCHAR *) $2); break; case SQL_C_SHORT: case SQL_C_SSHORT: o = PyInt_FromLong((long) * (SQLSMALLINT *) $2); break; case SQL_C_USHORT: o = PyInt_FromLong((long) * (SQLUSMALLINT *) $2); break; case SQL_C_LONG: case SQL_C_SLONG: o = PyInt_FromLong((long) * (SQLINTEGER *) $2); break; case SQL_C_ULONG: o = PyInt_FromLong((long) * (SQLUINTEGER *) $2); break; case SQL_C_FLOAT: o = PyFloat_FromDouble((double) * (SQLREAL *) $2); break; case SQL_C_DOUBLE: o = PyFloat_FromDouble((double) * (SQLDOUBLE *) $2); break; case SQL_C_TINYINT: case SQL_C_STINYINT: o = PyInt_FromLong((long) * (SQLSCHAR *) $2); break; case SQL_C_SBIGINT: o = PyLong_FromLongLong((PY_LONG_LONG) * (SQLBIGINT *) $2); break; case SQL_C_UBIGINT: o = PyLong_FromLongLong((unsigned PY_LONG_LONG) * (SQLUBIGINT *) $2); break;#if SQL_C_BOOKMARK != SQL_C_ULONG && SQL_C_BOOKMARK != SQL_C_UBIGINT case SQL_C_BOOKMARK: o = PyInt_FromLong((long) * (BOOKMARK *) $2); break;#endif case SQL_C_TYPE_DATE: o = Py_BuildValue("(iii)", ((SQL_DATE_STRUCT *) $2)->year, ((SQL_DATE_STRUCT *) $2)->month, ((SQL_DATE_STRUCT *) $2)->day); break; case SQL_C_TYPE_TIME: o = Py_BuildValue("(iii)", ((SQL_TIME_STRUCT *) $2)->hour, ((SQL_TIME_STRUCT *) $2)->minute, ((SQL_TIME_STRUCT *) $2)->second); break; case SQL_C_TYPE_TIMESTAMP: o = Py_BuildValue("(iiiiid)", ((SQL_TIMESTAMP_STRUCT *) $2)->year, ((SQL_TIMESTAMP_STRUCT *) $2)->month, ((SQL_TIMESTAMP_STRUCT *) $2)->day, ((SQL_TIMESTAMP_STRUCT *) $2)->hour, ((SQL_TIMESTAMP_STRUCT *) $2)->minute, ((SQL_TIMESTAMP_STRUCT *) $2)->second + ((SQL_TIMESTAMP_STRUCT *) $2)->fraction / 1000000000.); break; case SQL_C_NUMERIC: o = Py_BuildValue("(iiis#)", ((SQL_NUMERIC_STRUCT *) $2)->precision, ((SQL_NUMERIC_STRUCT *) $2)->scale, ((SQL_NUMERIC_STRUCT *) $2)->sign, ((SQL_NUMERIC_STRUCT *) $2)->val, SQL_MAX_NUMERIC_LEN); break; case SQL_C_GUID: o = Py_BuildValue("(iiis#)", ((SQLGUID *) $2)->Data1, ((SQLGUID *) $2)->Data2, ((SQLGUID *) $2)->Data3, ((SQLGUID *) $2)->Data4, 8); break; case SQL_C_INTERVAL_YEAR: case SQL_C_INTERVAL_MONTH: case SQL_C_INTERVAL_YEAR_TO_MONTH:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -