Re: notes on new DATE type

Frediano Ziglio <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <1304744568.6132.2.camel@ricky>
Il giorno ven, 06/05/2011 alle 18.33 -0400, [email protected] ha
scritto:
> Some notes on the new DATE type.  
> 
> http://msdn.microsoft.com/en-us/library/bb677301.aspx
> 
> Type		Token 	Size
> ---------------	------	--------
> DATE		0x28	 3 bytes
> TIME		0x29	 6 bytes
> DATETIME2	0x2a	 9 bytes
> DATETIMEOFFSET	0x2b	11 bytes
> 
> Sample data:
> 
> 1> select * from d
> 2> go
>  name                 smdate
>  -------------------- --------------------
>  a                    1960-01-01
>  a                    1960-02-01
>  a                    1960-03-01
>  a                    1960-04-01
>  a                    1960-06-01
>  a                    1960-10-01
>  a                    1960-11-01
>  a                    1960-12-01
>  
> 1> select cast(smdate as varbinary) from d
> 2> go
> 
>  -----------------------------------------
>  0xf5ea0a
>  0x14eb0a
>  0x31eb0a
>  0x50eb0a
>  0x8deb0a
>  0x07ec0a
>  0x26ec0a
>  0x44ec0a
> 
> These values consistent with the windump+pcap capture below.  Notable: 
> 
> 1.  tds.html is out of date versus our current knowledge. Cf. the size of
> variable-length data in a D1 packet.  
> 
> 2.  Is there a new 2-byte field after the flags in an 0x81 packet? 
> 
> 3.  Size of DATE is always given as 3, apparently, even though the 0x81
> provides no size, implying it's fixed-length.  
> 
> 4.  Even with TDSVER=7.2, bsqlodbc receives DATE from the server as varchar(20).
>  I don't know yet how to convince the server to send DATE tokens.  
> 
> I haven't decoded the values yet.  ISTR discussion, or maybe code, but neither
> we nor jTDS documents the type afaik.  
> 
> Dump follows.  It's an extract of a windump capture of a BCP.EXE session
> uploading 8 rows.  
> 
> --jkl
> 
> 
> 0x0000:  4500 00ab 7870 4000 8006 0000 0a51 259b  [email protected]%.
> 0x0010:  0a52 5092 f5d7 09c4 793a a33a b071 8e11  .RP.....y:.:.q..
> 0x0020:  5018 3fe8 8b6d 0000 0701 0083 0000 0100  P.?..m..........
> 0x0030:  8102 0000 0000 000a 00a7 1400 0904 0001  ................
> 0x0040:  0004 6e00 6100 6d00 6500 0000 0000 0800  ..n.a.m.e.......
> 0x0050:  2806 7300 6d00 6400 6100 7400 6500 d101  (.s.m.d.a.t.e...
> 0x0060:  0061 03f5 ea0a d101 0061 0314 eb0a d101  .a.......a......
> 0x0070:  0061 0331 eb0a d101 0061 0350 eb0a d101  .a.1.....a.P....
> 0x0080:  0061 038d eb0a d101 0061 0307 ec0a d101  .a.......a......
> 0x0090:  0061 0326 ec0a d101 0061 0344 ec0a fd00  .a.&.....a.D....
> 0x00a0:  0000 0000 0000 0000 0000 00              ...........
> 
> Analysis:
> 
> 0x0000:  4500 00ab 7870 4000 8006 0000 0a51 259b  [email protected]%.
> 0x0010:  0a52 5092 f5d7 09c4 793a a33a b071 8e11  .RP.....y:.:.q..
> 0x0020:  5018 3fe8 8b6d 0000 0701 0083 0000 0100  P.?..m..........
> 0x0030:  
> 
> 81	packet: tds result
> 02 00	2 columns
> 
> 00 00	usertype
> 00 00	flags
> 0a 00	???
> a7 	XSYBVARCHAR
> 14 00 	size: 20 bytes
> 09 04 00 01 00	collation
> 04 	namelen: 4 UCS-2 characters
> 6e00 6100 6d00 6500 "name"
> 
> 00 00	usertype
> 00 00 	flags
> 08 00	???
> 28	new type: TDSMSDATE
> 	(no size)
> 	(no collation)
> 06 	namelen: 6 UCS-2 characters
> 7300 6d00 6400 6100 7400 6500 	"smdate"
> 
> d1	packet: data row
> 0100	size: 1 single-byte character
> 61 	"a"
> 03	size: 3 bytes, N.B. NOT NULL! 
> f5 ea 0a 
> 
> d1	packet: data row
> 01 	size: 1 single-byte character
> 61  	"a"
> 03	size: 3 bytes
> 14 eb 0a 
> 
> d1	packet: data row
> 0100	size: 1 single-byte character
> 61  	"a"
> 03	size: 3 bytes
> 31 eb 0a 
> 
> d1	packet: data row
> 01 	size: 1 single-byte character
> 61  	"a"
> 03	size: 3 bytes
> 50 eb 0a 
> 
> d1	packet: data row
> 0100	size: 1 single-byte character
> 61  	"a"
> 03	size: 3 bytes
> 8d eb 0a 
> 
> d1	packet: data row
> 01 	size: 1 single-byte character
> 61  	"a"
> 03	size: 3 bytes
> 07 ec 0a 
> 
> d1	packet: data row
> 0100	size: 1 single-byte character
> 61  	"a"
> 03	size: 3 bytes
> 26 ec 0a 
> 
> d1	packet: data row
> 01 	size: 1 single-byte character
> 61  	"a"
> 03	size: 3 bytes
> 44 ec 0a 
> 
> fd	packet: Result Set Done
> 0000	flags
> 0000	officially unknown? 
> 00 00 00 00
> 00 00 00 00	row count: 0
> 

Working on 7.3 protocol ? Good.

I'll post some patches. DATE is correctly fixed but it's also
nullable... some thing like UNIQUE.

Frediano
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.