mssql-python 1.7.0__cp310-cp310-macosx_15_0_universal2.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 (87) hide show
  1. mssql_py_core/__init__.py +5 -0
  2. mssql_py_core/mssql_py_core.cpython-310-darwin.so +0 -0
  3. mssql_python/__init__.py +600 -0
  4. mssql_python/auth.py +329 -0
  5. mssql_python/connection.py +1701 -0
  6. mssql_python/connection_string_builder.py +114 -0
  7. mssql_python/connection_string_parser.py +424 -0
  8. mssql_python/constants.py +625 -0
  9. mssql_python/cursor.py +3394 -0
  10. mssql_python/db_connection.py +63 -0
  11. mssql_python/ddbc_bindings.cp310-universal2.so +0 -0
  12. mssql_python/ddbc_bindings.py +136 -0
  13. mssql_python/decimal_config.py +114 -0
  14. mssql_python/exceptions.py +568 -0
  15. mssql_python/helpers.py +385 -0
  16. mssql_python/libs/LICENSING +19 -0
  17. mssql_python/libs/linux/alpine/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  18. mssql_python/libs/linux/alpine/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  19. mssql_python/libs/linux/alpine/arm64/lib/libodbcinst.so.2 +0 -0
  20. mssql_python/libs/linux/alpine/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  21. mssql_python/libs/linux/alpine/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  22. mssql_python/libs/linux/alpine/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  23. mssql_python/libs/linux/alpine/x86_64/lib/libodbcinst.so.2 +0 -0
  24. mssql_python/libs/linux/alpine/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  25. mssql_python/libs/linux/debian_ubuntu/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  26. mssql_python/libs/linux/debian_ubuntu/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  27. mssql_python/libs/linux/debian_ubuntu/arm64/lib/libodbcinst.so.2 +0 -0
  28. mssql_python/libs/linux/debian_ubuntu/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  29. mssql_python/libs/linux/debian_ubuntu/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  30. mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  31. mssql_python/libs/linux/debian_ubuntu/x86_64/lib/libodbcinst.so.2 +0 -0
  32. mssql_python/libs/linux/debian_ubuntu/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  33. mssql_python/libs/linux/rhel/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  34. mssql_python/libs/linux/rhel/arm64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  35. mssql_python/libs/linux/rhel/arm64/lib/libodbcinst.so.2 +0 -0
  36. mssql_python/libs/linux/rhel/arm64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  37. mssql_python/libs/linux/rhel/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  38. mssql_python/libs/linux/rhel/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  39. mssql_python/libs/linux/rhel/x86_64/lib/libodbcinst.so.2 +0 -0
  40. mssql_python/libs/linux/rhel/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  41. mssql_python/libs/linux/suse/x86_64/lib/libmsodbcsql-18.5.so.1.1 +0 -0
  42. mssql_python/libs/linux/suse/x86_64/lib/libodbcinst.so.2 +0 -0
  43. mssql_python/libs/linux/suse/x86_64/share/resources/en_US/msodbcsqlr18.rll +0 -0
  44. mssql_python/libs/macos/arm64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  45. mssql_python/libs/macos/arm64/lib/libltdl.7.dylib +0 -0
  46. mssql_python/libs/macos/arm64/lib/libmsodbcsql.18.dylib +0 -0
  47. mssql_python/libs/macos/arm64/lib/libodbc.2.dylib +0 -0
  48. mssql_python/libs/macos/arm64/lib/libodbcinst.2.dylib +0 -0
  49. mssql_python/libs/macos/arm64/share/doc/msodbcsql18/LICENSE.txt +101 -0
  50. mssql_python/libs/macos/arm64/share/doc/msodbcsql18/RELEASE_NOTES +465 -0
  51. mssql_python/libs/macos/arm64/share/msodbcsql18/resources/en_US/msodbcsqlr18.rll +0 -0
  52. mssql_python/libs/macos/x86_64/lib/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  53. mssql_python/libs/macos/x86_64/lib/libltdl.7.dylib +0 -0
  54. mssql_python/libs/macos/x86_64/lib/libmsodbcsql.18.dylib +0 -0
  55. mssql_python/libs/macos/x86_64/lib/libodbc.2.dylib +0 -0
  56. mssql_python/libs/macos/x86_64/lib/libodbcinst.2.dylib +0 -0
  57. mssql_python/libs/macos/x86_64/share/doc/msodbcsql18/LICENSE.txt +101 -0
  58. mssql_python/libs/macos/x86_64/share/doc/msodbcsql18/RELEASE_NOTES +465 -0
  59. mssql_python/libs/macos/x86_64/share/msodbcsql18/resources/en_US/msodbcsqlr18.rll +0 -0
  60. mssql_python/libs/windows/arm64/1033/msodbcsqlr18.rll +0 -0
  61. mssql_python/libs/windows/arm64/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  62. mssql_python/libs/windows/arm64/msodbcdiag18.dll +0 -0
  63. mssql_python/libs/windows/arm64/msodbcsql18.dll +0 -0
  64. mssql_python/libs/windows/arm64/mssql-auth.dll +0 -0
  65. mssql_python/libs/windows/x64/1033/msodbcsqlr18.rll +0 -0
  66. mssql_python/libs/windows/x64/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  67. mssql_python/libs/windows/x64/MICROSOFT_VISUAL_STUDIO_LICENSE.txt +54 -0
  68. mssql_python/libs/windows/x64/msodbcdiag18.dll +0 -0
  69. mssql_python/libs/windows/x64/msodbcsql18.dll +0 -0
  70. mssql_python/libs/windows/x64/mssql-auth.dll +0 -0
  71. mssql_python/libs/windows/x86/1033/msodbcsqlr18.rll +0 -0
  72. mssql_python/libs/windows/x86/MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt +76 -0
  73. mssql_python/libs/windows/x86/msodbcdiag18.dll +0 -0
  74. mssql_python/libs/windows/x86/msodbcsql18.dll +0 -0
  75. mssql_python/libs/windows/x86/mssql-auth.dll +0 -0
  76. mssql_python/logging.py +714 -0
  77. mssql_python/mssql_python.pyi +363 -0
  78. mssql_python/parameter_helper.py +488 -0
  79. mssql_python/pooling.py +139 -0
  80. mssql_python/py.typed +1 -0
  81. mssql_python/row.py +230 -0
  82. mssql_python/type.py +154 -0
  83. mssql_python-1.7.0.dist-info/METADATA +104 -0
  84. mssql_python-1.7.0.dist-info/RECORD +87 -0
  85. mssql_python-1.7.0.dist-info/WHEEL +5 -0
  86. mssql_python-1.7.0.dist-info/licenses/LICENSE +47 -0
  87. mssql_python-1.7.0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,5 @@
1
+ from .mssql_py_core import *
2
+
3
+ __doc__ = mssql_py_core.__doc__
4
+ if hasattr(mssql_py_core, "__all__"):
5
+ __all__ = mssql_py_core.__all__
@@ -0,0 +1,600 @@
1
+ """
2
+ Copyright (c) Microsoft Corporation.
3
+ Licensed under the MIT license.
4
+ This module initializes the mssql_python package.
5
+ """
6
+
7
+ import atexit
8
+ import sys
9
+ import threading
10
+ import types
11
+ import weakref
12
+
13
+ # Import settings from helpers module
14
+ from .helpers import Settings, get_settings, _settings, _settings_lock
15
+
16
+ # Driver version
17
+ __version__ = "1.7.0"
18
+
19
+ # Exceptions
20
+ # https://www.python.org/dev/peps/pep-0249/#exceptions
21
+
22
+ # Import necessary modules
23
+ from .exceptions import (
24
+ Warning,
25
+ Error,
26
+ InterfaceError,
27
+ DatabaseError,
28
+ DataError,
29
+ OperationalError,
30
+ IntegrityError,
31
+ InternalError,
32
+ ProgrammingError,
33
+ NotSupportedError,
34
+ ConnectionStringParseError,
35
+ )
36
+
37
+ # Type Objects
38
+ from .type import (
39
+ Date,
40
+ Time,
41
+ Timestamp,
42
+ DateFromTicks,
43
+ TimeFromTicks,
44
+ TimestampFromTicks,
45
+ Binary,
46
+ STRING,
47
+ BINARY,
48
+ NUMBER,
49
+ DATETIME,
50
+ ROWID,
51
+ )
52
+
53
+ # Connection Objects
54
+ from .db_connection import connect, Connection
55
+
56
+ # Connection String Handling
57
+ from .connection_string_parser import _ConnectionStringParser
58
+ from .connection_string_builder import _ConnectionStringBuilder
59
+
60
+ # Cursor Objects
61
+ from .cursor import Cursor
62
+
63
+ # Row Objects
64
+ from .row import Row
65
+
66
+ # Logging Configuration (Simplified single-level DEBUG system)
67
+ from .logging import logger, setup_logging, driver_logger
68
+
69
+ # Constants
70
+ from .constants import ConstantsDDBC, GetInfoConstants, get_info_constants
71
+
72
+ # Pooling
73
+ from .pooling import PoolingManager
74
+
75
+ # Global registry for tracking active connections (using weak references)
76
+ _active_connections = weakref.WeakSet()
77
+ _connections_lock = threading.Lock()
78
+
79
+
80
+ def _register_connection(conn):
81
+ """Register a connection for cleanup before shutdown."""
82
+ with _connections_lock:
83
+ _active_connections.add(conn)
84
+
85
+
86
+ def _cleanup_connections():
87
+ """
88
+ Cleanup function called by atexit to close all active connections.
89
+
90
+ This prevents resource leaks during interpreter shutdown by ensuring
91
+ all ODBC handles are freed in the correct order before Python finalizes.
92
+ """
93
+ # Make a copy of the connections to avoid modification during iteration
94
+ with _connections_lock:
95
+ connections_to_close = list(_active_connections)
96
+
97
+ for conn in connections_to_close:
98
+ try:
99
+ # Check if connection is still valid and not closed
100
+ if hasattr(conn, "_closed") and not conn._closed:
101
+ # Close will handle both cursors and the connection
102
+ conn.close()
103
+ except Exception as e:
104
+ # Log errors during shutdown cleanup for debugging
105
+ # We're prioritizing crash prevention over error propagation
106
+ try:
107
+ driver_logger.error(
108
+ f"Error during connection cleanup at shutdown: {type(e).__name__}: {e}"
109
+ )
110
+ except Exception:
111
+ # If logging fails during shutdown, silently ignore
112
+ pass
113
+
114
+
115
+ # Register cleanup function to run before Python exits
116
+ atexit.register(_cleanup_connections)
117
+
118
+ # GLOBALS
119
+ # Read-Only
120
+ apilevel: str = "2.0"
121
+ paramstyle: str = "pyformat"
122
+ threadsafety: int = 1
123
+
124
+ # Create decimal separator control functions bound to our settings
125
+ from .decimal_config import create_decimal_separator_functions
126
+
127
+ setDecimalSeparator, getDecimalSeparator = create_decimal_separator_functions(_settings)
128
+
129
+ # Import module-level constants from constants module
130
+ from .constants import ( # noqa: F401
131
+ # Enum classes
132
+ AuthType,
133
+ SQLTypes,
134
+ # Helper function
135
+ get_info_constants,
136
+ # SQL Type constants (from ConstantsDDBC)
137
+ SQL_CHAR,
138
+ SQL_VARCHAR,
139
+ SQL_LONGVARCHAR,
140
+ SQL_WCHAR,
141
+ SQL_WVARCHAR,
142
+ SQL_WLONGVARCHAR,
143
+ SQL_DECIMAL,
144
+ SQL_NUMERIC,
145
+ SQL_BIT,
146
+ SQL_TINYINT,
147
+ SQL_SMALLINT,
148
+ SQL_INTEGER,
149
+ SQL_BIGINT,
150
+ SQL_REAL,
151
+ SQL_FLOAT,
152
+ SQL_DOUBLE,
153
+ SQL_BINARY,
154
+ SQL_VARBINARY,
155
+ SQL_LONGVARBINARY,
156
+ SQL_DATE,
157
+ SQL_TIME,
158
+ SQL_TIMESTAMP,
159
+ SQL_TYPE_DATE,
160
+ SQL_TYPE_TIME,
161
+ SQL_TYPE_TIMESTAMP,
162
+ SQL_GUID,
163
+ SQL_XML,
164
+ # Connection attribute constants
165
+ SQL_ATTR_ACCESS_MODE,
166
+ SQL_ATTR_CONNECTION_TIMEOUT,
167
+ SQL_ATTR_CURRENT_CATALOG,
168
+ SQL_ATTR_LOGIN_TIMEOUT,
169
+ SQL_ATTR_PACKET_SIZE,
170
+ SQL_ATTR_TXN_ISOLATION,
171
+ # Transaction isolation levels
172
+ SQL_TXN_READ_UNCOMMITTED,
173
+ SQL_TXN_READ_COMMITTED,
174
+ SQL_TXN_REPEATABLE_READ,
175
+ SQL_TXN_SERIALIZABLE,
176
+ # Access modes
177
+ SQL_MODE_READ_WRITE,
178
+ SQL_MODE_READ_ONLY,
179
+ # Special constants
180
+ SQL_WMETADATA,
181
+ # GetInfoConstants (all exported as module-level constants)
182
+ SQL_DRIVER_NAME,
183
+ SQL_DRIVER_VER,
184
+ SQL_DRIVER_ODBC_VER,
185
+ SQL_DRIVER_HLIB,
186
+ SQL_DRIVER_HENV,
187
+ SQL_DRIVER_HDBC,
188
+ SQL_DATA_SOURCE_NAME,
189
+ SQL_DATABASE_NAME,
190
+ SQL_SERVER_NAME,
191
+ SQL_USER_NAME,
192
+ SQL_SQL_CONFORMANCE,
193
+ SQL_KEYWORDS,
194
+ SQL_IDENTIFIER_CASE,
195
+ SQL_IDENTIFIER_QUOTE_CHAR,
196
+ SQL_SPECIAL_CHARACTERS,
197
+ SQL_SQL92_ENTRY_SQL,
198
+ SQL_SQL92_INTERMEDIATE_SQL,
199
+ SQL_SQL92_FULL_SQL,
200
+ SQL_SUBQUERIES,
201
+ SQL_EXPRESSIONS_IN_ORDERBY,
202
+ SQL_CORRELATION_NAME,
203
+ SQL_SEARCH_PATTERN_ESCAPE,
204
+ SQL_CATALOG_TERM,
205
+ SQL_CATALOG_NAME_SEPARATOR,
206
+ SQL_SCHEMA_TERM,
207
+ SQL_TABLE_TERM,
208
+ SQL_PROCEDURES,
209
+ SQL_ACCESSIBLE_TABLES,
210
+ SQL_ACCESSIBLE_PROCEDURES,
211
+ SQL_CATALOG_NAME,
212
+ SQL_CATALOG_USAGE,
213
+ SQL_SCHEMA_USAGE,
214
+ SQL_COLUMN_ALIAS,
215
+ SQL_DESCRIBE_PARAMETER,
216
+ SQL_TXN_CAPABLE,
217
+ SQL_TXN_ISOLATION_OPTION,
218
+ SQL_DEFAULT_TXN_ISOLATION,
219
+ SQL_MULTIPLE_ACTIVE_TXN,
220
+ SQL_TXN_ISOLATION_LEVEL,
221
+ SQL_NUMERIC_FUNCTIONS,
222
+ SQL_STRING_FUNCTIONS,
223
+ SQL_DATETIME_FUNCTIONS,
224
+ SQL_SYSTEM_FUNCTIONS,
225
+ SQL_CONVERT_FUNCTIONS,
226
+ SQL_LIKE_ESCAPE_CLAUSE,
227
+ SQL_MAX_COLUMN_NAME_LEN,
228
+ SQL_MAX_TABLE_NAME_LEN,
229
+ SQL_MAX_SCHEMA_NAME_LEN,
230
+ SQL_MAX_CATALOG_NAME_LEN,
231
+ SQL_MAX_IDENTIFIER_LEN,
232
+ SQL_MAX_STATEMENT_LEN,
233
+ SQL_MAX_CHAR_LITERAL_LEN,
234
+ SQL_MAX_BINARY_LITERAL_LEN,
235
+ SQL_MAX_COLUMNS_IN_TABLE,
236
+ SQL_MAX_COLUMNS_IN_SELECT,
237
+ SQL_MAX_COLUMNS_IN_GROUP_BY,
238
+ SQL_MAX_COLUMNS_IN_ORDER_BY,
239
+ SQL_MAX_COLUMNS_IN_INDEX,
240
+ SQL_MAX_TABLES_IN_SELECT,
241
+ SQL_MAX_CONCURRENT_ACTIVITIES,
242
+ SQL_MAX_DRIVER_CONNECTIONS,
243
+ SQL_MAX_ROW_SIZE,
244
+ SQL_MAX_USER_NAME_LEN,
245
+ SQL_ACTIVE_CONNECTIONS,
246
+ SQL_ACTIVE_STATEMENTS,
247
+ SQL_DATA_SOURCE_READ_ONLY,
248
+ SQL_NEED_LONG_DATA_LEN,
249
+ SQL_GETDATA_EXTENSIONS,
250
+ SQL_CURSOR_COMMIT_BEHAVIOR,
251
+ SQL_CURSOR_ROLLBACK_BEHAVIOR,
252
+ SQL_CURSOR_SENSITIVITY,
253
+ SQL_BOOKMARK_PERSISTENCE,
254
+ SQL_DYNAMIC_CURSOR_ATTRIBUTES1,
255
+ SQL_DYNAMIC_CURSOR_ATTRIBUTES2,
256
+ SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1,
257
+ SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2,
258
+ SQL_STATIC_CURSOR_ATTRIBUTES1,
259
+ SQL_STATIC_CURSOR_ATTRIBUTES2,
260
+ SQL_KEYSET_CURSOR_ATTRIBUTES1,
261
+ SQL_KEYSET_CURSOR_ATTRIBUTES2,
262
+ SQL_SCROLL_OPTIONS,
263
+ SQL_SCROLL_CONCURRENCY,
264
+ SQL_FETCH_DIRECTION,
265
+ SQL_ROWSET_SIZE,
266
+ SQL_CONCURRENCY,
267
+ SQL_ROW_NUMBER,
268
+ SQL_STATIC_SENSITIVITY,
269
+ SQL_BATCH_SUPPORT,
270
+ SQL_BATCH_ROW_COUNT,
271
+ SQL_PARAM_ARRAY_ROW_COUNTS,
272
+ SQL_PARAM_ARRAY_SELECTS,
273
+ SQL_PROCEDURE_TERM,
274
+ SQL_POSITIONED_STATEMENTS,
275
+ SQL_GROUP_BY,
276
+ SQL_OJ_CAPABILITIES,
277
+ SQL_ORDER_BY_COLUMNS_IN_SELECT,
278
+ SQL_OUTER_JOINS,
279
+ SQL_QUOTED_IDENTIFIER_CASE,
280
+ SQL_CONCAT_NULL_BEHAVIOR,
281
+ SQL_NULL_COLLATION,
282
+ SQL_ALTER_TABLE,
283
+ SQL_UNION,
284
+ SQL_DDL_INDEX,
285
+ SQL_MULT_RESULT_SETS,
286
+ SQL_OWNER_USAGE,
287
+ SQL_QUALIFIER_USAGE,
288
+ SQL_TIMEDATE_ADD_INTERVALS,
289
+ SQL_TIMEDATE_DIFF_INTERVALS,
290
+ SQL_IC_UPPER,
291
+ SQL_IC_LOWER,
292
+ SQL_IC_SENSITIVE,
293
+ SQL_IC_MIXED,
294
+ )
295
+
296
+ __all__ = [
297
+ # Exception classes
298
+ "Warning",
299
+ "Error",
300
+ "InterfaceError",
301
+ "DatabaseError",
302
+ "DataError",
303
+ "OperationalError",
304
+ "IntegrityError",
305
+ "InternalError",
306
+ "ProgrammingError",
307
+ "NotSupportedError",
308
+ "ConnectionStringParseError",
309
+ # Type objects and functions
310
+ "Date",
311
+ "Time",
312
+ "Timestamp",
313
+ "DateFromTicks",
314
+ "TimeFromTicks",
315
+ "TimestampFromTicks",
316
+ "Binary",
317
+ "STRING",
318
+ "BINARY",
319
+ "NUMBER",
320
+ "DATETIME",
321
+ "ROWID",
322
+ # Connection and cursor classes
323
+ "connect",
324
+ "Connection",
325
+ "Cursor",
326
+ "Row",
327
+ # Settings
328
+ "Settings",
329
+ "get_settings",
330
+ # Logging
331
+ "logger",
332
+ "setup_logging",
333
+ "driver_logger",
334
+ # Decimal functions
335
+ "setDecimalSeparator",
336
+ "getDecimalSeparator",
337
+ # Pooling
338
+ "pooling",
339
+ "PoolingManager",
340
+ # Constants - Enum classes
341
+ "AuthType",
342
+ "SQLTypes",
343
+ "get_info_constants",
344
+ # SQL Type constants
345
+ "SQL_CHAR",
346
+ "SQL_VARCHAR",
347
+ "SQL_LONGVARCHAR",
348
+ "SQL_WCHAR",
349
+ "SQL_WVARCHAR",
350
+ "SQL_WLONGVARCHAR",
351
+ "SQL_DECIMAL",
352
+ "SQL_NUMERIC",
353
+ "SQL_BIT",
354
+ "SQL_TINYINT",
355
+ "SQL_SMALLINT",
356
+ "SQL_INTEGER",
357
+ "SQL_BIGINT",
358
+ "SQL_REAL",
359
+ "SQL_FLOAT",
360
+ "SQL_DOUBLE",
361
+ "SQL_BINARY",
362
+ "SQL_VARBINARY",
363
+ "SQL_LONGVARBINARY",
364
+ "SQL_DATE",
365
+ "SQL_TIME",
366
+ "SQL_TIMESTAMP",
367
+ "SQL_TYPE_DATE",
368
+ "SQL_TYPE_TIME",
369
+ "SQL_TYPE_TIMESTAMP",
370
+ "SQL_GUID",
371
+ "SQL_XML",
372
+ # Connection attribute constants
373
+ "SQL_ATTR_ACCESS_MODE",
374
+ "SQL_ATTR_CONNECTION_TIMEOUT",
375
+ "SQL_ATTR_CURRENT_CATALOG",
376
+ "SQL_ATTR_LOGIN_TIMEOUT",
377
+ "SQL_ATTR_PACKET_SIZE",
378
+ "SQL_ATTR_TXN_ISOLATION",
379
+ # Transaction isolation levels
380
+ "SQL_TXN_READ_UNCOMMITTED",
381
+ "SQL_TXN_READ_COMMITTED",
382
+ "SQL_TXN_REPEATABLE_READ",
383
+ "SQL_TXN_SERIALIZABLE",
384
+ # Access modes
385
+ "SQL_MODE_READ_WRITE",
386
+ "SQL_MODE_READ_ONLY",
387
+ # Special constants
388
+ "SQL_WMETADATA",
389
+ # GetInfo constants
390
+ "SQL_DRIVER_NAME",
391
+ "SQL_DRIVER_VER",
392
+ "SQL_DRIVER_ODBC_VER",
393
+ "SQL_DRIVER_HLIB",
394
+ "SQL_DRIVER_HENV",
395
+ "SQL_DRIVER_HDBC",
396
+ "SQL_DATA_SOURCE_NAME",
397
+ "SQL_DATABASE_NAME",
398
+ "SQL_SERVER_NAME",
399
+ "SQL_USER_NAME",
400
+ "SQL_SQL_CONFORMANCE",
401
+ "SQL_KEYWORDS",
402
+ "SQL_IDENTIFIER_CASE",
403
+ "SQL_IDENTIFIER_QUOTE_CHAR",
404
+ "SQL_SPECIAL_CHARACTERS",
405
+ "SQL_SQL92_ENTRY_SQL",
406
+ "SQL_SQL92_INTERMEDIATE_SQL",
407
+ "SQL_SQL92_FULL_SQL",
408
+ "SQL_SUBQUERIES",
409
+ "SQL_EXPRESSIONS_IN_ORDERBY",
410
+ "SQL_CORRELATION_NAME",
411
+ "SQL_SEARCH_PATTERN_ESCAPE",
412
+ "SQL_CATALOG_TERM",
413
+ "SQL_CATALOG_NAME_SEPARATOR",
414
+ "SQL_SCHEMA_TERM",
415
+ "SQL_TABLE_TERM",
416
+ "SQL_PROCEDURES",
417
+ "SQL_ACCESSIBLE_TABLES",
418
+ "SQL_ACCESSIBLE_PROCEDURES",
419
+ "SQL_CATALOG_NAME",
420
+ "SQL_CATALOG_USAGE",
421
+ "SQL_SCHEMA_USAGE",
422
+ "SQL_COLUMN_ALIAS",
423
+ "SQL_DESCRIBE_PARAMETER",
424
+ "SQL_TXN_CAPABLE",
425
+ "SQL_TXN_ISOLATION_OPTION",
426
+ "SQL_DEFAULT_TXN_ISOLATION",
427
+ "SQL_MULTIPLE_ACTIVE_TXN",
428
+ "SQL_TXN_ISOLATION_LEVEL",
429
+ "SQL_NUMERIC_FUNCTIONS",
430
+ "SQL_STRING_FUNCTIONS",
431
+ "SQL_DATETIME_FUNCTIONS",
432
+ "SQL_SYSTEM_FUNCTIONS",
433
+ "SQL_CONVERT_FUNCTIONS",
434
+ "SQL_LIKE_ESCAPE_CLAUSE",
435
+ "SQL_MAX_COLUMN_NAME_LEN",
436
+ "SQL_MAX_TABLE_NAME_LEN",
437
+ "SQL_MAX_SCHEMA_NAME_LEN",
438
+ "SQL_MAX_CATALOG_NAME_LEN",
439
+ "SQL_MAX_IDENTIFIER_LEN",
440
+ "SQL_MAX_STATEMENT_LEN",
441
+ "SQL_MAX_CHAR_LITERAL_LEN",
442
+ "SQL_MAX_BINARY_LITERAL_LEN",
443
+ "SQL_MAX_COLUMNS_IN_TABLE",
444
+ "SQL_MAX_COLUMNS_IN_SELECT",
445
+ "SQL_MAX_COLUMNS_IN_GROUP_BY",
446
+ "SQL_MAX_COLUMNS_IN_ORDER_BY",
447
+ "SQL_MAX_COLUMNS_IN_INDEX",
448
+ "SQL_MAX_TABLES_IN_SELECT",
449
+ "SQL_MAX_CONCURRENT_ACTIVITIES",
450
+ "SQL_MAX_DRIVER_CONNECTIONS",
451
+ "SQL_MAX_ROW_SIZE",
452
+ "SQL_MAX_USER_NAME_LEN",
453
+ "SQL_ACTIVE_CONNECTIONS",
454
+ "SQL_ACTIVE_STATEMENTS",
455
+ "SQL_DATA_SOURCE_READ_ONLY",
456
+ "SQL_NEED_LONG_DATA_LEN",
457
+ "SQL_GETDATA_EXTENSIONS",
458
+ "SQL_CURSOR_COMMIT_BEHAVIOR",
459
+ "SQL_CURSOR_ROLLBACK_BEHAVIOR",
460
+ "SQL_CURSOR_SENSITIVITY",
461
+ "SQL_BOOKMARK_PERSISTENCE",
462
+ "SQL_DYNAMIC_CURSOR_ATTRIBUTES1",
463
+ "SQL_DYNAMIC_CURSOR_ATTRIBUTES2",
464
+ "SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1",
465
+ "SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2",
466
+ "SQL_STATIC_CURSOR_ATTRIBUTES1",
467
+ "SQL_STATIC_CURSOR_ATTRIBUTES2",
468
+ "SQL_KEYSET_CURSOR_ATTRIBUTES1",
469
+ "SQL_KEYSET_CURSOR_ATTRIBUTES2",
470
+ "SQL_SCROLL_OPTIONS",
471
+ "SQL_SCROLL_CONCURRENCY",
472
+ "SQL_FETCH_DIRECTION",
473
+ "SQL_ROWSET_SIZE",
474
+ "SQL_CONCURRENCY",
475
+ "SQL_ROW_NUMBER",
476
+ "SQL_STATIC_SENSITIVITY",
477
+ "SQL_BATCH_SUPPORT",
478
+ "SQL_BATCH_ROW_COUNT",
479
+ "SQL_PARAM_ARRAY_ROW_COUNTS",
480
+ "SQL_PARAM_ARRAY_SELECTS",
481
+ "SQL_PROCEDURE_TERM",
482
+ "SQL_POSITIONED_STATEMENTS",
483
+ "SQL_GROUP_BY",
484
+ "SQL_OJ_CAPABILITIES",
485
+ "SQL_ORDER_BY_COLUMNS_IN_SELECT",
486
+ "SQL_OUTER_JOINS",
487
+ "SQL_QUOTED_IDENTIFIER_CASE",
488
+ "SQL_CONCAT_NULL_BEHAVIOR",
489
+ "SQL_NULL_COLLATION",
490
+ "SQL_ALTER_TABLE",
491
+ "SQL_UNION",
492
+ "SQL_DDL_INDEX",
493
+ "SQL_MULT_RESULT_SETS",
494
+ "SQL_OWNER_USAGE",
495
+ "SQL_QUALIFIER_USAGE",
496
+ "SQL_TIMEDATE_ADD_INTERVALS",
497
+ "SQL_TIMEDATE_DIFF_INTERVALS",
498
+ "SQL_IC_UPPER",
499
+ "SQL_IC_LOWER",
500
+ "SQL_IC_SENSITIVE",
501
+ "SQL_IC_MIXED",
502
+ # API level globals
503
+ "apilevel",
504
+ "paramstyle",
505
+ "threadsafety",
506
+ # Module properties
507
+ "lowercase",
508
+ "native_uuid",
509
+ ]
510
+
511
+
512
+ def pooling(max_size: int = 100, idle_timeout: int = 600, enabled: bool = True) -> None:
513
+ """
514
+ Enable connection pooling with the specified parameters.
515
+ By default:
516
+ - If not explicitly called, pooling will be auto-enabled with default values.
517
+
518
+ Args:
519
+ max_size (int): Maximum number of connections in the pool.
520
+ idle_timeout (int): Time in seconds before idle connections are closed.
521
+ enabled (bool): Whether to enable or disable pooling.
522
+
523
+ Returns:
524
+ None
525
+ """
526
+ if not enabled:
527
+ PoolingManager.disable()
528
+ else:
529
+ PoolingManager.enable(max_size, idle_timeout)
530
+
531
+
532
+ _original_module_setattr = sys.modules[__name__].__setattr__
533
+
534
+
535
+ def _custom_setattr(name, value):
536
+ if name == "lowercase":
537
+ with _settings_lock:
538
+ _settings.lowercase = bool(value)
539
+ # Update the module's lowercase variable
540
+ _original_module_setattr(name, _settings.lowercase)
541
+ else:
542
+ _original_module_setattr(name, value)
543
+
544
+
545
+ # Replace the module's __setattr__ with our custom version
546
+ sys.modules[__name__].__setattr__ = _custom_setattr
547
+
548
+
549
+ # Create a custom module class that uses properties instead of __setattr__
550
+ class _MSSQLModule(types.ModuleType):
551
+ @property
552
+ def lowercase(self) -> bool:
553
+ """Get the lowercase setting."""
554
+ return _settings.lowercase
555
+
556
+ @lowercase.setter
557
+ def lowercase(self, value: bool) -> None:
558
+ """Set the lowercase setting."""
559
+ if not isinstance(value, bool):
560
+ raise ValueError("lowercase must be a boolean value")
561
+ with _settings_lock:
562
+ _settings.lowercase = value
563
+
564
+ @property
565
+ def native_uuid(self) -> bool:
566
+ """Get the native_uuid setting.
567
+
568
+ Controls whether UNIQUEIDENTIFIER columns return uuid.UUID objects (True)
569
+ or str (False). Default is True.
570
+ Set to False to return str for pyodbc-compatible migration.
571
+ """
572
+ return _settings.native_uuid
573
+
574
+ @native_uuid.setter
575
+ def native_uuid(self, value: bool) -> None:
576
+ """Set the native_uuid setting."""
577
+ if not isinstance(value, bool):
578
+ raise ValueError("native_uuid must be a boolean value")
579
+ with _settings_lock:
580
+ _settings.native_uuid = value
581
+
582
+
583
+ # Replace the current module with our custom module class
584
+ old_module: types.ModuleType = sys.modules[__name__]
585
+ new_module: _MSSQLModule = _MSSQLModule(__name__)
586
+
587
+ # Copy all existing attributes to the new module
588
+ for attr_name in dir(old_module):
589
+ if attr_name != "__class__":
590
+ try:
591
+ setattr(new_module, attr_name, getattr(old_module, attr_name))
592
+ except AttributeError:
593
+ pass
594
+
595
+ # Replace the module in sys.modules
596
+ sys.modules[__name__] = new_module
597
+
598
+ # Initialize property values
599
+ lowercase: bool = _settings.lowercase
600
+ native_uuid: bool = _settings.native_uuid