1#!perl
2
3printf qq(/* %s */\n), '($Id: tds_willconvert.pl 487464 2015-12-17 19:10:00Z ucko $)';
4printf qq(/*** %-67s ***/\n), "Please do not edit this file!";
5printf qq(/*** %-67s ***/\n), "It was generated with 'perl tds_willconvert.pl > tds_willconvert.h'";
6printf qq(/*** %-67s ***/\n), "It is much easier to edit the __DATA__ table than this file.  ";
7printf qq(/*** %-67s ***/\n), " ";
8printf qq(/*** %67s ***/\n\n), "Thank you.";
9
10%yn = 	( T => 1
11	, t => 0	# should be true, but not yet implemented.
12	, F => 0
13	);
14
15$indent = "\t ";
16
17sub category($) {
18	$_ = shift;
19	return qw(INT1 UINT1 INT2 UINT2 INT4 UINT4 INT8 UINT8) if $_ eq 'INTx';
20	return qw(MONEY MONEY4) if $_ eq 'MONEYx';
21	return qw(FLT8 REAL) if $_ eq 'FLTx';
22	return qw(DATETIME DATETIME4) if $_ eq 'DATETIMEx';
23	return $_;
24}
25
26while(<DATA>) {
27	next if /^\s+To\s*$/;
28	next if /^From/;
29	if( /^\s+VARCHAR CHAR/ ) {
30		@to = split;
31		next;
32	}
33	last if /^\s*$/;
34
35	@yn = split;
36	$from = shift @yn;
37	foreach $from (category($from)) {
38		$i = 0;
39		foreach $to (@to) {
40			foreach $to (category($to)) {
41				printf "$indent %-35s, %s }\n", "{ SYB${from}, SYB${to}", $yn{$yn[$i]};
42			}
43			++$i;
44			$indent = "\t,";
45		}
46	}
47}
48
49__DATA__
50          To
51From
52          VARCHAR CHAR TEXT BINARY VARBINARY IMAGE INTx FLTx NUMERIC DECIMAL BIT MONEYx DATETIMEx BOUNDARY UNIQUE SENSITIVITY
53VARCHAR     T      T   T    T      T         T     T    T    T       T       T   T      T         T        T      t
54CHAR        T      T   T    T      T         T     T    T    T       T       T   T      T         T        T      t
55TEXT        T      T   T    T      T         T     T    T    T       T       T   T      T         T        T      t
56BINARY      T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
57VARBINARY   T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
58IMAGE       T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
59INTx        T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
60FLTx        T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
61NUMERIC     T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
62DECIMAL     T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
63BIT         T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
64MONEYx      T      T   T    T      T         T     T    T    T       T       T   T      F         F        F      F
65DATETIMEx   T      T   T    T      T         T     F    F    F       F       F   F      T         F        F      F
66BOUNDARY    T      T   T    F      F         F     F    F    F       F       F   F      F         T        F      F
67UNIQUE      T      T   T    F      F         F     F    F    F       F       F   F      F         F        T      F
68SENSITIVITY t      t   t    F      F         F     F    F    F       F       F   F      F         F        F      t
69