JIRA TRAFODION-2060  Add support for tinyint datatype

-- added support for tinyint datatype to be used in create
   and cast statements
-- added support for returning tinyint in select list and
   input params
-- currently tinyint select list and input params is only enabled for
  queries from sqlci. Some support for it has been added to jdbc T4
  but need to be completed. Until then, tinyint select/param support
  is not enabled for t4/t2/odbc interfaces
-- removed obsolete tandem floating point datatypes


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

Branch: refs/heads/master
Commit: 88ec4feaaabcd2a609653e28496ed44ee9359ee3
Parents: 0e6728d
Author: Anoop Sharma <[email protected]>
Authored: Tue Jun 14 19:14:32 2016 +0000
Committer: Anoop Sharma <[email protected]>
Committed: Tue Jun 14 19:14:32 2016 +0000

----------------------------------------------------------------------
 .../trafodion/jdbc/t4/InterfaceResultSet.java   |  17 +
 .../trafodion/jdbc/t4/InterfaceStatement.java   |  25 +
 .../java/org/trafodion/jdbc/t4/TrafT4Desc.java  |   4 +-
 .../jdbc/t4/TrafT4PreparedStatement.java        |   2 +-
 .../java/org/trafodion/jdbc/t4/Utility.java     |  12 +-
 .../odbc/src/odbc/nsksrvrcore/sqlinterface.cpp  |  65 ++-
 core/sql/cli/CliExpExchange.cpp                 |  29 +-
 core/sql/cli/Descriptor.cpp                     |   8 +-
 core/sql/cli/sqlcli.h                           |   4 +
 core/sql/comexe/ComTdb.cpp                      |  51 --
 core/sql/comexe/ComTdb.h                        |  24 +-
 core/sql/common/BaseTypes.cpp                   |  60 ++-
 core/sql/common/ComSmallDefs.h                  |  10 +
 core/sql/common/NAType.cpp                      |  10 +-
 core/sql/common/NumericType.cpp                 | 153 +++++-
 core/sql/common/NumericType.h                   | 195 ++++---
 core/sql/common/SQLTypeDefs.h                   |   5 +
 core/sql/common/dfs2rec.h                       |   8 +-
 core/sql/executor/ExHbaseIUD.cpp                |   6 +-
 core/sql/exp/ExpPCodeClauseGen.cpp              |   2 -
 core/sql/exp/exp_arith.cpp                      |  99 +---
 core/sql/exp/exp_attrs.cpp                      |   4 +-
 core/sql/exp/exp_clause_derived.h               |  18 +-
 core/sql/exp/exp_comp.cpp                       |  80 +--
 core/sql/exp/exp_conv.cpp                       | 529 +++++++++++++++----
 core/sql/exp/exp_fixup.cpp                      |  44 +-
 core/sql/exp/exp_function.cpp                   | 165 +-----
 core/sql/exp/exp_math_func.cpp                  | 107 +---
 core/sql/generator/GenPreCode.cpp               |  77 +--
 core/sql/langman/LmJavaType.cpp                 |  21 +-
 core/sql/langman/LmJavaType.h                   |   1 +
 core/sql/langman/LmResultSetJava.cpp            |  56 +-
 core/sql/langman/LmRoutineCSql.cpp              |  27 +
 core/sql/optimizer/BindRelExpr.cpp              |  89 +---
 core/sql/optimizer/EncodedValue.cpp             |  10 +-
 core/sql/optimizer/ItemExpr.cpp                 |  10 +-
 core/sql/optimizer/ItemFunc.h                   |  36 +-
 core/sql/optimizer/NAColumn.cpp                 |  50 +-
 core/sql/optimizer/NATable.cpp                  |  57 +-
 core/sql/optimizer/OptRange.cpp                 |   2 -
 core/sql/optimizer/ValueDesc.cpp                |  66 +--
 core/sql/parser/ParKeyWords.cpp                 |   3 -
 core/sql/parser/sqlparser.y                     |  55 +-
 core/sql/regress/executor/EXPECTED022.SB        | 246 ++++++---
 core/sql/regress/executor/TEST022               |  54 +-
 core/sql/regress/hive/EXPECTED005               |   6 +-
 core/sql/regress/hive/tbl_bad.data              |   2 +-
 core/sql/regress/hive/tbl_type.data             |   2 +-
 core/sql/regress/seabase/EXPECTED003            | 425 +++++++++++++++
 core/sql/regress/seabase/TEST003                | 138 +++++
 core/sql/regress/udr/EXPECTED100.SB             |  53 +-
 core/sql/regress/udr/TEST100                    |  13 +
 core/sql/regress/udr/t100.java                  |   4 +
 core/sql/sqlci/Formatter.cpp                    |  14 +-
 core/sql/sqlci/Param.cpp                        |   4 +-
 core/sql/sqlci/SqlciEnv.cpp                     |  28 +-
 core/sql/sqlci/SqlciEnv.h                       |   2 +-
 core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp       |   2 +
 core/sql/sqlcomp/DefaultConstants.h             |  22 +-
 core/sql/sqlcomp/nadefaults.cpp                 |  12 +-
 core/sql/ustat/hs_cli.cpp                       |  42 +-
 core/sql/ustat/hs_faststats.cpp                 |   6 +
 core/sql/ustat/hs_globals.cpp                   | 121 +++--
 63 files changed, 2196 insertions(+), 1296 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceResultSet.java
----------------------------------------------------------------------
diff --git 
a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceResultSet.java 
b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceResultSet.java
index 2d2390b..81ef66c 100644
--- 
a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceResultSet.java
+++ 
b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceResultSet.java
@@ -63,6 +63,10 @@ class InterfaceResultSet {
 
        static final int SQLTYPECODE_BPINT_UNSIGNED = -503;
 
+        /* TINYINT */
+        static final int SQLTYPECODE_TINYINT                = -403;
+        static final int SQLTYPECODE_TINYINT_UNSIGNED       = -404;
+
        /*
         * DOUBLE depending on precision
         */
@@ -263,6 +267,14 @@ class InterfaceResultSet {
                                break;
                        }
                        break;
+               case SQLTYPECODE_TINYINT:
+                        short sValue1 = (byte) ibuffer[byteIndex];
+                       retObj = new Short(sValue1);
+                       break;
+               case SQLTYPECODE_TINYINT_UNSIGNED:
+                        short sValue2 = (byte) ibuffer[byteIndex];
+                       retObj = new Short(sValue2);
+                       break;
                case SQLTYPECODE_SMALLINT:
                        short sValue = Bytes.extractShort(ibuffer, byteIndex, 
this.ic_.getByteSwap());
                        retObj = new Short(sValue);
@@ -503,6 +515,11 @@ class InterfaceResultSet {
                                break;
                        }
                        break;
+               case SQLTYPECODE_TINYINT:
+               case SQLTYPECODE_TINYINT_UNSIGNED:
+                        short sValue1 = (byte) values[noNullValue];
+                       retObj = new Short(sValue1);
+                       break;
                case SQLTYPECODE_SMALLINT:
                        short sValue = Bytes.extractShort(values, noNullValue, 
swap);
                        retObj = new Short(sValue);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceStatement.java
----------------------------------------------------------------------
diff --git 
a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceStatement.java 
b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceStatement.java
index 153394d..06aaa64 100644
--- 
a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceStatement.java
+++ 
b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/InterfaceStatement.java
@@ -507,6 +507,30 @@ class InterfaceStatement {
 
                        Bytes.insertInt(values, noNullValue, tmpbd.intValue(), 
this.ic_.getByteSwap());
                        break;
+
+               case InterfaceResultSet.SQLTYPECODE_TINYINT:
+                       tmpbd = Utility.getBigDecimalValue(locale, paramValue);
+                       if (scale > 0) {
+                               throw 
TrafT4Messages.createSQLException(pstmt.connection_.props_, locale, 
"invalid_parameter_value",
+                                               "Cannot have scale for param: " 
+ paramNumber);
+                        }
+                        
+                       Utility.checkSignedTinyintBoundary(locale, tmpbd);
+
+                       Bytes.insertShort(values, noNullValue, 
tmpbd.byteValueExact(), this.ic_.getByteSwap());
+
+                        break;
+               case InterfaceResultSet.SQLTYPECODE_TINYINT_UNSIGNED:
+                       tmpbd = Utility.getBigDecimalValue(locale, paramValue);
+                       if (scale > 0) {
+                               throw 
TrafT4Messages.createSQLException(pstmt.connection_.props_, locale, 
"invalid_parameter_value",
+                                               "Cannot have scale for param: " 
+ paramNumber);
+                        }
+                        
+                       Utility.checkUnsignedTinyintBoundary(locale, tmpbd);
+
+                       Bytes.insertShort(values, noNullValue, 
tmpbd.byteValueExact(), this.ic_.getByteSwap());
+                        break;
                case InterfaceResultSet.SQLTYPECODE_SMALLINT:
                        tmpbd = Utility.getBigDecimalValue(locale, paramValue);
                        if (scale > 0) {
@@ -538,6 +562,7 @@ class InterfaceStatement {
 
                                // range checking
                        }
+
                        Utility.checkSignedShortBoundary(locale, tmpbd);
 
                        // check boundary condition for Numeric.

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4Desc.java
----------------------------------------------------------------------
diff --git 
a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4Desc.java 
b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4Desc.java
index 65ce6ea..3a12532 100644
--- a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4Desc.java
+++ b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4Desc.java
@@ -30,6 +30,7 @@ class TrafT4Desc {
 
        String getColumnClassName() throws SQLException {
                switch (dataType_) {
+               case Types.TINYINT:
                case Types.SMALLINT:
                        return "java.lang.Integer";
                case Types.INTEGER:
@@ -61,7 +62,6 @@ class TrafT4Desc {
                case Types.BLOB:
                        return "java.sql.Blob";
                case Types.BIT:
-               case Types.TINYINT:
                default:
                        return null;
                }
@@ -135,7 +135,7 @@ class TrafT4Desc {
                case Types.BLOB:
                        break;
                default:
-                       System.out.println("Data type is " + dataType_);
+                        System.out.println("Data type is " + dataType_);
                        throw TrafT4Messages.createSQLException(null, locale, 
"restricted_data_type", null);
                }
                return;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4PreparedStatement.java
----------------------------------------------------------------------
diff --git 
a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4PreparedStatement.java
 
b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4PreparedStatement.java
index 15e420b..fae2d7b 100644
--- 
a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4PreparedStatement.java
+++ 
b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/TrafT4PreparedStatement.java
@@ -1279,7 +1279,7 @@ public class TrafT4PreparedStatement extends 
TrafT4Statement implements java.sql
                        case Types.TINYINT:
                                tmpbd = Utility.getBigDecimalValue(locale, x);
                                tmpbd = Utility.setScale(tmpbd, scale, 
roundingMode_);
-                               Utility.checkTinyintBoundary(locale, tmpbd);
+                                Utility.checkSignedTinyintBoundary(locale, 
tmpbd);
                                setShort(parameterIndex, tmpbd.shortValue());
                                break;
                        case Types.FLOAT:

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/Utility.java
----------------------------------------------------------------------
diff --git a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/Utility.java 
b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/Utility.java
index 7099fa7..e984187 100644
--- a/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/Utility.java
+++ b/core/conn/jdbcT4/src/main/java/org/trafodion/jdbc/t4/Utility.java
@@ -223,10 +223,18 @@ class Utility {
         * @return none
         * 
         */
-       static void checkTinyintBoundary(Locale locale, BigDecimal inbd) throws 
SQLException {
+       static void checkSignedTinyintBoundary(Locale locale, BigDecimal inbd) 
throws SQLException {
                long inlong = inbd.longValue();
                if ((inlong > Byte.MAX_VALUE) || (inlong < Byte.MIN_VALUE)) {
-                       throw TrafT4Messages.createSQLException(null, locale, 
"numeric_out_of_range", String.valueOf(inlong));
+                       throw TrafT4Messages.createSQLException(null, locale, 
"signed_tinyint_out_of_range", String.valueOf(inlong));
+               }
+       } // end checkTinyintBoundary
+
+       static void checkUnsignedTinyintBoundary(Locale locale, BigDecimal 
inbd) throws SQLException {
+               long inlong = inbd.longValue();
+               long maxutiny = (Byte.MAX_VALUE * 2) + 1;
+               if ((inlong < 0) || (inlong > maxutiny)) {
+                       throw TrafT4Messages.createSQLException(null, locale, 
"unsigned_tinyint_out_of_range", String.valueOf(inlong));
                }
        } // end checkTinyintBoundary
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/conn/odbc/src/odbc/nsksrvrcore/sqlinterface.cpp
----------------------------------------------------------------------
diff --git a/core/conn/odbc/src/odbc/nsksrvrcore/sqlinterface.cpp 
b/core/conn/odbc/src/odbc/nsksrvrcore/sqlinterface.cpp
index 22a4b0f..ee64cc0 100644
--- a/core/conn/odbc/src/odbc/nsksrvrcore/sqlinterface.cpp
+++ b/core/conn/odbc/src/odbc/nsksrvrcore/sqlinterface.cpp
@@ -191,6 +191,20 @@ SQLRETURN SRVR::GetODBCValues(Int32 DataType, Int32 
DateTimeCode, Int32 &Length,
                        ODBCCharset = SQLCharset;
                        break;
 
+                case SQLTYPECODE_TINYINT:
+                       ODBCPrecision = 3;
+                       ODBCDataType = SQL_TINYINT;
+                       SignType = TRUE;
+                       totalMemLen += Length;
+                       break;
+
+                case SQLTYPECODE_TINYINT_UNSIGNED:
+                       ODBCPrecision = 3;
+                       ODBCDataType = SQL_TINYINT;
+                       SignType = FALSE;
+                       totalMemLen += Length;
+                       break;
+
                case SQLTYPECODE_SMALLINT:
                        if (Precision == 0)
                        {
@@ -676,6 +690,11 @@ SQLRETURN SRVR::SetDataPtr(SQLDESC_ID *pDesc, 
SQLItemDescList_def *SQLDesc, Int3
                        VarPtr = memPtr + memOffSet;
                        memOffSet += SQLItemDesc->maxLen + 3;
                        break;
+                case SQLTYPECODE_TINYINT:
+                case SQLTYPECODE_TINYINT_UNSIGNED:
+                       VarPtr = memPtr + memOffSet;
+                       memOffSet += SQLItemDesc->maxLen ;
+                       break;
                case SQLTYPECODE_SMALLINT:
                        memOffSet = ((memOffSet + 2 - 1) >> 1) << 1;
                        VarPtr = memPtr + memOffSet;
@@ -971,7 +990,7 @@ SQLRETURN SRVR::AllocAssignValueBuffer(
                        {
                        case SQLTYPECODE_CHAR:
                        case SQLTYPECODE_VARCHAR:
-                               VarPtr = memPtr + memOffSet;                    
                
+                               VarPtr = memPtr + memOffSet;  
                                memOffSet += SQLItemDesc->maxLen + 1;
                                AllocLength = SQLItemDesc->maxLen + 1;
                                break;
@@ -1004,6 +1023,12 @@ SQLRETURN SRVR::AllocAssignValueBuffer(
                                memOffSet += SQLItemDesc->maxLen + 3;
                                AllocLength = SQLItemDesc->maxLen + 3;
                                break;
+                        case SQLTYPECODE_TINYINT:
+                        case SQLTYPECODE_TINYINT_UNSIGNED:
+                               VarPtr = memPtr + memOffSet; 
+                               memOffSet += SQLItemDesc->maxLen;
+                               AllocLength = SQLItemDesc->maxLen;
+                               break;
                        case SQLTYPECODE_SMALLINT:
                                memOffSet = ((memOffSet + 2 - 1) >> 1) << 1; 
                                VarPtr = memPtr + memOffSet;
@@ -1261,7 +1286,14 @@ SQLRETURN SRVR::BuildSQLDesc(SQLDESC_ID *pDesc,
                                        break;
                                case 134:
                                        DataType = SQLTYPECODE_LARGEINT;
-                                       break;                                  
                        
+                                       break;  
+                               case 136:
+                                       DataType = SQLTYPECODE_TINYINT;
+                                       break;
+                               case 137:
+                                       DataType = SQLTYPECODE_TINYINT_UNSIGNED;
+                                       break;
+                                                       
                                default:
                                        break;
                        }
@@ -1345,7 +1377,7 @@ SQLRETURN SRVR::BuildSQLDesc2(SQLDESC_ID *pDesc,
        bool bRWRS = false;
        if (srvrGlobal->drvrVersion.buildId & ROWWISE_ROWSET)
                bRWRS = true;
-       
+        
        struct ODBCDescriptors
        {
          Int32 varAlign;
@@ -1499,7 +1531,14 @@ SQLRETURN SRVR::BuildSQLDesc2(SQLDESC_ID *pDesc,
                                        break;
                                case 134:
                                        DataType = SQLTYPECODE_LARGEINT;
-                                       break;                          
+                                       break;
+                               case 136:
+                                       DataType = SQLTYPECODE_TINYINT;
+                                       break;
+                               case 137:
+                                       DataType = SQLTYPECODE_TINYINT_UNSIGNED;
+                                       break;
+                               
                                default:
                                        break;
                        }
@@ -2234,6 +2273,13 @@ SQLRETURN SRVR::BuildSQLDesc2withRowsets( SQLDESC_ID     
     *pDesc
                                case 134:
                                        DataType = SQLTYPECODE_LARGEINT;
                                        break;                                  
+                               case 136:
+                                       DataType = SQLTYPECODE_TINYINT;
+                                       break;
+                               case 137:
+                                       DataType = SQLTYPECODE_TINYINT_UNSIGNED;
+                                       break;
+
                                default:
                                        break;
                        }
@@ -2444,6 +2490,11 @@ SQLRETURN SRVR::BuildSQLDesc2withRowsets( SQLDESC_ID     
     *pDesc
                        else
                                inputQuadList[i+1].var_layout = 
SqlDescInfo[i].Length + 1;
                        break;
+                case SQLTYPECODE_TINYINT:
+                case SQLTYPECODE_TINYINT_UNSIGNED:
+                       VarPtr = memPtr + memOffSet;
+                       memOffSet += SqlDescInfo[i].Length;
+                       break;
                case SQLTYPECODE_SMALLINT:
                case SQLTYPECODE_SMALLINT_UNSIGNED:
                        memOffSet = ((memOffSet + 2 - 1) >> 1) << 1;
@@ -6201,7 +6252,6 @@ SQLRETURN SRVR::FETCH2bulk(SRVR_STMT_HDL *pSrvrStmt)
        if (srvrGlobal->drvrVersion.buildId & ROWWISE_ROWSET)
                bRWRS = true;
 
-
        //Changes due to cursor issue
        if (pSrvrStmt->maxRowCnt > 0)
        {
@@ -6998,6 +7048,11 @@ SQLRETURN SRVR::SetIndandVarPtr(SQLDESC_ID *pDesc,
                        if (!bRWRS)
                                memOffSet += 1;
                        break;
+                case SQLTYPECODE_TINYINT:
+                case SQLTYPECODE_TINYINT_UNSIGNED:
+                       VarPtr = memPtr + memOffSet;
+                       memOffSet += SqlDescInfo[i].Length;
+                       break;
                case SQLTYPECODE_SMALLINT:
                case SQLTYPECODE_SMALLINT_UNSIGNED:
                        memOffSet = ((memOffSet + 2 - 1) >> 1) << 1; 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/cli/CliExpExchange.cpp
----------------------------------------------------------------------
diff --git a/core/sql/cli/CliExpExchange.cpp b/core/sql/cli/CliExpExchange.cpp
index 871985d..d047b0c 100644
--- a/core/sql/cli/CliExpExchange.cpp
+++ b/core/sql/cli/CliExpExchange.cpp
@@ -1111,7 +1111,7 @@ InputOutputExpr::outputValues(atp_struct *atp,
          if (getenv("DISABLE_ROWWISE_ROWSET"))
            output_desc->setRowwiseRowsetDisabled(TRUE);
 #endif
-           
+
          setupBulkMoveInfo(output_desc, heap, FALSE /* output desc*/, flags);
          if (
              // rowwise rowsets V1 are only supported if bulk move
@@ -1147,6 +1147,8 @@ InputOutputExpr::outputValues(atp_struct *atp,
            } // rowwise rowset
        }
       
+
+
       if (NOT output_desc->bulkMoveDisabled())
        {
          // bulk move is enabled and setup has been done.
@@ -4240,6 +4242,31 @@ InputOutputExpr::inputValues(atp_struct *atp,
                operand->getHVRowsetLocalSize()) {
               short targetType = operand->getDatatype();
               switch (targetType) {
+              case REC_BIN8_SIGNED :
+                if (*((Int8 *) target) <= 0) {
+                  //raise error
+                  ExRaiseSqlError(heap, &diagsArea, EXE_ROWSET_NEGATIVE_SIZE);
+                 if (diagsArea != atp->getDiagsArea()) 
+                   atp->setDiagsArea(diagsArea);           
+                  return ex_expr::EXPR_ERROR;
+                }
+                else {
+                 dynamicRowsetSize = *((Int8 *) target);
+                 break;
+                }
+              case REC_BIN8_UNSIGNED :
+                if (*((UInt8 *) target) == 0) {
+                  //raise error
+                  ExRaiseSqlError(heap, &diagsArea, EXE_ROWSET_NEGATIVE_SIZE);
+                 if (diagsArea != atp->getDiagsArea()) 
+                   atp->setDiagsArea(diagsArea);           
+                  return ex_expr::EXPR_ERROR;
+                }
+                else {
+                 dynamicRowsetSize = *((UInt8 *) target);
+                 break;
+                }
+               
               case REC_BIN16_SIGNED :
                 if (*((short *) target) <= 0) {
                   //raise error

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/cli/Descriptor.cpp
----------------------------------------------------------------------
diff --git a/core/sql/cli/Descriptor.cpp b/core/sql/cli/Descriptor.cpp
index e369ee6..5af9568 100644
--- a/core/sql/cli/Descriptor.cpp
+++ b/core/sql/cli/Descriptor.cpp
@@ -114,12 +114,10 @@ Lng32 Descriptor::setVarLength(desc_struct &descItem)
     case REC_BIN32_SIGNED:
     case REC_BIN32_UNSIGNED:
     case REC_FLOAT32:
-    case REC_TDM_FLOAT32:
       descItem.length = 4;
       break;
     case REC_BIN64_SIGNED:
     case REC_FLOAT64:
-    case REC_TDM_FLOAT64:
       descItem.length = 8;
       break;
     default:
@@ -1356,6 +1354,8 @@ short Descriptor::isIntegralFSType(Lng32 datatype)
 {
    switch (datatype)
    {
+   case REC_BIN8_SIGNED:
+   case REC_BIN8_UNSIGNED:
    case REC_BIN16_SIGNED:
    case REC_BIN16_UNSIGNED:
    case REC_BIN32_SIGNED:
@@ -1376,8 +1376,6 @@ short Descriptor::isFloatFSType(Lng32 datatype)
    {
    case REC_FLOAT32:
    case REC_FLOAT64:
-   case REC_TDM_FLOAT32:
-   case REC_TDM_FLOAT64:
       return TRUE;
 
    default:
@@ -1438,14 +1436,12 @@ Lng32 Descriptor::DefaultPrecision(Lng32 datatype)
    case SQLTYPECODE_IEEE_REAL:
    case SQLTYPECODE_TDM_REAL:
    case REC_FLOAT32:
-   case REC_TDM_FLOAT32:
       precision = 22;
       break;
 
    case SQLTYPECODE_IEEE_DOUBLE:
    case SQLTYPECODE_TDM_DOUBLE:
    case REC_FLOAT64:
-   case REC_TDM_FLOAT64:
       precision = 54;
       break;
    case SQLTYPECODE_NUMERIC:

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/cli/sqlcli.h
----------------------------------------------------------------------
diff --git a/core/sql/cli/sqlcli.h b/core/sql/cli/sqlcli.h
index 4abac4b..6a05797 100644
--- a/core/sql/cli/sqlcli.h
+++ b/core/sql/cli/sqlcli.h
@@ -349,6 +349,10 @@ enum SQLTYPE_CODE {
     SQLTYPECODE_INTEGER_UNSIGNED       = -401,
     SQLTYPECODE_LARGEINT               = -402,
 
+    /* TINYINT */
+    SQLTYPECODE_TINYINT                = -403,
+    SQLTYPECODE_TINYINT_UNSIGNED       = -404,
+
     /* SMALLINT */
     SQLTYPECODE_SMALLINT = 5,
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/comexe/ComTdb.cpp
----------------------------------------------------------------------
diff --git a/core/sql/comexe/ComTdb.cpp b/core/sql/comexe/ComTdb.cpp
index dc8e5c4..88181a6 100644
--- a/core/sql/comexe/ComTdb.cpp
+++ b/core/sql/comexe/ComTdb.cpp
@@ -271,57 +271,6 @@ NA_EIDPROC void ComTdb::displayContents(Space * 
space,ULng32 flag)
     }
 }
 
-// LCOV_EXCL_START
-Float32 ComTdb::getTandemFloatValue(char * v) const
-{
-  Float32 f = 0;
-  double d;
-
-  // convert tandem REAL(4 byte) to IEEE FLOAT(4 byte).
-  // If overflow, return FLT max.
-  if (convDoIt(v,
-              4,
-              REC_TDM_FLOAT32,
-              0,
-              0,
-              (char*)&d,
-              (Lng32)sizeof(double),
-              REC_FLOAT64,
-              0, 0,
-              NULL, 0, NULL, NULL,
-              CONV_UNKNOWN) != ex_expr::EXPR_OK)
-    f = -1;
-  else if (d > FLT_MAX)
-    f = FLT_MAX;
-  else
-    f = (Float32) d;
-  
-  return f;
-}
-
-Float64 ComTdb::getTandemDoubleValue(char * v) const
-{
-  Float64 f = 0;
-
-  // convert tandem DOUBLE(8 bytes) to IEEE DOUBLE(8 bytes).
-  // If overflow, return FLT max.
-  if (convDoIt(v,
-              4,
-              REC_TDM_FLOAT64,
-              0,
-              0,
-              (char*)&f,
-              (Lng32)sizeof(double),
-              REC_FLOAT64,
-              0, 0,
-              NULL, 0, NULL, NULL,
-              CONV_UNKNOWN) != ex_expr::EXPR_OK)
-    f = -1;
-  
-  return f;
-}
-// LCOV_EXCL_STOP
-
 NA_EIDPROC void ComTdb::displayExpression(Space *space,ULng32 flag)
 {
   char buf[100];

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/comexe/ComTdb.h
----------------------------------------------------------------------
diff --git a/core/sql/comexe/ComTdb.h b/core/sql/comexe/ComTdb.h
index 689bded..94ac93a 100644
--- a/core/sql/comexe/ComTdb.h
+++ b/core/sql/comexe/ComTdb.h
@@ -654,23 +654,10 @@ NA_EIDPROC
   void setPertableStatsTdbId(UInt16 id) { pertableStatsTdbId_ = id; }
 
 NA_EIDPROC
-Float32 getTandemFloatValue(char * v) const;
-
-NA_EIDPROC
-Float64 getTandemDoubleValue(char * v) const;
-
-NA_EIDPROC
   Float32 getFloatValue(char * v) const
   {
     Float32 f;
-    if (floatFieldsAreIEEE())
-      str_cpy_all((char *)&f, v, sizeof(Float32));
-// LCOV_EXCL_START
-    else
-      {
-       f = getTandemFloatValue(v);
-      }
-// LCOV_EXCL_STOP
+    str_cpy_all((char *)&f, v, sizeof(Float32));
 
     return f;
   }
@@ -679,14 +666,7 @@ NA_EIDPROC
   Float64 getDoubleValue(char * v) const
   {
     Float64 f;
-    if (floatFieldsAreIEEE())
-      str_cpy_all((char *)&f, v, sizeof(Float64));
-// LCOV_EXCL_START
-    else
-      {
-       f = getTandemDoubleValue(v);
-      }
-// LCOV_EXCL_STOP
+    str_cpy_all((char *)&f, v, sizeof(Float64));
 
     return f;
   }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/common/BaseTypes.cpp
----------------------------------------------------------------------
diff --git a/core/sql/common/BaseTypes.cpp b/core/sql/common/BaseTypes.cpp
index bcc6cf6..cc708ab 100644
--- a/core/sql/common/BaseTypes.cpp
+++ b/core/sql/common/BaseTypes.cpp
@@ -398,6 +398,13 @@ short convertTypeToText_basic(char * text,    // OUTPUT
 
       break;
 
+    case REC_BIN8_SIGNED:
+      if (!precision)
+        str_sprintf(text, "TINYINT");
+      else
+       str_sprintf(text, "NUMERIC(%d, %d)", precision, scale);
+      break;
+
     case REC_BIN32_UNSIGNED:
       if (!precision)
        str_sprintf(text, "INT UNSIGNED");
@@ -412,6 +419,13 @@ short convertTypeToText_basic(char * text,    // OUTPUT
        str_sprintf(text, "NUMERIC(%d, %d) UNSIGNED", precision, scale);
       break;
 
+    case REC_BIN8_UNSIGNED:
+      if (!precision)
+        str_sprintf(text, "TINYINT UNSIGNED");
+      else
+       str_sprintf(text, "NUMERIC(%d, %d)", precision, scale);
+      break;
+
     case REC_BPINT_UNSIGNED:
       str_sprintf(text, "BIT PRECISION INT(%d) UNSIGNED", precision);
       break;
@@ -433,7 +447,6 @@ short convertTypeToText_basic(char * text,     // OUTPUT
       break;
 
     case REC_FLOAT32:
-    case REC_TDM_FLOAT32:
       if (precision == 0)
        str_sprintf(text, "REAL");
       else
@@ -441,7 +454,6 @@ short convertTypeToText_basic(char * text,     // OUTPUT
       break;
 
     case REC_FLOAT64:
-    case REC_TDM_FLOAT64:
       if (precision == 0)
        str_sprintf(text, "DOUBLE PRECISION");
       else
@@ -657,6 +669,14 @@ Lng32 getAnsiTypeFromFSType(Lng32 datatype)
 
    switch (datatype)
    {
+   case REC_BIN8_SIGNED:
+      numeric_value = SQLTYPECODE_TINYINT;
+      break;
+
+   case REC_BIN8_UNSIGNED:
+      numeric_value = SQLTYPECODE_TINYINT_UNSIGNED;
+      break;
+
    case REC_BIN16_SIGNED:
       numeric_value = SQLTYPECODE_SMALLINT;
       break;
@@ -690,14 +710,6 @@ Lng32 getAnsiTypeFromFSType(Lng32 datatype)
       numeric_value = SQLTYPECODE_IEEE_DOUBLE;
       break;
 
-   case REC_TDM_FLOAT32:
-      numeric_value = SQLTYPECODE_TDM_REAL;
-      break;
-
-   case REC_TDM_FLOAT64:
-      numeric_value = SQLTYPECODE_TDM_DOUBLE;
-      break;
-
    case REC_DECIMAL_UNSIGNED:
       numeric_value = SQLTYPECODE_DECIMAL_UNSIGNED;
       break;
@@ -767,6 +779,14 @@ const char * getAnsiTypeStrFromFSType(Lng32 datatype)
 {
    switch (datatype)
    {
+   case REC_BIN8_SIGNED:
+     return COM_TINYINT_SIGNED_SDT_LIT;
+     break;
+
+   case REC_BIN8_UNSIGNED:
+      return COM_TINYINT_UNSIGNED_SDT_LIT;
+      break;
+
    case REC_BIN16_SIGNED:
      return COM_SMALLINT_SIGNED_SDT_LIT;
      break;
@@ -1006,6 +1026,14 @@ Lng32 getFSTypeFromANSIType(Lng32 ansitype)
 
    switch (ansitype)
    {
+   case SQLTYPECODE_TINYINT:
+      datatype = REC_BIN8_SIGNED;
+      break;
+
+   case SQLTYPECODE_TINYINT_UNSIGNED:
+      datatype = REC_BIN8_UNSIGNED;
+      break;
+
    case SQLTYPECODE_SMALLINT:
       datatype = REC_BIN16_SIGNED;
       break;
@@ -1050,18 +1078,6 @@ Lng32 getFSTypeFromANSIType(Lng32 ansitype)
       datatype = REC_FLOAT64;
       break;
 
-   case SQLTYPECODE_TDM_REAL:
-      datatype = REC_TDM_FLOAT32;
-      break;
-
-   case SQLTYPECODE_TDM_DOUBLE:
-      datatype = REC_TDM_FLOAT64;
-      break;
-
-   case SQLTYPECODE_TDM_FLOAT:
-      datatype = REC_TDM_FLOAT64;
-      break;
-
    case SQLTYPECODE_DECIMAL_UNSIGNED:
       datatype = REC_DECIMAL_UNSIGNED;
       break;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/common/ComSmallDefs.h
----------------------------------------------------------------------
diff --git a/core/sql/common/ComSmallDefs.h b/core/sql/common/ComSmallDefs.h
index 8055e22..19c7dde 100644
--- a/core/sql/common/ComSmallDefs.h
+++ b/core/sql/common/ComSmallDefs.h
@@ -794,6 +794,8 @@ enum ComFSDataType { COM_UNKNOWN_FSDT              = -1
                    , COM_VCHAR_FSDT                = REC_BYTE_V_ASCII
                    , COM_VCHAR_DBL_FSDT            = REC_BYTE_V_DOUBLE
                    , COM_VCHAR_LONG_FSDT           = REC_BYTE_V_ASCII_LONG
+                   , COM_SIGNED_BIN8_FSDT          = REC_BIN8_SIGNED
+                   , COM_UNSIGNED_BIN8_FSDT        = REC_BIN8_UNSIGNED
                    , COM_SIGNED_BIN16_FSDT         = REC_BIN16_SIGNED
                    , COM_UNSIGNED_BIN16_FSDT       = REC_BIN16_UNSIGNED
                    , COM_SIGNED_BIN32_FSDT         = REC_BIN32_SIGNED
@@ -991,6 +993,8 @@ enum ComODBCDataType { COM_UNKNOWN_ODT
                      , COM_LONG_VARCHAR_ODT
                      , COM_NUMERIC_SIGNED_ODT
                      , COM_NUMERIC_UNSIGNED_ODT
+                     , COM_TINYINT_SIGNED_ODT
+                     , COM_TINYINT_UNSIGNED_ODT
                      , COM_SMALLINT_SIGNED_ODT
                      , COM_SMALLINT_UNSIGNED_ODT
                      , COM_INTEGER_SIGNED_ODT
@@ -1019,6 +1023,8 @@ enum ComODBCDataType { COM_UNKNOWN_ODT
 #define COM_LONG_VARCHAR_ODT_LIT               "LONG VARCHAR      "
 #define COM_NUMERIC_SIGNED_ODT_LIT             "SIGNED NUMERIC    "
 #define COM_NUMERIC_UNSIGNED_ODT_LIT           "UNSIGNED NUMERIC  "
+#define COM_TINYINT_SIGNED_ODT_LIT             "SIGNED TINYINT    "
+#define COM_TINYINT_UNSIGNED_ODT_LIT           "UNSIGNED TINYINT  "
 #define COM_SMALLINT_SIGNED_ODT_LIT            "SIGNED SMALLINT   "
 #define COM_SMALLINT_UNSIGNED_ODT_LIT          "UNSIGNED SMALLINT "
 #define COM_INTEGER_SIGNED_ODT_LIT             "SIGNED INTEGER    "
@@ -1546,6 +1552,8 @@ enum ComSQLDataType { COM_UNKNOWN_SDT
                     , COM_BPINT_UNSIGNED_SDT
                     , COM_NUMERIC_SIGNED_SDT
                     , COM_NUMERIC_UNSIGNED_SDT
+                    , COM_TINYINT_SIGNED_SDT
+                    , COM_TINYINT_UNSIGNED_SDT
                     , COM_SMALLINT_SIGNED_SDT
                     , COM_SMALLINT_UNSIGNED_SDT
                     , COM_INTEGER_SIGNED_SDT
@@ -1573,6 +1581,8 @@ enum ComSQLDataType { COM_UNKNOWN_SDT
 #define COM_LONG_VARCHAR_SDT_LIT               "LONG VARCHAR      "
 #define COM_NUMERIC_SIGNED_SDT_LIT             "SIGNED NUMERIC    "
 #define COM_NUMERIC_UNSIGNED_SDT_LIT           "UNSIGNED NUMERIC  "
+#define COM_TINYINT_SIGNED_SDT_LIT             "SIGNED TINYINT   "
+#define COM_TINYINT_UNSIGNED_SDT_LIT           "UNSIGNED TINYINT "
 #define COM_SMALLINT_SIGNED_SDT_LIT            "SIGNED SMALLINT   "
 #define COM_SMALLINT_UNSIGNED_SDT_LIT          "UNSIGNED SMALLINT "
 #define COM_INTEGER_SIGNED_SDT_LIT             "SIGNED INTEGER    "

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/common/NAType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/common/NAType.cpp b/core/sql/common/NAType.cpp
index d1d3b3e..3553888 100644
--- a/core/sql/common/NAType.cpp
+++ b/core/sql/common/NAType.cpp
@@ -492,6 +492,14 @@ Lng32 NAType::getDisplayLength(Lng32 datatype,
       d_len = SQL_USMALL_DISPLAY_SIZE;
       break;
 
+    case REC_BIN8_SIGNED:
+      d_len = SQL_TINY_DISPLAY_SIZE + scale_len;
+      break;
+
+    case REC_BIN8_UNSIGNED:
+      d_len = SQL_UTINY_DISPLAY_SIZE + scale_len;
+      break;
+
     case REC_BIN16_SIGNED:
       d_len = SQL_SMALL_DISPLAY_SIZE + scale_len;
       break;
@@ -544,12 +552,10 @@ Lng32 NAType::getDisplayLength(Lng32 datatype,
       break;
 
     case REC_FLOAT32:
-    case REC_TDM_FLOAT32:
       d_len = SQL_REAL_DISPLAY_SIZE;
       break;
 
     case REC_FLOAT64:
-    case REC_TDM_FLOAT64:
       d_len = SQL_DOUBLE_PRECISION_DISPLAY_SIZE;
       break;
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/common/NumericType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/common/NumericType.cpp b/core/sql/common/NumericType.cpp
index c9a3b4a..47d30ba 100644
--- a/core/sql/common/NumericType.cpp
+++ b/core/sql/common/NumericType.cpp
@@ -45,6 +45,7 @@
 #define NAME_BUF_LEN 100
 
 NAString LiteralInteger("INTEGER");
+NAString LiteralTinyInt("TINYINT");
 NAString LiteralSmallInt("SMALLINT");
 NAString LiteralBPInt("BIT PRECISION INTEGER");
 NAString LiteralLargeInt("LARGEINT");
@@ -160,6 +161,10 @@ enum NumericType::NumericTypeEnum
     {
       token = SQLSmall_TYPE;
     }
+  else if (adtName == "TINYINT")
+    {
+      token = SQLTiny_TYPE;
+    }
   else if (adtName == "FLOAT")
     {
       token = SQLFloat_TYPE;
@@ -172,14 +177,6 @@ enum NumericType::NumericTypeEnum
     {
       token = SQLDoublePrecision_TYPE;
     }
-  else if (adtName == "REAL TDM")
-    {
-      token = SQLRealTdm_TYPE;
-    }
-  else if (adtName ==  "DOUBLE PRECISION TDM")
-    {
-      token = SQLDoublePrecisionTdm_TYPE;
-    }
   else // issue an error
   {
     NAString temp = "INTEGER";
@@ -324,12 +321,8 @@ NABoolean NumericType::errorsCanOccur (const NAType& 
target,
             //  (which today always happens to be true) and if the
             //  target precision is greater than or equal to the source
             //  then no conversion error can occur
-           //  Note: conversion from IEEE 64-bit floating point format to the
-           //   Tandem 64-bit floating point format can generate an error.
-            if ((getTrueBinaryPrecision() <=
-                 numericTarget.getTrueBinaryPrecision()) &&
-               !((qualifier_ == SQLDoublePrecision_TYPE) &&
-                 (numericTarget.qualifier_ == SQLDoublePrecisionTdm_TYPE)))
+            if (getTrueBinaryPrecision() <=
+                numericTarget.getTrueBinaryPrecision())
               rc = FALSE;
           }
         }
@@ -353,6 +346,9 @@ NAString NumericType::getTypeName(NumericTypeEnum ntev) 
const
     case SQLBPInt_TYPE :
       adtName = "BIT PRECISION INTEGER";
       break;
+    case SQLTiny_TYPE :
+      adtName = "TINYINT";
+      break;
     case SQLSmall_TYPE :
       adtName = "SMALLINT";
       break;
@@ -383,12 +379,6 @@ NAString NumericType::getTypeName(NumericTypeEnum ntev) 
const
     case SQLDoublePrecision_TYPE :
       adtName = "DOUBLE PRECISION";
       break;
-    case SQLRealTdm_TYPE :
-      adtName = "REAL TDM";
-      break;
-    case SQLDoublePrecisionTdm_TYPE :
-      adtName = "DOUBLE PRECISION TDM";
-      break;
     default :
       assert(0 == 1);  // ****ERROR: data type not supported
       break;
@@ -403,11 +393,6 @@ NAString NumericType::getTypeSQLname(NABoolean terse) const
   NAString rName = getTypeName(qualifier_);
 
   switch (qualifier_) {
-  case SQLDoublePrecisionTdm_TYPE:
-  case SQLRealTdm_TYPE:
-      // internally we treat both them as IEEE dounle precision
-      rName = "DOUBLE PRECISION";
-      break;
   case SQLBigNum_TYPE :
     rName = "NUMERIC";
     if (getScale() > 0) {
@@ -854,6 +839,124 @@ NABoolean NumericType::isEncodingNeeded() const
 }
 
 // -----------------------------------------------------------------------
+//  Methods for SQLTiny
+// -----------------------------------------------------------------------
+
+SQLTiny::SQLTiny(NABoolean allowNegValues, NABoolean allowSQLnull,CollHeap * 
heap)
+     : NumericType
+       ( LiteralTinyInt
+         , SQL_TINY_SIZE
+         , (allowNegValues ? SQL_SMALL_PRECISION:SQL_USMALL_PRECISION)
+         , 0
+         , 2
+         , allowNegValues
+         , allowSQLnull
+         ,FALSE
+         ,heap
+         )
+{
+} // SQLTiny()
+
+double SQLTiny::encode (void* bufPtr) const
+{
+  Int8 tempValue;
+  UInt8 usTempValue;
+  char * valPtr = (char *)bufPtr;
+  if (supportsSQLnull())
+    valPtr += getSQLnullHdrSize();
+
+  if(isUnsigned())
+  {
+    str_cpy_all ((char *)&usTempValue, valPtr, getNominalSize());
+    return ((double)usTempValue * pow(10.0, -1 * getScale()));
+  }
+  else
+  {
+    str_cpy_all ((char *)&tempValue, valPtr, getNominalSize());
+    return ((double)tempValue * pow(10.0, -1 * getScale()));
+  }
+}
+
+// -- Min and max permissible values
+
+void SQLTiny::minRepresentableValue(void* bufPtr, Lng32* bufLen,
+                                     NAString ** stringLiteral,
+                                    CollHeap* h) const
+{
+  assert(*bufLen >= sizeof(char));
+  Lng32 valueBuf;
+  *bufLen = sizeof(char);
+  if (NumericType::isUnsigned())
+    {
+      *((char*)bufPtr) = 0;
+      valueBuf = 0;
+    }
+  else
+    {
+      char temp = CHAR_MIN;
+      for (Lng32 i = 0; i < sizeof(char); i++)
+       {
+         ((char *)bufPtr)[i] = ((char *)&temp)[i];
+       }
+      valueBuf = CHAR_MIN;
+    }
+
+  if (stringLiteral != NULL)
+    {
+      // Generate a printable string for the minimum value
+      char nameBuf[NAME_BUF_LEN]; // 2 ** 16 == 65536. Need space for 5 digits 
only
+      signedLongToAscii(valueBuf, nameBuf);
+      *stringLiteral = new (h) NAString(nameBuf, h);
+    }
+
+} // SQLTiny::minRepresentableValue()
+
+void SQLTiny::maxRepresentableValue(void* bufPtr, Lng32* bufLen,
+                                     NAString ** stringLiteral,
+                                    CollHeap* h) const
+{
+  assert(*bufLen >= sizeof(char));
+  Lng32 valueBuf;
+  *bufLen = sizeof(char);
+  if (NumericType::isUnsigned())
+    {
+      unsigned short temp = UCHAR_MAX;
+      for (Lng32 i = 0; i < sizeof(char); i++)
+       {
+         ((char *)bufPtr)[i] = ((char *)&temp)[i];
+       }
+      valueBuf = UCHAR_MAX;
+    }
+  else
+    {
+      short temp = CHAR_MAX;
+      for (Lng32 i = 0; i < sizeof(char); i++)
+       {
+         ((char *)bufPtr)[i] = ((char *)&temp)[i];
+       }
+      valueBuf = CHAR_MAX;
+    }
+
+  if (stringLiteral != NULL)
+    {
+      // Generate a printable string for the maximum value
+      char nameBuf[NAME_BUF_LEN]; // 2 ** 16 == 65536. Need space for 5 digits 
only
+      signedLongToAscii(valueBuf, nameBuf);
+      *stringLiteral = new (h) NAString(nameBuf, h);
+    }
+
+} // SQLTiny::maxRepresentableValue()
+
+NAString* SQLTiny::convertToString(double v, CollHeap* h) const
+{
+   Lng32 valueBuf = (Lng32)v;
+
+   char nameBuf[NAME_BUF_LEN]; // 2 ** 16 == 65536. Need space for 5 digits 
only
+   signedLongToAscii(valueBuf, nameBuf);
+   return new (h) NAString(nameBuf, h);
+}
+
+// -----------------------------------------------------------------------
 //  Methods for SQLSmall
 // -----------------------------------------------------------------------
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/common/NumericType.h
----------------------------------------------------------------------
diff --git a/core/sql/common/NumericType.h b/core/sql/common/NumericType.h
index 1020e05..448d8bf 100644
--- a/core/sql/common/NumericType.h
+++ b/core/sql/common/NumericType.h
@@ -49,6 +49,7 @@
 // -----------------------------------------------------------------------
 class NumericType;
 class SQLBPInt;
+class SQLTiny;
 class SQLSmall;
 class SQLInt;
 class SQLLargeInt;
@@ -59,11 +60,9 @@ class SQLBigNum;
 class SQLFloat;
 class SQLReal;
 class SQLDoublePrecision;
-class SQLRealTdm;
-class SQLDoublePrecisionTdm;
-
 
 extern  NAString LiteralInteger;
+extern  NAString LiteralTinyInt;
 extern  NAString LiteralSmallInt;
 extern  NAString LiteralBPInt;
 extern  NAString LiteralLargeInt;
@@ -277,6 +276,7 @@ private:
     MIN_NUMERIC_TYPE,
     MIN_EXACT_NUMERIC_TYPE,
     SQLBPInt_TYPE,
+    SQLTiny_TYPE,
     SQLSmall_TYPE,
     SQLInt_TYPE,
     SQLNumeric_TYPE,
@@ -289,8 +289,6 @@ private:
     SQLReal_TYPE,
     SQLFloat_TYPE,
     SQLDoublePrecision_TYPE,
-    SQLRealTdm_TYPE,
-    SQLDoublePrecisionTdm_TYPE,
     MAX_APPROX_NUMERIC_TYPE,
     MAX_NUMERIC_TYPE
   };
@@ -445,6 +443,99 @@ private:
 
 // ***********************************************************************
 //
+//  SQLTiny : SQL TINY
+//
+// ***********************************************************************
+class SQLTiny : public NumericType
+{
+public:
+  // ---------------------------------------------------------------------
+  // Constructor functions
+  // ---------------------------------------------------------------------
+  SQLTiny (NABoolean allowNegValues = TRUE, 
+           NABoolean allowSQLnull = TRUE,
+           CollHeap * heap =0);
+  
+   short getFSDatatype() const
+    {
+      if (isUnsigned())
+       return REC_BIN8_UNSIGNED;
+      else
+       return REC_BIN8_SIGNED;
+    }
+
+  NABoolean roundTripConversionToDouble() const { return TRUE; };
+
+  virtual Lng32 getMagnitude() const { return isUnsigned() ? 28 : 25; }
+
+  virtual double getMaxValue() const { return isUnsigned() ?  255 : 127; }
+
+  virtual double getMinValue() const { return isUnsigned() ?  0 : -127; }
+
+  virtual NABoolean shouldCheckValueFitInType() const { return TRUE; }
+
+  // ---------------------------------------------------------------------
+  // Does this data type use decimal or binary precision?
+  // ---------------------------------------------------------------------
+   NABoolean decimalPrecision() const { return FALSE; }
+
+   NABoolean binaryPrecision() const { return TRUE; }
+  
+  virtual void makeUnsigned() 
+  { 
+    setPrecision(SQL_UTINY_PRECISION);
+    NumericType::makeUnsigned();
+  }
+
+  virtual void makeSigned() 
+  { 
+    setPrecision(SQL_TINY_PRECISION);
+    NumericType::makeSigned();
+  }
+
+  // ---------------------------------------------------------------------
+  // Methods that return the binary form of the minimum and the maximum
+  // representable values.
+  // ---------------------------------------------------------------------
+  void minRepresentableValue(void* bufPtr, Lng32* bufLen, 
+                            NAString ** stringLiteral = NULL,
+                            CollHeap* h=0) const;
+  void maxRepresentableValue(void* bufPtr, Lng32* bufLen,
+                            NAString ** stringLiteral = NULL,
+                            CollHeap* h=0) const;
+
+  NAString* convertToString(double v, CollHeap* h=0) const;
+
+  // ---------------------------------------------------------------------
+  // Method that returns the encoded form for a given value to be
+  // used by the optimizer for estimations.
+  // ---------------------------------------------------------------------
+  virtual double encode (void* bufPtr) const;
+
+  // ---------------------------------------------------------------------
+  // A virtual function to return a copy of the type.
+  // ---------------------------------------------------------------------
+  virtual NAType *newCopy(CollHeap* h=0) const
+  {
+    return new(h) SQLTiny(!isUnsigned()
+                          ,supportsSQLnull(),h
+                          );
+  }
+
+  virtual double getNormalizedValue(void* buf) const 
+  {
+    if (isUnsigned())
+      return  (double)(*(unsigned char *)buf);
+    else
+      return  (double)(*(char *)buf);
+  };
+
+private:
+  
+}; // class SQLTiny
+
+// ***********************************************************************
+//
 //  SQLSmall : SQL SMALLINT
 //
 // ***********************************************************************
@@ -1362,100 +1453,6 @@ private:
 }; // class SQLDoublePrecision
 
 
-// ***********************************************************************
-//
-//  SQLRealTdm : SQL REAL in TANDEM format
-//
-// ***********************************************************************
-class SQLRealTdm : public SQLFloat
-{
-public:
-  // ---------------------------------------------------------------------
-  // Constructor functions
-  // ---------------------------------------------------------------------
-   SQLRealTdm (NABoolean allowSQLnull = TRUE,CollHeap * heap = 0,
-                    Lng32 precision = SQL_REAL_PRECISION)
-  : SQLFloat(allowSQLnull, SQL_REAL_SIZE, precision, "REAL TDM",heap)
-  {}
-
-  // sqlparser.y calls the above constructor with zero precision. This can
-  // mislead callers of getPrecision() into thinking type REAL
-  // has zero precision. The true precision of type REAL is
-  // SQL_REAL_PRECISION.
-  virtual Lng32 getTruePrecision() const { return SQL_REAL_PRECISION; }  
-
-   short getFSDatatype() const { return REC_TDM_FLOAT32; }
-
-   NABoolean isExternalType() const 
-    {
-      return TRUE;
-    }
-
-   NAType * equivalentType(CollHeap* h=0) const
-    {
-      return new(h) SQLDoublePrecision(supportsSQLnull(), h,
-                                      getPrecision());
-    }
-
-  // ---------------------------------------------------------------------
-  // A virtual function to return a copy of the type.
-  // ---------------------------------------------------------------------
-  virtual NAType *newCopy(CollHeap* h=0) const 
-    { return new(h) SQLRealTdm(supportsSQLnull(),h,getPrecision()); }
-
-private:
-  
-}; // class SQLRealTdm
-
-// ***********************************************************************
-//
-//  SQLDoublePrecisionTdm : SQL DOUBLE PRECISION in Tandem format
-//
-// ***********************************************************************
-class SQLDoublePrecisionTdm : public SQLFloat
-{
-public:
-  // ---------------------------------------------------------------------
-  // Constructor functions
-  // --------------------------------------------------------------------- 
-   SQLDoublePrecisionTdm (NABoolean allowSQLnull = TRUE,CollHeap * heap =0,
-                               Lng32 precision = SQL_DOUBLE_PRECISION)
-  : SQLFloat(allowSQLnull, SQL_DOUBLE_PRECISION_SIZE, 
-            precision, "DOUBLE PRECISION TDM",heap)
-  {}
-
-  // sqlparser.y calls the above constructor with zero precision. This can
-  // mislead callers of getPrecision() into thinking type DOUBLE PRECISION
-  // has zero precision. The true precision of type DOUBLE PRECISION is
-  // SQL_DOUBLE_PRECISION.
-  virtual Lng32 getTruePrecision() const { return SQL_DOUBLE_PRECISION; }  
-
-  short getFSDatatype() const { return REC_TDM_FLOAT64; }
-
-  NABoolean isExternalType() const
-    {
-      return TRUE;
-    }
-
-  NAType * equivalentType(CollHeap* h=0) const
-    {
-      return new(h) SQLDoublePrecision(supportsSQLnull(), h,
-                                      getPrecision());
-    }
-
-  // ---------------------------------------------------------------------
-  // A virtual function to return a copy of the type.
-  // ---------------------------------------------------------------------
-  virtual NAType *newCopy(CollHeap* h=0) const
-  {
-    return new(h) SQLDoublePrecisionTdm(supportsSQLnull(),h,getPrecision());
-  }
-
-private:
-  
-}; // class SQLDoublePrecisionTdm
-
-
 #endif /* NUMERICTYPE_H */
 
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/common/SQLTypeDefs.h
----------------------------------------------------------------------
diff --git a/core/sql/common/SQLTypeDefs.h b/core/sql/common/SQLTypeDefs.h
index 7296547..61b3258 100644
--- a/core/sql/common/SQLTypeDefs.h
+++ b/core/sql/common/SQLTypeDefs.h
@@ -46,6 +46,8 @@
 #define BINARY64_PRECISION  64
 #define SIGN_BIT            1
 
+#define SQL_TINY_PRECISION     7
+#define SQL_UTINY_PRECISION    8
 #define SQL_SMALL_PRECISION   15
 #define SQL_USMALL_PRECISION  16
 #define SQL_INT_PRECISION     31
@@ -59,6 +61,7 @@
 // -----------------------------------------------------------------------
 // Sizes of standard SQL data types in bytes
 // -----------------------------------------------------------------------
+#define SQL_TINY_SIZE 1
 #define SQL_SMALL_SIZE 2
 #define SQL_INT_SIZE 4
 #define SQL_LARGE_SIZE 8
@@ -75,6 +78,8 @@
 // -----------------------------------------------------------------------
 // display Sizes of standard SQL data types in bytes
 // -----------------------------------------------------------------------
+#define SQL_TINY_DISPLAY_SIZE 4
+#define SQL_UTINY_DISPLAY_SIZE 3
 #define SQL_SMALL_DISPLAY_SIZE 6
 #define SQL_USMALL_DISPLAY_SIZE 5
 #define SQL_INT_DISPLAY_SIZE 11

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/common/dfs2rec.h
----------------------------------------------------------------------
diff --git a/core/sql/common/dfs2rec.h b/core/sql/common/dfs2rec.h
index a166047..88852fc 100644
--- a/core/sql/common/dfs2rec.h
+++ b/core/sql/common/dfs2rec.h
@@ -58,11 +58,11 @@
 #define REC_BIN32_UNSIGNED 133
 #define REC_BIN64_SIGNED 134
 #define REC_BPINT_UNSIGNED 135 // Bit Precision Integer
-#define REC_MAX_BINARY 135
+#define REC_BIN8_SIGNED 136     // tinyint signed
+#define REC_BIN8_UNSIGNED 137   // tinyint unsigned
+#define REC_MAX_BINARY 137
 
-#define REC_MIN_FLOAT   140
-#define REC_TDM_FLOAT32 140
-#define REC_TDM_FLOAT64 141
+#define REC_MIN_FLOAT   142
 #define REC_IEEE_FLOAT32 142
 #define REC_IEEE_FLOAT64 143
 #define REC_MAX_FLOAT 143

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/executor/ExHbaseIUD.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExHbaseIUD.cpp b/core/sql/executor/ExHbaseIUD.cpp
index 9553d53..793aee2 100644
--- a/core/sql/executor/ExHbaseIUD.cpp
+++ b/core/sql/executor/ExHbaseIUD.cpp
@@ -1114,6 +1114,10 @@ static const char* TrafToHiveType(Attributes* attrs)
 
   switch (datatype)
   {
+    case REC_BIN8_SIGNED:
+    case REC_BIN8_UNSIGNED:
+      return "tinyint";
+
     case REC_BIN16_SIGNED:
     case REC_BIN16_UNSIGNED:
     case REC_BPINT_UNSIGNED:
@@ -1126,11 +1130,9 @@ static const char* TrafToHiveType(Attributes* attrs)
     case REC_BIN64_SIGNED:
       return "bigint";
 
-    case REC_TDM_FLOAT32:
     case REC_IEEE_FLOAT32:
       return "float";
 
-    case REC_TDM_FLOAT64:
     case REC_IEEE_FLOAT64:
       return "double";
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/exp/ExpPCodeClauseGen.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/ExpPCodeClauseGen.cpp 
b/core/sql/exp/ExpPCodeClauseGen.cpp
index 6868a3d..83063c1 100644
--- a/core/sql/exp/ExpPCodeClauseGen.cpp
+++ b/core/sql/exp/ExpPCodeClauseGen.cpp
@@ -1606,12 +1606,10 @@ ex_expr::exp_return_type ExHDPHash::pCodeGenerate(Space 
*space, UInt32 f)
     break; 
   case REC_BIN32_SIGNED:
   case REC_BIN32_UNSIGNED:
-  case REC_TDM_FLOAT32:
   case REC_IEEE_FLOAT32:
     flags = SWAP_FOUR;
     break;
   case REC_BIN64_SIGNED:
-  case REC_TDM_FLOAT64:
   case REC_IEEE_FLOAT64:
     flags = SWAP_EIGHT;
     break;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/exp/exp_arith.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_arith.cpp b/core/sql/exp/exp_arith.cpp
index 0059417..dcec35f 100644
--- a/core/sql/exp/exp_arith.cpp
+++ b/core/sql/exp/exp_arith.cpp
@@ -1388,102 +1388,7 @@ ex_expr::exp_return_type 
ex_arith_clause::evalUnsupportedOperations(
   short op1Type = getOperand(1)->getDatatype();
   short op2Type = getOperand(2)->getDatatype();
   
-  // if either of the two operands is a Tandem float, convert
-  // them to IEEE float and then do the arith operation. This case
-  // will be reached for pre-R2 programs where only tandem floats
-  // were supported. We support this so as to not require applications
-  // to recompile. This case is also needed for versioning support
-  // in mixed node environments.
-  if ((op1Type == REC_TDM_FLOAT32) ||
-      (op1Type == REC_TDM_FLOAT64) ||
-      (op2Type == REC_TDM_FLOAT32) ||
-      (op2Type == REC_TDM_FLOAT64))
-    {
-      // convert both operands to double.
-      // Do the arith operation and convert result back to the
-      // type of result operand.
-      double op1Double;
-      double op2Double;
-      double op0Double; // result
-      
-      char * opDoubleData[3];
-      opDoubleData[0] = (char *)&op0Double;
-      opDoubleData[1] = (char *)&op1Double;
-      opDoubleData[2] = (char *)&op2Double;
-      
-      if (convDoIt(op_data[1],
-                  getOperand(1)->getLength(),
-                  op1Type,
-                  getOperand(1)->getPrecision(),
-                  getOperand(1)->getScale(),
-                  (char*)&op1Double,
-                  (Lng32)sizeof(double),
-                  REC_FLOAT64,
-                  0,
-                  0, NULL, 0, heap, diagsArea,
-                  CONV_UNKNOWN) != ex_expr::EXPR_OK)
-       return ex_expr::EXPR_ERROR;
-      
-      if (convDoIt(op_data[2],
-                  getOperand(2)->getLength(),
-                  op2Type,
-                  getOperand(2)->getPrecision(),
-                  getOperand(2)->getScale(),
-                  (char*)&op2Double,
-                  (Lng32)sizeof(double),
-                  REC_FLOAT64,
-                  0,
-                  0, NULL, 0, heap, diagsArea,
-                  CONV_UNKNOWN) != ex_expr::EXPR_OK)
-       return ex_expr::EXPR_ERROR;
-      
-      // do the arith operation.
-      ex_arith_clause tempArith;
-      SimpleType op1DoubleAttr(REC_FLOAT64, sizeof(double), 0, 0,
-                              ExpTupleDesc::SQLMX_FORMAT,
-                              8, 0, 0, 0, Attributes::NO_DEFAULT, 0);
-      SimpleType op2DoubleAttr(REC_FLOAT64, sizeof(double), 0, 0,
-                              ExpTupleDesc::SQLMX_FORMAT,
-                              8, 0, 0, 0, Attributes::NO_DEFAULT, 0);
-      SimpleType op0DoubleAttr(REC_FLOAT64, sizeof(double), 0, 0,
-                              ExpTupleDesc::SQLMX_FORMAT,
-                              8, 0, 0, 0, Attributes::NO_DEFAULT, 0);
-      
-      tempArith.set_case_index(getOperType(),
-                              &op1DoubleAttr,
-                              &op2DoubleAttr,
-                              &op0DoubleAttr);
-      
-      if (tempArith.get_case_index() == ARITH_NOT_SUPPORTED)
-       {
-         ExRaiseSqlError(heap, diagsArea, EXE_INTERNAL_ERROR);
-         return ex_expr::EXPR_ERROR;
-       }
-
-      if (tempArith.eval(opDoubleData,
-                        heap, diagsArea) != ex_expr::EXPR_OK)
-       return ex_expr::EXPR_ERROR;
-      
-      // convert double result to the actual result type.
-      if (convDoIt(opDoubleData[0],
-                  (Lng32)sizeof(double),
-                  REC_FLOAT64,
-                  0, 0,
-                  op_data[0],
-                  getOperand(0)->getLength(),
-                  getOperand(0)->getDatatype(),
-                  getOperand(0)->getPrecision(),
-                  getOperand(0)->getScale(),
-                  NULL, 0, heap, diagsArea,
-                  CONV_UNKNOWN) != ex_expr::EXPR_OK)
-       return ex_expr::EXPR_ERROR;
-    }
-  else
-    {
-      ExRaiseSqlError(heap, diagsArea, EXE_INTERNAL_ERROR);
-      return ex_expr::EXPR_ERROR;
-    }
- 
-  return ex_expr::EXPR_OK;
+  ExRaiseSqlError(heap, diagsArea, EXE_INTERNAL_ERROR);
+  return ex_expr::EXPR_ERROR;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/exp/exp_attrs.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_attrs.cpp b/core/sql/exp/exp_attrs.cpp
index 4241a35..b9d3b09 100644
--- a/core/sql/exp/exp_attrs.cpp
+++ b/core/sql/exp/exp_attrs.cpp
@@ -220,6 +220,8 @@ switch (datatype)
   // When you add new datatype in /common/dfs2rec.h, don't
   // forget add new case here. Otherwise, showplan won't display it.
 
+  case REC_BIN8_SIGNED: return extFormat? (char *)"TINYINT SIGNED":(char 
*)"REC_BIN8_SIGNED";
+  case REC_BIN8_UNSIGNED: return extFormat? (char *)"TINYINT UNSIGNED":(char 
*)"REC_BIN8_UNSIGNED";
   case REC_BIN16_SIGNED: return extFormat? (char *)"SMALLINT SIGNED":(char 
*)"REC_BIN16_SIGNED";
   case REC_BIN16_UNSIGNED: return extFormat? (char *)"SMALLINT UNSIGNED":(char 
*)"REC_BIN16_UNSIGNED";
   case REC_BIN32_SIGNED: return extFormat? (char *)"INTEGER SIGNED":(char 
*)"REC_BIN32_SIGNED";
@@ -227,8 +229,6 @@ switch (datatype)
   case REC_BIN64_SIGNED: return extFormat? (char *)"LARGEINT":(char 
*)"REC_BIN64_SIGNED";
   case REC_BPINT_UNSIGNED: return extFormat? (char *)"BIT PRECISION 
INTEGER":(char *)"REC_BPINT_UNSIGNED";
 
-  case REC_TDM_FLOAT32: return extFormat? (char *)"FLOAT":(char 
*)"REC_TDM_FLOAT32";
-  case REC_TDM_FLOAT64: return extFormat? (char *)"DOUBLE PRECISION":(char 
*)"REC_TDM_FLOAT64";
   case REC_IEEE_FLOAT32: return extFormat? (char *)"IEEE FLOAT":(char 
*)"REC_IEEE_FLOAT32";
   case REC_IEEE_FLOAT64: return extFormat? (char *)"IEEE DOUBLE 
PRECISION":(char *)"REC_IEEE_FLOAT64";
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/exp/exp_clause_derived.h
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_clause_derived.h 
b/core/sql/exp/exp_clause_derived.h
index 41904f6..5301ada 100644
--- a/core/sql/exp/exp_clause_derived.h
+++ b/core/sql/exp/exp_clause_derived.h
@@ -1544,7 +1544,22 @@ enum conv_case_index {
   CONV_BLOB_BLOB                       =249,
   CONV_BLOB_ASCII_F                    =250,
 
-  CONV_GBK_F_UTF8_V                    =251
+  CONV_GBK_F_UTF8_V                    =251,
+
+  // TINYINT conversions
+  CONV_BIN8S_BIN8S                     =252,
+  CONV_BIN8U_BIN8U                     =253,
+  CONV_BIN8S_BIN16S                    =254,
+  CONV_BIN8U_BIN16U                    =255,
+  CONV_BIN16S_BIN8S                    =256,
+  CONV_BIN16U_BIN8U                    =257,
+  CONV_BIN8S_ASCII                     =258,
+  CONV_BIN8U_ASCII                     =259,
+  CONV_BIN16U_BIN8S                    =260,
+  CONV_BIN16S_BIN8U                    =261,
+  CONV_BIN8U_BIN16S                    =262,
+  CONV_ASCII_BIN8S                     =263,
+  CONV_ASCII_BIN8U                     =264
 };
 
 class SQLEXP_LIB_FUNC  ex_conv_clause : public ex_clause {
@@ -1699,7 +1714,6 @@ public:
   {
     return alignment_;
   }
-
 private:
   // conv_case_index
   Int16            case_index;           // 00-01

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/exp/exp_comp.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_comp.cpp b/core/sql/exp/exp_comp.cpp
index 0a871cf..a238d59 100644
--- a/core/sql/exp/exp_comp.cpp
+++ b/core/sql/exp/exp_comp.cpp
@@ -1160,84 +1160,8 @@ ex_expr::exp_return_type 
ex_comp_clause::evalUnsupportedOperations(
   short op1Type = getOperand(1)->getDatatype();
   short op2Type = getOperand(2)->getDatatype();
   
-  // if either of the two operands is a Tandem float, convert
-  // them to IEEE float and then do the arith operation. This case
-  // will be reached for pre-R2 programs where only tandem floats
-  // were supported. We support this so as to not require applications
-  // to recompile. This case is also needed for versioning support
-  // in mixed node environments.
-  if ((op1Type == REC_TDM_FLOAT32) ||
-      (op1Type == REC_TDM_FLOAT64) ||
-      (op2Type == REC_TDM_FLOAT32) ||
-      (op2Type == REC_TDM_FLOAT64))
-    {
-      // convert both operands to double and
-      // do the comparison operation.
-
-      double op1Double;
-      double op2Double;
-      
-      if (convDoIt(op_data[1],
-                  getOperand(1)->getLength(),
-                  op1Type,
-                  getOperand(1)->getPrecision(),
-                  getOperand(1)->getScale(),
-                  (char*)&op1Double,
-                  (Lng32)sizeof(double),
-                  REC_FLOAT64,
-                  0,
-                  0, NULL, 0, heap, diagsArea,
-                  CONV_UNKNOWN) != ex_expr::EXPR_OK)
-       return ex_expr::EXPR_ERROR;
-      
-      if (convDoIt(op_data[2],
-                  getOperand(2)->getLength(),
-                  op2Type,
-                  getOperand(2)->getPrecision(),
-                  getOperand(2)->getScale(),
-                  (char*)&op2Double,
-                  (Lng32)sizeof(double),
-                  REC_FLOAT64,
-                  0,
-                  0, NULL, 0, heap, diagsArea,
-                  CONV_UNKNOWN) != ex_expr::EXPR_OK)
-       return ex_expr::EXPR_ERROR;
-      
-      // do the comparison operation.
-      ex_comp_clause tempComp;
-      SimpleType op1DoubleAttr(REC_FLOAT64, sizeof(double), 0, 0,
-                              ExpTupleDesc::SQLMX_FORMAT,
-                              8, 0, 0, 0, Attributes::NO_DEFAULT, 0);
-      SimpleType op2DoubleAttr(REC_FLOAT64, sizeof(double), 0, 0,
-                              ExpTupleDesc::SQLMX_FORMAT,
-                              8, 0, 0, 0, Attributes::NO_DEFAULT, 0);
-      
-      tempComp.set_case_index(getOperType(),
-                             &op1DoubleAttr,
-                             &op2DoubleAttr);
-      
-      if (tempComp.get_case_index() == COMP_NOT_SUPPORTED)
-       {
-         ExRaiseSqlError(heap, diagsArea, EXE_INTERNAL_ERROR);
-         return ex_expr::EXPR_ERROR;
-       }
-
-      char * opDoubleData[3];
-      opDoubleData[1] = (char *)&op1Double;
-      opDoubleData[2] = (char *)&op2Double;
-      opDoubleData[0] = op_data[0]; 
-      
-      if (tempComp.eval(opDoubleData,
-                       heap, diagsArea) != ex_expr::EXPR_OK)
-       return ex_expr::EXPR_ERROR;
-    }
-  else
-    {
-      ExRaiseSqlError(heap, diagsArea, EXE_INTERNAL_ERROR);
-      return ex_expr::EXPR_ERROR;
-    }
- 
-  return ex_expr::EXPR_OK;
+  ExRaiseSqlError(heap, diagsArea, EXE_INTERNAL_ERROR);
+  return ex_expr::EXPR_ERROR;
 }
 // LCOV_EXCL_STOP
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/exp/exp_conv.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_conv.cpp b/core/sql/exp/exp_conv.cpp
index 14024ec..1057ff2 100644
--- a/core/sql/exp/exp_conv.cpp
+++ b/core/sql/exp/exp_conv.cpp
@@ -3917,7 +3917,7 @@ ex_expr::exp_return_type checkPrecision(Int64 source,
       // We've satisfied the above criteria.  Check that the source value
       // will fit in the target NUMERIC.
       //
-      if (targetPrecision <= 18) // ??? Larry Schumacher ???
+      if (targetPrecision <= 18)
 
       if ((source < getMinDecValue(targetPrecision, targetType)) ||
           (source > getMaxDecValue(targetPrecision)) ) {
@@ -4912,6 +4912,292 @@ convDoIt(char * source,
       }
     }
 
+  case CONV_BIN8S_BIN8S:
+    {
+      *(Int8 *)target = *(Int8 *)source;
+    }
+  break;
+
+  case CONV_BIN8U_BIN8U:
+    {
+      *(UInt8 *)target = *(UInt8 *)source;
+    }
+  break;
+
+  case CONV_BIN8S_BIN16S:
+    {
+      *(Int16 *)target = *(Int8 *)source;
+    }
+  break;
+
+  case CONV_BIN8U_BIN16U:
+    {
+      *(UInt16 *)target = *(UInt8 *)source;
+    }
+  break;
+ 
+  case CONV_BIN8U_BIN16S:
+    {
+      *(Int16 *)target = *(UInt8 *)source;
+    }
+  break;
+ 
+  case CONV_BIN16U_BIN8S:
+    {
+      if (*(UInt16 *)source > CHAR_MAX)
+        {
+          if (dataConversionErrorFlag != 0)  // Capture error in variable?
+            {
+              *(Int8 *)target = CHAR_MAX;
+              *dataConversionErrorFlag = 
ex_conv_clause::CONV_RESULT_ROUNDED_DOWN_TO_MAX;
+            }
+          else
+            {
+              ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                    source, sourceLen, sourceType, sourceScale,
+                                    targetType, tempFlags);
+              return ex_expr::EXPR_ERROR;
+            }
+        }
+      else
+        {
+          if (dataConversionErrorFlag != 0)
+            { // Set the target value.
+              *(Int8 *)target = (Int8) *(UInt16 *)source;
+            }
+          else
+            { // Check target precision. Then set target value.
+              if (checkPrecision((Int64)*(UInt16 *)source,
+                                sourceLen,
+                                sourceType,
+                                sourcePrecision,
+                                 sourceScale,
+                                targetType,
+                                targetPrecision,
+                                 targetScale,
+                                heap,
+                                diagsArea,
+                                 tempFlags) == ex_expr::EXPR_OK)
+                {
+                  *(Int8 *)target = (Int8) *(UInt16 *)source;
+                }
+              else
+                {
+                  return ex_expr::EXPR_ERROR;
+                }
+            }
+        }
+    }
+  break;
+
+  case CONV_BIN16S_BIN8U:
+    {
+      if (*(Int16 *)source < 0)
+        {
+          if (dataConversionErrorFlag != 0)  // Capture error in variable?
+            {
+              *(UInt8 *)target = 0;
+              *dataConversionErrorFlag = 
ex_conv_clause::CONV_RESULT_ROUNDED_UP_TO_MIN;
+            }
+          else
+            {
+              ExRaiseSqlError(heap, diagsArea, EXE_UNSIGNED_OVERFLOW);
+              return ex_expr::EXPR_ERROR;
+            }
+        }
+      else if (*(Int16 *)source > UCHAR_MAX)
+        {
+          if (dataConversionErrorFlag != 0)
+            {
+              *(UInt8 *)target = UCHAR_MAX;
+              *dataConversionErrorFlag = 
ex_conv_clause::CONV_RESULT_ROUNDED_DOWN_TO_MAX;
+            }
+          else
+            {
+              ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                    source, sourceLen, sourceType, sourceScale,
+                                    targetType, tempFlags);
+              return ex_expr::EXPR_ERROR;
+            }
+        }
+      else
+        {
+          if (dataConversionErrorFlag != 0)
+            {
+              *(UInt8 *)target = (UInt8) *(Int16 *)source;
+            }
+          else
+            {
+              if (checkPrecision((Int64)*(Int16 *)source,
+                                sourceLen,
+                                sourceType,
+                                sourcePrecision,
+                                 sourceScale,
+                                targetType,
+                                targetPrecision,
+                                 targetScale,
+                                heap,
+                                diagsArea,
+                                 tempFlags) == ex_expr::EXPR_OK)
+                {
+                  *(UInt8 *)target = (UInt8) *(Int16 *)source;
+                }
+              else
+                {
+                  return ex_expr::EXPR_ERROR;
+                }
+            }
+        }
+    }
+  break;
+
+  case CONV_BIN16S_BIN8S:
+    {
+      if (*(Int16 *)source < CHAR_MIN)
+        {
+          if (dataConversionErrorFlag != 0)  // Capture error in variable?
+            {
+              *(Int8 *)target = CHAR_MIN;
+              *dataConversionErrorFlag = 
ex_conv_clause::CONV_RESULT_ROUNDED_UP_TO_MIN;
+            }
+          else
+            {
+              ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                    source, sourceLen, sourceType, sourceScale,
+                                    targetType, tempFlags);
+              return ex_expr::EXPR_ERROR;
+            }
+        }
+      else if (*(Int16 *)source > CHAR_MAX)
+        {
+          if (dataConversionErrorFlag != 0)  // Capture error in variable?
+            {
+              *(Int8 *)target = CHAR_MAX;
+              *dataConversionErrorFlag = 
ex_conv_clause::CONV_RESULT_ROUNDED_DOWN_TO_MAX;
+            }
+          else
+            {
+              ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                    source, sourceLen, sourceType, sourceScale,
+                                    targetType, tempFlags);
+              return ex_expr::EXPR_ERROR;
+            }
+        }
+      else
+        {
+          if (dataConversionErrorFlag != 0)
+            { // Set the target value.
+              *(Int8 *)target = (Int8) *(Int16 *)source;
+            }
+          else
+            { // Check target precision. Then set target value.
+              if (checkPrecision((Int64)*(Int16 *)source,
+                                sourceLen,
+                                sourceType,
+                                sourcePrecision,
+                                 sourceScale,
+                                targetType,
+                                targetPrecision,
+                                 targetScale,
+                                heap,
+                                diagsArea,
+                                 tempFlags) == ex_expr::EXPR_OK)
+                {
+                  *(Int8 *)target = (Int8) *(Int16 *)source;
+                }
+              else
+                {
+                  return ex_expr::EXPR_ERROR;
+                }
+            }
+        }
+    }
+  break;
+
+  case CONV_BIN16U_BIN8U:
+    {
+      if (*(UInt16 *)source > UCHAR_MAX)
+        {
+          if (dataConversionErrorFlag != 0)  // Capture error in variable?
+            {
+              *(UInt8 *)target = UCHAR_MAX;
+              *dataConversionErrorFlag = 
ex_conv_clause::CONV_RESULT_ROUNDED_DOWN_TO_MAX;
+            }
+          else
+            {
+              ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                    source, sourceLen, sourceType, sourceScale,
+                                    targetType, tempFlags);
+              return ex_expr::EXPR_ERROR;
+            }
+        }
+      else
+        {
+          if (dataConversionErrorFlag != 0)
+            { // Set the target value.
+              *(UInt8 *)target = (UInt8) *(UInt16 *)source;
+            }
+          else
+            { // Check target precision. Then set target value.
+              if (checkPrecision((Int64)*(UInt16 *)source,
+                                sourceLen,
+                                sourceType,
+                                sourcePrecision,
+                                 sourceScale,
+                                targetType,
+                                targetPrecision,
+                                 targetScale,
+                                heap,
+                                diagsArea,
+                                 tempFlags) == ex_expr::EXPR_OK)
+                {
+                  *(UInt8 *)target = (UInt8) *(UInt16 *)source;
+                }
+              else
+                {
+                  return ex_expr::EXPR_ERROR;
+                }
+            }
+        }
+    }
+  break;
+
+  case CONV_BIN8S_ASCII: {
+    if (convInt64ToAscii(target,
+                        targetLen,
+                         targetPrecision,
+                         targetScale,
+                        (Int64) *(Int8 *)source,
+                        sourceScale,
+                        varCharLen,
+                        varCharLenSize,
+                        ' ', // filler character
+                        FALSE,
+                        leftPad,
+                        heap,
+                        diagsArea) != ex_expr::EXPR_OK)
+      return ex_expr::EXPR_ERROR;
+  };
+  break;
+
+  case CONV_BIN8U_ASCII: {
+    if (convInt64ToAscii(target,
+                        targetLen,
+                         targetPrecision,
+                         targetScale,
+                        (Int64) *(UInt8 *)source,
+                        sourceScale,
+                        varCharLen,
+                        varCharLenSize,
+                        ' ', // filler character
+                        FALSE,
+                        leftPad,
+                        heap,
+                        diagsArea) != ex_expr::EXPR_OK)
+      return ex_expr::EXPR_ERROR;
+  };
+  break;
+
   case CONV_BIN16S_BIN16S:
     {
       if (dataConversionErrorFlag != 0)
@@ -8592,6 +8878,8 @@ convDoIt(char * source,
   };
   break;
   
+  case CONV_ASCII_BIN8S:
+  case CONV_ASCII_BIN8U:
   case CONV_ASCII_BIN16S:
   case CONV_ASCII_BIN16U:
   case CONV_ASCII_BIN32S:
@@ -8608,6 +8896,129 @@ convDoIt(char * source,
 
     switch (index)
       {
+      case CONV_ASCII_BIN8S: {
+           if (interm < CHAR_MIN)
+             {
+             if (dataConversionErrorFlag != 0)  // Capture error in variable?
+               {
+               *(Target<Int8> *)target = CHAR_MIN;
+               *dataConversionErrorFlag =
+                        ex_conv_clause::CONV_RESULT_ROUNDED_UP_TO_MIN;
+               }
+             else
+               {
+               ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                     source, sourceLen, sourceType, 
sourceScale,
+                                     targetType, tempFlags);
+               return ex_expr::EXPR_ERROR;
+               }
+             }
+           else if (interm > CHAR_MAX)
+             {
+             if (dataConversionErrorFlag != 0)  // Capture error in variable?
+                 {
+                   *(Target<Int8> *)target = CHAR_MAX;
+                   *dataConversionErrorFlag =
+                        ex_conv_clause::CONV_RESULT_ROUNDED_DOWN_TO_MAX;
+                 }
+               else
+                 {
+                   ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                         source, sourceLen, sourceType,
+                                         sourceScale, targetType, tempFlags);
+                   return ex_expr::EXPR_ERROR;
+                 }
+             }
+           else
+             {
+             if (dataConversionErrorFlag != 0)
+               { // Set the target value.
+               *(Target<Int8> *)target = (Int8) interm;
+               }
+             else
+               { // Check target precision. Then set target value.
+               if ((targetPrecision > 0) &&
+                   (checkPrecision(interm,
+                                  8,
+                                   REC_BIN64_SIGNED,
+                                   0,
+                                   0,
+                                   targetType,
+                                   targetPrecision,
+                                   targetScale,
+                                   heap,
+                                   diagsArea,
+                                   tempFlags) != ex_expr::EXPR_OK))
+                  {
+                  return ex_expr::EXPR_ERROR;
+                  }
+                *(Target<Int8> *)target = (Int8) interm;
+               }
+             }
+           };
+           break;
+      case CONV_ASCII_BIN8U: {
+           if (interm < 0)
+             {
+             if (dataConversionErrorFlag != 0)  // Capture error in variable?
+               {
+               *(Target<unsigned short> *)target = 0;
+               *dataConversionErrorFlag =
+                        ex_conv_clause::CONV_RESULT_ROUNDED_UP_TO_MIN;
+               }
+             else
+               {
+               ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                     source, sourceLen, sourceType, 
sourceScale,
+                                     targetType, tempFlags);
+               return ex_expr::EXPR_ERROR;
+               }
+             }
+           else if (interm > UCHAR_MAX)
+             {
+             if (dataConversionErrorFlag != 0)  // Capture error in variable?
+                 {
+                   *(Target<UInt8> *)target = UCHAR_MAX;
+                   *dataConversionErrorFlag =
+                        ex_conv_clause::CONV_RESULT_ROUNDED_DOWN_TO_MAX;
+                 }
+               else
+                 {
+                   ExRaiseDetailSqlError(heap, diagsArea, EXE_NUMERIC_OVERFLOW,
+                                         source, sourceLen, sourceType,
+                                         sourceScale,
+                                         targetType, tempFlags);
+                   return ex_expr::EXPR_ERROR;
+                 }
+             }
+           else
+             {
+             if (dataConversionErrorFlag != 0)
+               { // Set the target value.
+               *(Target<UInt8> *)target = (UInt8) interm;
+               }
+             else
+               { // Check target precision. Then set target value.
+               if ((targetPrecision > 0) &&
+                   (checkPrecision(interm,
+                                  8,
+                                   REC_BIN64_SIGNED,
+                                   0,
+                                   0,
+                                   targetType,
+                                   targetPrecision,
+                                   targetScale,
+                                   heap,
+                                   diagsArea,
+                                   tempFlags) != ex_expr::EXPR_OK))
+                  {
+                  return ex_expr::EXPR_ERROR;
+                  }
+                *(Target<UInt8> *)target = (UInt8) interm;
+               }
+             }
+           };
+           break;
       case CONV_ASCII_BIN16S: {
            if (interm < SHRT_MIN)
              {
@@ -10247,58 +10658,8 @@ convDoIt(char * source,
   case CONV_NOT_SUPPORTED:
     {
       // this conversion is not supported.
-
-      // if this conversion could be done by converting to an
-      // intermediate datatype, do it.
-
-      // Conversion to/from a tandem float type is only supported if
-      // the from/to type is a float type.
-      // Conversion source to ieee double type and then
-      // convert from ieee double to target type.
-      if ((targetType == REC_TDM_FLOAT32) ||
-         (targetType == REC_TDM_FLOAT64) ||
-         (sourceType == REC_TDM_FLOAT32) ||
-         (sourceType == REC_TDM_FLOAT64))
-       {
-         double dintermediate;
-
-         if (convDoIt(source,
-                      sourceLen,
-                      sourceType,
-                      sourcePrecision,
-                      sourceScale,
-                      (char*)&dintermediate,
-                      (Lng32)sizeof(double),
-                      REC_FLOAT64,
-                      0, 0,
-                      NULL, 0, heap, diagsArea,
-                      CONV_UNKNOWN, 0,
-                       tempFlags | CONV_INTERMEDIATE_CONVERSION) != 
ex_expr::EXPR_OK)
-           return ex_expr::EXPR_ERROR;
-
-         if (convDoIt((char*)&dintermediate,
-                      sizeof(double),
-                      REC_FLOAT64,
-                      0,
-                      0,
-                      target,
-                      targetLen,
-                      targetType,
-                      targetPrecision,
-                      targetScale, 
-                      varCharLen, 
-                      varCharLenSize, 
-                      heap, diagsArea,
-                      CONV_UNKNOWN,
-                      dataConversionErrorFlag,
-                      flags | CONV_INTERMEDIATE_CONVERSION) != 
ex_expr::EXPR_OK)
-           return ex_expr::EXPR_ERROR;
-       }
-      else
-       {
-         ExRaiseSqlError(heap, diagsArea, EXE_CONVERT_NOT_SUPPORTED);
-         return ex_expr::EXPR_ERROR;
-       }
+      ExRaiseSqlError(heap, diagsArea, EXE_CONVERT_NOT_SUPPORTED);
+      return ex_expr::EXPR_ERROR;
     }
   break;
 
@@ -10713,47 +11074,6 @@ ex_expr::exp_return_type scaleDoIt(char *operand,
     intermediateDouble = *doubleOperandPtr; //*(double*)operand;
   }
   break;
-       // LCOV_EXCL_START
-  case REC_TDM_FLOAT32: {
-#pragma nowarn(1506)   // warning elimination 
-    if (convDoIt(operand,
-                operandLen,
-                operandType,
-                0,
-                0,
-                (char*)&intermediateDouble,
-                 (Lng32)sizeof(double),
-                REC_FLOAT64,
-                0,
-                0, NULL, 0, heap, NULL,
-#pragma warning (disable : 4244)  //warning elimination
-                CONV_UNKNOWN) != ex_expr::EXPR_OK)
-#pragma warning (default : 4244)  //warning elimination
-      return ex_expr::EXPR_ERROR;
-#pragma warn(1506)  // warning elimination 
-  }
-  break;
-
-  case REC_TDM_FLOAT64: {
-#pragma nowarn(1506)   // warning elimination 
-    if (convDoIt(operand,
-                operandLen,
-                operandType,
-                0,
-                0,
-                (char*)&intermediateDouble,
-                 (Lng32)sizeof(double),
-                REC_FLOAT64,
-                0,
-                0, NULL, 0, heap, NULL,
-#pragma warning (disable : 4244)  //warning elimination
-                CONV_UNKNOWN) != ex_expr::EXPR_OK)
-#pragma warning (default : 4244)  //warning elimination
-      return ex_expr::EXPR_ERROR;
-#pragma warn(1506)  // warning elimination 
-  }
-  break;
-
   case REC_DECIMAL_LSE: {
   case REC_DECIMAL_UNSIGNED:
     // Check if the first bit is set
@@ -10917,27 +11237,6 @@ ex_expr::exp_return_type scaleDoIt(char *operand,
   }
   break;
 
-  case REC_TDM_FLOAT32: 
-  case REC_TDM_FLOAT64: {
-#pragma nowarn(1506)   // warning elimination 
-         // LCOV_EXCL_START
-    if (convDoIt((char*)&intermediateDouble,
-                sizeof(double),
-                REC_FLOAT64,
-                0,
-                0,
-                operand,
-                operandLen,
-                operandType,
-                0,
-                0, NULL, 0, heap, NULL,
-#pragma warning (disable : 4244)  //warning elimination
-                CONV_UNKNOWN) != ex_expr::EXPR_OK)
-#pragma warning (default : 4244)  //warning elimination
-#pragma warn(1506)  // warning elimination 
-      return ex_expr::EXPR_ERROR;
-  }
-  break;
   case REC_DECIMAL_LS: {
     str_cpy_all(&operand[1], &intermediateString[1], operandLen -1);
     NADELETEBASIC(intermediateString, heap);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/exp/exp_fixup.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_fixup.cpp b/core/sql/exp/exp_fixup.cpp
index 183acfc..c58f04e 100644
--- a/core/sql/exp/exp_fixup.cpp
+++ b/core/sql/exp/exp_fixup.cpp
@@ -1131,6 +1131,17 @@ conv_case_index ex_conv_clause::find_case_index(short 
sourceType, Lng32 sourceLe
     {REC_BPINT_UNSIGNED, REC_NCHAR_F_UNICODE,        CONV_BIN16U_UNICODE},
     {REC_BPINT_UNSIGNED, REC_NCHAR_V_UNICODE,        CONV_BIN16U_UNICODE},
 
+    {REC_BIN8_SIGNED,    REC_BIN16_SIGNED,           CONV_BIN8S_BIN16S},
+    {REC_BIN8_SIGNED,    REC_BIN8_SIGNED,            CONV_BIN8S_BIN8S},
+    {REC_BIN8_SIGNED,    REC_BYTE_F_ASCII,           CONV_BIN8S_ASCII},
+    {REC_BIN8_SIGNED,    REC_BYTE_V_ASCII,           CONV_BIN8S_ASCII},
+
+    {REC_BIN8_UNSIGNED,  REC_BIN16_UNSIGNED,         CONV_BIN8U_BIN16U},
+    {REC_BIN8_UNSIGNED,  REC_BIN16_SIGNED,           CONV_BIN8U_BIN16S},
+    {REC_BIN8_UNSIGNED,  REC_BIN8_UNSIGNED,          CONV_BIN8U_BIN8U},
+    {REC_BIN8_UNSIGNED,  REC_BYTE_F_ASCII,           CONV_BIN8U_ASCII},
+    {REC_BIN8_UNSIGNED,  REC_BYTE_V_ASCII,           CONV_BIN8U_ASCII},
+
     {REC_BIN16_SIGNED,         REC_BPINT_UNSIGNED,         CONV_BIN16S_BPINTU},
     {REC_BIN16_SIGNED,  REC_BIN16_SIGNED,           CONV_BIN16S_BIN16S},
     {REC_BIN16_SIGNED,  REC_BIN16_UNSIGNED,         CONV_BIN16S_BIN16U},
@@ -1148,7 +1159,10 @@ conv_case_index ex_conv_clause::find_case_index(short 
sourceType, Lng32 sourceLe
     {REC_BIN16_SIGNED,  REC_BYTE_V_ASCII_LONG,      CONV_BIN16S_ASCII},
     {REC_BIN16_SIGNED,  REC_NCHAR_F_UNICODE,        CONV_BIN16S_UNICODE},
     {REC_BIN16_SIGNED,  REC_NCHAR_V_UNICODE,        CONV_BIN16S_UNICODE},
-    
+
+    {REC_BIN16_SIGNED,   REC_BIN8_SIGNED,           CONV_BIN16S_BIN8S},
+    {REC_BIN16_SIGNED,   REC_BIN8_UNSIGNED,         CONV_BIN16S_BIN8U},
+
     {REC_BIN16_UNSIGNED,  REC_BPINT_UNSIGNED,         CONV_BIN16U_BPINTU},
     {REC_BIN16_UNSIGNED,  REC_BIN16_SIGNED,           CONV_BIN16U_BIN16S},
     {REC_BIN16_UNSIGNED,  REC_BIN16_UNSIGNED,         CONV_BIN16U_BIN16U},
@@ -1166,6 +1180,9 @@ conv_case_index ex_conv_clause::find_case_index(short 
sourceType, Lng32 sourceLe
     {REC_BIN16_UNSIGNED,  REC_BYTE_V_ASCII_LONG,      CONV_BIN16U_ASCII},
     {REC_BIN16_UNSIGNED,  REC_NCHAR_F_UNICODE,        CONV_BIN16U_UNICODE},
     {REC_BIN16_UNSIGNED,  REC_NCHAR_V_UNICODE,        CONV_BIN16U_UNICODE},
+
+    {REC_BIN16_UNSIGNED, REC_BIN8_SIGNED,            CONV_BIN16U_BIN8S},
+    {REC_BIN16_UNSIGNED, REC_BIN8_UNSIGNED,          CONV_BIN16U_BIN8U},
    
     {REC_BIN32_SIGNED,  REC_BPINT_UNSIGNED,         CONV_BIN32S_BPINTU}, 
     {REC_BIN32_SIGNED,   REC_BIN16_SIGNED,           CONV_BIN32S_BIN16S},
@@ -1274,8 +1291,6 @@ conv_case_index ex_conv_clause::find_case_index(short 
sourceType, Lng32 sourceLe
     {REC_FLOAT32,            REC_BYTE_V_ASCII_LONG,  CONV_FLOAT32_ASCII},
     {REC_FLOAT32,            REC_NCHAR_F_UNICODE,    CONV_FLOAT32_UNICODE},
     {REC_FLOAT32,            REC_NCHAR_V_UNICODE,    CONV_FLOAT32_UNICODE},
-    {REC_FLOAT32,            REC_TDM_FLOAT32,        
CONV_FLOAT32IEEE_FLOAT32TDM},
-    {REC_FLOAT32,            REC_TDM_FLOAT64,        
CONV_FLOAT32IEEE_FLOAT64TDM},
     
     {REC_FLOAT64,            REC_BPINT_UNSIGNED,     CONV_FLOAT64_BPINTU},
     {REC_FLOAT64,            REC_BIN16_SIGNED,       CONV_FLOAT64_BIN16S},
@@ -1292,22 +1307,6 @@ conv_case_index ex_conv_clause::find_case_index(short 
sourceType, Lng32 sourceLe
     {REC_FLOAT64,            REC_BYTE_V_ASCII_LONG,  CONV_FLOAT64_ASCII},
     {REC_FLOAT64,            REC_NCHAR_F_UNICODE,    CONV_FLOAT64_UNICODE},
     {REC_FLOAT64,            REC_NCHAR_V_UNICODE,    CONV_FLOAT64_UNICODE},
-    {REC_FLOAT64,            REC_TDM_FLOAT32,        
CONV_FLOAT64IEEE_FLOAT32TDM},
-    {REC_FLOAT64,            REC_TDM_FLOAT64,        
CONV_FLOAT64IEEE_FLOAT64TDM},
-
-    {REC_TDM_FLOAT32,        REC_IEEE_FLOAT32,       
CONV_FLOAT32TDM_FLOAT32IEEE},
-    {REC_TDM_FLOAT32,        REC_IEEE_FLOAT64,       
CONV_FLOAT32TDM_FLOAT64IEEE},
-    {REC_TDM_FLOAT32,        REC_TDM_FLOAT32,        
CONV_FLOAT32TDM_FLOAT32TDM},
-    {REC_TDM_FLOAT32,        REC_TDM_FLOAT64,        
CONV_FLOAT32TDM_FLOAT64TDM},
-    {REC_TDM_FLOAT32,        REC_BYTE_F_ASCII,       CONV_FLOAT32TDM_ASCII},
-
-
-    {REC_TDM_FLOAT64,        REC_TDM_FLOAT32,        
CONV_FLOAT64TDM_FLOAT32TDM},
-    {REC_TDM_FLOAT64,        REC_TDM_FLOAT64,        
CONV_FLOAT64TDM_FLOAT64TDM},
-    {REC_TDM_FLOAT64,        REC_IEEE_FLOAT32,       
CONV_FLOAT64TDM_FLOAT32IEEE},
-    {REC_TDM_FLOAT64,        REC_IEEE_FLOAT64,       
CONV_FLOAT64TDM_FLOAT64IEEE},
-    {REC_TDM_FLOAT64,        REC_BYTE_F_ASCII,       CONV_FLOAT64TDM_ASCII},
-
 
     {REC_NUM_BIG_UNSIGNED, REC_BPINT_UNSIGNED,         CONV_BIGNUM_BIN16U},
     {REC_NUM_BIG_UNSIGNED, REC_BIN16_SIGNED,           CONV_BIGNUM_BIN16S},
@@ -1393,6 +1392,8 @@ conv_case_index ex_conv_clause::find_case_index(short 
sourceType, Lng32 sourceLe
     {REC_INT_SECOND,         REC_INT_SECOND,         
CONV_INTERVALS_INTERVALS_DIV},
  
     {REC_BYTE_F_ASCII,       REC_BPINT_UNSIGNED,         CONV_ASCII_BIN16U},
+    {REC_BYTE_F_ASCII,       REC_BIN8_SIGNED,            CONV_ASCII_BIN8S},
+    {REC_BYTE_F_ASCII,       REC_BIN8_UNSIGNED,          CONV_ASCII_BIN8U},
     {REC_BYTE_F_ASCII,       REC_BIN16_SIGNED,           CONV_ASCII_BIN16S},
     {REC_BYTE_F_ASCII,       REC_BIN16_UNSIGNED,         CONV_ASCII_BIN16U},   
 
     {REC_BYTE_F_ASCII,       REC_BIN32_SIGNED,           CONV_ASCII_BIN32S},
@@ -1404,9 +1405,6 @@ conv_case_index ex_conv_clause::find_case_index(short 
sourceType, Lng32 sourceLe
     {REC_BYTE_F_ASCII,       REC_FLOAT32,                CONV_ASCII_FLOAT32},
     {REC_BYTE_F_ASCII,       REC_FLOAT64,                CONV_ASCII_FLOAT64},
 
-    {REC_BYTE_F_ASCII,       REC_TDM_FLOAT32,             
CONV_ASCII_FLOAT32TDM},
-    {REC_BYTE_F_ASCII,       REC_TDM_FLOAT64,             
CONV_ASCII_FLOAT64TDM},
-
     {REC_BYTE_F_ASCII,       REC_NUM_BIG_UNSIGNED,       CONV_ASCII_BIGNUM},
     {REC_BYTE_F_ASCII,       REC_NUM_BIG_SIGNED,         CONV_ASCII_BIGNUM},
     {REC_BYTE_F_ASCII,       REC_BYTE_F_ASCII,           CONV_ASCII_F_F},
@@ -1474,6 +1472,8 @@ conv_case_index ex_conv_clause::find_case_index(short 
sourceType, Lng32 sourceLe
 
 
     {REC_BYTE_V_ASCII,       REC_BPINT_UNSIGNED,         CONV_ASCII_BIN16U},   
 
+    {REC_BYTE_V_ASCII,       REC_BIN8_SIGNED,            CONV_ASCII_BIN8S},
+    {REC_BYTE_V_ASCII,       REC_BIN8_UNSIGNED,          CONV_ASCII_BIN8U},
     {REC_BYTE_V_ASCII,       REC_BIN16_SIGNED,           CONV_ASCII_BIN16S},
     {REC_BYTE_V_ASCII,       REC_BIN16_UNSIGNED,         CONV_ASCII_BIN16U},   
 
     {REC_BYTE_V_ASCII,       REC_BIN32_SIGNED,           CONV_ASCII_BIN32S},

Reply via email to