- marked as minor
support MS-SQL TIMESTAMP / ROWVERSION
In MSSQL a ROWVERSION or TIMESTAMP column do not contain a date time. Instead the contain an 8-byte integer. Currently, the column is set as sqlachemy.sql.sqltypes.TIMESTAMP, which is an instance of the DateTime type. Running a query against a table with such a column returns a byte string value for those columns. The mssql dialect should probably have a specific ROWVERSION type and it should be an integer, not a DateTime. Also, it would be nice if the values of those columns returned an integer by using int.from_bytes to convert the byte string.
Comments (3)
-
reporter -
repo owner As mentioned earlier, TIMESTAMP is just a datatype, it doesnt "return" a DateTime type if the database driver doesn't. The test you're looking for here is specifically:
assert not isinstance(mssql.TIMESTAMP, sqltypes.DateTime)
as for integer conversion, at best this would be a flag on mssql.TIMESTAMP type "convert_int=True" as this type advertises itself at https://msdn.microsoft.com/en-us/library/ms182776%28v=SQL.90%29.aspx as a binary number.
additionally, it's deprecated in favor of ROWVERSION:
https://docs.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql
nevertheless, mssql.TIMESTAMP should be a subclass of ROWVERSION. TIMESTAMP also seems to allow a goofy "no column name" syntax and I'd propose we have no support for that.
ROWVERSION is also a binary so should subclass sqltypes._Binary.
-
repo owner - marked as major
- changed milestone to 1.2
- changed title to support MS-SQL TIMESTAMP / ROWVERSION
- changed component to mssql
- marked as enhancement
- Log in to comment