mssql-python 1.0.0__cp314-cp314-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mssql_python/__init__.py +307 -0
- mssql_python/auth.py +222 -0
- mssql_python/connection.py +1493 -0
- mssql_python/connection_string_builder.py +113 -0
- mssql_python/connection_string_parser.py +381 -0
- mssql_python/constants.py +509 -0
- mssql_python/cursor.py +2601 -0
- mssql_python/db_connection.py +53 -0
- mssql_python/ddbc_bindings.cp314-amd64.pyd +0 -0
- mssql_python/ddbc_bindings.py +137 -0
- mssql_python/exceptions.py +574 -0
- mssql_python/helpers.py +357 -0
- mssql_python/libs/LICENSING +19 -0
- mssql_python/libs/linux/alpine/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
- mssql_python/libs/linux/alpine/arm64/lib/libodbcinst.so.2 +0 -0
- mssql_python/libs/linux/alpine/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/linux/alpine/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
- mssql_python/libs/linux/alpine/x86_64/lib/libodbcinst.so.2 +0 -0
- mssql_python/libs/linux/alpine/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/linux/debian_ubuntu/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
- mssql_python/libs/linux/debian_ubuntu/arm64/lib/libodbcinst.so.2 +0 -0
- mssql_python/libs/linux/debian_ubuntu/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/linux/debian_ubuntu/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
- mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libodbcinst.so.2 +0 -0
- mssql_python/libs/linux/debian_ubuntu/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/linux/rhel/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
- mssql_python/libs/linux/rhel/arm64/lib/libodbcinst.so.2 +0 -0
- mssql_python/libs/linux/rhel/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/linux/rhel/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
- mssql_python/libs/linux/rhel/x86_64/lib/libodbcinst.so.2 +0 -0
- mssql_python/libs/linux/rhel/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/linux/suse/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
- mssql_python/libs/linux/suse/x86_64/lib/libodbcinst.so.2 +0 -0
- mssql_python/libs/linux/suse/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/macos/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/macos/arm64/lib/libltdl.7.dylib +0 -0
- mssql_python/libs/macos/arm64/lib/libmsodbcsql.18.dylib +0 -0
- mssql_python/libs/macos/arm64/lib/libodbc.2.dylib +0 -0
- mssql_python/libs/macos/arm64/lib/libodbcinst.2.dylib +0 -0
- mssql_python/libs/macos/arm64/share/doc/msodbcsql18/LICENSE.txt +101 -0
- mssql_python/libs/macos/arm64/share/doc/msodbcsql18/RELEASE_NOTES +465 -0
- mssql_python/libs/macos/arm64/share/msodbcsql18/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/macos/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/macos/x86_64/lib/libltdl.7.dylib +0 -0
- mssql_python/libs/macos/x86_64/lib/libmsodbcsql.18.dylib +0 -0
- mssql_python/libs/macos/x86_64/lib/libodbc.2.dylib +0 -0
- mssql_python/libs/macos/x86_64/lib/libodbcinst.2.dylib +0 -0
- mssql_python/libs/macos/x86_64/share/doc/msodbcsql18/LICENSE.txt +101 -0
- mssql_python/libs/macos/x86_64/share/doc/msodbcsql18/RELEASE_NOTES +465 -0
- mssql_python/libs/macos/x86_64/share/msodbcsql18/resources/en_US/msodbcsqlr18.rll +0 -0
- mssql_python/libs/windows/x64/1033/msodbcsqlr18.rll +0 -0
- mssql_python/libs/windows/x64/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
- mssql_python/libs/windows/x64/MICROSOFT_VISUAL_STUDIO_LICENSE.txt +54 -0
- mssql_python/libs/windows/x64/msodbcdiag18.dll +0 -0
- mssql_python/libs/windows/x64/msodbcsql18.dll +0 -0
- mssql_python/libs/windows/x64/mssql-auth.dll +0 -0
- mssql_python/logging.py +610 -0
- mssql_python/mssql_python.pyi +375 -0
- mssql_python/msvcp140.dll +0 -0
- mssql_python/pooling.py +125 -0
- mssql_python/row.py +194 -0
- mssql_python/type.py +143 -0
- mssql_python-1.0.0.dist-info/METADATA +76 -0
- mssql_python-1.0.0.dist-info/RECORD +73 -0
- mssql_python-1.0.0.dist-info/WHEEL +5 -0
- mssql_python-1.0.0.dist-info/licenses/LICENSE +47 -0
- mssql_python-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Copyright (c) Microsoft Corporation.
|
|
3
|
+
Licensed under the MIT license.
|
|
4
|
+
This module contains the constants used in the DDBC module.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from typing import Dict, Optional, Tuple
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ConstantsDDBC(Enum):
|
|
12
|
+
"""
|
|
13
|
+
Constants used in the DDBC module.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
SQL_HANDLE_ENV = 1
|
|
17
|
+
SQL_HANDLE_DBC = 2
|
|
18
|
+
SQL_HANDLE_STMT = 3
|
|
19
|
+
SQL_SUCCESS = 0
|
|
20
|
+
SQL_SUCCESS_WITH_INFO = 1
|
|
21
|
+
SQL_NO_DATA = 100
|
|
22
|
+
SQL_STILL_EXECUTING = 2
|
|
23
|
+
SQL_NTS = -3
|
|
24
|
+
SQL_DRIVER_NOPROMPT = 0
|
|
25
|
+
SQL_IS_INTEGER = -6
|
|
26
|
+
SQL_OV_DDBC3_80 = 380
|
|
27
|
+
SQL_ERROR = -1
|
|
28
|
+
SQL_INVALID_HANDLE = -2
|
|
29
|
+
SQL_NULL_HANDLE = 0
|
|
30
|
+
SQL_OV_DDBC3 = 3
|
|
31
|
+
SQL_COMMIT = 0
|
|
32
|
+
SQL_ROLLBACK = 1
|
|
33
|
+
SQL_SMALLINT = 5
|
|
34
|
+
SQL_CHAR = 1
|
|
35
|
+
SQL_WCHAR = -8
|
|
36
|
+
SQL_WVARCHAR = -9
|
|
37
|
+
SQL_BIT = -7
|
|
38
|
+
SQL_TINYINT = -6
|
|
39
|
+
SQL_BIGINT = -5
|
|
40
|
+
SQL_BINARY = -2
|
|
41
|
+
SQL_VARBINARY = -3
|
|
42
|
+
SQL_LONGVARBINARY = -4
|
|
43
|
+
SQL_LONGVARCHAR = -1
|
|
44
|
+
SQL_UNKNOWN_TYPE = 0
|
|
45
|
+
SQL_NUMERIC = 2
|
|
46
|
+
SQL_DECIMAL = 3
|
|
47
|
+
SQL_INTEGER = 4
|
|
48
|
+
SQL_FLOAT = 6
|
|
49
|
+
SQL_REAL = 7
|
|
50
|
+
SQL_DOUBLE = 8
|
|
51
|
+
SQL_DATETIME = 9
|
|
52
|
+
SQL_INTERVAL = 10
|
|
53
|
+
SQL_TIMESTAMP = 11
|
|
54
|
+
SQL_DATE = 9
|
|
55
|
+
SQL_TIME = 10
|
|
56
|
+
SQL_VARCHAR = 12
|
|
57
|
+
SQL_TYPE_DATE = 91
|
|
58
|
+
SQL_TYPE_TIME = 92
|
|
59
|
+
SQL_TYPE_TIMESTAMP = 93
|
|
60
|
+
SQL_TYPE_TIMESTAMP_WITH_TIMEZONE = 95
|
|
61
|
+
SQL_GUID = -11
|
|
62
|
+
SQL_XML = 241
|
|
63
|
+
SQL_SMALLDATETIME = 58
|
|
64
|
+
SQL_TIMESTAMPOFFSET = 43
|
|
65
|
+
SQL_DATETIME2 = 42
|
|
66
|
+
SQL_SMALLMONEY = 122
|
|
67
|
+
SQL_MONEY = 60
|
|
68
|
+
SQL_WLONGVARCHAR = -10
|
|
69
|
+
SQL_C_BIT = -7
|
|
70
|
+
SQL_C_TINYINT = -6
|
|
71
|
+
SQL_C_SBIGINT = -25
|
|
72
|
+
SQL_C_BINARY = -2
|
|
73
|
+
SQL_AUTOCOMMIT_ON = 1
|
|
74
|
+
SQL_AUTOCOMMIT_OFF = 0
|
|
75
|
+
SQL_C_VARBINARY = -3
|
|
76
|
+
SQL_C_LONGVARBINARY = -4
|
|
77
|
+
SQL_C_LONGVARCHAR = -1
|
|
78
|
+
SQL_C_CHAR = -8
|
|
79
|
+
SQL_C_NUMERIC = 2
|
|
80
|
+
SQL_C_DECIMAL = 3
|
|
81
|
+
SQL_C_LONG = 4
|
|
82
|
+
SQL_C_SHORT = 5
|
|
83
|
+
SQL_C_FLOAT = 7
|
|
84
|
+
SQL_C_DOUBLE = 8
|
|
85
|
+
SQL_C_TYPE_DATE = 91
|
|
86
|
+
SQL_C_TYPE_TIME = 92
|
|
87
|
+
SQL_C_TYPE_TIMESTAMP = 93
|
|
88
|
+
SQL_C_TYPE_TIMESTAMP_WITH_TIMEZONE = 95
|
|
89
|
+
SQL_C_GUID = -11
|
|
90
|
+
SQL_DESC_TYPE = 2
|
|
91
|
+
SQL_DESC_LENGTH = 3
|
|
92
|
+
SQL_DESC_NAME = 4
|
|
93
|
+
SQL_ROW_SUCCESS = 0
|
|
94
|
+
SQL_ROW_SUCCESS_WITH_INFO = 1
|
|
95
|
+
SQL_ROW_NOROW = 100
|
|
96
|
+
SQL_CURSOR_FORWARD_ONLY = 0
|
|
97
|
+
SQL_CURSOR_STATIC = 3
|
|
98
|
+
SQL_CURSOR_KEYSET_DRIVEN = 2
|
|
99
|
+
SQL_CURSOR_DYNAMIC = 3
|
|
100
|
+
SQL_NULL_DATA = -1
|
|
101
|
+
SQL_C_DEFAULT = 99
|
|
102
|
+
SQL_BIND_BY_COLUMN = 0
|
|
103
|
+
SQL_PARAM_INPUT = 1
|
|
104
|
+
SQL_PARAM_OUTPUT = 2
|
|
105
|
+
SQL_PARAM_INPUT_OUTPUT = 3
|
|
106
|
+
SQL_C_WCHAR = -8
|
|
107
|
+
SQL_NULLABLE = 1
|
|
108
|
+
SQL_MAX_NUMERIC_LEN = 16
|
|
109
|
+
|
|
110
|
+
SQL_FETCH_NEXT = 1
|
|
111
|
+
SQL_FETCH_FIRST = 2
|
|
112
|
+
SQL_FETCH_LAST = 3
|
|
113
|
+
SQL_FETCH_PRIOR = 4
|
|
114
|
+
SQL_FETCH_ABSOLUTE = 5
|
|
115
|
+
SQL_FETCH_RELATIVE = 6
|
|
116
|
+
SQL_FETCH_BOOKMARK = 8
|
|
117
|
+
SQL_DATETIMEOFFSET = -155
|
|
118
|
+
SQL_C_SS_TIMESTAMPOFFSET = 0x4001
|
|
119
|
+
SQL_SCOPE_CURROW = 0
|
|
120
|
+
SQL_BEST_ROWID = 1
|
|
121
|
+
SQL_ROWVER = 2
|
|
122
|
+
SQL_NO_NULLS = 0
|
|
123
|
+
SQL_NULLABLE_UNKNOWN = 2
|
|
124
|
+
SQL_INDEX_UNIQUE = 0
|
|
125
|
+
SQL_INDEX_ALL = 1
|
|
126
|
+
SQL_QUICK = 0
|
|
127
|
+
SQL_ENSURE = 1
|
|
128
|
+
|
|
129
|
+
# Connection Attribute Constants for set_attr()
|
|
130
|
+
SQL_ATTR_ACCESS_MODE = 101
|
|
131
|
+
SQL_ATTR_AUTOCOMMIT = 102
|
|
132
|
+
SQL_ATTR_CURSOR_TYPE = 6
|
|
133
|
+
SQL_ATTR_ROW_BIND_TYPE = 5
|
|
134
|
+
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE = 117
|
|
135
|
+
SQL_ATTR_ROW_ARRAY_SIZE = 27
|
|
136
|
+
SQL_ATTR_ASYNC_DBC_EVENT = 119
|
|
137
|
+
SQL_ATTR_DDBC_VERSION = 200
|
|
138
|
+
SQL_ATTR_ASYNC_STMT_EVENT = 29
|
|
139
|
+
SQL_ATTR_ROWS_FETCHED_PTR = 26
|
|
140
|
+
SQL_ATTR_ROW_STATUS_PTR = 25
|
|
141
|
+
SQL_ATTR_CONNECTION_TIMEOUT = 113
|
|
142
|
+
SQL_ATTR_CURRENT_CATALOG = 109
|
|
143
|
+
SQL_ATTR_LOGIN_TIMEOUT = 103
|
|
144
|
+
SQL_ATTR_ODBC_CURSORS = 110
|
|
145
|
+
SQL_ATTR_PACKET_SIZE = 112
|
|
146
|
+
SQL_ATTR_QUIET_MODE = 111
|
|
147
|
+
SQL_ATTR_TXN_ISOLATION = 108
|
|
148
|
+
SQL_ATTR_TRACE = 104
|
|
149
|
+
SQL_ATTR_TRACEFILE = 105
|
|
150
|
+
SQL_ATTR_TRANSLATE_LIB = 106
|
|
151
|
+
SQL_ATTR_TRANSLATE_OPTION = 107
|
|
152
|
+
SQL_ATTR_CONNECTION_POOLING = 201
|
|
153
|
+
SQL_ATTR_CP_MATCH = 202
|
|
154
|
+
SQL_ATTR_ASYNC_ENABLE = 4
|
|
155
|
+
SQL_ATTR_ENLIST_IN_DTC = 1207
|
|
156
|
+
SQL_ATTR_ENLIST_IN_XA = 1208
|
|
157
|
+
SQL_ATTR_CONNECTION_DEAD = 1209
|
|
158
|
+
SQL_ATTR_SERVER_NAME = 13
|
|
159
|
+
SQL_ATTR_RESET_CONNECTION = 116
|
|
160
|
+
|
|
161
|
+
# Transaction Isolation Level Constants
|
|
162
|
+
SQL_TXN_READ_UNCOMMITTED = 1
|
|
163
|
+
SQL_TXN_READ_COMMITTED = 2
|
|
164
|
+
SQL_TXN_REPEATABLE_READ = 4
|
|
165
|
+
SQL_TXN_SERIALIZABLE = 8
|
|
166
|
+
|
|
167
|
+
# Access Mode Constants
|
|
168
|
+
SQL_MODE_READ_WRITE = 0
|
|
169
|
+
SQL_MODE_READ_ONLY = 1
|
|
170
|
+
|
|
171
|
+
# Connection Dead Constants
|
|
172
|
+
SQL_CD_TRUE = 1
|
|
173
|
+
SQL_CD_FALSE = 0
|
|
174
|
+
|
|
175
|
+
# ODBC Cursors Constants
|
|
176
|
+
SQL_CUR_USE_IF_NEEDED = 0
|
|
177
|
+
SQL_CUR_USE_ODBC = 1
|
|
178
|
+
SQL_CUR_USE_DRIVER = 2
|
|
179
|
+
|
|
180
|
+
# Reset Connection Constants
|
|
181
|
+
SQL_RESET_CONNECTION_YES = 1
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class GetInfoConstants(Enum):
|
|
185
|
+
"""
|
|
186
|
+
These constants are used with various methods like getinfo().
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
# Driver and database information
|
|
190
|
+
SQL_DRIVER_NAME = 6
|
|
191
|
+
SQL_DRIVER_VER = 7
|
|
192
|
+
SQL_DRIVER_ODBC_VER = 77
|
|
193
|
+
SQL_DRIVER_HLIB = 76
|
|
194
|
+
SQL_DRIVER_HENV = 75
|
|
195
|
+
SQL_DRIVER_HDBC = 74
|
|
196
|
+
SQL_DATA_SOURCE_NAME = 2
|
|
197
|
+
SQL_DATABASE_NAME = 16
|
|
198
|
+
SQL_SERVER_NAME = 13
|
|
199
|
+
SQL_USER_NAME = 47
|
|
200
|
+
|
|
201
|
+
# SQL conformance and support
|
|
202
|
+
SQL_SQL_CONFORMANCE = 118
|
|
203
|
+
SQL_KEYWORDS = 89
|
|
204
|
+
SQL_IDENTIFIER_CASE = 28
|
|
205
|
+
SQL_IDENTIFIER_QUOTE_CHAR = 29
|
|
206
|
+
SQL_SPECIAL_CHARACTERS = 94
|
|
207
|
+
SQL_SQL92_ENTRY_SQL = 127
|
|
208
|
+
SQL_SQL92_INTERMEDIATE_SQL = 128
|
|
209
|
+
SQL_SQL92_FULL_SQL = 129
|
|
210
|
+
SQL_SUBQUERIES = 95
|
|
211
|
+
SQL_EXPRESSIONS_IN_ORDERBY = 27
|
|
212
|
+
SQL_CORRELATION_NAME = 74
|
|
213
|
+
SQL_SEARCH_PATTERN_ESCAPE = 14
|
|
214
|
+
|
|
215
|
+
# Catalog and schema support
|
|
216
|
+
SQL_CATALOG_TERM = 42
|
|
217
|
+
SQL_CATALOG_NAME_SEPARATOR = 41
|
|
218
|
+
SQL_SCHEMA_TERM = 39
|
|
219
|
+
SQL_TABLE_TERM = 45
|
|
220
|
+
SQL_PROCEDURES = 21
|
|
221
|
+
SQL_ACCESSIBLE_TABLES = 19
|
|
222
|
+
SQL_ACCESSIBLE_PROCEDURES = 20
|
|
223
|
+
SQL_CATALOG_NAME = 10002
|
|
224
|
+
SQL_CATALOG_USAGE = 92
|
|
225
|
+
SQL_SCHEMA_USAGE = 91
|
|
226
|
+
SQL_COLUMN_ALIAS = 87
|
|
227
|
+
SQL_DESCRIBE_PARAMETER = 10003
|
|
228
|
+
|
|
229
|
+
# Transaction support
|
|
230
|
+
SQL_TXN_CAPABLE = 46
|
|
231
|
+
SQL_TXN_ISOLATION_OPTION = 72
|
|
232
|
+
SQL_DEFAULT_TXN_ISOLATION = 26
|
|
233
|
+
SQL_MULTIPLE_ACTIVE_TXN = 37
|
|
234
|
+
SQL_TXN_ISOLATION_LEVEL = 108
|
|
235
|
+
|
|
236
|
+
# Data type support
|
|
237
|
+
SQL_NUMERIC_FUNCTIONS = 49
|
|
238
|
+
SQL_STRING_FUNCTIONS = 50
|
|
239
|
+
SQL_DATETIME_FUNCTIONS = 51
|
|
240
|
+
SQL_SYSTEM_FUNCTIONS = 58
|
|
241
|
+
SQL_CONVERT_FUNCTIONS = 48
|
|
242
|
+
SQL_LIKE_ESCAPE_CLAUSE = 113
|
|
243
|
+
|
|
244
|
+
# Numeric limits
|
|
245
|
+
SQL_MAX_COLUMN_NAME_LEN = 30
|
|
246
|
+
SQL_MAX_TABLE_NAME_LEN = 35
|
|
247
|
+
SQL_MAX_SCHEMA_NAME_LEN = 32
|
|
248
|
+
SQL_MAX_CATALOG_NAME_LEN = 34
|
|
249
|
+
SQL_MAX_IDENTIFIER_LEN = 10005
|
|
250
|
+
SQL_MAX_STATEMENT_LEN = 105
|
|
251
|
+
SQL_MAX_CHAR_LITERAL_LEN = 108
|
|
252
|
+
SQL_MAX_BINARY_LITERAL_LEN = 112
|
|
253
|
+
SQL_MAX_COLUMNS_IN_TABLE = 101
|
|
254
|
+
SQL_MAX_COLUMNS_IN_SELECT = 100
|
|
255
|
+
SQL_MAX_COLUMNS_IN_GROUP_BY = 97
|
|
256
|
+
SQL_MAX_COLUMNS_IN_ORDER_BY = 99
|
|
257
|
+
SQL_MAX_COLUMNS_IN_INDEX = 98
|
|
258
|
+
SQL_MAX_TABLES_IN_SELECT = 106
|
|
259
|
+
SQL_MAX_CONCURRENT_ACTIVITIES = 1
|
|
260
|
+
SQL_MAX_DRIVER_CONNECTIONS = 0
|
|
261
|
+
SQL_MAX_ROW_SIZE = 104
|
|
262
|
+
SQL_MAX_USER_NAME_LEN = 107
|
|
263
|
+
|
|
264
|
+
# Connection attributes
|
|
265
|
+
SQL_ACTIVE_CONNECTIONS = 0
|
|
266
|
+
SQL_ACTIVE_STATEMENTS = 1
|
|
267
|
+
SQL_DATA_SOURCE_READ_ONLY = 25
|
|
268
|
+
SQL_NEED_LONG_DATA_LEN = 111
|
|
269
|
+
SQL_GETDATA_EXTENSIONS = 81
|
|
270
|
+
|
|
271
|
+
# Result set and cursor attributes
|
|
272
|
+
SQL_CURSOR_COMMIT_BEHAVIOR = 23
|
|
273
|
+
SQL_CURSOR_ROLLBACK_BEHAVIOR = 24
|
|
274
|
+
SQL_CURSOR_SENSITIVITY = 10001
|
|
275
|
+
SQL_BOOKMARK_PERSISTENCE = 82
|
|
276
|
+
SQL_DYNAMIC_CURSOR_ATTRIBUTES1 = 144
|
|
277
|
+
SQL_DYNAMIC_CURSOR_ATTRIBUTES2 = 145
|
|
278
|
+
SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 = 146
|
|
279
|
+
SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 = 147
|
|
280
|
+
SQL_STATIC_CURSOR_ATTRIBUTES1 = 150
|
|
281
|
+
SQL_STATIC_CURSOR_ATTRIBUTES2 = 151
|
|
282
|
+
SQL_KEYSET_CURSOR_ATTRIBUTES1 = 148
|
|
283
|
+
SQL_KEYSET_CURSOR_ATTRIBUTES2 = 149
|
|
284
|
+
SQL_SCROLL_OPTIONS = 44
|
|
285
|
+
SQL_SCROLL_CONCURRENCY = 43
|
|
286
|
+
SQL_FETCH_DIRECTION = 8
|
|
287
|
+
SQL_ROWSET_SIZE = 9
|
|
288
|
+
SQL_CONCURRENCY = 7
|
|
289
|
+
SQL_ROW_NUMBER = 14
|
|
290
|
+
SQL_STATIC_SENSITIVITY = 83
|
|
291
|
+
SQL_BATCH_SUPPORT = 121
|
|
292
|
+
SQL_BATCH_ROW_COUNT = 120
|
|
293
|
+
SQL_PARAM_ARRAY_ROW_COUNTS = 153
|
|
294
|
+
SQL_PARAM_ARRAY_SELECTS = 154
|
|
295
|
+
SQL_PROCEDURE_TERM = 40
|
|
296
|
+
|
|
297
|
+
# Positioned statement support
|
|
298
|
+
SQL_POSITIONED_STATEMENTS = 80
|
|
299
|
+
|
|
300
|
+
# Other constants
|
|
301
|
+
SQL_GROUP_BY = 88
|
|
302
|
+
SQL_OJ_CAPABILITIES = 65
|
|
303
|
+
SQL_ORDER_BY_COLUMNS_IN_SELECT = 90
|
|
304
|
+
SQL_OUTER_JOINS = 38
|
|
305
|
+
SQL_QUOTED_IDENTIFIER_CASE = 93
|
|
306
|
+
SQL_CONCAT_NULL_BEHAVIOR = 22
|
|
307
|
+
SQL_NULL_COLLATION = 85
|
|
308
|
+
SQL_ALTER_TABLE = 86
|
|
309
|
+
SQL_UNION = 96
|
|
310
|
+
SQL_DDL_INDEX = 170
|
|
311
|
+
SQL_MULT_RESULT_SETS = 36
|
|
312
|
+
SQL_OWNER_USAGE = 91
|
|
313
|
+
SQL_QUALIFIER_USAGE = 92
|
|
314
|
+
SQL_TIMEDATE_ADD_INTERVALS = 109
|
|
315
|
+
SQL_TIMEDATE_DIFF_INTERVALS = 110
|
|
316
|
+
|
|
317
|
+
# Return values for some getinfo functions
|
|
318
|
+
SQL_IC_UPPER = 1
|
|
319
|
+
SQL_IC_LOWER = 2
|
|
320
|
+
SQL_IC_SENSITIVE = 3
|
|
321
|
+
SQL_IC_MIXED = 4
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
class AuthType(Enum):
|
|
325
|
+
"""Constants for authentication types"""
|
|
326
|
+
|
|
327
|
+
INTERACTIVE = "activedirectoryinteractive"
|
|
328
|
+
DEVICE_CODE = "activedirectorydevicecode"
|
|
329
|
+
DEFAULT = "activedirectorydefault"
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
class SQLTypes:
|
|
333
|
+
"""Constants for valid SQL data types to use with setinputsizes"""
|
|
334
|
+
|
|
335
|
+
@classmethod
|
|
336
|
+
def get_valid_types(cls) -> set:
|
|
337
|
+
"""Returns a set of all valid SQL type constants"""
|
|
338
|
+
|
|
339
|
+
return {
|
|
340
|
+
ConstantsDDBC.SQL_CHAR.value,
|
|
341
|
+
ConstantsDDBC.SQL_VARCHAR.value,
|
|
342
|
+
ConstantsDDBC.SQL_LONGVARCHAR.value,
|
|
343
|
+
ConstantsDDBC.SQL_WCHAR.value,
|
|
344
|
+
ConstantsDDBC.SQL_WVARCHAR.value,
|
|
345
|
+
ConstantsDDBC.SQL_WLONGVARCHAR.value,
|
|
346
|
+
ConstantsDDBC.SQL_DECIMAL.value,
|
|
347
|
+
ConstantsDDBC.SQL_NUMERIC.value,
|
|
348
|
+
ConstantsDDBC.SQL_BIT.value,
|
|
349
|
+
ConstantsDDBC.SQL_TINYINT.value,
|
|
350
|
+
ConstantsDDBC.SQL_SMALLINT.value,
|
|
351
|
+
ConstantsDDBC.SQL_INTEGER.value,
|
|
352
|
+
ConstantsDDBC.SQL_BIGINT.value,
|
|
353
|
+
ConstantsDDBC.SQL_REAL.value,
|
|
354
|
+
ConstantsDDBC.SQL_FLOAT.value,
|
|
355
|
+
ConstantsDDBC.SQL_DOUBLE.value,
|
|
356
|
+
ConstantsDDBC.SQL_BINARY.value,
|
|
357
|
+
ConstantsDDBC.SQL_VARBINARY.value,
|
|
358
|
+
ConstantsDDBC.SQL_LONGVARBINARY.value,
|
|
359
|
+
ConstantsDDBC.SQL_DATE.value,
|
|
360
|
+
ConstantsDDBC.SQL_TIME.value,
|
|
361
|
+
ConstantsDDBC.SQL_TIMESTAMP.value,
|
|
362
|
+
ConstantsDDBC.SQL_GUID.value,
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
# Could also add category methods for convenience
|
|
366
|
+
@classmethod
|
|
367
|
+
def get_string_types(cls) -> set:
|
|
368
|
+
"""Returns a set of string SQL type constants"""
|
|
369
|
+
|
|
370
|
+
return {
|
|
371
|
+
ConstantsDDBC.SQL_CHAR.value,
|
|
372
|
+
ConstantsDDBC.SQL_VARCHAR.value,
|
|
373
|
+
ConstantsDDBC.SQL_LONGVARCHAR.value,
|
|
374
|
+
ConstantsDDBC.SQL_WCHAR.value,
|
|
375
|
+
ConstantsDDBC.SQL_WVARCHAR.value,
|
|
376
|
+
ConstantsDDBC.SQL_WLONGVARCHAR.value,
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
@classmethod
|
|
380
|
+
def get_numeric_types(cls) -> set:
|
|
381
|
+
"""Returns a set of numeric SQL type constants"""
|
|
382
|
+
|
|
383
|
+
return {
|
|
384
|
+
ConstantsDDBC.SQL_DECIMAL.value,
|
|
385
|
+
ConstantsDDBC.SQL_NUMERIC.value,
|
|
386
|
+
ConstantsDDBC.SQL_BIT.value,
|
|
387
|
+
ConstantsDDBC.SQL_TINYINT.value,
|
|
388
|
+
ConstantsDDBC.SQL_SMALLINT.value,
|
|
389
|
+
ConstantsDDBC.SQL_INTEGER.value,
|
|
390
|
+
ConstantsDDBC.SQL_BIGINT.value,
|
|
391
|
+
ConstantsDDBC.SQL_REAL.value,
|
|
392
|
+
ConstantsDDBC.SQL_FLOAT.value,
|
|
393
|
+
ConstantsDDBC.SQL_DOUBLE.value,
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
class AttributeSetTime(Enum):
|
|
398
|
+
"""
|
|
399
|
+
Defines when connection attributes can be set in relation to connection establishment.
|
|
400
|
+
|
|
401
|
+
This enum is used to validate if a specific connection attribute can be set before
|
|
402
|
+
connection, after connection, or at either time.
|
|
403
|
+
"""
|
|
404
|
+
|
|
405
|
+
BEFORE_ONLY = 1 # Must be set before connection is established
|
|
406
|
+
AFTER_ONLY = 2 # Can only be set after connection is established
|
|
407
|
+
EITHER = 3 # Can be set either before or after connection
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
# Dictionary mapping attributes to their valid set times
|
|
411
|
+
ATTRIBUTE_SET_TIMING = {
|
|
412
|
+
# Must be set before connection
|
|
413
|
+
ConstantsDDBC.SQL_ATTR_LOGIN_TIMEOUT.value: AttributeSetTime.BEFORE_ONLY,
|
|
414
|
+
ConstantsDDBC.SQL_ATTR_ODBC_CURSORS.value: AttributeSetTime.BEFORE_ONLY,
|
|
415
|
+
ConstantsDDBC.SQL_ATTR_PACKET_SIZE.value: AttributeSetTime.BEFORE_ONLY,
|
|
416
|
+
# Can only be set after connection
|
|
417
|
+
ConstantsDDBC.SQL_ATTR_CONNECTION_DEAD.value: AttributeSetTime.AFTER_ONLY,
|
|
418
|
+
ConstantsDDBC.SQL_ATTR_ENLIST_IN_DTC.value: AttributeSetTime.AFTER_ONLY,
|
|
419
|
+
ConstantsDDBC.SQL_ATTR_TRANSLATE_LIB.value: AttributeSetTime.AFTER_ONLY,
|
|
420
|
+
ConstantsDDBC.SQL_ATTR_TRANSLATE_OPTION.value: AttributeSetTime.AFTER_ONLY,
|
|
421
|
+
# Can be set either before or after connection
|
|
422
|
+
ConstantsDDBC.SQL_ATTR_ACCESS_MODE.value: AttributeSetTime.EITHER,
|
|
423
|
+
ConstantsDDBC.SQL_ATTR_ASYNC_DBC_EVENT.value: AttributeSetTime.EITHER,
|
|
424
|
+
ConstantsDDBC.SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE.value: AttributeSetTime.EITHER,
|
|
425
|
+
ConstantsDDBC.SQL_ATTR_ASYNC_ENABLE.value: AttributeSetTime.EITHER,
|
|
426
|
+
ConstantsDDBC.SQL_ATTR_AUTOCOMMIT.value: AttributeSetTime.EITHER,
|
|
427
|
+
ConstantsDDBC.SQL_ATTR_CONNECTION_TIMEOUT.value: AttributeSetTime.EITHER,
|
|
428
|
+
ConstantsDDBC.SQL_ATTR_CURRENT_CATALOG.value: AttributeSetTime.EITHER,
|
|
429
|
+
ConstantsDDBC.SQL_ATTR_QUIET_MODE.value: AttributeSetTime.EITHER,
|
|
430
|
+
ConstantsDDBC.SQL_ATTR_TRACE.value: AttributeSetTime.EITHER,
|
|
431
|
+
ConstantsDDBC.SQL_ATTR_TRACEFILE.value: AttributeSetTime.EITHER,
|
|
432
|
+
ConstantsDDBC.SQL_ATTR_TXN_ISOLATION.value: AttributeSetTime.EITHER,
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
def get_attribute_set_timing(attribute):
|
|
437
|
+
"""
|
|
438
|
+
Get when an attribute can be set (before connection, after, or either).
|
|
439
|
+
|
|
440
|
+
Args:
|
|
441
|
+
attribute (int): The connection attribute (SQL_ATTR_*)
|
|
442
|
+
|
|
443
|
+
Returns:
|
|
444
|
+
AttributeSetTime: When the attribute can be set
|
|
445
|
+
"""
|
|
446
|
+
return ATTRIBUTE_SET_TIMING.get(attribute, AttributeSetTime.AFTER_ONLY)
|
|
447
|
+
|
|
448
|
+
_CONNECTION_STRING_DRIVER_KEY = 'Driver'
|
|
449
|
+
_CONNECTION_STRING_APP_KEY = 'APP'
|
|
450
|
+
|
|
451
|
+
# Reserved connection string parameters that are controlled by the driver
|
|
452
|
+
# and cannot be set by users
|
|
453
|
+
_RESERVED_PARAMETERS = (_CONNECTION_STRING_DRIVER_KEY, _CONNECTION_STRING_APP_KEY)
|
|
454
|
+
|
|
455
|
+
# Core connection parameters with synonym mapping
|
|
456
|
+
# Maps lowercase parameter names to their canonical form
|
|
457
|
+
# Based on ODBC Driver 18 for SQL Server supported parameters
|
|
458
|
+
# A new connection string key to be supported in Python, should be added
|
|
459
|
+
# to the dictionary below. the value is the canonical name used in the
|
|
460
|
+
# final connection string sent to ODBC driver.
|
|
461
|
+
# The left side is what Python connection string supports, the right side
|
|
462
|
+
# is the canonical ODBC key name.
|
|
463
|
+
_ALLOWED_CONNECTION_STRING_PARAMS = {
|
|
464
|
+
# Server identification - addr, address, and server are synonyms
|
|
465
|
+
'server': 'Server',
|
|
466
|
+
'address': 'Server',
|
|
467
|
+
'addr': 'Server',
|
|
468
|
+
|
|
469
|
+
# Authentication
|
|
470
|
+
'uid': 'UID',
|
|
471
|
+
'pwd': 'PWD',
|
|
472
|
+
'authentication': 'Authentication',
|
|
473
|
+
'trusted_connection': 'Trusted_Connection',
|
|
474
|
+
|
|
475
|
+
# Database
|
|
476
|
+
'database': 'Database',
|
|
477
|
+
|
|
478
|
+
# Driver (always controlled by mssql-python)
|
|
479
|
+
'driver': 'Driver',
|
|
480
|
+
|
|
481
|
+
# Application name (always controlled by mssql-python)
|
|
482
|
+
'app': 'APP',
|
|
483
|
+
|
|
484
|
+
# Encryption and Security
|
|
485
|
+
'encrypt': 'Encrypt',
|
|
486
|
+
'trustservercertificate': 'TrustServerCertificate',
|
|
487
|
+
'trust_server_certificate': 'TrustServerCertificate', # Snake_case synonym
|
|
488
|
+
'hostnameincertificate': 'HostnameInCertificate', # v18.0+
|
|
489
|
+
'servercertificate': 'ServerCertificate', # v18.1+
|
|
490
|
+
'serverspn': 'ServerSPN',
|
|
491
|
+
|
|
492
|
+
# Connection behavior
|
|
493
|
+
'multisubnetfailover': 'MultiSubnetFailover',
|
|
494
|
+
'applicationintent': 'ApplicationIntent',
|
|
495
|
+
'connectretrycount': 'ConnectRetryCount',
|
|
496
|
+
'connectretryinterval': 'ConnectRetryInterval',
|
|
497
|
+
|
|
498
|
+
# Keep-Alive (v17.4+)
|
|
499
|
+
'keepalive': 'KeepAlive',
|
|
500
|
+
'keepaliveinterval': 'KeepAliveInterval',
|
|
501
|
+
|
|
502
|
+
# IP Address Preference (v18.1+)
|
|
503
|
+
'ipaddresspreference': 'IpAddressPreference',
|
|
504
|
+
|
|
505
|
+
'packet size': 'PacketSize', # From the tests it looks like pyodbc users use Packet Size
|
|
506
|
+
# (with spaces) ODBC only honors "PacketSize" without spaces
|
|
507
|
+
# internally.
|
|
508
|
+
'packetsize': 'PacketSize',
|
|
509
|
+
}
|