Repository: incubator-trafodion
Updated Branches:
  refs/heads/master 9dff32159 -> 95723215c


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/regress/udr/EXPECTED100.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/udr/EXPECTED100.SB 
b/core/sql/regress/udr/EXPECTED100.SB
index 8ceca90..6002f2f 100644
--- a/core/sql/regress/udr/EXPECTED100.SB
+++ b/core/sql/regress/udr/EXPECTED100.SB
@@ -54,6 +54,12 @@
 
 --- SQL operation complete.
 >>
+>>create procedure T100_io_yy(IN IN1 tinyint, OUT OUT2 tinyint)
++>external name 't100.T100_io_yy' language java parameter style java no sql
++>library T100;
+
+--- SQL operation complete.
+>>
 >>create procedure T100_io_ss(IN IN1 smallint, OUT OUT2 smallint)
 +>external name 't100.T100_io_ss' language java parameter style java no sql
 +>library T100;
@@ -581,6 +587,39 @@ OUT2
 
 --- SQL operation complete.
 >>
+>>call T100_io_yy(cast(-9 as tinyint), ?x);
+
+OUT2  
+------
+
+    -9
+
+--- SQL operation complete.
+>>call T100_io_yy(cast(9 as tinyint), ?x);
+
+OUT2  
+------
+
+     9
+
+--- SQL operation complete.
+>>call T100_io_yy(cast(-128 as tinyint), ?x);
+
+OUT2  
+------
+
+  -128
+
+--- SQL operation complete.
+>>call T100_io_yy(cast(127 as tinyint), ?x);
+
+OUT2  
+------
+
+   127
+
+--- SQL operation complete.
+>>
 >>call T100_io_ss(cast(-9 as smallint), ?x);
 
 OUT2  
@@ -1146,6 +1185,16 @@ OUT2
 *** ERROR[8411] A numeric overflow occurred during an arithmetic computation 
or data conversion. Source Type:SMALLINT SIGNED(MBIN16S) Source Value:-10 
Target Type:LARGEINT(IBIN64S) Min Target Value:-9. Instruction:RANGE_LOW_S16S64 
Operation:RANGE_LOW.
 
 --- SQL operation failed with errors.
+>>call T100_io_yy(cast(128 as tinyint), ?x);
+
+*** ERROR[8411] A numeric overflow occurred during an arithmetic computation 
or data conversion. Conversion of Source Type:SMALLINT SIGNED(REC_BIN16_SIGNED) 
Source Value:128 to Target Type:TINYINT SIGNED(REC_BIN8_SIGNED).
+
+--- SQL operation failed with errors.
+>>call T100_io_yy(cast(-129 as tinyint), ?x);
+
+*** ERROR[8411] A numeric overflow occurred during an arithmetic computation 
or data conversion. Conversion of Source Type:SMALLINT SIGNED(REC_BIN16_SIGNED) 
Source Value:-129 to Target Type:TINYINT SIGNED(REC_BIN8_SIGNED).
+
+--- SQL operation failed with errors.
 >>call T100_io_ss(cast(32768 as smallint), ?x);
 
 *** ERROR[8411] A numeric overflow occurred during an arithmetic computation 
or data conversion. Source Type:INTEGER SIGNED(MBIN32S) Source Value:32768 
Target Type:LARGEINT(IBIN64S) Max Target Value:32767. 
Instruction:RANGE_HIGH_S32S64 Operation:RANGE_HIGH.
@@ -1706,8 +1755,8 @@ OUT2
 >>
 >>obey TEST100(udrtrace);
 >>log;
-Apache Trafodion Conversational Interface 2.0.0
-Copyright (c) 2015 Apache Software Foundation
+Apache Trafodion Conversational Interface 2.1.0
+Copyright (c) 2015-2016 Apache Software Foundation
 >>?section udrtrace2
 >>--
 >>-- This section will be executed by the mxci fired off while executing

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/regress/udr/TEST100
----------------------------------------------------------------------
diff --git a/core/sql/regress/udr/TEST100 b/core/sql/regress/udr/TEST100
index cedb778..a9d84fd 100755
--- a/core/sql/regress/udr/TEST100
+++ b/core/sql/regress/udr/TEST100
@@ -52,6 +52,7 @@
 --   d = DATE
 --   t = TIME(0)
 --   m = TIMESTAMP(6)
+--   y - TINYINT
 --
 -- Examples:
 --   (IN int, OUT int) = T100_io_ii
@@ -103,6 +104,7 @@ drop procedure T100_io_nn;
 drop procedure T100_io_bb;
 drop procedure T100_io_bb_2;
 drop procedure T100_io_ee;
+drop procedure T100_io_yy;
 drop procedure T100_io_ss;
 drop procedure T100_io_ii;
 drop procedure T100_io_ll;
@@ -170,6 +172,10 @@ create procedure T100_io_ee(IN IN1 decimal(9,3), OUT OUT2 
decimal(9,3))
 external name 't100.T100_io_ee' language java no sql
 library T100;
 
+create procedure T100_io_yy(IN IN1 tinyint, OUT OUT2 tinyint)
+external name 't100.T100_io_yy' language java parameter style java no sql
+library T100;
+
 create procedure T100_io_ss(IN IN1 smallint, OUT OUT2 smallint)
 external name 't100.T100_io_ss' language java parameter style java no sql
 library T100;
@@ -503,6 +509,11 @@ call T100_io_ee(cast(100 as decimal(6,3)), ?x);
 call T100_io_ee(cast(-222222.2 as decimal(7,1) SIGNED), ?x);
 call T100_io_ee(cast(4444.444 as decimal(8,4) UNSIGNED), ?x);
 
+call T100_io_yy(cast(-9 as tinyint), ?x);
+call T100_io_yy(cast(9 as tinyint), ?x);
+call T100_io_yy(cast(-128 as tinyint), ?x);
+call T100_io_yy(cast(127 as tinyint), ?x);
+
 call T100_io_ss(cast(-9 as smallint), ?x);
 call T100_io_ss(cast(9 as smallint), ?x);
 call T100_io_ss(cast(-32768 as smallint), ?x);
@@ -632,6 +643,8 @@ call T100_io_cc(cast(cast('Hello, world!' as char(13)) as 
char(5)), ?x);
 call T100_io_ee(cast('123.456' as decimal(6)), ?x);
 call T100_io_cc('abc' COLLATE a, ?x);
 call T100_io_nn(cast(-10 as numeric(1)), ?x);
+call T100_io_yy(cast(128 as tinyint), ?x);
+call T100_io_yy(cast(-129 as tinyint), ?x);
 call T100_io_ss(cast(32768 as smallint), ?x);
 call T100_io_ss(cast(-32769 as smallint), ?x);
 call T100_io_ii(1 + 1 / 0, ?x);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/regress/udr/t100.java
----------------------------------------------------------------------
diff --git a/core/sql/regress/udr/t100.java b/core/sql/regress/udr/t100.java
index 7dd9bf1..9e5670c 100755
--- a/core/sql/regress/udr/t100.java
+++ b/core/sql/regress/udr/t100.java
@@ -41,6 +41,10 @@ class t100
         BigDecimal two = new BigDecimal(2);
         OUT2[0] = IN1.divide(two, BigDecimal.ROUND_HALF_UP);
     }
+    public static void T100_io_yy(short IN1, short[] OUT2)
+    {
+        OUT2[0] = IN1;
+    }
     public static void T100_io_ss(short IN1, short[] OUT2)
     {
         OUT2[0] = IN1;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/sqlci/Formatter.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlci/Formatter.cpp b/core/sql/sqlci/Formatter.cpp
index 16a66b5..216e9eb 100644
--- a/core/sql/sqlci/Formatter.cpp
+++ b/core/sql/sqlci/Formatter.cpp
@@ -117,6 +117,14 @@ Lng32 Formatter::display_length(Lng32 datatype,
       d_len = d_buflen = SQL_USMALL_DISPLAY_SIZE;
       break;
 
+    case REC_BIN8_SIGNED:
+      d_len = d_buflen = SQL_TINY_DISPLAY_SIZE + scale_len;
+      break;
+
+    case REC_BIN8_UNSIGNED:
+      d_len = d_buflen = SQL_UTINY_DISPLAY_SIZE + scale_len;
+      break;
+
     case REC_BIN16_SIGNED:
       d_len = d_buflen = SQL_SMALL_DISPLAY_SIZE + scale_len;
       break;
@@ -183,12 +191,10 @@ Lng32 Formatter::display_length(Lng32 datatype,
       break;
       
     case REC_FLOAT32:
-    case REC_TDM_FLOAT32:
       d_len = d_buflen = SQL_REAL_DISPLAY_SIZE;
       break;
       
     case REC_FLOAT64:
-    case REC_TDM_FLOAT64:
       d_len = d_buflen = SQL_DOUBLE_PRECISION_DISPLAY_SIZE;
       break;
 
@@ -322,13 +328,13 @@ Int32 Formatter::buffer_it(SqlciEnv * sqlci_env, char 
*data,
   case REC_BIN32_UNSIGNED:
   case REC_BIN16_SIGNED:
   case REC_BIN16_UNSIGNED:
+  case REC_BIN8_SIGNED:
+  case REC_BIN8_UNSIGNED:
   case REC_DECIMAL_UNSIGNED:
   case REC_DECIMAL_LS:
   case REC_DECIMAL_LSE:
   case REC_FLOAT32:
   case REC_FLOAT64: 
-  case REC_TDM_FLOAT32:
-  case REC_TDM_FLOAT64:
   case REC_DATETIME: 
   {
     short retcode = convDoIt(data,

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/sqlci/Param.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlci/Param.cpp b/core/sql/sqlci/Param.cpp
index 2e7f634..512d577 100644
--- a/core/sql/sqlci/Param.cpp
+++ b/core/sql/sqlci/Param.cpp
@@ -327,6 +327,8 @@ short Param::convertValue(SqlciEnv * sqlci_env, short 
targetType,
 
 
   switch(targetType) {
+  case REC_BIN8_SIGNED:
+  case REC_BIN8_UNSIGNED:
   case REC_BIN16_SIGNED:
   case REC_BIN16_UNSIGNED:
   case REC_BPINT_UNSIGNED:
@@ -337,8 +339,6 @@ short Param::convertValue(SqlciEnv * sqlci_env, short 
targetType,
   case REC_DECIMAL_LSE:
   case REC_FLOAT32:
   case REC_FLOAT64:
-  case REC_TDM_FLOAT32:
-  case REC_TDM_FLOAT64:
   case REC_BYTE_F_ASCII:
   case REC_BYTE_V_ASCII:
   case REC_BYTE_V_ASCII_LONG:

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/sqlci/SqlciEnv.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlci/SqlciEnv.cpp b/core/sql/sqlci/SqlciEnv.cpp
index 9c14e0d..8cb63f1 100644
--- a/core/sql/sqlci/SqlciEnv.cpp
+++ b/core/sql/sqlci/SqlciEnv.cpp
@@ -482,32 +482,16 @@ void SqlciEnv::generateExplain()
     }
 }
 
-void SqlciEnv::floattypeIEEE()
+void SqlciEnv::tinyintSupport()
 {
-  // Returned float variables will be in IEEE format.
-
-  //
-  // This function is called during the initialization phase of MXCI
-  // (SqlciEnv_prologue_to_run). Use specialERROR_ as a flag indicating that
-  // the querry being executed is invoke during MXCI's initialization phase and
-  // that any errors will be fatal.
-  if (getenv("SQLMX_REGRESS") == "2")
-    SqlCmd::executeQuery("CONTROL QUERY DEFAULT FLOATTYPE 'TANDEM';", this);
-  else
-    SqlCmd::executeQuery("CONTROL QUERY DEFAULT FLOATTYPE 'IEEE';", this);
-  if (!specialError_)
-    {
-      char *noexit = getenv("SQL_MXCI_NO_EXIT_ON_COMPILER_STARTUP_ERROR");
-         if (!noexit)
-        exit(EXIT_FAILURE);
-    }
-
-  SqlCmd::executeQuery("CONTROL QUERY DEFAULT IS_SQLCI 'ON';", this);
+  // Can handle tinyint datatype
+  SqlCmd::executeQuery("CONTROL QUERY DEFAULT TRAF_TINYINT_SUPPORT 'ON';", 
this);
+  SqlCmd::executeQuery("CONTROL QUERY DEFAULT TRAF_TINYINT_RETURN_VALUES 
'ON';", this);
+  SqlCmd::executeQuery("CONTROL QUERY DEFAULT TRAF_TINYINT_INPUT_PARAMS 
'ON';", this);
   if (!specialError_)
     {
       exit(EXIT_FAILURE);
     }
-
 }
 
 void SqlciEnv::sqlmxRegress()
@@ -564,7 +548,7 @@ static void SqlciEnv_prologue_to_run(SqlciEnv *sqlciEnv)
   sqlciEnv->readonlyCursors();
   sqlciEnv->pertableStatistics();
   sqlciEnv->generateExplain();
-  sqlciEnv->floattypeIEEE();
+  sqlciEnv->tinyintSupport();
   sqlciEnv->sqlmxRegress();
 
   // see catman/CatWellKnownTables.cpp for this envvar need.

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/sqlci/SqlciEnv.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlci/SqlciEnv.h b/core/sql/sqlci/SqlciEnv.h
index 5dcc739..122439b 100644
--- a/core/sql/sqlci/SqlciEnv.h
+++ b/core/sql/sqlci/SqlciEnv.h
@@ -328,7 +328,7 @@ public:
   void readonlyCursors();
   void pertableStatistics();
   void generateExplain();
-  void floattypeIEEE();
+  void tinyintSupport();
   void sqlmxRegress();
 
   void welcomeMessage();

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp 
b/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp
index 7285c37..90930a2 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp
@@ -881,6 +881,8 @@ void CmpSeabaseDDL::createSeabaseRoutine(
        // Set subType for special cases detected by LM
        switch ( paramType[i] )
        {
+         case COM_SIGNED_BIN8_FSDT :
+         case COM_UNSIGNED_BIN8_FSDT :
          case COM_SIGNED_BIN16_FSDT :
          case COM_SIGNED_BIN32_FSDT :
          case COM_SIGNED_BIN64_FSDT :

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/sqlcomp/DefaultConstants.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/DefaultConstants.h 
b/core/sql/sqlcomp/DefaultConstants.h
index aa90c7c..625673c 100644
--- a/core/sql/sqlcomp/DefaultConstants.h
+++ b/core/sql/sqlcomp/DefaultConstants.h
@@ -287,9 +287,6 @@ enum DefaultConstants
 
   FLOAT_ESP_RANDOM_NUM_SEED,
 
-  // the kind of float(tandem or ieee) returned by dynamic queries.
-  // Default is tandem.
-  FLOATTYPE,
   FFDC_DIALOUTS_FOR_MXCMP,
   // Special handling for forcing Bushy CQS, for shapes generated by the wizard
   FORCE_BUSHY_CQS,
@@ -3820,6 +3817,25 @@ enum DefaultConstants
 
   COMPILER_IDLE_TIMEOUT,
 
+  // TINYINT cqds are added until all components can handle this datatype
+  // for various actions (listed below).
+
+  // if OFF, tinyint is not supported. It is treated as smallint.
+  // if ON,  tinyint is supported as table cols and in cast stmts.
+  TRAF_TINYINT_SUPPORT,
+
+  // If ON, tinyint is supported as returned datatype from a select stmt.
+  // otherwise returned as smallint.
+  TRAF_TINYINT_RETURN_VALUES,
+
+  // if ON, input params are typed as tinyint.
+  // Otherwise typed as smallint.
+  TRAF_TINYINT_INPUT_PARAMS,
+
+  // if ON, spj input/output params are typed as tinyint.
+  // Otherwise typed as smallint.
+  TRAF_TINYINT_SPJ_SUPPORT,
+
   // This enum constant must be the LAST one in the list; it's a count,
   // not an Attribute (it's not IN DefaultDefaults; it's the SIZE of it)!
   __NUM_DEFAULT_ATTRIBUTES

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/sqlcomp/nadefaults.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/nadefaults.cpp b/core/sql/sqlcomp/nadefaults.cpp
index 9ecfd29..b0eef35 100644
--- a/core/sql/sqlcomp/nadefaults.cpp
+++ b/core/sql/sqlcomp/nadefaults.cpp
@@ -1421,8 +1421,6 @@ SDDkwd__(EXE_DIAGNOSTIC_EVENTS,           "OFF"),
  SDDkwd__(FFDC_DIALOUTS_FOR_MXCMP,             "OFF"),
   DDkwd__(FIND_COMMON_SUBEXPRS_IN_OR,          "ON"),
 
-  DDkwd__(FLOATTYPE,                           "IEEE"),
-
   DDui___(FLOAT_ESP_RANDOM_NUM_SEED,    "0"),
 
   DDkwd__(FORCE_BUSHY_CQS,                     "ON"),
@@ -3403,6 +3401,11 @@ XDDkwd__(SUBQUERY_UNNESTING,                     "ON"),
   //location for temporary links and files produced by snapshot scan
   DD_____(TRAF_TABLE_SNAPSHOT_SCAN_TMP_LOCATION,       "/bulkload/"),
 
+  DDkwd__(TRAF_TINYINT_INPUT_PARAMS,                   "OFF"),
+  DDkwd__(TRAF_TINYINT_RETURN_VALUES,                  "OFF"),
+  DDkwd__(TRAF_TINYINT_SPJ_SUPPORT,                    "OFF"),
+  DDkwd__(TRAF_TINYINT_SUPPORT,                        "ON"),
+
   // DTM Transaction Type: MVCC, SSCC
   XDDkwd__(TRAF_TRANS_TYPE,                            "MVCC"),
 
@@ -6662,11 +6665,6 @@ DefaultToken NADefaults::token(Int32 attrEnum,
        isValid = TRUE;
       break;
 
-    case FLOATTYPE:
-      if (tok == DF_TANDEM || tok == DF_IEEE)
-       isValid = TRUE;
-      break;
-
     case GROUP_BY_USING_ORDINAL:
       if (tok == DF_ALL || tok == DF_MINIMUM ||
          tok == DF_OFF)

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/ustat/hs_cli.cpp
----------------------------------------------------------------------
diff --git a/core/sql/ustat/hs_cli.cpp b/core/sql/ustat/hs_cli.cpp
index de94da3..dfa28f1 100644
--- a/core/sql/ustat/hs_cli.cpp
+++ b/core/sql/ustat/hs_cli.cpp
@@ -3246,7 +3246,20 @@ Lng32 HSCursor::buildNAType()
 
       switch(datatype)
         {
-        case REC_BIN16_SIGNED:
+        case REC_BIN8_SIGNED:
+          if (precision <= 0)
+            length = 1;
+          type = ConstructNumericType(addr, i, length, precision, scale,
+                                      TRUE, nullflag, heap_);
+          break;
+        case REC_BIN8_UNSIGNED:
+          if (precision <= 0)
+            length = 1;
+          type = ConstructNumericType(addr, i, length, precision, scale,
+                                      FALSE, nullflag, heap_);
+          break;
+
+       case REC_BIN16_SIGNED:
           if (precision <= 0)
             length = 2;
 #pragma nowarn(1506)   // warning elimination
@@ -3263,6 +3276,7 @@ Lng32 HSCursor::buildNAType()
                                       FALSE, nullflag, heap_);
 #pragma warn(1506)  // warning elimination
           break;
+
         //
         //
         case REC_BIN32_SIGNED:
@@ -3295,12 +3309,6 @@ Lng32 HSCursor::buildNAType()
         //----------------------------------------------------------------
        case REC_FLOAT32:
        case REC_FLOAT64:
-       case REC_TDM_FLOAT32:
-       case REC_TDM_FLOAT64:
-         if (datatype == REC_TDM_FLOAT32)
-           datatype = REC_FLOAT32;
-         else if (datatype == REC_TDM_FLOAT64)
-           datatype = REC_FLOAT64;
          //datatype = ((precision <= SQL_REAL_PRECISION) ?
          //           REC_FLOAT32 : REC_FLOAT64);
          if (datatype == REC_FLOAT32)
@@ -3667,7 +3675,7 @@ Lng32 HSCursor::fetchCharNumColumn(const char *clistr, 
NAString &value1, Int64 &
   if (retcode_ && retcode_ != HS_EOF) HSHandleError(retcode_);
   if ((colDesc_[0].datatype != REC_BYTE_V_ASCII && colDesc_[0].datatype != 
REC_BYTE_V_DOUBLE) ||
        colDesc_[1].datatype != REC_BIN64_SIGNED ||
-      (colDesc_[2].datatype != REC_IEEE_FLOAT64 && colDesc_[2].datatype != 
REC_TDM_FLOAT64))
+      (colDesc_[2].datatype != REC_IEEE_FLOAT64))
     return -1; // Result should be VARCHAR, LARGEINT, and FLOAT64 datatypes.
 
   if (retcode_ != HS_EOF)
@@ -3695,18 +3703,6 @@ Lng32 HSCursor::fetchCharNumColumn(const char *clistr, 
NAString &value1, Int64 &
     double tmp3;
     if (colDesc_[2].datatype == REC_IEEE_FLOAT64)
       memcpy((char *) &tmp3, colDesc_[2].data, colDesc_[2].length);
-    else // REC_TDM_FLOAT64 - convert to IEEE float.
-    {
-      ComDiagsArea diagsArea;
-      ComDiagsArea *diagsAreaPtr = &diagsArea;
-      Lng32 dataConversionErrorFlag;
-      ex_expr::exp_return_type rc =
-        convDoIt(colDesc_[2].data, colDesc_[2].length, REC_TDM_FLOAT64, 0, 0,
-                 (char *)&tmp3,    sizeof(double),     REC_IEEE_FLOAT64, 0, 0,
-                 NULL, 0, heap_, &diagsAreaPtr, CONV_FLOAT64TDM_FLOAT64IEEE,
-                 &dataConversionErrorFlag, 0);
-      if (rc != ex_expr::EXPR_OK) return -1;
-    }
     value3 = tmp3;
   }
   else value1="";
@@ -5999,6 +5995,12 @@ template
 void profileGaps(HSColGroupStruct *, boundarySet<UInt32>*, double&, Int64&,
                  NABoolean);
 template
+void profileGaps(HSColGroupStruct *, boundarySet<Int8>*, double&, Int64&,
+                 NABoolean);
+template
+void profileGaps(HSColGroupStruct *, boundarySet<UInt8>*, double&, Int64&,
+                 NABoolean);
+template
 void profileGaps(HSColGroupStruct *, boundarySet<short>*, double&, Int64&,
                  NABoolean);
 template

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/ustat/hs_faststats.cpp
----------------------------------------------------------------------
diff --git a/core/sql/ustat/hs_faststats.cpp b/core/sql/ustat/hs_faststats.cpp
index 1e3676f..c81604a 100644
--- a/core/sql/ustat/hs_faststats.cpp
+++ b/core/sql/ustat/hs_faststats.cpp
@@ -205,6 +205,8 @@ template <class T> void 
FSInterval<T>::estimateRowsAndUecs(double sample_rate, f
 
 // Explicit instantiations of template member functions, so their definition
 // can appear in this file instead of in .h file.
+template void FastStatsHist<Int8>::addRowset(Lng32 numRows);
+template void FastStatsHist<UInt8>::addRowset(Lng32 numRows);
 template void FastStatsHist<int>::addRowset(Lng32 numRows);
 template void FastStatsHist<unsigned int>::addRowset(Lng32 numRows);
 template void FastStatsHist<short>::addRowset(Lng32 numRows);
@@ -213,6 +215,8 @@ template void FastStatsHist<long>::addRowset(Lng32 numRows);
 template void FastStatsHist<float>::addRowset(Lng32 numRows);
 template void FastStatsHist<double>::addRowset(Lng32 numRows);
 
+template void FastStatsHist<Int8>::actuate(Lng32);
+template void FastStatsHist<UInt8>::actuate(Lng32);
 template void FastStatsHist<int>::actuate(Lng32);
 template void FastStatsHist<unsigned int>::actuate(Lng32);
 template void FastStatsHist<short>::actuate(Lng32);
@@ -221,6 +225,8 @@ template void FastStatsHist<long>::actuate(Lng32);
 template void FastStatsHist<float>::actuate(Lng32);
 template void FastStatsHist<double>::actuate(Lng32);
 
+template void FSInterval<Int8>::estimateRowsAndUecs(double, float);
+template void FSInterval<UInt8>::estimateRowsAndUecs(double, float);
 template void FSInterval<int>::estimateRowsAndUecs(double, float);
 template void FSInterval<unsigned int>::estimateRowsAndUecs(double, float);
 template void FSInterval<short>::estimateRowsAndUecs(double, float);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/88ec4fea/core/sql/ustat/hs_globals.cpp
----------------------------------------------------------------------
diff --git a/core/sql/ustat/hs_globals.cpp b/core/sql/ustat/hs_globals.cpp
index 965c023..3f4fe71 100644
--- a/core/sql/ustat/hs_globals.cpp
+++ b/core/sql/ustat/hs_globals.cpp
@@ -287,6 +287,14 @@ Lng32 MCWrapper::setupMCColumnIterator (HSColGroupStruct 
*group, MCIterator** it
 
   switch (group->ISdatatype)
     {
+      case REC_BIN8_SIGNED:
+        iter[currentLoc] = new (STMTHEAP) MCNonCharIterator<char>((char 
*)group->mcis_data);
+        break;
+
+      case REC_BIN8_UNSIGNED:
+        iter[currentLoc] = new (STMTHEAP) MCNonCharIterator<unsigned 
char>((unsigned char *)group->mcis_data);
+        break;
+
       case REC_BIN16_SIGNED:
         iter[currentLoc] = new (STMTHEAP) MCNonCharIterator<short>((short 
*)group->mcis_data);
         break;
@@ -308,12 +316,10 @@ Lng32 MCWrapper::setupMCColumnIterator (HSColGroupStruct 
*group, MCIterator** it
         break;
 
       case REC_IEEE_FLOAT32:
-      case REC_TDM_FLOAT32:
         iter[currentLoc] = new (STMTHEAP) MCNonCharIterator<float>((float 
*)group->mcis_data);
         break;
 
       case REC_IEEE_FLOAT64:
-      case REC_TDM_FLOAT64:
         iter[currentLoc] = new (STMTHEAP) MCNonCharIterator<double>((double 
*)group->mcis_data);
         break;
 
@@ -4371,7 +4377,13 @@ NAString* getIntTypeForInterval(HSColGroupStruct *group, 
Int64 maxIntValue)
   NAString* typeName;
   group->ISprecision = 0;
   group->ISscale = 0;
-  if (maxIntValue <= SHRT_MAX)
+  if (maxIntValue <= CHAR_MAX)
+    {
+      group->ISdatatype = REC_BIN8_SIGNED;
+      group->ISlength = 1;
+      typeName = &LiteralTinyInt;  // from NumericTypes.h
+    }
+  else if (maxIntValue <= SHRT_MAX)
     {
       group->ISdatatype = REC_BIN16_SIGNED;
       group->ISlength = 2;
@@ -4851,6 +4863,11 @@ void 
HSGlobalsClass::getMemoryRequirementsForOneGroup(HSColGroupStruct* group, I
   
       switch (group->ISdatatype)
         {
+          case REC_BIN8_SIGNED:
+          case REC_BIN8_UNSIGNED:
+            elementSize = 1;
+            break;
+
           case REC_BIN16_SIGNED:
           case REC_BIN16_UNSIGNED:
             elementSize = 2;
@@ -4859,13 +4876,11 @@ void 
HSGlobalsClass::getMemoryRequirementsForOneGroup(HSColGroupStruct* group, I
           case REC_BIN32_SIGNED:
           case REC_BIN32_UNSIGNED:
           case REC_IEEE_FLOAT32:
-          case REC_TDM_FLOAT32:
             elementSize = 4;
             break;
 
           case REC_BIN64_SIGNED:
           case REC_IEEE_FLOAT64:
-          case REC_TDM_FLOAT64:
             elementSize = 8;
             break;
 
@@ -5424,10 +5439,7 @@ Lng32 HSGlobalsClass::CollectStatistics()
         }
 
         // Set CQDs for internal sort:
-        // 1. Floating point type to IEEE, 
-        // 2. Do not limit precision, this can cause internal sort failure.
-        retcode = HSFuncExecQuery("CONTROL QUERY DEFAULT FLOATTYPE 'IEEE'");
-        HSHandleError(retcode);
+        // Do not limit precision, this can cause internal sort failure.
         retcode = HSFuncExecQuery("CONTROL QUERY DEFAULT 
LIMIT_MAX_NUMERIC_PRECISION 'OFF'");
         HSHandleError(retcode);
 
@@ -5577,7 +5589,6 @@ Lng32 HSGlobalsClass::CollectStatistics()
             numColsToProcess = getColsToProcess(maxRowsToRead, 
internalSortWhenBetter);
           }
 
-        HSFuncExecQuery("CONTROL QUERY DEFAULT FLOATTYPE RESET");
         HSFuncExecQuery("CONTROL QUERY DEFAULT LIMIT_MAX_NUMERIC_PRECISION 
RESET");
       }
 
@@ -7048,6 +7059,12 @@ Int32 HSGlobalsClass::processIUSColumn(HSColGroupStruct* 
smplGroup,
   // non-integral fixed numerics are all converted to one of these types.
   switch (datatype)
     {
+      case REC_BIN8_SIGNED:
+        return processIUSColumn((Int8*)smplGroup->data, L"%hd", smplGroup, 
delGroup, insGroup);
+        break;
+      case REC_BIN8_UNSIGNED:
+        return processIUSColumn((UInt8*)smplGroup->data, L"%hu", smplGroup, 
delGroup, insGroup);
+        break;
       case REC_BIN16_SIGNED:
         return processIUSColumn((Int16*)smplGroup->data, L"%hd", smplGroup, 
delGroup, insGroup);
         break;
@@ -7065,11 +7082,9 @@ Int32 HSGlobalsClass::processIUSColumn(HSColGroupStruct* 
smplGroup,
         return processIUSColumn((Int64*)smplGroup->data, L"%lld", smplGroup, 
delGroup, insGroup);
         break;
       case REC_FLOAT32:
-      case REC_TDM_FLOAT32:
         return processIUSColumn((Float32*)smplGroup->data, L"%f", smplGroup, 
delGroup, insGroup);
         break;
       case REC_FLOAT64:
-      case REC_TDM_FLOAT64:
         return processIUSColumn((Float64*)smplGroup->data, L"%lf", smplGroup, 
delGroup, insGroup);
         break;
       case REC_BYTE_F_ASCII:
@@ -10021,6 +10036,14 @@ Lng32 HSGlobalsClass::processInternalSortNulls(Lng32 
rowsRead, HSColGroupStruct
 
       switch (group->ISdatatype)
         {
+          case REC_BIN8_SIGNED:
+            processNullsForColumn(group, rowsRead, (Int8*)NULL);
+            break;
+
+          case REC_BIN8_UNSIGNED:
+            processNullsForColumn(group, rowsRead, (UInt8*)NULL);
+            break;
+
           case REC_BIN16_SIGNED:
             processNullsForColumn(group, rowsRead, (short*)NULL);
             break;
@@ -10042,12 +10065,10 @@ Lng32 HSGlobalsClass::processInternalSortNulls(Lng32 
rowsRead, HSColGroupStruct
             break;
 
           case REC_IEEE_FLOAT32:
-          case REC_TDM_FLOAT32:
             processNullsForColumn(group, rowsRead, (float*)NULL);
             break;
 
           case REC_IEEE_FLOAT64:
-          case REC_TDM_FLOAT64:
             processNullsForColumn(group, rowsRead, (double*)NULL);
             break;
 
@@ -10186,6 +10207,8 @@ bool isInternalSortType(HSColumnStruct &col)
 
   switch (col.datatype)
     {
+      case REC_BIN8_SIGNED:
+      case REC_BIN8_UNSIGNED:
       case REC_BIN16_SIGNED:
       case REC_BIN16_UNSIGNED:
       case REC_BIN32_SIGNED:
@@ -10249,18 +10272,6 @@ bool isInternalSortType(HSColumnStruct &col)
       case REC_INT_DAY_SECOND:
         return true;
 
-      // Can't handle Tandem floating point format
-      case REC_TDM_FLOAT32:
-      case REC_TDM_FLOAT64:
-        if (LM->LogNeeded())
-          {
-            sprintf(LM->msg, "Type %d should have been returned as IEEE 
floating point type: column %s",
-                             col.datatype,
-                             col.colname->data());
-            LM->Log(LM->msg);
-          }
-        return false;
-
       default:
         if (LM->LogNeeded())
           {
@@ -10908,6 +10919,16 @@ Lng32 doSort(HSColGroupStruct *group)
 
   switch (group->ISdatatype)
     {
+      case REC_BIN8_SIGNED:
+        quicksort((Int8*)group->data, 0,
+                  (Int8*)group->nextData - (Int8*)group->data - 1);
+        break;
+
+      case REC_BIN8_UNSIGNED:
+        quicksort((UInt8*)group->data, 0,
+                  (UInt8*)group->nextData - (UInt8*)group->data - 1);
+        break;
+
       case REC_BIN16_SIGNED:
         quicksort((short*)group->data, 0,
                        (short*)group->nextData - (short*)group->data - 1);
@@ -10918,7 +10939,7 @@ Lng32 doSort(HSColGroupStruct *group)
                        (unsigned short*)group->nextData - (unsigned 
short*)group->data - 1);
         break;
 
-      case REC_BIN32_SIGNED:
+       case REC_BIN32_SIGNED:
         quicksort((Int32*)group->data, 0,
                        (Int32*)group->nextData - (Int32*)group->data - 1);
         break;
@@ -10934,13 +10955,11 @@ Lng32 doSort(HSColGroupStruct *group)
         break;
 
       case REC_IEEE_FLOAT32:
-      case REC_TDM_FLOAT32:
         quicksort((float*)group->data, 0,
                        (float*)group->nextData - (float*)group->data - 1);
         break;
 
       case REC_IEEE_FLOAT64:
-      case REC_TDM_FLOAT64:
         quicksort((double*)group->data, 0,
                        (double*)group->nextData - (double*)group->data - 1);
         break;
@@ -11390,7 +11409,15 @@ Lng32 
HSGlobalsClass::createStatsForColumn(HSColGroupStruct *group, Int64 rowsAl
     // Invoke template function to create histogram for the column's type.
     switch (group->ISdatatype)
     {
-      case REC_BIN16_SIGNED:
+      case REC_BIN8_SIGNED:
+        createHistogram(group, intCount, sampleRowCount, samplingUsed, 
(Int8*)NULL);
+        break;
+
+      case REC_BIN8_UNSIGNED:
+        createHistogram(group, intCount, sampleRowCount, samplingUsed, 
(UInt8*)NULL);
+        break;
+
+       case REC_BIN16_SIGNED:
         createHistogram(group, intCount, sampleRowCount, samplingUsed, 
(short*)NULL);
         break;
 
@@ -11398,7 +11425,7 @@ Lng32 
HSGlobalsClass::createStatsForColumn(HSColGroupStruct *group, Int64 rowsAl
         createHistogram(group, intCount, sampleRowCount, samplingUsed, 
(unsigned short*)NULL);
         break;
 
-      case REC_BIN32_SIGNED:
+     case REC_BIN32_SIGNED:
         createHistogram(group, intCount, sampleRowCount, samplingUsed, 
(Int32*)NULL);
         break;
 
@@ -11436,12 +11463,10 @@ Lng32 
HSGlobalsClass::createStatsForColumn(HSColGroupStruct *group, Int64 rowsAl
         break;
 
       case REC_IEEE_FLOAT32:
-      case REC_TDM_FLOAT32:
         createHistogram(group, intCount, sampleRowCount, samplingUsed, 
(float*)NULL);
         break;
 
       case REC_IEEE_FLOAT64:
-      case REC_TDM_FLOAT64:
         createHistogram(group, intCount, sampleRowCount, samplingUsed, 
(double*)NULL);
         break;
 
@@ -11757,12 +11782,10 @@ Int32 computeKeyLengthInfo(Lng32 datatype)
       case REC_BIN32_SIGNED:
       case REC_BIN32_UNSIGNED:
       case REC_FLOAT32:
-      case REC_TDM_FLOAT32:
         return ExHDPHash::SWAP_FOUR;
 
       case REC_BIN64_SIGNED:
       case REC_FLOAT64:
-      case REC_TDM_FLOAT64:
         return ExHDPHash::SWAP_EIGHT;
 
       default:
@@ -12642,6 +12665,14 @@ Lng32 HSGlobalsClass::mergeDatasetsForIUS(
   // same type is used for both template parameters.
   switch (datatype)
     {
+      case REC_BIN8_SIGNED:
+        return mergeDatasetsForIUS((Int8*)smplGroup->data, (Int8*)NULL,
+                                   smplGroup, smplrows, delGroup, delrows, 
insGroup, insrows);
+        break;
+      case REC_BIN8_UNSIGNED:
+        return mergeDatasetsForIUS((UInt8*)smplGroup->data, (UInt8*)NULL,
+                                   smplGroup, smplrows, delGroup, delrows, 
insGroup, insrows);
+        break;
       case REC_BIN16_SIGNED:
         return mergeDatasetsForIUS((Int16*)smplGroup->data, (Int16*)NULL,
                                    smplGroup, smplrows, delGroup, delrows, 
insGroup, insrows);
@@ -12664,12 +12695,10 @@ Lng32 HSGlobalsClass::mergeDatasetsForIUS(
                                    smplGroup, smplrows, delGroup, delrows, 
insGroup, insrows);
         break;
       case REC_FLOAT32:
-      case REC_TDM_FLOAT32:
         return mergeDatasetsForIUS((Float32*)smplGroup->data, (Float32*)NULL,
                                    smplGroup, smplrows, delGroup, delrows, 
insGroup, insrows);
         break;
       case REC_FLOAT64:
-      case REC_TDM_FLOAT64:
         return mergeDatasetsForIUS((Float64*)smplGroup->data, (Float64*)NULL,
                                    smplGroup, smplrows, delGroup, delrows, 
insGroup, insrows);
         break;
@@ -13598,6 +13627,12 @@ Lng32 setBufferValue(MCWrapper& value,
        {
           switch (value.allCols_[i]->ISdatatype)
           {
+             case REC_BIN8_SIGNED:
+                retcode = 
copyValue(*((MCNonCharIterator<Int8>*)(value.allCols_[i]))->getContent(value.index_),
 valueBuff, mgroup->colSet[i], len);
+                break;
+             case REC_BIN8_UNSIGNED:
+                retcode = 
copyValue(*((MCNonCharIterator<UInt8>*)(value.allCols_[i]))->getContent(value.index_),
 valueBuff, mgroup->colSet[i], len);
+                break;
              case REC_BIN16_SIGNED:
                 retcode = 
copyValue(*((MCNonCharIterator<short>*)(value.allCols_[i]))->getContent(value.index_),
 valueBuff, mgroup->colSet[i], len);
                 break;
@@ -13614,11 +13649,9 @@ Lng32 setBufferValue(MCWrapper& value,
                 retcode = 
copyValue(*((MCNonCharIterator<Int64>*)(value.allCols_[i]))->getContent(value.index_),
 valueBuff, mgroup->colSet[i], len);
                 break;
              case REC_IEEE_FLOAT32:
-             case REC_TDM_FLOAT32:
                 retcode = 
copyValue(*((MCNonCharIterator<float>*)(value.allCols_[i]))->getContent(value.index_),
 valueBuff, mgroup->colSet[i], len);
                 break;
              case REC_IEEE_FLOAT64:
-             case REC_TDM_FLOAT64:
                 retcode = 
copyValue(*((MCNonCharIterator<double>*)(value.allCols_[i]))->getContent(value.index_),
 valueBuff, mgroup->colSet[i], len);
                break;
              case REC_BYTE_F_ASCII:
@@ -15447,6 +15480,14 @@ Lng32 HSGlobalsClass::processFastStatsBatch(CollIndex 
numCols, HSColGroupStruct*
 
       switch (group->ISdatatype)
       {
+        case REC_BIN8_SIGNED:
+          group->fastStatsHist = new(STMTHEAP) FastStatsHist<Int8>(group, cbf);
+          break;
+
+        case REC_BIN8_UNSIGNED:
+          group->fastStatsHist = new(STMTHEAP) FastStatsHist<UInt8>(group, 
cbf);
+          break;
+
         case REC_BIN16_SIGNED:
           group->fastStatsHist = new(STMTHEAP) FastStatsHist<Int16>(group, 
cbf);
           break;
@@ -15468,12 +15509,10 @@ Lng32 HSGlobalsClass::processFastStatsBatch(CollIndex 
numCols, HSColGroupStruct*
           break;
 
         case REC_IEEE_FLOAT32:
-        case REC_TDM_FLOAT32:
           group->fastStatsHist = new(STMTHEAP) FastStatsHist<Float32>(group, 
cbf);
           break;
 
         case REC_IEEE_FLOAT64:
-        case REC_TDM_FLOAT64:
           group->fastStatsHist = new(STMTHEAP) FastStatsHist<Float64>(group, 
cbf);
           break;
 

Reply via email to