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