freetds AT lists.ibiblio.org
Subject: FreeTDS Development Group
List archive
[freetds] Warning return as copy of last result row (was: Warning: Null value is eliminated by an aggregate or other SET operation.)
- From: "John K. Hohm" <jhohm AT acm.org>
- To: "FreeTDS List" <freetds AT lists.ibiblio.org>
- Subject: [freetds] Warning return as copy of last result row (was: Warning: Null value is eliminated by an aggregate or other SET operation.)
- Date: Fri, 23 Jun 2006 20:17:12 -0500 (CDT)
> Why does the following code print out the last row twice. Once with
> 'ret == SQL_SUCCESS' and once when 'ret == SQL_SUCCESS_WITH_INFO'?
This is a bug in the FreeTDS OBDC driver. It can be seen without a test
table when the following query returns two NULL rows instead of one:
select max(a) as foo from (select cast(null as int) as a) as test
The FreeTDS SQLFetch return values (3) and diagnostics (wrong):
SQL_SUCCESS
SQL_SUCCESS_WITH_INFO 01003:1:8153:[FreeTDS][SQL Server]Warning: Null
value is eliminated by an aggregate or other SET operation.
SQL_NO_DATA
The Microsoft SQLFetch return values (2) and diagnostics (correct):
SQL_SUCCESS
SQL_NO_DATA 01003:1:8153:[Microsoft][ODBC SQL Server Driver][SQL
Server]Warning: Null value is eliminated by an aggregate or other SET
operation.
I have attached a patch to freetds-0.63 that creates a unittest showing
this bug, and a TDSDUMP log of the test failing against a Microsoft SQL
Server 2000 version 8.00.2039 (SP4) from my Debian GNU/Linux machine.
--
John K. Hohm
<jhohm AT acm.org>--- /dev/null 1969-12-31 18:00:00.000000000 -0600
+++ freetds-0.63/src/odbc/unittests/warning.c 2006-06-23 19:53:27.000000000
-0500
@@ -0,0 +1,46 @@
+#include "common.h"
+
+static char software_version[] = "$Id:$";
+static void *no_unused_var_warn[] = { software_version, no_unused_var_warn };
+
+static char one_null_with_warning[] =
+"select max(a) as foo from (select cast(null as int) as a) as test";
+
+int
+main(int argc, char *argv[])
+{
+ int res;
+
+ Connect();
+
+ if (SQLPrepare(Statement, (SQLCHAR *) one_null_with_warning, SQL_NTS)
!= SQL_SUCCESS) {
+ printf("Unable to prepare statement\n");
+ exit(1);
+ }
+
+ if (SQLExecute(Statement) != SQL_SUCCESS) {
+ printf("Unable to execute statement\n");
+ exit(1);
+ }
+
+ res = SQLFetch(Statement);
+ if (res != SQL_SUCCESS && res != SQL_SUCCESS_WITH_INFO) {
+ printf("Unable to fetch row.\n");
+ CheckReturn();
+ exit(1);
+ }
+
+ if (SQLFetch(Statement) != SQL_NO_DATA) {
+ printf("Warning was returned as a result row -- bad!\n");
+ exit(1);
+ }
+ /* Microsoft SQL Server 2000 provides a diagnostic record
+ associated with the second SQLFetch (which returns
+ SQL_NO_DATA) saying "Warning: Null value is eliminated by
+ an aggregate or other SET operation." */
+
+ Disconnect();
+
+ printf("Done.\n");
+ return 0;
+}
--- freetds-0.63/src/odbc/unittests/Makefile.am~ 2004-10-28
10:14:28.000000000 -0500
+++ freetds-0.63/src/odbc/unittests/Makefile.am 2006-06-23 19:54:29.000000000
-0500
@@ -9,7 +9,7 @@
prepare_results testodbc \
data error rebindpar \
convert_error typeinfo \
- const_params
+ const_params warning
check_PROGRAMS = $(TESTS)
@@ -43,6 +43,7 @@
convert_error_SOURCES = convert_error.c common.c common.h
typeinfo_SOURCES = typeinfo.c common.c common.h
const_params_SOURCES = const_params.c common.c common.h
+warning_SOURCES = warning.c common.c common.h
AM_LDFLAGS = -no-install
LIBS = $(ODBCLIB) $(ODBCNODMLIB) @NETWORK_LIBS@20:04:37.050784 Starting log file for FreeTDS 0.63
on 2006-06-23 20:04:37 with debug level 99.
20:04:37.050960 names for ISO-8859-1: ISO-8859-1
20:04:37.050977 names for UTF-8: UTF-8
20:04:37.050991 names for UCS-2LE: UCS-2LE
20:04:37.051004 names for UCS-2BE: UCS-2BE
20:04:37.051018 iconv to convert client-side data to the "ISO-8859-1"
character set
20:04:37.051062 tds_iconv_info_init: converting "ISO-8859-1"->"UCS-2LE"
20:04:37.051102 tds_iconv_info_init: converting "ISO-8859-1"->"UCS-2LE"
20:04:37.051128 Connecting to 69.209.46.75 port 1433, TDS 8.0.
20:04:37.051783 tds_put_string converting 5 bytes of "thiki"
20:04:37.051816 tds_put_string wrote 10 bytes
20:04:37.051830 tds_put_string converting 5 bytes of "jhohm"
20:04:37.051845 tds_put_string wrote 10 bytes
20:04:37.051864 tds_put_string wrote 0 bytes
20:04:37.051878 tds_put_string converting 6 bytes of "aspdb1"
20:04:37.051892 tds_put_string wrote 12 bytes
20:04:37.051905 tds_put_string wrote 0 bytes
20:04:37.051918 tds_put_string converting 10 bytes of "us_english"
20:04:37.051933 tds_put_string wrote 20 bytes
20:04:37.051946 tds_put_string converting 6 bytes of "tempdb"
20:04:37.051960 tds_put_string wrote 12 bytes
20:04:37.051998 tds_process_login_tokens()
20:04:37.053003 Received header
0000 04 01 01 71 00 44 01 00- |...q.D..|
20:04:37.053037 Received packet
0000 e3 1b 00 01 06 74 00 65-00 6d 00 70 00 64 00 62 |.....t.e .m.p.d.b|
0010 00 06 6d 00 61 00 73 00-74 00 65 00 72 00 ab 62 |..m.a.s. t.e.r..b|
0020 00 45 16 00 00 02 00 25-00 43 00 68 00 61 00 6e |.E.....% .C.h.a.n|
0030 00 67 00 65 00 64 00 20-00 64 00 61 00 74 00 61 |.g.e.d. .d.a.t.a|
0040 00 62 00 61 00 73 00 65-00 20 00 63 00 6f 00 6e |.b.a.s.e . .c.o.n|
0050 00 74 00 65 00 78 00 74-00 20 00 74 00 6f 00 20 |.t.e.x.t . .t.o. |
0060 00 27 00 74 00 65 00 6d-00 70 00 64 00 62 00 27 |.'.t.e.m .p.d.b.'|
0070 00 2e 00 06 41 00 53 00-50 00 44 00 42 00 31 00 |....A.S. P.D.B.1.|
0080 00 00 00 e3 08 00 07 05-09 04 d0 00 34 00 e3 17 |........ ....4...|
0090 00 02 0a 75 00 73 00 5f-00 65 00 6e 00 67 00 6c |...u.s._ .e.n.g.l|
00a0 00 69 00 73 00 68 00 00-ab 66 00 47 16 00 00 01 |.i.s.h.. .f.G....|
00b0 00 27 00 43 00 68 00 61-00 6e 00 67 00 65 00 64 |.'.C.h.a .n.g.e.d|
00c0 00 20 00 6c 00 61 00 6e-00 67 00 75 00 61 00 67 |. .l.a.n .g.u.a.g|
00d0 00 65 00 20 00 73 00 65-00 74 00 74 00 69 00 6e |.e. .s.e .t.t.i.n|
00e0 00 67 00 20 00 74 00 6f-00 20 00 75 00 73 00 5f |.g. .t.o . .u.s._|
00f0 00 65 00 6e 00 67 00 6c-00 69 00 73 00 68 00 2e |.e.n.g.l .i.s.h..|
0100 00 06 41 00 53 00 50 00-44 00 42 00 31 00 00 00 |..A.S.P. D.B.1...|
0110 00 ad 36 00 01 71 00 00-01 16 4d 00 69 00 63 00 |..6..q.. ..M.i.c.|
0120 72 00 6f 00 73 00 6f 00-66 00 74 00 20 00 53 00 |r.o.s.o. f.t. .S.|
0130 51 00 4c 00 20 00 53 00-65 00 72 00 76 00 65 00 |Q.L. .S. e.r.v.e.|
0140 72 00 00 00 00 00 08 00-07 f7 e3 13 00 04 04 34 |r....... .......4|
0150 00 30 00 39 00 36 00 04-34 00 30 00 39 00 36 00 |.0.9.6.. 4.0.9.6.|
0160 fd 00 00 00 00 00 00 00-00 |........ .|
20:04:37.053380 looking for login token, got e3(ENVCHANGE)
20:04:37.053397 tds_process_default_tokens() marker is e3(ENVCHANGE)
20:04:37.053416 tds_get_string: reading 12 from wire to give 6 to client.
20:04:37.053437 tds_get_string: reading 12 from wire to give 6 to client.
20:04:37.053454 looking for login token, got ab(INFO)
20:04:37.053468 tds_process_default_tokens() marker is ab(INFO)
20:04:37.053483 tds_get_string: reading 74 from wire to give 37 to client.
20:04:37.053499 tds_get_string: reading 12 from wire to give 6 to client.
20:04:37.053526 looking for login token, got e3(ENVCHANGE)
20:04:37.053540 tds_process_default_tokens() marker is e3(ENVCHANGE)
20:04:37.054640 tds_iconv_info_init: converting "ISO-8859-1"->"CP1252"
20:04:37.054669 looking for login token, got e3(ENVCHANGE)
20:04:37.054684 tds_process_default_tokens() marker is e3(ENVCHANGE)
20:04:37.054698 tds_get_string: reading 20 from wire to give 10 to client.
20:04:37.054716 looking for login token, got ab(INFO)
20:04:37.054730 tds_process_default_tokens() marker is ab(INFO)
20:04:37.054778 tds_get_string: reading 78 from wire to give 39 to client.
20:04:37.054795 tds_get_string: reading 12 from wire to give 6 to client.
20:04:37.054816 looking for login token, got ad(LOGINACK)
20:04:37.054831 tds_get_string: reading 44 from wire to give 22 to client.
20:04:37.054847 looking for login token, got e3(ENVCHANGE)
20:04:37.054860 tds_process_default_tokens() marker is e3(ENVCHANGE)
20:04:37.054875 tds_get_string: reading 8 from wire to give 4 to client.
20:04:37.054889 tds_get_string: reading 8 from wire to give 4 to client.
20:04:37.054906 increasing block size from 4096 to 4096
20:04:37.054927 looking for login token, got fd(DONE)
20:04:37.054941 tds_process_default_tokens() marker is fd(DONE)
20:04:37.054955 tds_process_end: more_results = 0
was_cancelled = 0
error = 0
done_count_valid = 0
20:04:37.054969 tds_process_end() state set to TDS_IDLE
20:04:37.054982 leaving tds_process_login_tokens() returning 1
20:04:37.055004 tds_free_all_results()
20:04:37.055019 tds_put_string converting 19 bytes of "set textsize 65536 "
20:04:37.055035 tds_put_string wrote 38 bytes
20:04:37.055048 Sending packet
0000 01 01 00 2e 00 00 01 00-73 00 65 00 74 00 20 00 |........ s.e.t. .|
0010 74 00 65 00 78 00 74 00-73 00 69 00 7a 00 65 00 |t.e.x.t. s.i.z.e.|
0020 20 00 36 00 35 00 35 00-33 00 36 00 20 00 | .6.5.5. 3.6. .|
20:04:37.055745 Received header
0000 04 01 00 11 00 44 01 00- |.....D..|
20:04:37.055770 Received packet
0000 fd 00 00 be 00 00 00 00-00 |........ .|
20:04:37.055788 processing result tokens. marker is fd(DONE)
20:04:37.055803 tds_process_end: more_results = 0
was_cancelled = 0
error = 0
done_count_valid = 0
20:04:37.055816 tds_process_end() state set to TDS_IDLE
20:04:37.055830 tds_process_result_tokens() state is COMPLETED
20:04:37.055855 SQLGetFunctions: fFunction is 1
20:04:37.055869 SQLGetFunctions: fFunction is 2
20:04:37.055883 SQLGetFunctions: fFunction is 1001
20:04:37.055897 SQLGetFunctions: fFunction is 3
20:04:37.055911 SQLGetFunctions: fFunction is 4
20:04:37.055924 SQLGetFunctions: fFunction is 1002
20:04:37.055938 SQLGetFunctions: fFunction is 72
20:04:37.055951 SQLGetFunctions: fFunction is 5
20:04:37.055965 SQLGetFunctions: fFunction is 1003
20:04:37.055978 SQLGetFunctions: fFunction is 6
20:04:37.055991 SQLGetFunctions: fFunction is 6
20:04:37.056004 SQLGetFunctions: fFunction is 56
20:04:37.056018 SQLGetFunctions: fFunction is 40
20:04:37.056031 SQLGetFunctions: fFunction is 7
20:04:37.056045 SQLGetFunctions: fFunction is 1004
20:04:37.056058 SQLGetFunctions: fFunction is 8
20:04:37.056072 SQLGetFunctions: fFunction is 9
20:04:37.056085 SQLGetFunctions: fFunction is 41
20:04:37.056098 SQLGetFunctions: fFunction is 1005
20:04:37.056111 SQLGetFunctions: fFunction is 10
20:04:37.056125 SQLGetFunctions: fFunction is 11
20:04:37.056140 SQLGetFunctions: fFunction is 12
20:04:37.056153 SQLGetFunctions: fFunction is 13
20:04:37.056166 SQLGetFunctions: fFunction is 1021
20:04:37.056180 SQLGetFunctions: fFunction is 60
20:04:37.056193 SQLGetFunctions: fFunction is 15
20:04:37.056207 SQLGetFunctions: fFunction is 1006
20:04:37.056220 SQLGetFunctions: fFunction is 16
20:04:37.056233 SQLGetFunctions: fFunction is 14
20:04:37.056247 SQLGetFunctions: fFunction is 1007
20:04:37.056260 SQLGetFunctions: fFunction is 42
20:04:37.056273 SQLGetFunctions: fFunction is 17
20:04:37.056287 SQLGetFunctions: fFunction is 43
20:04:37.056300 SQLGetFunctions: fFunction is 1008
20:04:37.056314 SQLGetFunctions: fFunction is 1009
20:04:37.056327 SQLGetFunctions: fFunction is 1010
20:04:37.056340 SQLGetFunctions: fFunction is 1012
20:04:37.056353 SQLGetFunctions: fFunction is 44
20:04:37.056367 SQLGetFunctions: fFunction is 45
20:04:37.056380 SQLGetFunctions: fFunction is 1014
20:04:37.056394 SQLGetFunctions: fFunction is 46
20:04:37.056407 SQLGetFunctions: fFunction is 47
20:04:37.056420 SQLGetFunctions: fFunction is 61
20:04:37.056433 SQLGetFunctions: fFunction is 62
20:04:37.056447 SQLGetFunctions: fFunction is 63
20:04:37.056460 SQLGetFunctions: fFunction is 18
20:04:37.056495 SQLGetFunctions: fFunction is 48
20:04:37.056509 SQLGetFunctions: fFunction is 64
20:04:37.056522 SQLGetFunctions: fFunction is 19
20:04:37.056536 SQLGetFunctions: fFunction is 65
20:04:37.056549 SQLGetFunctions: fFunction is 66
20:04:37.056562 SQLGetFunctions: fFunction is 67
20:04:37.056575 SQLGetFunctions: fFunction is 49
20:04:37.056589 SQLGetFunctions: fFunction is 20
20:04:37.056602 SQLGetFunctions: fFunction is 1016
20:04:37.056615 SQLGetFunctions: fFunction is 50
20:04:37.056628 SQLGetFunctions: fFunction is 21
20:04:37.056642 SQLGetFunctions: fFunction is 1017
20:04:37.056655 SQLGetFunctions: fFunction is 1018
20:04:37.056668 SQLGetFunctions: fFunction is 1019
20:04:37.056681 SQLGetFunctions: fFunction is 22
20:04:37.056695 SQLGetFunctions: fFunction is 1020
20:04:37.056708 SQLGetFunctions: fFunction is 51
20:04:37.056721 SQLGetFunctions: fFunction is 52
20:04:37.056735 SQLGetFunctions: fFunction is 53
20:04:37.056748 SQLGetFunctions: fFunction is 70
20:04:37.056761 SQLGetFunctions: fFunction is 54
20:04:37.056775 SQLGetFunctions: fFunction is 23
20:04:37.056788 SQLGetFunctions: fFunction is 1011
20:04:37.056915 tds_free_all_results()
20:04:37.056945 tds_put_string converting 10 bytes of "use tempdb"
20:04:37.056972 tds_put_string wrote 20 bytes
20:04:37.056993 Sending packet
0000 01 01 00 1c 00 00 01 00-75 00 73 00 65 00 20 00 |........ u.s.e. .|
0010 74 00 65 00 6d 00 70 00-64 00 62 00 |t.e.m.p. d.b.|
20:04:37.057624 Received header
0000 04 01 00 9f 00 44 01 00- |.....D..|
20:04:37.057652 Received packet
0000 e3 1b 00 01 06 74 00 65-00 6d 00 70 00 64 00 62 |.....t.e .m.p.d.b|
0010 00 06 74 00 65 00 6d 00-70 00 64 00 62 00 ab 62 |..t.e.m. p.d.b..b|
0020 00 45 16 00 00 01 00 25-00 43 00 68 00 61 00 6e |.E.....% .C.h.a.n|
0030 00 67 00 65 00 64 00 20-00 64 00 61 00 74 00 61 |.g.e.d. .d.a.t.a|
0040 00 62 00 61 00 73 00 65-00 20 00 63 00 6f 00 6e |.b.a.s.e . .c.o.n|
0050 00 74 00 65 00 78 00 74-00 20 00 74 00 6f 00 20 |.t.e.x.t . .t.o. |
0060 00 27 00 74 00 65 00 6d-00 70 00 64 00 62 00 27 |.'.t.e.m .p.d.b.'|
0070 00 2e 00 06 41 00 53 00-50 00 44 00 42 00 31 00 |....A.S. P.D.B.1.|
0080 00 01 00 e3 08 00 07 05-09 04 d0 00 34 00 fd 00 |........ ....4...|
0090 00 e2 00 00 00 00 00 - |.......|
20:04:37.057796 processing result tokens. marker is e3(ENVCHANGE)
20:04:37.057814 tds_process_default_tokens() marker is e3(ENVCHANGE)
20:04:37.057831 tds_get_string: reading 12 from wire to give 6 to client.
20:04:37.057849 tds_get_string: reading 12 from wire to give 6 to client.
20:04:37.057867 processing result tokens. marker is ab(INFO)
20:04:37.057880 tds_process_default_tokens() marker is ab(INFO)
20:04:37.057895 tds_get_string: reading 74 from wire to give 37 to client.
20:04:37.057911 tds_get_string: reading 12 from wire to give 6 to client.
20:04:37.057934 processing result tokens. marker is e3(ENVCHANGE)
20:04:37.057948 tds_process_default_tokens() marker is e3(ENVCHANGE)
20:04:37.057965 processing result tokens. marker is fd(DONE)
20:04:37.057979 tds_process_end: more_results = 0
was_cancelled = 0
error = 0
done_count_valid = 0
20:04:37.057993 tds_process_end() state set to TDS_IDLE
20:04:37.058007 tds_process_result_tokens() state is COMPLETED
20:04:37.058064 Creating prepared statement
20:04:37.058084 tds_free_all_results()
20:04:37.058105 Sending packet
0000 03 01 00 bc 00 00 01 00-ff ff 0b 00 00 00 00 01 |........ ........|
0010 26 04 00 00 00 63 00 00-00 00 09 04 d0 00 34 ff |&....c.. ......4.|
0020 ff ff ff 00 00 63 82 00-00 00 09 04 d0 00 34 82 |.....c.. ......4.|
0030 00 00 00 73 00 65 00 6c-00 65 00 63 00 74 00 20 |...s.e.l .e.c.t. |
0040 00 6d 00 61 00 78 00 28-00 61 00 29 00 20 00 61 |.m.a.x.( .a.). .a|
0050 00 73 00 20 00 66 00 6f-00 6f 00 20 00 66 00 72 |.s. .f.o .o. .f.r|
0060 00 6f 00 6d 00 20 00 28-00 73 00 65 00 6c 00 65 |.o.m. .( .s.e.l.e|
0070 00 63 00 74 00 20 00 63-00 61 00 73 00 74 00 28 |.c.t. .c .a.s.t.(|
0080 00 6e 00 75 00 6c 00 6c-00 20 00 61 00 73 00 20 |.n.u.l.l . .a.s. |
0090 00 69 00 6e 00 74 00 29-00 20 00 61 00 73 00 20 |.i.n.t.) . .a.s. |
00a0 00 61 00 29 00 20 00 61-00 73 00 20 00 74 00 65 |.a.). .a .s. .t.e|
00b0 00 73 00 74 00 00 00 38-01 00 00 00 |.s.t...8 ....|
20:04:37.058865 Received header
0000 04 01 00 3f 00 44 01 00- |...?.D..|
20:04:37.058888 Received packet
0000 81 01 00 00 00 09 00 26-04 03 66 00 6f 00 6f 00 |.......& ..f.o.o.|
0010 ff 01 00 c1 00 00 00 00-00 79 00 00 00 00 ac 0d |........ .y......|
0020 00 00 01 38 00 00 00 26-04 04 01 00 00 00 fe 00 |...8...& ........|
0030 00 e0 00 00 00 00 00 - |.......|
20:04:37.058950 processing result tokens. marker is 81(TDS7_RESULT)
20:04:37.058996 tds_free_all_results()
20:04:37.059013 processing TDS7 result. set current_results to tds->res_info
20:04:37.059030 tds_get_string: reading 6 from wire to give 3 to client.
20:04:37.059045 tds7_get_data_info:1558:
colname = foo (3 bytes)
type = 38 (integer-null)
server's type = 38 (integer-null)
column_varint_size = 1
column_size = 4 (4 on server)
20:04:37.059069 processing result tokens. marker is ff(DONEINPROC)
20:04:37.059083 tds_process_end: more_results = 1
was_cancelled = 0
error = 0
done_count_valid = 0
20:04:37.059098 processing result tokens. marker is 79(RETURNSTATUS)
20:04:37.059112 processing result tokens. marker is ac(PARAM)
20:04:37.059125 processing parameters for sp 11
20:04:37.059139 calling tds_process_param_result
20:04:37.059154 processing result. type = 38(integer-null), varint_size 1
20:04:37.059168 processing result. column_size 4
20:04:37.059183 processing row. column is 0 varint size = 1
20:04:37.059197 processing row. column size is 4
20:04:37.059210 clearing column 0 NULL bit
20:04:37.059224 no of hidden return parameters 1
20:04:37.059238 processing result tokens. marker is fe(DONEPROC)
20:04:37.059252 tds_process_end: more_results = 0
was_cancelled = 0
error = 0
done_count_valid = 0
20:04:37.059266 tds_process_end() state set to TDS_IDLE
20:04:37.059280 tds_process_result_tokens() state is COMPLETED
20:04:37.059298 End prepare, execute
20:04:37.059311 tds_submit_execute()
20:04:37.059324 tds_free_all_results()
20:04:37.059340 Sending packet
0000 03 01 00 27 00 00 01 00-0a 00 73 00 70 00 5f 00 |...'.... ..s.p._.|
0010 65 00 78 00 65 00 63 00-75 00 74 00 65 00 00 00 |e.x.e.c. u.t.e...|
0020 00 00 38 01 00 00 00 - |..8....|
20:04:37.059864 Received header
0000 04 01 00 de 00 44 01 00- |.....D..|
20:04:37.059887 Received packet
0000 81 01 00 00 00 09 00 26-04 03 66 00 6f 00 6f 00 |.......& ..f.o.o.|
0010 d1 00 ab aa 00 d9 1f 00-00 01 00 49 00 57 00 61 |........ ...I.W.a|
0020 00 72 00 6e 00 69 00 6e-00 67 00 3a 00 20 00 4e |.r.n.i.n .g.:. .N|
0030 00 75 00 6c 00 6c 00 20-00 76 00 61 00 6c 00 75 |.u.l.l. .v.a.l.u|
0040 00 65 00 20 00 69 00 73-00 20 00 65 00 6c 00 69 |.e. .i.s . .e.l.i|
0050 00 6d 00 69 00 6e 00 61-00 74 00 65 00 64 00 20 |.m.i.n.a .t.e.d. |
0060 00 62 00 79 00 20 00 61-00 6e 00 20 00 61 00 67 |.b.y. .a .n. .a.g|
0070 00 67 00 72 00 65 00 67-00 61 00 74 00 65 00 20 |.g.r.e.g .a.t.e. |
0080 00 6f 00 72 00 20 00 6f-00 74 00 68 00 65 00 72 |.o.r. .o .t.h.e.r|
0090 00 20 00 53 00 45 00 54-00 20 00 6f 00 70 00 65 |. .S.E.T . .o.p.e|
00a0 00 72 00 61 00 74 00 69-00 6f 00 6e 00 2e 00 06 |.r.a.t.i .o.n....|
00b0 41 00 53 00 50 00 44 00-42 00 31 00 00 01 00 ff |A.S.P.D. B.1.....|
00c0 11 00 c1 00 01 00 00 00-79 00 00 00 00 fe 00 00 |........ y.......|
00d0 e0 00 01 00 00 00 - |......|
20:04:37.060096 processing result tokens. marker is 81(TDS7_RESULT)
20:04:37.060110 tds_free_all_results()
20:04:37.060125 processing TDS7 result. set current_results to tds->res_info
20:04:37.060139 tds_get_string: reading 6 from wire to give 3 to client.
20:04:37.060154 tds7_get_data_info:1558:
colname = foo (3 bytes)
type = 38 (integer-null)
server's type = 38 (integer-null)
column_varint_size = 1
column_size = 4 (4 on server)
20:04:37.060170 processing result tokens. marker is d1(ROW)
20:04:37.060217 processing row tokens. marker is d1(ROW)
20:04:37.060232 processing row. column is 0 varint size = 1
20:04:37.060245 processing row. column size is 0
20:04:37.060259 setting column 0 NULL bit
20:04:37.060274 processing row tokens. marker is ab(INFO)
20:04:37.060288 tds_process_default_tokens() marker is ab(INFO)
20:04:37.060303 tds_get_string: reading 146 from wire to give 73 to client.
20:04:37.060319 tds_get_string: reading 12 from wire to give 6 to client.
20:04:37.060342 processing row tokens. marker is ff(DONEINPROC)
20:04:37.060357 tds_process_end: more_results = 1
was_cancelled = 0
error = 0
done_count_valid = 1
20:04:37.060370 rows_affected = 1
20:04:37.060387 SQLFetch: NO_DATA_FOUND
- [freetds] Warning return as copy of last result row (was: Warning: Null value is eliminated by an aggregate or other SET operation.), John K. Hohm, 06/23/2006
Archive powered by MHonArc 2.6.24.