mkleehammer / pyodbc

Python ODBC bridge
https://github.com/mkleehammer/pyodbc/wiki
MIT No Attribution
2.88k stars 562 forks source link

Network Disconnect Throws No Exceptions (with timeout set) using FreeTDS #1103

Closed fifofonix closed 1 year ago

fifofonix commented 1 year ago

Environment

MacOS:

Alpine (in docker):

Issue

No issues connecting and executing SQL, connect similar to:

pyodb.connect(
server=self.server, database=self.db,user=self.user, password=self.pwd,
driver=self.driver,autocommit=True,timeout=2)

However, disabling wifi during repetitive use of cursor to execute simple SQL hangs and eventually crashes with no exception raised. On Alpine a segmentation fault is indicated although on MacOS no message to indicate similar is shown.

Documentation indicates that use of timeout should mean an exception would be thrown providing driver supports this parameter. In the case of freetds documentation seems to indicate this is supported.

What is best practice for handling network disconnects/reconnects?

v-chojas commented 1 year ago

With msodbcsql18 it will try to reconnect if possible, and if not, will return an error ("Communication link failure" or similar). Is that not what you see? Post an ODBC trace if you'd like more assistance with troubleshooting.

fifofonix commented 1 year ago

@v-chojas thanks for your comments regarding MSODBCSQL18. When I enabled the trace I found that I had mangled my configuration and that I wasn't in fact using that driver as expected. Fixing that I got MSODBCSQL18 working fine. I've modified description of problem above to reflect the fact that the issue is more to do with freetds at this point. I'm going to capture a log from that and post.

fifofonix commented 1 year ago

ODBC trace using freetds on MacOS from a simple loop making SELECT SQL calls. As soon as wifi is toggled we get to the end of the ODBC trace, and nothing more occurs even when networking is resumed. Eventually calling program abends without an exception.

[ODBC][44227][1664301809.724287][__handles.c][499]
        Exit:[SQL_SUCCESS]
            Environment = 0x7fde658c2600
[ODBC][44227][1664301809.724468][SQLSetEnvAttr.c][189]
        Entry:
            Environment = 0x7fde658c2600
            Attribute = SQL_ATTR_ODBC_VERSION
            Value = 0x3
            StrLen = 4
[ODBC][44227][1664301809.724551][SQLSetEnvAttr.c][381]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301809.726522][SQLAllocHandle.c][395]
        Entry:
            Handle Type = 2
            Input Handle = 0x7fde658c2600
        UNICODE Using encoding ASCII 'UTF-8' and UNICODE 'UCS-2-INTERNAL'

[ODBC][44227][1664301809.726797][SQLAllocHandle.c][531]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde658c4a00
[ODBC][44227][1664301809.726865][SQLSetConnectAttr.c][399]
        Entry:
            Connection = 0x7fde658c4a00
            Attribute = SQL_ATTR_LOGIN_TIMEOUT
            Value = 0x2
            StrLen = -5
[ODBC][44227][1664301809.726929][SQLSetConnectAttr.c][716]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301809.728402][SQLDriverConnectW.c][298]
        Entry:
            Connection = 0x7fde658c4a00
            Window Hdl = 0x0
            Str In = [server=***REDACTED***;port=1433;tds_version=7.4;driver=/usr/local...][length = 158 (SQL_NTS)]
            Str Out = 0x0
            Str Out Max = 0
            Str Out Ptr = 0x0
            Completion = 0
[ODBC][44227][1664301809.993157][SQLDriverConnectW.c][1089]
        Exit:[SQL_SUCCESS]                    
            Connection Out [[NULL]]
[ODBC][44227][1664301809.993427][SQLGetInfo.c][236]
        Entry:
            Connection = 0x7fde658c4a00
            Info Type = SQL_DRIVER_ODBC_VER (77)
            Info Value = 0x7ff7bb66e590
            Buffer Length = 20
            StrLen = 0x7ff7bb66e582
[ODBC][44227][1664301809.993509][SQLGetInfo.c][236]
        Entry:
            Connection = 0x7fde658c4a00
            Info Type = SQL_DESCRIBE_PARAMETER (10002)
            Info Value = 0x7ff7bb66e580
            Buffer Length = 2
            StrLen = 0x7ff7bb66e582
[ODBC][44227][1664301809.993750][SQLGetInfo.c][236]
        Entry:
            Connection = 0x7fde658c4a00
            Info Type = SQL_NEED_LONG_DATA_LEN (111)
            Info Value = 0x7ff7bb66e580
            Buffer Length = 2
            StrLen = 0x7ff7bb66e582
[ODBC][44227][1664301809.993819][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301809.993909][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde661d2a00
[ODBC][44227][1664301809.994108][SQLGetTypeInfo.c][168]
        Entry:
            Statement = 0x7fde661d2a00
            Data Type = SQL_VARCHAR
[ODBC][44227][1664301810.023907][SQLGetTypeInfo.c][321]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.024029][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde661d2a00
[ODBC][44227][1664301810.024107][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.024245][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 3
            Target Type = 4 SQL_INTEGER
            Buffer Length = 4
            Target Value = 0x7ff7bb66e584
            StrLen Or Ind = 0x0
[ODBC][44227][1664301810.024417][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [8000]                
            Strlen Or Ind = NULLPTR
[ODBC][44227][1664301810.024571][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.052441][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.052602][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.052801][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.052882][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.052973][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.053166][SQLGetTypeInfo.c][168]
        Entry:
            Statement = 0x7fde661d2a00
            Data Type = Unknown(-9)
[ODBC][44227][1664301810.080979][SQLGetTypeInfo.c][321]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.081158][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde661d2a00
[ODBC][44227][1664301810.081327][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.081592][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 3
            Target Type = 4 SQL_INTEGER
            Buffer Length = 4
            Target Value = 0x7ff7bb66e584
            StrLen Or Ind = 0x0
[ODBC][44227][1664301810.081868][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [4000]                
            Strlen Or Ind = NULLPTR
[ODBC][44227][1664301810.082006][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.114604][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.114748][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.115033][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.115310][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.115453][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.115517][SQLGetTypeInfo.c][168]
        Entry:
            Statement = 0x7fde661d2a00
            Data Type = SQL_VARBINARY
[ODBC][44227][1664301810.144806][SQLGetTypeInfo.c][321]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.144932][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde661d2a00
[ODBC][44227][1664301810.145179][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.145288][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 3
            Target Type = 4 SQL_INTEGER
            Buffer Length = 4
            Target Value = 0x7ff7bb66e584
            StrLen Or Ind = 0x0
[ODBC][44227][1664301810.145424][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [8000]                
            Strlen Or Ind = NULLPTR
[ODBC][44227][1664301810.145653][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.174992][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.175126][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.175397][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.175691][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.175948][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.176136][SQLGetTypeInfo.c][168]
        Entry:
            Statement = 0x7fde661d2a00
            Data Type = SQL_TYPE_TIMESTAMP
[ODBC][44227][1664301810.204504][SQLGetTypeInfo.c][321]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.204638][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde661d2a00
[ODBC][44227][1664301810.204924][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.205028][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 3
            Target Type = 4 SQL_INTEGER
            Buffer Length = 4
            Target Value = 0x7ff7bb66e584
            StrLen Or Ind = 0x0
[ODBC][44227][1664301810.205172][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [27]                
            Strlen Or Ind = NULLPTR
[ODBC][44227][1664301810.205256][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.238037][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.238198][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.238389][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.239964][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.240079][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.240572][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.240646][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.240982][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde661d2a00
            SQL = [SELECT CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR)][length = 56]
[ODBC][44227][1664301810.272987][SQLExecDirectW.c][456]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.273161][SQLRowCount.c][173]
        Entry:
            Statement = 0x7fde661d2a00
            Row Count = 0x7ff7bb66cb40
[ODBC][44227][1664301810.273326][SQLRowCount.c][247]
        Exit:[SQL_SUCCESS]
            Row Count = 0x7ff7bb66cb40 -> -1 (64 bits)
[ODBC][44227][1664301810.273533][SQLNumResultCols.c][156]
        Entry:
            Statement = 0x7fde661d2a00
            Column Count = 0x7ff7bb66cb38
[ODBC][44227][1664301810.273644][SQLNumResultCols.c][251]
        Exit:[SQL_SUCCESS]
            Count = 0x7ff7bb66cb38 -> 1
[ODBC][44227][1664301810.273841][SQLDescribeCol.c][247]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Column Name = 0x7ff7bb66ca10
            Buffer Length = 200
            Name Length = 0x7ff7bb66ca08
            Data Type = 0x7ff7bb66ca0e
            Column Size = 0x7ff7bb66ca00
            Decimal Digits = 0x7ff7bb66ca0a
            Nullable = 0x7ff7bb66ca0c
[ODBC][44227][1664301810.273964][SQLDescribeCol.c][504]
        Exit:[SQL_SUCCESS]                
            Column Name = []                
            Data Type = 0x7ff7bb66ca0e -> 12                
            Column Size = 0x7ff7bb66ca00 -> 30 (64 bits)                
            Decimal Digits = 0x7ff7bb66ca0a -> 0                
            Nullable = 0x7ff7bb66ca0c -> 1
[ODBC][44227][1664301810.274133][SQLDescribeColW.c][209]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Column Name = 0x7fde557b5c40
            Buffer Length = 300
            Name Length = 0x7ff7bb66cacc
            Data Type = 0x7ff7bb66cae6
            Column Size = 0x7ff7bb66caa8
            Decimal Digits = 0x7ff7bb66cae4
            Nullable = 0x7ff7bb66cace
[ODBC][44227][1664301810.274480][SQLDescribeColW.c][467]
        Exit:[SQL_SUCCESS]                
            Column Name = [](unicode)                
            Data Type = 0x7ff7bb66cae6 -> 12                
            Column Size = 0x7ff7bb66caa8 -> 30 (64 bits)                
            Decimal Digits = 0x7ff7bb66cae4 -> 0                
            Nullable = 0x7ff7bb66cace -> 1
[ODBC][44227][1664301810.275511][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde661d2a00
[ODBC][44227][1664301810.275627][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.275879][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Target Type = -8 SQL_WCHAR
            Buffer Length = 4096
            Target Value = 0x7fde661d9a00
            StrLen Or Ind = 0x7ff7bb66cae0
[ODBC][44227][1664301810.276130][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [14.0.2037.2](unicode)                
            Strlen Or Ind = 0x7ff7bb66cae0 -> 22 (64 bits)
[ODBC][44227][1664301810.276546][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.304209][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.304341][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.304637][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.306195][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.306309][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde75af9e00
[ODBC][44227][1664301810.306893][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde75af9e00
            Option = 0
[ODBC][44227][1664301810.306985][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.307325][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde75af9e00
            SQL = [SELECT schema_name()][length = 20]
[ODBC][44227][1664301810.335798][SQLExecDirectW.c][456]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.335909][SQLRowCount.c][173]
        Entry:
            Statement = 0x7fde75af9e00
            Row Count = 0x7ff7bb66c470
[ODBC][44227][1664301810.335987][SQLRowCount.c][247]
        Exit:[SQL_SUCCESS]
            Row Count = 0x7ff7bb66c470 -> -1 (64 bits)
[ODBC][44227][1664301810.336062][SQLNumResultCols.c][156]
        Entry:
            Statement = 0x7fde75af9e00
            Column Count = 0x7ff7bb66c468
[ODBC][44227][1664301810.336240][SQLNumResultCols.c][251]
        Exit:[SQL_SUCCESS]
            Count = 0x7ff7bb66c468 -> 1
[ODBC][44227][1664301810.336383][SQLDescribeCol.c][247]
        Entry:
            Statement = 0x7fde75af9e00
            Column Number = 1
            Column Name = 0x7ff7bb66c340
            Buffer Length = 200
            Name Length = 0x7ff7bb66c338
            Data Type = 0x7ff7bb66c33e
            Column Size = 0x7ff7bb66c330
            Decimal Digits = 0x7ff7bb66c33a
            Nullable = 0x7ff7bb66c33c
[ODBC][44227][1664301810.336441][SQLDescribeCol.c][504]
        Exit:[SQL_SUCCESS]                
            Column Name = []                
            Data Type = 0x7ff7bb66c33e -> -9                
            Column Size = 0x7ff7bb66c330 -> 128 (64 bits)                
            Decimal Digits = 0x7ff7bb66c33a -> 0                
            Nullable = 0x7ff7bb66c33c -> 1
[ODBC][44227][1664301810.336718][SQLDescribeColW.c][209]
        Entry:
            Statement = 0x7fde75af9e00
            Column Number = 1
            Column Name = 0x7fde457cb610
            Buffer Length = 300
            Name Length = 0x7ff7bb66c3fc
            Data Type = 0x7ff7bb66c416
            Column Size = 0x7ff7bb66c3d8
            Decimal Digits = 0x7ff7bb66c414
            Nullable = 0x7ff7bb66c3fe
[ODBC][44227][1664301810.336867][SQLDescribeColW.c][467]
        Exit:[SQL_SUCCESS]                
            Column Name = [](unicode)                
            Data Type = 0x7ff7bb66c416 -> -9                
            Column Size = 0x7ff7bb66c3d8 -> 128 (64 bits)                
            Decimal Digits = 0x7ff7bb66c414 -> 0                
            Nullable = 0x7ff7bb66c3fe -> 1
[ODBC][44227][1664301810.337155][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde75af9e00
[ODBC][44227][1664301810.337223][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.337434][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde75af9e00
            Column Number = 1
            Target Type = -8 SQL_WCHAR
            Buffer Length = 4096
            Target Value = 0x7fde75b02e00
            StrLen Or Ind = 0x7ff7bb66c7e0
[ODBC][44227][1664301810.337492][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [dbo](unicode)                
            Strlen Or Ind = 0x7ff7bb66c7e0 -> 6 (64 bits)
[ODBC][44227][1664301810.337666][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde75af9e00
            Option = 0
[ODBC][44227][1664301810.368960][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.369192][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde75af9e00
[ODBC][44227][1664301810.369498][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.369870][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.369986][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.370261][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.370374][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.370451][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde661d2a00
            SQL = [SELECT name FROM sys.system_views WHERE name IN ('dm_exec_sessions', 'dm_pdw_nodes_exec_sessions')][length = 98]
[ODBC][44227][1664301810.399003][SQLExecDirectW.c][456]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.399119][SQLRowCount.c][173]
        Entry:
            Statement = 0x7fde661d2a00
            Row Count = 0x7ff7bb66d4e0
[ODBC][44227][1664301810.399179][SQLRowCount.c][247]
        Exit:[SQL_SUCCESS]
            Row Count = 0x7ff7bb66d4e0 -> -1 (64 bits)
[ODBC][44227][1664301810.399345][SQLNumResultCols.c][156]
        Entry:
            Statement = 0x7fde661d2a00
            Column Count = 0x7ff7bb66d4d8
[ODBC][44227][1664301810.399457][SQLNumResultCols.c][251]
        Exit:[SQL_SUCCESS]
            Count = 0x7ff7bb66d4d8 -> 1
[ODBC][44227][1664301810.399511][SQLDescribeCol.c][247]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Column Name = 0x7ff7bb66d3b0
            Buffer Length = 200
            Name Length = 0x7ff7bb66d3a8
            Data Type = 0x7ff7bb66d3ae
            Column Size = 0x7ff7bb66d3a0
            Decimal Digits = 0x7ff7bb66d3aa
            Nullable = 0x7ff7bb66d3ac
[ODBC][44227][1664301810.399568][SQLDescribeCol.c][504]
        Exit:[SQL_SUCCESS]                
            Column Name = [name]                
            Data Type = 0x7ff7bb66d3ae -> -9                
            Column Size = 0x7ff7bb66d3a0 -> 128 (64 bits)                
            Decimal Digits = 0x7ff7bb66d3aa -> 0                
            Nullable = 0x7ff7bb66d3ac -> 0
[ODBC][44227][1664301810.399694][SQLDescribeColW.c][209]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Column Name = 0x7fde45886ef0
            Buffer Length = 300
            Name Length = 0x7ff7bb66d46c
            Data Type = 0x7ff7bb66d486
            Column Size = 0x7ff7bb66d448
            Decimal Digits = 0x7ff7bb66d484
            Nullable = 0x7ff7bb66d46e
[ODBC][44227][1664301810.399824][SQLDescribeColW.c][467]
        Exit:[SQL_SUCCESS]                
            Column Name = [name](unicode)                
            Data Type = 0x7ff7bb66d486 -> -9                
            Column Size = 0x7ff7bb66d448 -> 128 (64 bits)                
            Decimal Digits = 0x7ff7bb66d484 -> 0                
            Nullable = 0x7ff7bb66d46e -> 0
[ODBC][44227][1664301810.399959][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde661d2a00
[ODBC][44227][1664301810.400015][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.400067][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Target Type = -8 SQL_WCHAR
            Buffer Length = 4096
            Target Value = 0x7fde661d9a00
            StrLen Or Ind = 0x7ff7bb66d520
[ODBC][44227][1664301810.400190][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [dm_exec_sessions](unicode)                
            Strlen Or Ind = 0x7ff7bb66d520 -> 32 (64 bits)
[ODBC][44227][1664301810.400255][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.427668][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.427820][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde661d2a00
            SQL = [
                        SELECT CASE transaction_isolation_level
                        WHEN 0 THEN NULL
                     ...][length = 545]
[ODBC][44227][1664301810.456049][SQLExecDirectW.c][456]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.456228][SQLRowCount.c][173]
        Entry:
            Statement = 0x7fde661d2a00
            Row Count = 0x7ff7bb66d4e0
[ODBC][44227][1664301810.456455][SQLRowCount.c][247]
        Exit:[SQL_SUCCESS]
            Row Count = 0x7ff7bb66d4e0 -> -1 (64 bits)
[ODBC][44227][1664301810.456648][SQLNumResultCols.c][156]
        Entry:
            Statement = 0x7fde661d2a00
            Column Count = 0x7ff7bb66d4d8
[ODBC][44227][1664301810.456773][SQLNumResultCols.c][251]
        Exit:[SQL_SUCCESS]
            Count = 0x7ff7bb66d4d8 -> 1
[ODBC][44227][1664301810.456886][SQLDescribeCol.c][247]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Column Name = 0x7ff7bb66d3b0
            Buffer Length = 200
            Name Length = 0x7ff7bb66d3a8
            Data Type = 0x7ff7bb66d3ae
            Column Size = 0x7ff7bb66d3a0
            Decimal Digits = 0x7ff7bb66d3aa
            Nullable = 0x7ff7bb66d3ac
[ODBC][44227][1664301810.457153][SQLDescribeCol.c][504]
        Exit:[SQL_SUCCESS]                
            Column Name = [TRANSACTION_ISOLATION_LEVEL]                
            Data Type = 0x7ff7bb66d3ae -> 12                
            Column Size = 0x7ff7bb66d3a0 -> 16 (64 bits)                
            Decimal Digits = 0x7ff7bb66d3aa -> 0                
            Nullable = 0x7ff7bb66d3ac -> 1
[ODBC][44227][1664301810.457530][SQLDescribeColW.c][209]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Column Name = 0x7fde760f8f70
            Buffer Length = 300
            Name Length = 0x7ff7bb66d46c
            Data Type = 0x7ff7bb66d486
            Column Size = 0x7ff7bb66d448
            Decimal Digits = 0x7ff7bb66d484
            Nullable = 0x7ff7bb66d46e
[ODBC][44227][1664301810.457669][SQLDescribeColW.c][467]
        Exit:[SQL_SUCCESS]                
            Column Name = [TRANSACTION_ISOLATION_LEVEL](unicode)                
            Data Type = 0x7ff7bb66d486 -> 12                
            Column Size = 0x7ff7bb66d448 -> 16 (64 bits)                
            Decimal Digits = 0x7ff7bb66d484 -> 0                
            Nullable = 0x7ff7bb66d46e -> 1
[ODBC][44227][1664301810.457990][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde661d2a00
[ODBC][44227][1664301810.458064][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.458250][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde661d2a00
            Column Number = 1
            Target Type = -8 SQL_WCHAR
            Buffer Length = 4096
            Target Value = 0x7fde75aec800
            StrLen Or Ind = 0x7ff7bb66d520
[ODBC][44227][1664301810.458534][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [READ COMMITTED](unicode)                
            Strlen Or Ind = 0x7ff7bb66d520 -> 28 (64 bits)
[ODBC][44227][1664301810.458668][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde661d2a00
            Option = 0
[ODBC][44227][1664301810.489505][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.489652][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde661d2a00
[ODBC][44227][1664301810.490003][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.490559][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.490685][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde658c7400
[ODBC][44227][1664301810.490992][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde658c7400
            Option = 0
[ODBC][44227][1664301810.491061][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.491336][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde658c7400
            SQL = [SELECT CAST('test max support' AS NVARCHAR(max))][length = 48]
[ODBC][44227][1664301810.523372][SQLExecDirectW.c][456]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.523537][SQLRowCount.c][173]
        Entry:
            Statement = 0x7fde658c7400
            Row Count = 0x7ff7bb66c810
[ODBC][44227][1664301810.523781][SQLRowCount.c][247]
        Exit:[SQL_SUCCESS]
            Row Count = 0x7ff7bb66c810 -> -1 (64 bits)
[ODBC][44227][1664301810.523871][SQLNumResultCols.c][156]
        Entry:
            Statement = 0x7fde658c7400
            Column Count = 0x7ff7bb66c808
[ODBC][44227][1664301810.524047][SQLNumResultCols.c][251]
        Exit:[SQL_SUCCESS]
            Count = 0x7ff7bb66c808 -> 1
[ODBC][44227][1664301810.524291][SQLDescribeCol.c][247]
        Entry:
            Statement = 0x7fde658c7400
            Column Number = 1
            Column Name = 0x7ff7bb66c6e0
            Buffer Length = 200
            Name Length = 0x7ff7bb66c6d8
            Data Type = 0x7ff7bb66c6de
            Column Size = 0x7ff7bb66c6d0
            Decimal Digits = 0x7ff7bb66c6da
            Nullable = 0x7ff7bb66c6dc
[ODBC][44227][1664301810.524376][SQLDescribeCol.c][504]
        Exit:[SQL_SUCCESS]                
            Column Name = []                
            Data Type = 0x7ff7bb66c6de -> -9                
            Column Size = 0x7ff7bb66c6d0 -> 0 (64 bits)                
            Decimal Digits = 0x7ff7bb66c6da -> 0                
            Nullable = 0x7ff7bb66c6dc -> 1
[ODBC][44227][1664301810.524476][SQLDescribeColW.c][209]
        Entry:
            Statement = 0x7fde658c7400
            Column Number = 1
            Column Name = 0x7fde457cb3e0
            Buffer Length = 300
            Name Length = 0x7ff7bb66c79c
            Data Type = 0x7ff7bb66c7b6
            Column Size = 0x7ff7bb66c778
            Decimal Digits = 0x7ff7bb66c7b4
            Nullable = 0x7ff7bb66c79e
[ODBC][44227][1664301810.524619][SQLDescribeColW.c][467]
        Exit:[SQL_SUCCESS]                
            Column Name = [](unicode)                
            Data Type = 0x7ff7bb66c7b6 -> -9                
            Column Size = 0x7ff7bb66c778 -> 0 (64 bits)                
            Decimal Digits = 0x7ff7bb66c7b4 -> 0                
            Nullable = 0x7ff7bb66c79e -> 1
[ODBC][44227][1664301810.524871][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde658c7400
[ODBC][44227][1664301810.524950][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.525338][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde658c7400
            Column Number = 1
            Target Type = -8 SQL_WCHAR
            Buffer Length = 4096
            Target Value = 0x7fde658c6400
            StrLen Or Ind = 0x7ff7bb66cb80
[ODBC][44227][1664301810.525488][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [test max support](unicode)                
            Strlen Or Ind = 0x7ff7bb66cb80 -> 32 (64 bits)
[ODBC][44227][1664301810.525673][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde658c7400
            Option = 0
[ODBC][44227][1664301810.553110][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.553323][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c7400
[ODBC][44227][1664301810.553489][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.553986][SQLEndTran.c][417]
        Entry:                
            Connection = 0x7fde658c4a00                
            Completion Type = 1
[ODBC][44227][1664301810.554109][SQLGetInfo.c][236]
        Entry:
            Connection = 0x7fde658c4a00
            Info Type = SQL_CURSOR_COMMIT_BEHAVIOR (23)
            Info Value = 0x7fde658c6290
            Buffer Length = 2
            StrLen = 0x7ff7bb66da90
[ODBC][44227][1664301810.554344][SQLGetInfo.c][236]
        Entry:
            Connection = 0x7fde658c4a00
            Info Type = SQL_CURSOR_ROLLBACK_BEHAVIOR (24)
            Info Value = 0x7fde658c6292
            Buffer Length = 2
            StrLen = 0x7ff7bb66da90
[ODBC][44227][1664301810.554491][SQLEndTran.c][566]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.555940][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.556078][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde5588f200
[ODBC][44227][1664301810.556528][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde5588f200
            Option = 0
[ODBC][44227][1664301810.556602][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.556833][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde5588f200
            SQL = [SELECT 1 AS "TestColumn"][length = 24]
[ODBC][44227][1664301810.582886][SQLExecDirectW.c][456]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.583013][SQLRowCount.c][173]
        Entry:
            Statement = 0x7fde5588f200
            Row Count = 0x7ff7bb670990
[ODBC][44227][1664301810.583081][SQLRowCount.c][247]
        Exit:[SQL_SUCCESS]
            Row Count = 0x7ff7bb670990 -> -1 (64 bits)
[ODBC][44227][1664301810.583175][SQLNumResultCols.c][156]
        Entry:
            Statement = 0x7fde5588f200
            Column Count = 0x7ff7bb670988
[ODBC][44227][1664301810.583249][SQLNumResultCols.c][251]
        Exit:[SQL_SUCCESS]
            Count = 0x7ff7bb670988 -> 1
[ODBC][44227][1664301810.583307][SQLDescribeCol.c][247]
        Entry:
            Statement = 0x7fde5588f200
            Column Number = 1
            Column Name = 0x7ff7bb670860
            Buffer Length = 200
            Name Length = 0x7ff7bb670858
            Data Type = 0x7ff7bb67085e
            Column Size = 0x7ff7bb670850
            Decimal Digits = 0x7ff7bb67085a
            Nullable = 0x7ff7bb67085c
[ODBC][44227][1664301810.583421][SQLDescribeCol.c][504]
        Exit:[SQL_SUCCESS]                
            Column Name = [TestColumn]                
            Data Type = 0x7ff7bb67085e -> 4                
            Column Size = 0x7ff7bb670850 -> 10 (64 bits)                
            Decimal Digits = 0x7ff7bb67085a -> 0                
            Nullable = 0x7ff7bb67085c -> 0
[ODBC][44227][1664301810.583554][SQLColAttribute.c][294]
        Entry:
            Statement = 0x7fde5588f200
            Column Number = 1
            Field Identifier = SQL_DESC_UNSIGNED
            Character Attr = 0x0
            Buffer Length = 0
            String Length = 0x0
            Numeric Attribute = 0x7ff7bb670848
[ODBC][44227][1664301810.583689][SQLColAttribute.c][709]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.583753][SQLDescribeColW.c][209]
        Entry:
            Statement = 0x7fde5588f200
            Column Number = 1
            Column Name = 0x7fde557b5c40
            Buffer Length = 300
            Name Length = 0x7ff7bb67091c
            Data Type = 0x7ff7bb670936
            Column Size = 0x7ff7bb6708f8
            Decimal Digits = 0x7ff7bb670934
            Nullable = 0x7ff7bb67091e
[ODBC][44227][1664301810.583875][SQLDescribeColW.c][467]
        Exit:[SQL_SUCCESS]                
            Column Name = [TestColumn](unicode)                
            Data Type = 0x7ff7bb670936 -> 4                
            Column Size = 0x7ff7bb6708f8 -> 10 (64 bits)                
            Decimal Digits = 0x7ff7bb670934 -> 0                
            Nullable = 0x7ff7bb67091e -> 0
[ODBC][44227][1664301810.584214][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde5588f200
[ODBC][44227][1664301810.584289][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.584451][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde5588f200
            Column Number = 1
            Target Type = 4 SQL_INTEGER
            Buffer Length = 4
            Target Value = 0x7ff7bb6710b8
            StrLen Or Ind = 0x7ff7bb6710d0
[ODBC][44227][1664301810.584521][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [1]                
            Strlen Or Ind = 0x7ff7bb6710d0 -> 4 (64 bits)
[ODBC][44227][1664301810.584579][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde5588f200
[ODBC][44227][1664301810.584721][SQLFetch.c][352]
        Exit:[SQL_NO_DATA]
[ODBC][44227][1664301810.584851][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde5588f200
            Option = 0
[ODBC][44227][1664301810.584918][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.585127][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde5588f200
[ODBC][44227][1664301810.585282][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.585931][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301810.586129][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde658c7400
[ODBC][44227][1664301810.586285][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde658c7400
            Option = 0
[ODBC][44227][1664301810.586349][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.586412][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde658c7400
            SQL = [select 0 "Execution"][length = 20]
[ODBC][44227][1664301810.615896][SQLExecDirectW.c][456]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.616008][SQLRowCount.c][173]
        Entry:
            Statement = 0x7fde658c7400
            Row Count = 0x7ff7bb6705f0
[ODBC][44227][1664301810.616126][SQLRowCount.c][247]
        Exit:[SQL_SUCCESS]
            Row Count = 0x7ff7bb6705f0 -> -1 (64 bits)
[ODBC][44227][1664301810.616193][SQLNumResultCols.c][156]
        Entry:
            Statement = 0x7fde658c7400
            Column Count = 0x7ff7bb6705e8
[ODBC][44227][1664301810.616360][SQLNumResultCols.c][251]
        Exit:[SQL_SUCCESS]
            Count = 0x7ff7bb6705e8 -> 1
[ODBC][44227][1664301810.616483][SQLDescribeCol.c][247]
        Entry:
            Statement = 0x7fde658c7400
            Column Number = 1
            Column Name = 0x7ff7bb6704c0
            Buffer Length = 200
            Name Length = 0x7ff7bb6704b8
            Data Type = 0x7ff7bb6704be
            Column Size = 0x7ff7bb6704b0
            Decimal Digits = 0x7ff7bb6704ba
            Nullable = 0x7ff7bb6704bc
[ODBC][44227][1664301810.616559][SQLDescribeCol.c][504]
        Exit:[SQL_SUCCESS]                
            Column Name = [Execution]                
            Data Type = 0x7ff7bb6704be -> 4                
            Column Size = 0x7ff7bb6704b0 -> 10 (64 bits)                
            Decimal Digits = 0x7ff7bb6704ba -> 0                
            Nullable = 0x7ff7bb6704bc -> 0
[ODBC][44227][1664301810.616690][SQLColAttribute.c][294]
        Entry:
            Statement = 0x7fde658c7400
            Column Number = 1
            Field Identifier = SQL_DESC_UNSIGNED
            Character Attr = 0x0
            Buffer Length = 0
            String Length = 0x0
            Numeric Attribute = 0x7ff7bb6704a8
[ODBC][44227][1664301810.616844][SQLColAttribute.c][709]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.616985][SQLDescribeColW.c][209]
        Entry:
            Statement = 0x7fde658c7400
            Column Number = 1
            Column Name = 0x7fde557b5c40
            Buffer Length = 300
            Name Length = 0x7ff7bb67057c
            Data Type = 0x7ff7bb670596
            Column Size = 0x7ff7bb670558
            Decimal Digits = 0x7ff7bb670594
            Nullable = 0x7ff7bb67057e
[ODBC][44227][1664301810.617050][SQLDescribeColW.c][467]
        Exit:[SQL_SUCCESS]                
            Column Name = [Execution](unicode)                
            Data Type = 0x7ff7bb670596 -> 4                
            Column Size = 0x7ff7bb670558 -> 10 (64 bits)                
            Decimal Digits = 0x7ff7bb670594 -> 0                
            Nullable = 0x7ff7bb67057e -> 0
[ODBC][44227][1664301810.617346][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde658c7400
[ODBC][44227][1664301810.617419][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.617553][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde658c7400
            Column Number = 1
            Target Type = 4 SQL_INTEGER
            Buffer Length = 4
            Target Value = 0x7ff7bb670d18
            StrLen Or Ind = 0x7ff7bb670d30
[ODBC][44227][1664301810.617610][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [0]                
            Strlen Or Ind = 0x7ff7bb670d30 -> 4 (64 bits)
[ODBC][44227][1664301810.617747][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde658c7400
[ODBC][44227][1664301810.617807][SQLFetch.c][352]
        Exit:[SQL_NO_DATA]
[ODBC][44227][1664301810.617957][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde658c7400
            Option = 0
[ODBC][44227][1664301810.618010][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301810.618129][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c7400
[ODBC][44227][1664301810.618190][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301815.623043][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301815.623196][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde75af9e00
[ODBC][44227][1664301815.623868][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde75af9e00
            Option = 0
[ODBC][44227][1664301815.623947][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301815.624204][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde75af9e00
            SQL = [select 1 "Execution"][length = 20]
[ODBC][44227][1664301815.715297][SQLExecDirectW.c][456]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301815.715448][SQLRowCount.c][173]
        Entry:
            Statement = 0x7fde75af9e00
            Row Count = 0x7ff7bb6705f0
[ODBC][44227][1664301815.715743][SQLRowCount.c][247]
        Exit:[SQL_SUCCESS]
            Row Count = 0x7ff7bb6705f0 -> -1 (64 bits)
[ODBC][44227][1664301815.715872][SQLNumResultCols.c][156]
        Entry:
            Statement = 0x7fde75af9e00
            Column Count = 0x7ff7bb6705e8
[ODBC][44227][1664301815.716060][SQLNumResultCols.c][251]
        Exit:[SQL_SUCCESS]
            Count = 0x7ff7bb6705e8 -> 1
[ODBC][44227][1664301815.716424][SQLDescribeCol.c][247]
        Entry:
            Statement = 0x7fde75af9e00
            Column Number = 1
            Column Name = 0x7ff7bb6704c0
            Buffer Length = 200
            Name Length = 0x7ff7bb6704b8
            Data Type = 0x7ff7bb6704be
            Column Size = 0x7ff7bb6704b0
            Decimal Digits = 0x7ff7bb6704ba
            Nullable = 0x7ff7bb6704bc
[ODBC][44227][1664301815.716574][SQLDescribeCol.c][504]
        Exit:[SQL_SUCCESS]                
            Column Name = [Execution]                
            Data Type = 0x7ff7bb6704be -> 4                
            Column Size = 0x7ff7bb6704b0 -> 10 (64 bits)                
            Decimal Digits = 0x7ff7bb6704ba -> 0                
            Nullable = 0x7ff7bb6704bc -> 0
[ODBC][44227][1664301815.716741][SQLColAttribute.c][294]
        Entry:
            Statement = 0x7fde75af9e00
            Column Number = 1
            Field Identifier = SQL_DESC_UNSIGNED
            Character Attr = 0x0
            Buffer Length = 0
            String Length = 0x0
            Numeric Attribute = 0x7ff7bb6704a8
[ODBC][44227][1664301815.716932][SQLColAttribute.c][709]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301815.717136][SQLDescribeColW.c][209]
        Entry:
            Statement = 0x7fde75af9e00
            Column Number = 1
            Column Name = 0x7fde557b5c40
            Buffer Length = 300
            Name Length = 0x7ff7bb67057c
            Data Type = 0x7ff7bb670596
            Column Size = 0x7ff7bb670558
            Decimal Digits = 0x7ff7bb670594
            Nullable = 0x7ff7bb67057e
[ODBC][44227][1664301815.717301][SQLDescribeColW.c][467]
        Exit:[SQL_SUCCESS]                
            Column Name = [Execution](unicode)                
            Data Type = 0x7ff7bb670596 -> 4                
            Column Size = 0x7ff7bb670558 -> 10 (64 bits)                
            Decimal Digits = 0x7ff7bb670594 -> 0                
            Nullable = 0x7ff7bb67057e -> 0
[ODBC][44227][1664301815.717792][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde75af9e00
[ODBC][44227][1664301815.717917][SQLFetch.c][352]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301815.718157][SQLGetData.c][237]
        Entry:
            Statement = 0x7fde75af9e00
            Column Number = 1
            Target Type = 4 SQL_INTEGER
            Buffer Length = 4
            Target Value = 0x7ff7bb670d18
            StrLen Or Ind = 0x7ff7bb670d30
[ODBC][44227][1664301815.718330][SQLGetData.c][545]
        Exit:[SQL_SUCCESS]                
            Buffer = [1]                
            Strlen Or Ind = 0x7ff7bb670d30 -> 4 (64 bits)
[ODBC][44227][1664301815.718482][SQLFetch.c][162]
        Entry:
            Statement = 0x7fde75af9e00
[ODBC][44227][1664301815.718566][SQLFetch.c][352]
        Exit:[SQL_NO_DATA]
[ODBC][44227][1664301815.718702][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde75af9e00
            Option = 0
[ODBC][44227][1664301815.718763][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301815.719063][SQLFreeHandle.c][387]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde75af9e00
[ODBC][44227][1664301815.719170][SQLFreeHandle.c][490]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301820.723394][SQLAllocHandle.c][578]
        Entry:
            Handle Type = 3
            Input Handle = 0x7fde658c4a00
[ODBC][44227][1664301820.723565][SQLAllocHandle.c][1123]
        Exit:[SQL_SUCCESS]
            Output Handle = 0x7fde658c7400
[ODBC][44227][1664301820.724160][SQLFreeStmt.c][144]
        Entry:
            Statement = 0x7fde658c7400
            Option = 0
[ODBC][44227][1664301820.724258][SQLFreeStmt.c][266]
        Exit:[SQL_SUCCESS]
[ODBC][44227][1664301820.724484][SQLExecDirectW.c][177]
        Entry:
            Statement = 0x7fde658c7400
            SQL = [select 2 "Execution"][length = 20]
fifofonix commented 1 year ago

And tail end of FreeTDS logs that accompany this situation. Seemingly an error is detected but somehow not propagated properly up the stack...

....
....
odbc_export.h:801:SQLExecDirectW(0x7f85aa7c1a20, select 2 "Execution", 20)
prepare_query.c:208:parsing 0 parameters
odbc.c:3275:_SQLExecute(0x7f85aa7c1a20)
odbc.c:3292:_SQLExecute() starting with state 0
mem.c:656:tds_free_all_results()
util.c:179:Changed query state from IDLE to WRITING
packet.c:852:Sending packet
0000 01 01 00 46 00 00 01 00-16 00 00 00 12 00 00 00 |...F.... ........|
0010 02 00 00 00 00 00 00 00-00 00 01 00 00 00 73 00 |........ ......s.|
0020 65 00 6c 00 65 00 63 00-74 00 20 00 31 00 20 00 |e.l.e.c. t. .1. .|
0030 22 00 45 00 78 00 65 00-63 00 75 00 74 00 69 00 |".E.x.e. c.u.t.i.|
0040 6f 00 6e 00 22 00      -                        |o.n.".|

tls.c:183:in tds_push_func
util.c:179:Changed query state from WRITING to PENDING
token.c:555:tds_process_tokens(0x7f85ba7ec8b0, 0x7ff7b3146374, 0x7ff7b3146370, 0x6914)
util.c:179:Changed query state from PENDING to READING
tls.c:160:in tds_pull_func
util.c:179:Changed query state from READING to DEAD
util.c:333:tdserror(0x7f85ca7df070, 0x7f85ba7ec8b0, 20004, 60)
odbc.c:2369:msgno 20004 20003
util.c:363:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:386:tdserror: returning TDS_INT_CANCEL(2)
fifofonix commented 1 year ago

Debugging this further it seems that despite passing pyodb.connect(..., timeout=<integer>), the resultant connection object's timeout parameter is zero.

Luckily, it is possible post-connect to modify the connection object's timeout variable directly, at which point network drops will result in exceptions as desired as opposed to hanging forever / segmentation faults.

Tested by toggling wifi on MacOS, and with docker network dis(connect) using alpine container.

gordthompson commented 1 year ago

Debugging this further it seems that despite passing pyodb.connect(..., timeout=<integer>), the resultant connection object's timeout parameter is zero.

The timeout= argument to connect() only sets the timeout for establishing the connection. It does not set the default timeout for running queries. Details here and here.