Skip to content

Commit

Permalink
Fix for implementation for ODBC-152. Boolean type support for Firebird 3
Browse files Browse the repository at this point in the history
  • Loading branch information
alexpotapchenko committed Jan 6, 2014
1 parent 59ea0d0 commit 3f5b7c6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
15 changes: 15 additions & 0 deletions OdbcConvert.cpp
Expand Up @@ -141,6 +141,8 @@ ADRESS_FUNCTION OdbcConvert::getAdressFunction(DescRecord * from, DescRecord * t
switch(to->conciseType)
{
case SQL_C_BIT:
bIdentity = true;
return &OdbcConvert::convTinyIntToBoolean;
case SQL_C_TINYINT:
case SQL_C_UTINYINT:
case SQL_C_STINYINT:
Expand Down Expand Up @@ -186,6 +188,7 @@ ADRESS_FUNCTION OdbcConvert::getAdressFunction(DescRecord * from, DescRecord * t
switch(to->conciseType)
{
case SQL_C_BIT:
return &OdbcConvert::convShortToBoolean;
case SQL_C_TINYINT:
case SQL_C_UTINYINT:
case SQL_C_STINYINT:
Expand Down Expand Up @@ -240,6 +243,7 @@ ADRESS_FUNCTION OdbcConvert::getAdressFunction(DescRecord * from, DescRecord * t
switch(to->conciseType)
{
case SQL_C_BIT:
return &OdbcConvert::convLongToBoolean;
case SQL_C_TINYINT:
case SQL_C_UTINYINT:
case SQL_C_STINYINT:
Expand Down Expand Up @@ -288,6 +292,7 @@ ADRESS_FUNCTION OdbcConvert::getAdressFunction(DescRecord * from, DescRecord * t
switch(to->conciseType)
{
case SQL_C_BIT:
return &OdbcConvert::convFloatToBoolean;
case SQL_C_TINYINT:
case SQL_C_UTINYINT:
case SQL_C_STINYINT:
Expand Down Expand Up @@ -321,6 +326,7 @@ ADRESS_FUNCTION OdbcConvert::getAdressFunction(DescRecord * from, DescRecord * t
switch(to->conciseType)
{
case SQL_C_BIT:
return &OdbcConvert::convDoubleToBoolean;
case SQL_C_TINYINT:
case SQL_C_UTINYINT:
case SQL_C_STINYINT:
Expand Down Expand Up @@ -358,6 +364,7 @@ ADRESS_FUNCTION OdbcConvert::getAdressFunction(DescRecord * from, DescRecord * t
switch(to->conciseType)
{
case SQL_C_BIT:
return &OdbcConvert::convBigintToBoolean;
case SQL_C_TINYINT:
case SQL_C_UTINYINT:
case SQL_C_STINYINT:
Expand Down Expand Up @@ -401,6 +408,7 @@ ADRESS_FUNCTION OdbcConvert::getAdressFunction(DescRecord * from, DescRecord * t
switch(to->conciseType)
{
case SQL_C_BIT:
return &OdbcConvert::convNumericToBoolean;
case SQL_C_TINYINT:
case SQL_C_UTINYINT:
case SQL_C_STINYINT:
Expand Down Expand Up @@ -1630,6 +1638,7 @@ int OdbcConvert::convGuidToStringW(DescRecord * from, DescRecord * to)
// TinyInt
////////////////////////////////////////////////////////////////////////

ODBCCONVERT_CONV(TinyInt,char,Boolean,bool);
ODBCCONVERT_CONV(TinyInt,char,TinyInt,char);
ODBCCONVERT_CONV(TinyInt,unsigned char,Short,short);
ODBCCONVERT_CONV(TinyInt,unsigned char,Long,int);
Expand All @@ -1644,6 +1653,7 @@ ODBCCONVERT_CONVTAGNUMERIC(TinyInt,unsigned char);
// Short
////////////////////////////////////////////////////////////////////////

ODBCCONVERT_CONV(Short,short,Boolean,bool);
ODBCCONVERT_CONV(Short,short,TinyInt,char);
ODBCCONVERT_CONV(Short,short,Short,short);
ODBCCONVERT_CONV(Short,short,Long,int);
Expand All @@ -1664,6 +1674,7 @@ ODBCCONVERT_CONVTAGNUMERIC(Short,short);
// Long
////////////////////////////////////////////////////////////////////////

ODBCCONVERT_CONV(Long,int,Boolean,bool);
ODBCCONVERT_CONV(Long,int,TinyInt,char);
ODBCCONVERT_CONV(Long,int,Short,short);
ODBCCONVERT_CONV(Long,int,Long,int);
Expand All @@ -1687,6 +1698,7 @@ ODBCCONVERT_CONVTAGNUMERIC(Long,int);
ODBCCONVERT_CONVROUND(Float,float,TinyInt,char);
ODBCCONVERT_CONVROUND(Float,float,Short,short);
ODBCCONVERT_CONVROUND(Float,float,Long,int);
ODBCCONVERT_CONV(Float,float,Boolean,bool);
ODBCCONVERT_CONV(Float,float,Float,float);
ODBCCONVERT_CONV(Float,float,Double,double);
ODBCCONVERT_CONVROUND(Float,float,Bigint,QUAD);
Expand Down Expand Up @@ -1745,6 +1757,7 @@ int OdbcConvert::convFloatToStringW(DescRecord * from, DescRecord * to)
ODBCCONVERT_CONVROUND(Double,double,TinyInt,char);
ODBCCONVERT_CONVROUND(Double,double,Short,short);
ODBCCONVERT_CONVROUND(Double,double,Long,int);
ODBCCONVERT_CONV(Double,double,Boolean,bool);
ODBCCONVERT_CONV(Double,double,Float,float);
ODBCCONVERT_CONV(Double,double,Double,double);
ODBCCONVERT_CONVROUND(Double,double,Bigint,QUAD);
Expand Down Expand Up @@ -1847,6 +1860,7 @@ int OdbcConvert::convDoubleToStringW(DescRecord * from, DescRecord * to)
// Bigint
////////////////////////////////////////////////////////////////////////

ODBCCONVERT_BIGINT_CONV(Boolean,bool);
ODBCCONVERT_BIGINT_CONV(TinyInt,char);
ODBCCONVERT_BIGINT_CONV(Short,short);
ODBCCONVERT_BIGINT_CONV(Long,int);
Expand All @@ -1864,6 +1878,7 @@ ODBCCONVERT_CONVTAGNUMERIC(Bigint,QUAD);
// Numeric,Decimal
////////////////////////////////////////////////////////////////////////

ODBCCONVERT_CONV(Numeric,QUAD,Boolean,bool);
ODBCCONVERT_CONV(Numeric,QUAD,TinyInt,char);
ODBCCONVERT_CONV(Numeric,QUAD,Short,short);
ODBCCONVERT_CONV(Numeric,QUAD,Long,int);
Expand Down
19 changes: 13 additions & 6 deletions OdbcConvert.h
Expand Up @@ -96,6 +96,7 @@ class OdbcConvert
int convGuidToStringW(DescRecord * from, DescRecord * to);

// TinyInt
int convTinyIntToBoolean(DescRecord * from, DescRecord * to);
int convTinyIntToTinyInt(DescRecord * from, DescRecord * to);
int convTinyIntToShort(DescRecord * from, DescRecord * to);
int convTinyIntToLong(DescRecord * from, DescRecord * to);
Expand All @@ -107,6 +108,7 @@ class OdbcConvert
int convTinyIntToTagNumeric(DescRecord * from, DescRecord * to);

// Short
int convShortToBoolean(DescRecord * from, DescRecord * to);
int convShortToTinyInt(DescRecord * from, DescRecord * to);
int convShortToShort(DescRecord * from, DescRecord * to);
int convShortToLong(DescRecord * from, DescRecord * to);
Expand All @@ -124,9 +126,10 @@ class OdbcConvert
int convShortToTagNumeric(DescRecord * from, DescRecord * to);

// Long
int convLongToLong(DescRecord * from, DescRecord * to);
int convLongToBoolean(DescRecord * from, DescRecord * to);
int convLongToTinyInt(DescRecord * from, DescRecord * to);
int convLongToShort(DescRecord * from, DescRecord * to);
int convLongToLong(DescRecord * from, DescRecord * to);
int convLongToFloat(DescRecord * from, DescRecord * to);
int convLongToDouble(DescRecord * from, DescRecord * to);
int convLongToBigint(DescRecord * from, DescRecord * to);
Expand All @@ -141,19 +144,21 @@ class OdbcConvert
int convLongToTagNumeric(DescRecord * from, DescRecord * to);

// Float
int convFloatToLong(DescRecord * from, DescRecord * to);
int convFloatToBoolean(DescRecord * from, DescRecord * to);
int convFloatToTinyInt(DescRecord * from, DescRecord * to);
int convFloatToShort(DescRecord * from, DescRecord * to);
int convFloatToLong(DescRecord * from, DescRecord * to);
int convFloatToFloat(DescRecord * from, DescRecord * to);
int convFloatToDouble(DescRecord * from, DescRecord * to);
int convFloatToBigint(DescRecord * from, DescRecord * to);
int convFloatToString(DescRecord * from, DescRecord * to);
int convFloatToStringW(DescRecord * from, DescRecord * to);

// Double
int convDoubleToLong(DescRecord * from, DescRecord * to);
int convDoubleToBoolean(DescRecord * from, DescRecord * to);
int convDoubleToTinyInt(DescRecord * from, DescRecord * to);
int convDoubleToShort(DescRecord * from, DescRecord * to);
int convDoubleToLong(DescRecord * from, DescRecord * to);
int convDoubleToFloat(DescRecord * from, DescRecord * to);
int convDoubleToDouble(DescRecord * from, DescRecord * to);
int convDoubleToBigint(DescRecord * from, DescRecord * to);
Expand All @@ -162,9 +167,10 @@ class OdbcConvert
int convDoubleToTagNumeric(DescRecord * from, DescRecord * to);

// Bigint
int convBigintToLong(DescRecord * from, DescRecord * to);
int convBigintToBoolean(DescRecord * from, DescRecord * to);
int convBigintToTinyInt(DescRecord * from, DescRecord * to);
int convBigintToShort(DescRecord * from, DescRecord * to);
int convBigintToLong(DescRecord * from, DescRecord * to);
int convBigintToFloat(DescRecord * from, DescRecord * to);
int convBigintToDouble(DescRecord * from, DescRecord * to);
int convBigintToFloatWithScale(DescRecord * from, DescRecord * to);
Expand All @@ -176,18 +182,19 @@ class OdbcConvert
int convBigintToTagNumeric(DescRecord * from, DescRecord * to);

// Numeric, Decimal
int convNumericToLong(DescRecord * from, DescRecord * to);
int convNumericToBoolean(DescRecord * from, DescRecord * to);
int convNumericToTinyInt(DescRecord * from, DescRecord * to);
int convNumericToShort(DescRecord * from, DescRecord * to);
int convNumericToLong(DescRecord * from, DescRecord * to);
int convNumericToFloat(DescRecord * from, DescRecord * to);
int convNumericToDouble(DescRecord * from, DescRecord * to);
int convNumericToBigint(DescRecord * from, DescRecord * to);
int convNumericToTagNumeric(DescRecord * from, DescRecord * to);

// TagNumeric
int convTagNumericToLong(DescRecord * from, DescRecord * to);
int convTagNumericToTinyInt(DescRecord * from, DescRecord * to);
int convTagNumericToShort(DescRecord * from, DescRecord * to);
int convTagNumericToLong(DescRecord * from, DescRecord * to);
int convTagNumericToFloat(DescRecord * from, DescRecord * to);
int convTagNumericToDouble(DescRecord * from, DescRecord * to);
int convTagNumericToBigint(DescRecord * from, DescRecord * to);
Expand Down

0 comments on commit 3f5b7c6

Please sign in to comment.