[ freetds-Patches-582445 ] Add VARCHAR to conve rt t able

Lowden, James K LowdenJK at bernstein.com
Wed Jul 17 14:18:15 EDT 2002


> From: Lowden, James K [mailto:LowdenJK at bernstein.com]
> Sent: July 16, 2002 5:23 PM

> > Patches item #582445, was opened at 2002-07-16 22:08
> > You can respond by visiting: 
> > https://sourceforge.net/tracker/?func=detail&atid=407808&aid=5
> > 82445&group_id=33106
> > 
> > Convert table (in convert.c) do not handle VARCHAR

Conversion truth table for MS SQL Server 7.0 attached.  Of the types that
are present in FreeTDS but not handled in tds_willconvert.h, there are two
sets.  

These types are not mentioned in MS's convert documentation or .h:

	BITN	not distiguished from BIT
	INT8
	NTEXT
	NVARCHAR
	UNIQUE
	VARIANT

Bill, Brian, what do you think about NTEXT and NVARCHAR?  Are they handled
transparently, same as TEXT and VARCHAR?  What happens if you convert
VARCHAR to NVARCHAR?  Do you get UCS-2 in the output?  

Should the convert functions be able to convert to/from UTF-8?  We have no
defined type for it.  

At present tds_willconvert() returns FALSE for the above types.  

These types can be added to tds_willconvert.h based on the attached table:

	DATETIMN
	FLTN
	INTN
	MONEYN
	VARBINARY
	VARCHAR
	VOID

What to do?  Notes to me when I get back or to anyone else in the meantime,
comments welcome:

* Add varchar (Freddy's patch), and varbinary to the existing truth table.

Prepend these tests to tds_willconvert():

* If either is void, return false.  Or ignore it; anything not in the table
returns false.  
* If src/dest is nullable type, assign it an equivalent non-null type before
entering the loop:

switch(srctype) { 
	case: SYBBITN:	srctype = SYBBIT; break;
	[etc.]
}

... then process normally.

--jkl


-------------- next part --------------
	BINARY	BIT	CHAR	DATETIM4	DATETIME	DATETIMN	DECIMAL	FLT4	FLT8	FLTN	IMAGE	INT1	INT2	INT4	INTN	MONEY	MONEY4	MONEYN	NUMERIC	TEXT	VARBINARY	VARCHAR	VOID
BINARY	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
BIT	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	0	0	0	1	1	1	1	0
CHAR	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
DATETIM4	1	0	1	1	1	1	0	0	0	0	1	0	0	0	0	0	0	0	0	1	1	1	0
DATETIME	1	0	1	1	1	1	0	0	0	0	1	0	0	0	0	0	0	0	0	1	1	1	0
DATETIMN	1	0	1	1	1	1	0	0	0	0	1	0	0	0	0	0	0	0	0	1	1	1	0
DECIMAL	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
FLT4	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
FLT8	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
FLTN	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
IMAGE	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
INT1	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
INT2	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
INT4	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
INTN	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
MONEY	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
MONEY4	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
MONEYN	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
NUMERIC	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
TEXT	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
VARBINARY	1	1	1	0	0	0	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
VARCHAR	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	1	0
VOID	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0


More information about the FreeTDS mailing list