[freetds] db-lib: support for new MS SQL 2008 data types - part 3
James K. Lowden
jklowden at freetds.org
Fri Apr 18 17:27:45 EDT 2014
On Fri, 18 Apr 2014 09:26:03 +0100
Frediano Ziglio <freddy77 at gmail.com> wrote:
> Well... all these looks quite paranoid but external ABI needs to stay
> so is better to decide what to stick into the dbdata structure!
> date: perhaps would be better to just store the number from wire
> (converted to 32 bit) without bias;
> time: perhaps would be better to just store the number from wire
> time_spec: use 3 bit instead of 4 ? We just need a range from 0 to 7.
> Another idea could be to use a single byte instead and separate all
> other flags. As compiler usually reserve bits from the bottom and as
> this bitfield is the first is much easier for the cpu to extract this
> number. Personally I would keep the bitfield reducing to 3 bits.
> has_time, has_date and has_offset: they are fine. The only change I
> would insert a TDS_USMALLINT _res:10 before. In such was all the
> single bits will occupy the top position leaving space for extensions.
> Order of the fields are optimized to reduce structure size.
If I could chime in here, I don't understand all the sturm und drang
over this type. You need a wire-image type, no matter how ungainly. If
it's three bytes, it's three bytes. Return those three bytes as-is from
dbdata. Write converters to other types that are easier to use. Maybe
define macros to make the bits easier to interpret in situ.
Every SYB type maps to a DB type (e.g. SQLINT, DBINT). Why mess with
that? Just extend it. Define a struct that more conveniently
represents the new date type; probably you want to mimic whatever
Microsoft does for ODBC. Won't anything else just mean more work?
More information about the FreeTDS