[TRAFODION-2385] linux SQLTYPECODE_BOOLEAN using

Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/2b987205
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/2b987205
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/2b987205

Branch: refs/heads/master
Commit: 2b987205db02192911c11e0d19fd66193ab025ae
Parents: fe53516
Author: Weixin Xu <weixin...@esgyn.cn>
Authored: Mon Jun 12 17:11:37 2017 +0800
Committer: Weixin Xu <weixin...@esgyn.cn>
Committed: Mon Jun 12 17:11:37 2017 +0800

----------------------------------------------------------------------
 .../odbc/odbcclient/unixcli/cli/ctosqlconv.cpp  | 122 ++++++++++++++-----
 .../odbc/odbcclient/unixcli/cli/sqltocconv.cpp  |  81 ++++++------
 core/sql/cli/sqlcli.h                           |   2 -
 3 files changed, 133 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/2b987205/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/ctosqlconv.cpp
----------------------------------------------------------------------
diff --git a/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/ctosqlconv.cpp 
b/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/ctosqlconv.cpp
index 504c454..6d8f11b 100644
--- a/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/ctosqlconv.cpp
+++ b/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/ctosqlconv.cpp
@@ -326,11 +326,6 @@ unsigned long ODBC::ConvertCToSQL(SQLINTEGER       
ODBCAppVersion,
                targetUnsigned = true;
        }
 
-    if (SQLDataType == SQLTYPECODE_BOOLEAN)
-    {
-        ODBCDataType = SQL_BOOLEAN;
-    }
-
        if (CDataType == SQL_C_DEFAULT)
        {
                getCDefault(tODBCDataType, ODBCAppVersion, targetCharSet, 
CDataType);
@@ -379,6 +374,93 @@ unsigned long ODBC::ConvertCToSQL(SQLINTEGER       
ODBCAppVersion,
                        }
                }
        case SQL_CHAR:
+        if( SQLDataType == SQLTYPECODE_BOOLEAN )
+        {
+            switch (CDataType)
+            {
+            case SQL_C_WCHAR:
+                if (iconv->isAppUTF16())
+                {
+                    if (srcLength != SQL_NTS)
+                        srcLength = srcLength/2;
+                    if (iconv->WCharToUTF8((UChar*)srcDataPtr, srcLength, 
srcDataLocale, sizeof(srcDataLocale), (int*)&translateLength, (char*)errorMsg) 
!= SQL_SUCCESS)
+                        return IDS_193_DRVTODS_ERROR;
+                    srcDataPtr = srcDataLocale;
+                    srcLength = translateLength;
+                }
+            case SQL_C_CHAR:
+                retCode = ConvertCharToNumeric(srcDataPtr, srcLength, dTmp);
+                if (retCode != SQL_SUCCESS)
+                    return retCode;
+                break;
+            case SQL_C_SHORT:
+            case SQL_C_SSHORT:
+                dTmp = *(SSHORT *)srcDataPtr;
+                break;
+            case SQL_C_USHORT:
+                dTmp = *(USHORT *)srcDataPtr;
+                break;
+            case SQL_C_TINYINT:
+            case SQL_C_STINYINT:
+                dTmp = *(SCHAR *)srcDataPtr;
+                break;
+            case SQL_C_UTINYINT:
+            case SQL_C_BIT:
+                dTmp = *(UCHAR *)srcDataPtr;
+                break;
+            case SQL_C_SLONG:
+            case SQL_C_LONG:
+                dTmp = *(SLONG_P *)srcDataPtr;
+                break;
+            case SQL_C_ULONG:
+                dTmp = *(ULONG_P *)srcDataPtr;
+                break;
+            case SQL_C_FLOAT:
+                dTmp = *(SFLOAT *)srcDataPtr;
+                break;
+            case SQL_C_DOUBLE:
+                dTmp = *(DOUBLE *)srcDataPtr;
+                break;
+            case SQL_C_BINARY:
+                DataPtr = srcDataPtr;
+                break;
+            case SQL_C_DEFAULT:
+                if (ODBCAppVersion >= SQL_OV_ODBC3)
+                    DataPtr = srcDataPtr;
+                else
+                {
+                    retCode = ConvertCharToNumeric(srcDataPtr, srcLength, 
dTmp);
+                    if (retCode!= SQL_SUCCESS)
+                        return retCode;
+                }
+                break;
+            case SQL_C_SBIGINT:
+                dTmp = *(__int64 *)srcDataPtr;
+                break;
+            case SQL_C_NUMERIC:
+                ConvertCNumericToChar((SQL_NUMERIC_STRUCT*)srcDataPtr, 
cTmpBuf);
+                srcLength = strlen(cTmpBuf);
+                retCode = ConvertCharToNumeric((char*)cTmpBuf, srcLength, 
dTmp);
+                if (retCode != SQL_SUCCESS)
+                    return retCode;
+                break;
+            default:
+                return IDS_07_006;
+            }
+            if (DataPtr == NULL)
+            {
+                if(dTmp < 0)
+                    return IDS_22_003_02;
+                if(dTmp > 1)
+                    return IDS_22_003;
+                tTmp = (SCHAR)dTmp;
+                if(dTmp != tTmp)
+                    retCode = IDS_01_S07;
+                DataPtr = &tTmp;
+                DataLen = sizeof(SCHAR);
+            }
+            break;
+        }
        case SQL_WCHAR:
                switch (CDataType)
                {
@@ -696,7 +778,6 @@ unsigned long ODBC::ConvertCToSQL(SQLINTEGER        
ODBCAppVersion,
                        DataLen = sizeof(fltTmp);
                        break;
                }
-    case SQL_BOOLEAN:
     case SQL_TINYINT:
        case SQL_SMALLINT:
        case SQL_INTEGER:
@@ -922,17 +1003,6 @@ unsigned long ODBC::ConvertCToSQL(SQLINTEGER      
ODBCAppVersion,
                        {
                                switch (ODBCDataType)
                                {
-                case SQL_BOOLEAN:
-                    if (dTmp < 0)
-                        return IDS_22_003_02;
-                    if (dTmp > 1)
-                        return IDS_22_003;
-                    tTmp = (SCHAR)dTmp;
-                    if (dTmp != tTmp)
-                        retCode = IDS_01_S07;
-                    DataPtr = &tTmp;
-                    DataLen = sizeof(SCHAR);
-                    break;
                 case SQL_TINYINT:
                     if(targetUnsigned)
                     {
@@ -1127,17 +1197,6 @@ unsigned long ODBC::ConvertCToSQL(SQLINTEGER     
ODBCAppVersion,
 
                                switch( SQLDataType )
                                {
-                case SQLTYPECODE_BOOLEAN:
-                    if (tempVal64 < 0)
-                        return IDS_22_003_02;
-                    if (tempVal64 > 1)
-                        return IDS_22_003;
-                    tTmp = (SCHAR)tempVal64;
-                    if (tempVal64 != tTmp)
-                        retCode = IDS_01_S07;
-                    DataPtr = &tTmp;
-                    DataLen = sizeof(SCHAR);
-                    break;
                 case SQLTYPECODE_TINYINT_UNSIGNED:
                     if (tempVal64 < 0)
                         return IDS_22_003_02;
@@ -1248,9 +1307,6 @@ unsigned long ODBC::ConvertCToSQL(SQLINTEGER      
ODBCAppVersion,
                {
                        switch (ODBCDataType)
                        {
-            case SQL_BOOLEAN:
-                DataLen = sizeof(SCHAR);
-                break;
             case SQL_TINYINT:
                 DataLen = sizeof(SCHAR);
                 break;
@@ -3260,7 +3316,7 @@ unsigned long ODBC::ConvertCToSQL(SQLINTEGER      
ODBCAppVersion,
                                 DataPtr, DataLen);
                if (DataPtr != NULL && DataLen > 0 &&
                        (ODBCDataType == SQL_CHAR || ODBCDataType == 
SQL_VARCHAR || ODBCDataType == SQL_LONGVARCHAR ||
-                       ODBCDataType == SQL_WCHAR || ODBCDataType == 
SQL_WVARCHAR) && CDataType != SQL_C_BINARY)
+                       ODBCDataType == SQL_WCHAR || ODBCDataType == 
SQL_WVARCHAR) && CDataType != SQL_C_BINARY && SQLDataType != 
SQLTYPECODE_BOOLEAN)
                {
                        SQLRETURN rc = SQL_SUCCESS;
                        if (targetCharSet == SQLCHARSETCODE_ISO88591)
@@ -3460,7 +3516,7 @@ unsigned long ODBC::ConvertCToSQL(SQLINTEGER      
ODBCAppVersion,
                        if (Datatype_Dependent_Swap((BYTE *)outDataPtr-Offset, 
SQLDataType, targetCharSet, DataLen, IEEE_TO_TANDEM) != STATUS_OK)
                                return IDS_HY_000;
                }
-               if (ODBCDataType == SQL_CHAR || ODBCDataType == SQL_VARCHAR)
+               if (ODBCDataType == SQL_CHAR && SQLDataType != 
SQLTYPECODE_BOOLEAN || ODBCDataType == SQL_VARCHAR)
                        memset((unsigned char *)outDataPtr+DataLen, ' ', 
targetLength-DataLen-Offset-1);
        }
        if (dataTruncatedWarning)

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/2b987205/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/sqltocconv.cpp
----------------------------------------------------------------------
diff --git a/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/sqltocconv.cpp 
b/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/sqltocconv.cpp
index 3c6af61..b1fdcb9 100644
--- a/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/sqltocconv.cpp
+++ b/core/conn/unixodbc/odbc/odbcclient/unixcli/cli/sqltocconv.cpp
@@ -354,11 +354,6 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER       
ODBCAppVersion,
         srcUnsigned = true;
     }
 
-    if (SQLDataType == SQLTYPECODE_BOOLEAN)
-    {
-        ODBCDataType = SQL_BOOLEAN;
-    }
-
        if (CDataType == SQL_C_DEFAULT)
        {
                getCDefault(tODBCDataType, ODBCAppVersion, srcCharSet, 
CDataType);
@@ -415,6 +410,16 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER       
ODBCAppVersion,
                switch (ODBCDataType)
                {
                case SQL_CHAR:
+            if(SQLDataType == SQLTYPECODE_BOOLEAN)
+            {
+                tTmp = *((SCHAR *) srcDataPtr);
+                _ltoa(tTmp, cTmpBuf, 10);
+                DataLen = strlen(cTmpBuf);
+                if(DataLen > targetLength)
+                    return IDS_22_003;
+                DataPtr = cTmpBuf;
+                break;
+            }
                case SQL_WCHAR:
                        charlength = srcLength-1;
                        if (charlength == 0)
@@ -534,14 +539,6 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER       
ODBCAppVersion,
 //                     if (totalReturnedLength != NULL)
 //                             *totalReturnedLength = DataLen + Offset;
                        break;
-        case SQL_BOOLEAN:
-            tTmp = *((SCHAR *) srcDataPtr);
-            _ltoa(tTmp, cTmpBuf, 10);
-            DataLen = strlen(cTmpBuf);
-            if(DataLen > targetLength)
-                return IDS_22_003;
-            DataPtr = cTmpBuf;
-            break;
         case SQL_TINYINT:
             if(srcUnsigned)
             {
@@ -589,15 +586,19 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER      
ODBCAppVersion,
                        LocalizeNumericString = TRUE;
                        break;
                case SQL_BIGINT:
-/*#if !defined MXHPUX && !defined MXOSS && !defined MXAIX && !defined 
MXSUNSPARC
-                       sprintf( cTmpBuf, "%Ld", *((__int64 *)srcDataPtr));
-#else
-                       sprintf( cTmpBuf, "%lld", *((__int64 *)srcDataPtr));
-#endif*/
+#if !defined MXHPUX && !defined MXOSS && !defined MXAIX && !defined MXSUNSPARC
+//                     sprintf( cTmpBuf, "%Ld", *((__int64 *)srcDataPtr));
             if (srcUnsigned)
-                snprintf( cTmpBuf, sizeof(__int64), "%lu", *((__int64 
*)srcDataPtr));
+                snprintf( cTmpBuf, sizeof(unsigned __int64), "%lu", 
*((unsigned __int64 *)srcDataPtr));
             else
                 snprintf( cTmpBuf, sizeof(__int64), "%ld", *((__int64 
*)srcDataPtr));
+#else
+//                     sprintf( cTmpBuf, "%lld", *((__int64 *)srcDataPtr));
+            if (srcUnsigned)
+                snprintf( cTmpBuf, sizeof(unsigned __int64), "%llu", 
*((unsigned __int64 *)srcDataPtr));
+            else
+                snprintf( cTmpBuf, sizeof(__int64), "%lld", *((__int64 
*)srcDataPtr));
+#endif
                        DataLen = strlen(cTmpBuf);
                        if (DataLen > targetLength)
                                return IDS_22_003;
@@ -770,6 +771,16 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER       
ODBCAppVersion,
                switch (ODBCDataType)
                {
                 case SQL_CHAR:
+            if(SQLDataType == SQLTYPECODE_BOOLEAN)
+            {
+                tTmp = *((SCHAR *) srcDataPtr);
+                _ltoa(tTmp, cTmpBuf, 10);
+                DataLen = strlen(cTmpBuf);
+                if(DataLen > targetLength)
+                    return IDS_22_003;
+                DataPtr = cTmpBuf;
+                break;
+            }
                 case SQL_WCHAR:
                        charlength = srcLength-1;
                        if (charlength == 0)
@@ -900,14 +911,6 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER       
ODBCAppVersion,
 //                     if (totalReturnedLength != NULL)
 //                             *totalReturnedLength = DataLen + Offset;
                        break;
-        case SQL_BOOLEAN:
-            tTmp = *((SCHAR *) srcDataPtr);
-            _ltoa(tTmp, cTmpBuf, 10);
-            DataLen = strlen(cTmpBuf);
-            if(DataLen > targetLength)
-                return IDS_22_003;
-            DataPtr = cTmpBuf;
-            break;
         case SQL_TINYINT:
             if(srcUnsigned)
             {
@@ -1148,6 +1151,11 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER     
ODBCAppVersion,
                switch (ODBCDataType)
                {
                case SQL_CHAR:
+            if(SQLDataType == SQLTYPECODE_BOOLEAN)
+            {
+                dTmp = *((SCHAR *) srcDataPtr);
+                break;
+            }
                case SQL_VARCHAR:
                case SQL_LONGVARCHAR:
                case SQL_WCHAR:
@@ -1269,9 +1277,6 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER      
ODBCAppVersion,
                        if ((retCode = ConvertSQLCharToNumeric(srcDataPtr, 
srcLength, ODBCDataType, dTmp)) != SQL_SUCCESS)
                                return retCode;
                        break;
-        case SQL_BOOLEAN:
-            dTmp = *((SCHAR *) srcDataPtr);
-            break;
         case SQL_TINYINT:
             if (srcUnsigned)
             {
@@ -1543,7 +1548,8 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER      
ODBCAppVersion,
                                ODBCDataType != SQL_VARCHAR &&
                                ODBCDataType != SQL_LONGVARCHAR && 
                                ODBCDataType != SQL_WCHAR &&
-                               ODBCDataType != SQL_WVARCHAR)
+                               ODBCDataType != SQL_WVARCHAR ||
+                SQLDataType == SQLTYPECODE_BOOLEAN)
                                tempVal64 = dTmp;
                        DataPtr = &tempVal64;
                        DataLen = sizeof(tempVal64);
@@ -2477,7 +2483,6 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER      
ODBCAppVersion,
 //                     if (totalReturnedLength != NULL)
 //                             *totalReturnedLength = DataLen + Offset;
                        break;
-        case SQL_BOOLEAN:
         case SQL_TINYINT:
                case SQL_SMALLINT:
                case SQL_INTEGER:
@@ -2507,6 +2512,13 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER     
ODBCAppVersion,
                switch (ODBCDataType)
                {
                case SQL_CHAR:
+            if(SQLDataType == SQLTYPECODE_BOOLEAN)
+            {
+                tTmp = *((SCHAR *) srcDataPtr);
+                DataPtr = &tTmp;
+                DataLen = sizeof(SCHAR);
+                break;
+            }
                case SQL_WCHAR:
                        charlength = srcLength-1;
                        if (charlength == 0)
@@ -2596,11 +2608,6 @@ unsigned long ODBC::ConvertSQLToC(SQLINTEGER     
ODBCAppVersion,
                        DataPtr = &intervalTmp;
                        DataLen = sizeof(SQL_INTERVAL_STRUCT);
                        break;
-        case SQL_BOOLEAN:
-            tTmp = *((SCHAR *) srcDataPtr);
-            DataPtr = &tTmp;
-            DataLen = sizeof(SCHAR);
-            break;
         case SQL_TINYINT:
             tTmp = *((SCHAR *) srcDataPtr);
             DataPtr = &tTmp;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/2b987205/core/sql/cli/sqlcli.h
----------------------------------------------------------------------
diff --git a/core/sql/cli/sqlcli.h b/core/sql/cli/sqlcli.h
index b68fee5..98149de 100644
--- a/core/sql/cli/sqlcli.h
+++ b/core/sql/cli/sqlcli.h
@@ -430,8 +430,6 @@ enum SQLTYPE_CODE {
     SQLTYPECODE_BITVAR   = 15   /* not supported */
 };
 
-#define SQL_BOOLEAN     13
-
 /* #ifndef SQLDTCODE_DATE */
 /* specifies the type of datetime data type */
 enum SQLDATETIME_CODE {

Reply via email to