[freetds] dbdatlen() returns 8 for NULL timestamp / rowversion value
geoff.montee at gmail.com
Wed Feb 24 19:35:15 EST 2016
According to MS SQL Server's documentation, the timestamp / rowversion
data type is equivalent to binary(8) or varbinary(8) depending on
whether the column is nullable.
"A nonnullable rowversion column is semantically equivalent to a
binary(8) column. A nullable rowversion column is semantically
equivalent to a varbinary(8) column."
I can confirm that FreeTDS's dbcoltype() function returns 45
(SYBBINARY) as the data type for a timestamp column. I've noticed some
strange behavior by dbdatlen() though.
If I query a NULL binary(8) or varbinary(8) column, then dbdatlen()
returns 0, which makes sense for a NULL column. However, if I query a
NULL timestamp column, then dbdatlen() returns 8. This causes the NULL
checks in my application (tds_fdw) to say that the column is not NULL.
Is this intentional, or is this a bug?
I noticed this behavior on FreeTDS 0.95.19 on RHEL 7.
More information about the FreeTDS