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.
Files changed (73) hide show
  1. mssql_python/__init__.py +307 -0
  2. mssql_python/auth.py +222 -0
  3. mssql_python/connection.py +1493 -0
  4. mssql_python/connection_string_builder.py +113 -0
  5. mssql_python/connection_string_parser.py +381 -0
  6. mssql_python/constants.py +509 -0
  7. mssql_python/cursor.py +2601 -0
  8. mssql_python/db_connection.py +53 -0
  9. mssql_python/ddbc_bindings.cp314-amd64.pyd +0 -0
  10. mssql_python/ddbc_bindings.py +137 -0
  11. mssql_python/exceptions.py +574 -0
  12. mssql_python/helpers.py +357 -0
  13. mssql_python/libs/LICENSING +19 -0
  14. mssql_python/libs/linux/alpine/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  15. mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  16. mssql_python/libs/linux/alpine/arm64/lib/libodbcinst.so.2 +0 -0
  17. mssql_python/libs/linux/alpine/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  18. mssql_python/libs/linux/alpine/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  19. mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  20. mssql_python/libs/linux/alpine/x86_64/lib/libodbcinst.so.2 +0 -0
  21. mssql_python/libs/linux/alpine/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  22. mssql_python/libs/linux/debian_ubuntu/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  23. mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  24. mssql_python/libs/linux/debian_ubuntu/arm64/lib/libodbcinst.so.2 +0 -0
  25. mssql_python/libs/linux/debian_ubuntu/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  26. mssql_python/libs/linux/debian_ubuntu/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  27. mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  28. mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libodbcinst.so.2 +0 -0
  29. mssql_python/libs/linux/debian_ubuntu/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  30. mssql_python/libs/linux/rhel/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  31. mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  32. mssql_python/libs/linux/rhel/arm64/lib/libodbcinst.so.2 +0 -0
  33. mssql_python/libs/linux/rhel/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  34. mssql_python/libs/linux/rhel/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  35. mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  36. mssql_python/libs/linux/rhel/x86_64/lib/libodbcinst.so.2 +0 -0
  37. mssql_python/libs/linux/rhel/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  38. mssql_python/libs/linux/suse/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  39. mssql_python/libs/linux/suse/x86_64/lib/libodbcinst.so.2 +0 -0
  40. mssql_python/libs/linux/suse/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  41. mssql_python/libs/macos/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  42. mssql_python/libs/macos/arm64/lib/libltdl.7.dylib +0 -0
  43. mssql_python/libs/macos/arm64/lib/libmsodbcsql.18.dylib +0 -0
  44. mssql_python/libs/macos/arm64/lib/libodbc.2.dylib +0 -0
  45. mssql_python/libs/macos/arm64/lib/libodbcinst.2.dylib +0 -0
  46. mssql_python/libs/macos/arm64/share/doc/msodbcsql18/LICENSE.txt +101 -0
  47. mssql_python/libs/macos/arm64/share/doc/msodbcsql18/RELEASE_NOTES +465 -0
  48. mssql_python/libs/macos/arm64/share/msodbcsql18/resources/en_US/msodbcsqlr18.rll +0 -0
  49. mssql_python/libs/macos/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  50. mssql_python/libs/macos/x86_64/lib/libltdl.7.dylib +0 -0
  51. mssql_python/libs/macos/x86_64/lib/libmsodbcsql.18.dylib +0 -0
  52. mssql_python/libs/macos/x86_64/lib/libodbc.2.dylib +0 -0
  53. mssql_python/libs/macos/x86_64/lib/libodbcinst.2.dylib +0 -0
  54. mssql_python/libs/macos/x86_64/share/doc/msodbcsql18/LICENSE.txt +101 -0
  55. mssql_python/libs/macos/x86_64/share/doc/msodbcsql18/RELEASE_NOTES +465 -0
  56. mssql_python/libs/macos/x86_64/share/msodbcsql18/resources/en_US/msodbcsqlr18.rll +0 -0
  57. mssql_python/libs/windows/x64/1033/msodbcsqlr18.rll +0 -0
  58. mssql_python/libs/windows/x64/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  59. mssql_python/libs/windows/x64/MICROSOFT_VISUAL_STUDIO_LICENSE.txt +54 -0
  60. mssql_python/libs/windows/x64/msodbcdiag18.dll +0 -0
  61. mssql_python/libs/windows/x64/msodbcsql18.dll +0 -0
  62. mssql_python/libs/windows/x64/mssql-auth.dll +0 -0
  63. mssql_python/logging.py +610 -0
  64. mssql_python/mssql_python.pyi +375 -0
  65. mssql_python/msvcp140.dll +0 -0
  66. mssql_python/pooling.py +125 -0
  67. mssql_python/row.py +194 -0
  68. mssql_python/type.py +143 -0
  69. mssql_python-1.0.0.dist-info/METADATA +76 -0
  70. mssql_python-1.0.0.dist-info/RECORD +73 -0
  71. mssql_python-1.0.0.dist-info/WHEEL +5 -0
  72. mssql_python-1.0.0.dist-info/licenses/LICENSE +47 -0
  73. 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
+ }