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;
