You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by li...@apache.org on 2016/11/08 09:25:08 UTC
[1/5] incubator-trafodion git commit: [TRAFODION-2229] add hashing
functions, commit set 1
Repository: incubator-trafodion
Updated Branches:
refs/heads/master 964370049 -> 7a9000e00
[TRAFODION-2229] add hashing functions, commit set 1
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/4c4dfc4d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/4c4dfc4d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/4c4dfc4d
Branch: refs/heads/master
Commit: 4c4dfc4d02f618966f32e6db042a1cb1ff73fc9d
Parents: 7092997
Author: Liu Ming <ov...@sina.com>
Authored: Fri Oct 28 22:38:37 2016 -0400
Committer: Liu Ming <ov...@sina.com>
Committed: Fri Oct 28 22:38:37 2016 -0400
----------------------------------------------------------------------
core/sql/common/OperTypeEnum.h | 4 ++++
core/sql/exp/ExpPackDefs.cpp | 7 ++++++-
core/sql/exp/exp_clause.cpp | 6 ++++++
core/sql/exp/exp_clause.h | 3 ++-
core/sql/exp/exp_function.cpp | 17 +++++++++++++++++
core/sql/exp/exp_function.h | 29 +++++++++++++++++++++++++++++
core/sql/generator/GenItemFunc.cpp | 9 +++++++++
core/sql/optimizer/BindItemExpr.cpp | 4 ++++
core/sql/optimizer/SynthType.cpp | 12 +++++++++++-
core/sql/parser/ParKeyWords.cpp | 6 +++++-
core/sql/parser/sqlparser.y | 12 ++++++++++++
11 files changed, 105 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/common/OperTypeEnum.h
----------------------------------------------------------------------
diff --git a/core/sql/common/OperTypeEnum.h b/core/sql/common/OperTypeEnum.h
index f2099b3..6e3981a 100644
--- a/core/sql/common/OperTypeEnum.h
+++ b/core/sql/common/OperTypeEnum.h
@@ -782,6 +782,10 @@ enum OperatorTypeEnum {
ITM_ISIPV6 = 2631,
ITM_INET_ATON = 2632,
ITM_INET_NTOA = 2633,
+ ITM_CRC32 = 2634,
+ ITM_MD5 = 2635,
+ ITM_SHA1 = 2636,
+ ITM_SHA2 = 2637,
// Items for needed for Translating to UCS2 output strings
ITM_DATEFMT = 2990,
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/exp/ExpPackDefs.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/ExpPackDefs.cpp b/core/sql/exp/ExpPackDefs.cpp
index e319328..3bfea00 100644
--- a/core/sql/exp/ExpPackDefs.cpp
+++ b/core/sql/exp/ExpPackDefs.cpp
@@ -583,8 +583,13 @@ Long ExHeaderClause::pack(void * space)
{
return packClause(space, sizeof(ExHeaderClause));
}
-NA_EIDPROC Long ExFunctionIsIP::pack(void * space)
+NA_EIDPROC Long ExFunctionCrc32::pack(void * space)
+{
+ return packClause(space, sizeof(ExFunctionCrc32));
+}
+
+NA_EIDPROC Long ExFunctionIsIP::pack(void * space)
{
return packClause(space, sizeof(ExFunctionIsIP));
}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/exp/exp_clause.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_clause.cpp b/core/sql/exp/exp_clause.cpp
index ca018ab..79c42cc 100644
--- a/core/sql/exp/exp_clause.cpp
+++ b/core/sql/exp/exp_clause.cpp
@@ -338,6 +338,9 @@ ex_clause::ex_clause(clause_type type,
case ITM_CURR_TRANSID:
setClassID(FUNC_CURR_TRANSID_ID);
break;
+ case ITM_CRC32:
+ setClassID(FUNC_CRC32_ID);
+ break;
case ITM_ISIPV4:
case ITM_ISIPV6:
setClassID(FUNC_ISIP_ID);
@@ -984,6 +987,9 @@ NA_EIDPROC char *ex_clause::findVTblPtr(short classID)
case ex_clause::FUNC_HBASE_VERSION:
GetVTblPtr(vtblPtr, ExFunctionHbaseVersion);
break;
+ case ex_clause::FUNC_CRC32_ID:
+ GetVTblPtr(vtblPtr, ExFunctionCrc32);
+ break;
case ex_clause::FUNC_ISIP_ID:
GetVTblPtr(vtblPtr, ExFunctionIsIP);
break;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/exp/exp_clause.h
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_clause.h b/core/sql/exp/exp_clause.h
index 4fc36d2..0ce3b51 100644
--- a/core/sql/exp/exp_clause.h
+++ b/core/sql/exp/exp_clause.h
@@ -202,7 +202,8 @@ public:
FUNC_HBASE_VERSION = 117,
FUNC_ISIP_ID = 118,
FUNC_INETATON_ID = 119,
- FUNC_INETNTOA_ID = 120
+ FUNC_INETNTOA_ID = 120,
+ FUNC_CRC32_ID = 121
};
// max number of operands (including result) in a clause.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/exp/exp_function.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_function.cpp b/core/sql/exp/exp_function.cpp
index e0134de..f819165 100644
--- a/core/sql/exp/exp_function.cpp
+++ b/core/sql/exp/exp_function.cpp
@@ -202,6 +202,7 @@ ExFunctionPack::ExFunctionPack(){};
ExUnPackCol::ExUnPackCol(){};
ExFunctionRangeLookup::ExFunctionRangeLookup(){};
ExAuditImage::ExAuditImage(){};
+ExFunctionCrc32::ExFunctionCrc32(){};
ExFunctionIsIP::ExFunctionIsIP(){};
ExFunctionInetAton::ExFunctionInetAton(){};
ExFunctionInetNtoa::ExFunctionInetNtoa(){};
@@ -219,6 +220,13 @@ ExFunctionChar::ExFunctionChar(OperatorTypeEnum oper_type,
};
+ExFunctionCrc32::ExFunctionCrc32(OperatorTypeEnum oper_type,
+ Attributes ** attr, Space * space)
+ : ex_function_clause(oper_type, 2, attr, space)
+{
+
+};
+
ExFunctionIsIP::ExFunctionIsIP(OperatorTypeEnum oper_type,
Attributes ** attr, Space * space)
: ex_function_clause(oper_type, 2, attr, space)
@@ -7900,6 +7908,15 @@ ex_expr::exp_return_type ExFunctionInetNtoa::eval(char * op_data[],
return ex_expr::EXPR_OK;
}
+ex_expr::exp_return_type ExFunctionCrc32::eval(char * op_data[],
+ CollHeap *heap,
+ ComDiagsArea **diags)
+{
+ *(ULng32*)op_data[0] = 0;
+//stub for now
+ return ex_expr::EXPR_OK;
+}
+
ex_expr::exp_return_type ExFunctionIsIP::eval(char * op_data[],
CollHeap *heap,
ComDiagsArea **diags)
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/exp/exp_function.h
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_function.h b/core/sql/exp/exp_function.h
index 918182b..22ef8c9 100644
--- a/core/sql/exp/exp_function.h
+++ b/core/sql/exp/exp_function.h
@@ -856,6 +856,35 @@ public:
// ---------------------------------------------------------------------
};
+class SQLEXP_LIB_FUNC ExFunctionCrc32: public ex_function_clause {
+public:
+ NA_EIDPROC ExFunctionCrc32(OperatorTypeEnum oper_type,
+ Attributes ** attr,
+ Space * space);
+ NA_EIDPROC ExFunctionCrc32();
+
+ NA_EIDPROC ex_expr::exp_return_type eval(char *op_data[], CollHeap*,
+ ComDiagsArea** = 0);
+ NA_EIDPROC Long pack(void *);
+
+ // ---------------------------------------------------------------------
+ // Redefinition of methods inherited from NAVersionedObject.
+ // ---------------------------------------------------------------------
+ NA_EIDPROC virtual unsigned char getClassVersionID()
+ {
+ return 1;
+ }
+
+ NA_EIDPROC virtual void populateImageVersionIDArray()
+ {
+ setImageVersionID(2,getClassVersionID());
+ ex_function_clause::populateImageVersionIDArray();
+ }
+
+ NA_EIDPROC virtual short getClassSize() { return (short)sizeof(*this); }
+ // ---------------------------------------------------------------------
+};
+
class SQLEXP_LIB_FUNC ExFunctionIsIP : public ex_function_clause {
public:
NA_EIDPROC ExFunctionIsIP(OperatorTypeEnum oper_type,
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/generator/GenItemFunc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenItemFunc.cpp b/core/sql/generator/GenItemFunc.cpp
index bf08ca8..d025c22 100644
--- a/core/sql/generator/GenItemFunc.cpp
+++ b/core/sql/generator/GenItemFunc.cpp
@@ -218,6 +218,15 @@ short BuiltinFunction::codeGen(Generator * generator)
break;
+ case ITM_CRC32:
+ {
+ function_clause =
+ new(generator->getSpace()) ExFunctionCrc32(getOperatorType(),
+ attr, space);
+ }
+
+ break;
+
case ITM_ISIPV4:
case ITM_ISIPV6:
{
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/optimizer/BindItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp
index af6a46d..32f84c4 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -3163,6 +3163,10 @@ ItemExpr *BuiltinFunction::bindNode(BindWA *bindWA)
{
case ITM_ISIPV4:
case ITM_ISIPV6:
+ case ITM_MD5:
+ case ITM_CRC32:
+ case ITM_SHA1:
+ case ITM_SHA2:
{
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/optimizer/SynthType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/SynthType.cpp b/core/sql/optimizer/SynthType.cpp
index 477e2cc..1566219 100644
--- a/core/sql/optimizer/SynthType.cpp
+++ b/core/sql/optimizer/SynthType.cpp
@@ -1010,7 +1010,17 @@ const NAType *BuiltinFunction::synthesizeType()
SQLChar(maxLength, typ1.supportsSQLnull());
}
break;
-
+ case ITM_CRC32:
+ {
+ const NAType &typ1 = child(0)->getValueId().getType();
+ retType = new HEAP
+ SQLInt(FALSE, FALSE); //unsigned int
+ if (typ1.supportsSQLnull())
+ {
+ retType->setNullable(TRUE);
+ }
+ }
+ break;
case ITM_ISIPV4:
case ITM_ISIPV6:
{
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/parser/ParKeyWords.cpp
----------------------------------------------------------------------
diff --git a/core/sql/parser/ParKeyWords.cpp b/core/sql/parser/ParKeyWords.cpp
index c838bf7..c996b0c 100644
--- a/core/sql/parser/ParKeyWords.cpp
+++ b/core/sql/parser/ParKeyWords.cpp
@@ -257,6 +257,7 @@ ParKeyWord ParKeyWords::keyWords_[] = {
ParKeyWord("COPY", TOK_COPY, NONRESTOKEN_),
ParKeyWord("CPU", TOK_CPU, NONRESTOKEN_),
ParKeyWord("CQD", TOK_CQD, NONRESTOKEN_),
+ ParKeyWord("CRC32", TOK_CRC32, NONRESTOKEN_),
ParKeyWord("CREATE", TOK_CREATE, ANS_|RESWORD_),
ParKeyWord("CREATE_LIBRARY", TOK_CREATE_LIBRARY, NONRESTOKEN_),
ParKeyWord("CREATE_MV", TOK_CREATE_MV, NONRESTOKEN_),
@@ -636,7 +637,8 @@ ParKeyWord ParKeyWords::keyWords_[] = {
ParKeyWord("MAXEXTENTS", TOK_MAXEXTENTS, NONRESTOKEN_),
ParKeyWord("MAXIMUM", TOK_MAX, NONRESTOKEN_),
ParKeyWord("MAXRUNTIME", TOK_MAXRUNTIME, SECOND_|NONRESTOKEN_),
- ParKeyWord("MAXVALUE", TOK_MAXVALUE, NONRESTOKEN_),
+ ParKeyWord("MAXVALUE", TOK_MAXVALUE, NONRESTOKEN_),
+ ParKeyWord("MD5", TOK_MD5, NONRESTOKEN_),
ParKeyWord("MEMORY", TOK_MEMORY, NONRESTOKEN_),
ParKeyWord("MERGE", TOK_MERGE, ANS_|RESWORD_),
ParKeyWord("MESSAGE", TOK_MESSAGE, NONRESTOKEN_),
@@ -970,6 +972,8 @@ ParKeyWord ParKeyWords::keyWords_[] = {
ParKeyWord("SET", TOK_SET, ANS_|RESWORD_|MPWORD_),
ParKeyWord("SETS", TOK_SETS, COMPAQ_|RESWORD_),
ParKeyWord("SG_TABLE", TOK_SG_TABLE, NONRESTOKEN_),
+ ParKeyWord("SHA1", TOK_SHA1, NONRESTOKEN_),
+ ParKeyWord("SHA2", TOK_SHA2, NONRESTOKEN_),
ParKeyWord("SHAPE", TOK_SHAPE, NONRESTOKEN_),
ParKeyWord("SHARE", TOK_SHARE, NONRESTOKEN_),
ParKeyWord("SHARED", TOK_SHARED, NONRESTOKEN_),
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/4c4dfc4d/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 8bd9a0b..2fd5209 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -556,6 +556,7 @@ static void enableMakeQuotedStringISO88591Mechanism()
%token <tokval> TOK_COSH
%token <tokval> TOK_COST
%token <tokval> TOK_COUNT
+%token <tokval> TOK_CRC32
%token <tokval> TOK_CQD
%token <tokval> TOK_CROSS
%token <tokval> TOK_CURDATE /* ODBC extension */
@@ -828,6 +829,7 @@ static void enableMakeQuotedStringISO88591Mechanism()
%token <tokval> TOK_MEMORY
%token <tokval> TOK_MERGE
%token <tokval> TOK_METADATA
+%token <tokval> TOK_MD5
%token <tokval> TOK_MIN
%token <tokval> TOK_MINIMAL
%token <tokval> TOK_MINUTE
@@ -1034,6 +1036,8 @@ static void enableMakeQuotedStringISO88591Mechanism()
%token <tokval> TOK_SET
%token <tokval> TOK_SETS
%token <tokval> TOK_SG_TABLE
+%token <tokval> TOK_SHA1
+%token <tokval> TOK_SHA2
%token <tokval> TOK_SHAPE
%token <tokval> TOK_SHARE /* Tandem extension non-reserved word */
%token <tokval> TOK_SHARED /* Tandem extension non-reserved word */
@@ -9632,6 +9636,14 @@ misc_function :
{
$$ = $2;
}
+ | TOK_CRC32 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_CRC32,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
| TOK_GREATEST '(' value_expression ',' value_expression ')'
{
[4/5] incubator-trafodion git commit: fix for PR comments
Posted by li...@apache.org.
fix for PR comments
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/63e53386
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/63e53386
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/63e53386
Branch: refs/heads/master
Commit: 63e533864d830e11488bdcf97a25b11238ff16fd
Parents: ece38ae
Author: Liu Ming <ov...@sina.com>
Authored: Fri Nov 4 01:56:52 2016 -0400
Committer: Liu Ming <ov...@sina.com>
Committed: Fri Nov 4 01:56:52 2016 -0400
----------------------------------------------------------------------
core/sql/common/OperTypeEnum.h | 1 -
core/sql/exp/exp_clause.cpp | 5 ++---
core/sql/exp/exp_clause.h | 3 +--
core/sql/exp/exp_function.cpp | 27 ++++++++++++------------
core/sql/generator/GenItemFunc.cpp | 1 -
core/sql/optimizer/BindItemExpr.cpp | 1 -
core/sql/optimizer/SynthType.cpp | 1 -
core/sql/parser/sqlparser.y | 16 --------------
core/sql/regress/compGeneral/EXPECTED006.SB | 20 ++++++++++++++++++
core/sql/regress/compGeneral/TEST006 | 3 +++
10 files changed, 40 insertions(+), 38 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/common/OperTypeEnum.h
----------------------------------------------------------------------
diff --git a/core/sql/common/OperTypeEnum.h b/core/sql/common/OperTypeEnum.h
index 4f1bd1e..cb755df 100644
--- a/core/sql/common/OperTypeEnum.h
+++ b/core/sql/common/OperTypeEnum.h
@@ -791,7 +791,6 @@ enum OperatorTypeEnum {
ITM_MD5 = 2635,
ITM_SHA1 = 2636,
ITM_SHA2 = 2637,
- ITM_SHA = 2638,
// Items for needed for Translating to UCS2 output strings
ITM_DATEFMT = 2990,
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/exp/exp_clause.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_clause.cpp b/core/sql/exp/exp_clause.cpp
index 2f8f9be..c527c77 100644
--- a/core/sql/exp/exp_clause.cpp
+++ b/core/sql/exp/exp_clause.cpp
@@ -338,9 +338,8 @@ ex_clause::ex_clause(clause_type type,
case ITM_CURR_TRANSID:
setClassID(FUNC_CURR_TRANSID_ID);
break;
- case ITM_SHA:
case ITM_SHA1:
- setClassID(FUNC_SHA_ID);
+ setClassID(FUNC_SHA1_ID);
break;
case ITM_SHA2:
setClassID(FUNC_SHA2_ID);
@@ -1003,7 +1002,7 @@ NA_EIDPROC char *ex_clause::findVTblPtr(short classID)
case ex_clause::FUNC_HBASE_VERSION:
GetVTblPtr(vtblPtr, ExFunctionHbaseVersion);
break;
- case ex_clause::FUNC_SHA_ID:
+ case ex_clause::FUNC_SHA1_ID:
GetVTblPtr(vtblPtr, ExFunctionSha);
break;
case ex_clause::FUNC_SHA2_ID:
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/exp/exp_clause.h
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_clause.h b/core/sql/exp/exp_clause.h
index 1e9b926..275914b 100644
--- a/core/sql/exp/exp_clause.h
+++ b/core/sql/exp/exp_clause.h
@@ -207,8 +207,7 @@ public:
FUNC_CRC32_ID = 122,
FUNC_MD5_ID = 123,
FUNC_SHA1_ID = 124,
- FUNC_SHA2_ID = 125,
- FUNC_SHA_ID = 126
+ FUNC_SHA2_ID = 125
};
// max number of operands (including result) in a clause.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/exp/exp_function.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_function.cpp b/core/sql/exp/exp_function.cpp
index 439e944..22fef99 100644
--- a/core/sql/exp/exp_function.cpp
+++ b/core/sql/exp/exp_function.cpp
@@ -41,7 +41,7 @@
#include <math.h>
#include <zlib.h>
-#include "openssl/md5.h"
+#include <openssl/md5.h>
#include <openssl/sha.h>
#define MathSqrt(op, err) sqrt(op)
@@ -7968,19 +7968,19 @@ ex_expr::exp_return_type ExFunctionSha2::eval(char * op_data[],
Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
Lng32 rlen = resultAttr->getLength();
- memset(op_data[0], 0, rlen);
+ str_pad(op_data[0], rlen, ' ');
SHA256_CTX sha_ctx;
SHA256_Init(&sha_ctx);
SHA256_Update(&sha_ctx, op_data[1], slen);
SHA256_Final((unsigned char*) sha,&sha_ctx);
- char tmp[2];
+ char tmp[3];
for(int i=0; i < SHA256_DIGEST_LENGTH; i++ )
{
- tmp[0]=tmp[1]='0';
+ tmp[0]=tmp[1]=tmp[2]='0';
sprintf(tmp, "%.2x", (int)sha[i]);
- memcpy(op_data[0]+i*2, tmp, 2);
+ str_cpy_all(op_data[0]+i*2, tmp, 2);
}
return ex_expr::EXPR_OK;
@@ -7997,19 +7997,19 @@ ex_expr::exp_return_type ExFunctionSha::eval(char * op_data[],
Attributes *srcAttr = getOperand(1);
Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
Lng32 rlen = resultAttr->getLength();
- memset(op_data[0], 0, rlen);
+ str_pad(op_data[0], rlen , ' ');
SHA_CTX sha_ctx;
SHA1_Init(&sha_ctx);
SHA1_Update(&sha_ctx, op_data[1], slen);
SHA1_Final((unsigned char*) sha,&sha_ctx);
- char tmp[2];
+ char tmp[3];
for(int i=0; i < SHA_DIGEST_LENGTH ; i++ )
{
- tmp[0]=tmp[1]='0';
+ tmp[0]=tmp[1]=tmp[2]='0';
sprintf(tmp, "%.2x", (int)sha[i]);
- memcpy(op_data[0]+i*2, tmp, 2);
+ str_cpy_all(op_data[0]+i*2, tmp, 2);
}
return ex_expr::EXPR_OK;
@@ -8027,18 +8027,19 @@ ex_expr::exp_return_type ExFunctionMd5::eval(char * op_data[],
Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
Lng32 rlen = resultAttr->getLength();
- memset(op_data[0], 0, rlen);
+ str_pad(op_data[0], rlen, ' ');
MD5_CTX md5_ctx;
MD5_Init(&md5_ctx);
MD5_Update(&md5_ctx, op_data[1], slen);
MD5_Final((unsigned char*) md5,&md5_ctx);
- char tmp[2];
+
+ char tmp[3];
for(int i=0; i < 16; i++ )
{
- tmp[0]=tmp[1]='0';
+ tmp[0]=tmp[1]=tmp[2]='0';
sprintf(tmp, "%.2x", (int)md5[i]);
- memcpy(op_data[0]+i*2, tmp, 2);
+ str_cpy_all(op_data[0]+i*2, tmp, 2);
}
return ex_expr::EXPR_OK;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/generator/GenItemFunc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenItemFunc.cpp b/core/sql/generator/GenItemFunc.cpp
index 685fa6f..77d9913 100644
--- a/core/sql/generator/GenItemFunc.cpp
+++ b/core/sql/generator/GenItemFunc.cpp
@@ -218,7 +218,6 @@ short BuiltinFunction::codeGen(Generator * generator)
break;
- case ITM_SHA:
case ITM_SHA1:
{
function_clause =
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/optimizer/BindItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp
index f24f318..32f84c4 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -3165,7 +3165,6 @@ ItemExpr *BuiltinFunction::bindNode(BindWA *bindWA)
case ITM_ISIPV6:
case ITM_MD5:
case ITM_CRC32:
- case ITM_SHA:
case ITM_SHA1:
case ITM_SHA2:
{
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/optimizer/SynthType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/SynthType.cpp b/core/sql/optimizer/SynthType.cpp
index 7373d3c..8c78d85 100644
--- a/core/sql/optimizer/SynthType.cpp
+++ b/core/sql/optimizer/SynthType.cpp
@@ -1010,7 +1010,6 @@ const NAType *BuiltinFunction::synthesizeType()
SQLChar(maxLength, typ1.supportsSQLnull());
}
break;
- case ITM_SHA:
case ITM_SHA1:
case ITM_SHA2:
{
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 399f9fb..79511d0 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -9716,22 +9716,6 @@ misc_function :
}
- | TOK_SHA1 '(' value_expression ')'
- {
- $$ = new (PARSERHEAP())
- BuiltinFunction(ITM_SHA1,
- CmpCommon::statementHeap(),
- 1, $3);
- }
-
- | TOK_SHA2 '(' value_expression ')'
- {
- $$ = new (PARSERHEAP())
- BuiltinFunction(ITM_SHA2,
- CmpCommon::statementHeap(),
- 1, $3);
- }
-
| TOK_GREATEST '(' value_expression ',' value_expression ')'
{
$$ = new (PARSERHEAP())
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/regress/compGeneral/EXPECTED006.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED006.SB b/core/sql/regress/compGeneral/EXPECTED006.SB
index e798c58..2afa934 100644
--- a/core/sql/regress/compGeneral/EXPECTED006.SB
+++ b/core/sql/regress/compGeneral/EXPECTED006.SB
@@ -1655,4 +1655,24 @@ Sheldon ship 5500.00 4000.00
--- 19 row(s) selected.
>>
+>>select md5('10'), crc32(10), sha('10') from dual;
+
+(EXPR) (EXPR) (EXPR)
+-------------------------------- ---------- --------------------------------------------------------------------------------------------------------------------------------
+
+d3d9446802a44259755d38e6d163e820 852952723 b1d5781111d84f7b3fe45a0852e59758cd7a87e5
+
+--- 1 row(s) selected.
+>>select md5(10) from dual;
+
+*** ERROR[4067] The operands of function MD5 must be character data types.
+
+*** ERROR[8822] The statement was not prepared.
+
+>>select sha1(10) from dual;
+
+*** ERROR[4067] The operands of function SHA must be character data types.
+
+*** ERROR[8822] The statement was not prepared.
+
>>log;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/63e53386/core/sql/regress/compGeneral/TEST006
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/TEST006 b/core/sql/regress/compGeneral/TEST006
index c50d797..96d6508 100644
--- a/core/sql/regress/compGeneral/TEST006
+++ b/core/sql/regress/compGeneral/TEST006
@@ -636,3 +636,6 @@ select emp_name, dept_name, salary_amt,
lag(salary_amt, 3) over (partition by dept_name order by emp_name)
from T006_EMPLOYEES <<+ cardinality 10e6 >> order by emp_name;
+select md5('10'), crc32(10), sha('10') from dual;
+select md5(10) from dual;
+select sha1(10) from dual;
[3/5] incubator-trafodion git commit: Merge branch 'master' of
git://git.apache.org/incubator-trafodion into TRAFODION-2229
Posted by li...@apache.org.
Merge branch 'master' of git://git.apache.org/incubator-trafodion into TRAFODION-2229
Conflicts:
core/sql/exp/exp_clause.h
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/ece38ae9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/ece38ae9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/ece38ae9
Branch: refs/heads/master
Commit: ece38ae9b9b17384457adbd9af5d235fe6f24f59
Parents: 79d36dc 9c712a4
Author: Liu Ming <ov...@sina.com>
Authored: Thu Nov 3 06:25:26 2016 -0400
Committer: Liu Ming <ov...@sina.com>
Committed: Thu Nov 3 06:25:26 2016 -0400
----------------------------------------------------------------------
.gitignore | 1 +
.rat-excludes | 1 +
core/Makefile | 54 +-
core/conn/odb/build.bat | 7 +-
core/conn/odb/odb/odb.rc | Bin 0 -> 5124 bytes
core/conn/odb/odb/odb.vcxproj | 4 +
core/conn/odb/odb/odb.vcxproj.filters | 8 +
core/conn/odbc/src/odbc/Makefile | 2 -
core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp | 26 +
.../odbc/src/odbc/nsksrvrcore/srvrothers.cpp | 1 +
core/rest/src/main/asciidoc/_chapters/apis.adoc | 182 +-
.../main/asciidoc/_chapters/architecture.adoc | 6 +-
.../main/asciidoc/_chapters/configuration.adoc | 26 +-
.../asciidoc/_chapters/troubleshooting.adoc | 6 +-
core/rest/src/main/asciidoc/index.adoc | 4 +-
.../main/java/org/trafodion/rest/Constants.java | 2 +-
core/sqf/conf/log4cxx.trafodion.tm.config | 2 +-
core/sqf/monitor/linux/cluster.cxx | 106 +-
core/sqf/monitor/linux/internal.h | 3 +-
core/sqf/monitor/linux/monitor.cxx | 1 +
core/sqf/monitor/linux/pnode.cxx | 2 -
core/sqf/monitor/linux/pnode.h | 7 +-
core/sqf/monitor/linux/zclient.cxx | 41 +
core/sqf/sqenvcom.sh | 12 +-
core/sqf/sql/scripts/cleanlogs | 8 +
core/sqf/sql/scripts/dcscheck | 22 +-
core/sqf/sql/scripts/install_local_hadoop | 20 +-
core/sqf/sql/scripts/install_traf_components | 3 +-
core/sqf/sql/scripts/pstat | 2 +-
core/sqf/sql/scripts/sqcheck | 6 +-
core/sqf/sql/scripts/sqgen | 15 +-
.../sqf/sql/scripts/traf_coprocessor.properties | 26 -
core/sqf/sql/scripts/trafodion-site.xml | 38 +
core/sqf/src/seatrans/hbase-trx/Makefile | 6 +-
.../sqf/src/seatrans/hbase-trx/pom.xml.apache10 | 2 +-
.../sqf/src/seatrans/hbase-trx/pom.xml.apache11 | 2 +-
.../sqf/src/seatrans/hbase-trx/pom.xml.apache12 | 2 +-
.../hbase/client/transactional/RMInterface.java | 14 +-
.../transactional/TransactionManager.java | 607 ++++---
.../client/transactional/TransactionState.java | 120 +-
.../transactional/TrxRegionEndpoint.java.tmpl | 2 +-
.../java/org/trafodion/dtm/HBaseTxClient.java | 33 +-
.../java/org/trafodion/dtm/TmAuditTlog.java | 11 +-
.../main/java/org/trafodion/dtm/TrafInfo.java | 4 +-
.../org/trafodion/sql/TrafConfiguration.java | 1 +
core/sqf/src/tm/tmmsg.h | 21 +-
core/sqf/src/tm/tmtx.cpp | 4 +-
core/sql/arkcmp/CmpContext.cpp | 73 +-
core/sql/arkcmp/CmpContext.h | 15 +-
core/sql/arkcmp/CmpSqlSession.h | 2 +-
core/sql/arkcmp/CmpStatement.cpp | 39 +
core/sql/arkcmp/CmpStatement.h | 33 +-
core/sql/bin/SqlciErrors.txt | 4 +
core/sql/cli/Cli.cpp | 57 +-
core/sql/cli/Cli.h | 9 +-
core/sql/cli/CliExpExchange.cpp | 4 +-
core/sql/cli/CliExtern.cpp | 82 +-
core/sql/cli/Context.cpp | 208 ++-
core/sql/cli/Context.h | 31 +-
core/sql/cli/SQLCLIdev.h | 7 +
core/sql/cli/Statement.cpp | 11 +-
core/sql/comexe/ComTdbExeUtil.cpp | 15 +
core/sql/comexe/ComTdbExeUtil.h | 36 +-
core/sql/comexe/ComTdbHashGrby.h | 4 +
core/sql/comexe/ComTdbHdfsScan.h | 8 +-
core/sql/comexe/ComTdbSortGrby.h | 2 +
core/sql/common/ComSecurityKey.cpp | 82 +
core/sql/common/ComSecurityKey.h | 5 +
core/sql/common/ComSmallDefs.h | 4 +-
core/sql/common/ComSqlId.cpp | 4 +-
core/sql/common/ComSqlId.h | 4 +-
core/sql/common/NAType.cpp | 17 +-
core/sql/common/NAType.h | 4 +-
core/sql/common/OperTypeEnum.h | 5 +
core/sql/executor/ExExeUtil.h | 9 +-
core/sql/executor/ExExeUtilMisc.cpp | 18 +
core/sql/executor/ExExeUtilVolTab.cpp | 110 +-
core/sql/executor/ExHbaseAccess.cpp | 70 +-
core/sql/executor/ExHbaseAccess.h | 3 +
core/sql/executor/ExHdfsScan.cpp | 170 +-
core/sql/executor/ExHdfsScan.h | 7 +
core/sql/executor/ex_hash_grby.cpp | 38 +-
core/sql/executor/ex_hash_grby.h | 8 +-
core/sql/executor/ex_sort_grby.cpp | 126 +-
core/sql/executor/ex_sort_grby.h | 11 +-
core/sql/exp/ExpPCodeExpGen.cpp | 6 +-
core/sql/exp/ExpPackDefs.cpp | 4 +
core/sql/exp/exp_aggregate.cpp | 105 ++
core/sql/exp/exp_attrs.cpp | 4 +-
core/sql/exp/exp_attrs.h | 16 +-
core/sql/exp/exp_clause.cpp | 18 +
core/sql/exp/exp_clause.h | 12 +-
core/sql/exp/exp_clause_derived.h | 37 +
core/sql/exp/exp_conv.cpp | 2 +-
core/sql/exp/exp_eval.cpp | 41 +-
core/sql/exp/exp_expr.cpp | 17 +-
core/sql/exp/exp_expr.h | 38 +-
core/sql/exp/exp_fixup.cpp | 7 +
core/sql/exp/exp_function.cpp | 52 +-
core/sql/exp/exp_tuple_desc.cpp | 21 +-
core/sql/generator/GenExpGenerator.cpp | 87 +-
core/sql/generator/GenExpGenerator.h | 17 +-
core/sql/generator/GenExplain.cpp | 4 -
core/sql/generator/GenItemFunc.cpp | 25 +
core/sql/generator/GenPreCode.cpp | 124 +-
core/sql/generator/GenRelExeUtil.cpp | 31 +-
core/sql/generator/GenRelMisc.cpp | 11 +
core/sql/generator/GenRelScan.cpp | 34 +-
core/sql/generator/GenRelUpdate.cpp | 4 +-
core/sql/generator/Generator.cpp | 2 +
core/sql/generator/Generator.h | 19 +-
.../lib_mgmt/src/main/resources/init_libmgmt.sh | 2 +-
core/sql/nskgmake/arkcmplib/Makefile | 4 -
core/sql/optimizer/BindItemExpr.cpp | 1 +
core/sql/optimizer/BindRelExpr.cpp | 195 ++-
core/sql/optimizer/BindWA.cpp | 1 +
core/sql/optimizer/BindWA.h | 9 +-
core/sql/optimizer/CacheWA.h | 2 +-
core/sql/optimizer/GroupAttr.cpp | 5 +-
core/sql/optimizer/GroupAttr.h | 2 +
core/sql/optimizer/HDFSHook.cpp | 35 +-
core/sql/optimizer/HDFSHook.h | 13 +-
core/sql/optimizer/ItemColRef.h | 1 +
core/sql/optimizer/ItemExpr.cpp | 77 +-
core/sql/optimizer/ItemFunc.h | 44 +-
core/sql/optimizer/MVCandidates.cpp | 1 -
core/sql/optimizer/NARoutine.cpp | 26 +-
core/sql/optimizer/NATable.cpp | 70 +-
core/sql/optimizer/NATable.h | 2 +-
core/sql/optimizer/NormRelExpr.cpp | 1359 ++++++++++++++-
core/sql/optimizer/NormWA.h | 10 +-
core/sql/optimizer/ObjectNames.cpp | 7 +
core/sql/optimizer/ObjectNames.h | 1 +
core/sql/optimizer/OptLogRelExpr.cpp | 94 +-
core/sql/optimizer/OptimizerSimulator.cpp | 36 +-
core/sql/optimizer/OptimizerSimulator.h | 1 -
core/sql/optimizer/RelExeUtil.cpp | 8 +-
core/sql/optimizer/RelExeUtil.h | 13 +-
core/sql/optimizer/RelExpr.cpp | 331 +++-
core/sql/optimizer/RelExpr.h | 44 +
core/sql/optimizer/RelFastTransport.cpp | 115 ++
core/sql/optimizer/RelFastTransport.h | 33 +-
core/sql/optimizer/RelGrby.h | 8 +
core/sql/optimizer/RelJoin.h | 8 +
core/sql/optimizer/RelMisc.h | 355 +++-
core/sql/optimizer/RelScan.h | 46 +-
core/sql/optimizer/RelSequence.cpp | 3 +
core/sql/optimizer/RelSet.h | 9 +
core/sql/optimizer/SynthType.cpp | 35 +-
core/sql/optimizer/TableDesc.cpp | 71 +-
core/sql/optimizer/TableDesc.h | 11 +
core/sql/optimizer/TransRule.cpp | 55 +-
core/sql/optimizer/TransRule.h | 19 +
core/sql/optimizer/ValueDesc.cpp | 171 +-
core/sql/optimizer/ValueDesc.h | 17 +-
core/sql/parser/ParKeyWords.cpp | 1 +
core/sql/parser/sqlparser.y | 69 +-
core/sql/qmscommon/QRLogger.cpp | 3 +
core/sql/regress/compGeneral/EXPECTED005 | 6 -
core/sql/regress/compGeneral/EXPECTED023 | 50 +-
core/sql/regress/compGeneral/EXPECTED042 | 74 +-
core/sql/regress/compGeneral/EXPECTED045 | 1610 ++++++++++++++++++
core/sql/regress/compGeneral/TEST005 | 2 -
core/sql/regress/compGeneral/TEST045 | 1281 ++++++++++++++
core/sql/regress/core/EXPECTED004.SB | 66 +-
core/sql/regress/executor/DIFF107.KNOWN.SB | 16 -
core/sql/regress/executor/DIFF107.KNOWN.SB.OS | 14 -
core/sql/regress/executor/EXPECTED107 | 565 ++++++
core/sql/regress/executor/EXPECTED107.LINUX | 574 -------
core/sql/regress/executor/TEST107 | 51 +-
core/sql/regress/hive/EXPECTED018 | 6 +-
core/sql/regress/privs1/TEST120 | 4 +
core/sql/regress/privs2/EXPECTED144 | Bin 0 -> 59408 bytes
core/sql/regress/privs2/LOG144 | Bin 0 -> 17980 bytes
core/sql/regress/privs2/TEST144 | 242 +++
core/sql/regress/privs2/udfs.cpp | 174 ++
core/sql/regress/seabase/EXPECTED016 | 14 -
core/sql/regress/seabase/EXPECTED018 | 6 +-
core/sql/regress/seabase/EXPECTED027 | 86 +-
core/sql/regress/seabase/EXPECTED033 | 280 ++-
core/sql/regress/seabase/TEST027 | 4 +-
core/sql/regress/seabase/TEST033 | 73 +-
core/sql/regress/tools/runregr_compGeneral.ksh | 2 +-
core/sql/regress/udr/TEST103 | 2 +-
core/sql/sort/SortTopN.cpp | 8 +
core/sql/sqlcomp/CmpDescribe.cpp | 6 +-
core/sql/sqlcomp/CmpMain.cpp | 45 +-
core/sql/sqlcomp/CmpMain.h | 1 -
core/sql/sqlcomp/CmpSeabaseDDL.h | 10 +-
core/sql/sqlcomp/CmpSeabaseDDLauth.cpp | 18 +
core/sql/sqlcomp/CmpSeabaseDDLauth.h | 6 +-
core/sql/sqlcomp/CmpSeabaseDDLtable.cpp | 218 ++-
core/sql/sqlcomp/DefaultConstants.h | 9 +
core/sql/sqlcomp/nadefaults.cpp | 18 +-
core/sql/sqlcomp/parser.cpp | 3 +
core/sql/sqludr/SqlUdrPredefLogReader.cpp | 482 +++++-
.../org/trafodion/sql/CoprocessorUtils.java | 104 --
.../java/org/trafodion/sql/HBaseClient.java | 29 +-
.../java/org/trafodion/sql/HTableClient.java | 38 +-
.../org/trafodion/sql/TrafConfiguration.java | 70 +
.../java/org/trafodion/sql/TrafRegionStats.java | 4 +-
core/trafodion.spec | 114 ++
.../main/asciidoc/_chapters/configuration.adoc | 17 +-
.../asciidoc/_chapters/troubleshooting.adoc | 18 +-
dcs/src/main/resources/dcs-default.xml | 2 +-
.../src/asciidoc/_chapters/requirements.adoc | 2 +-
206 files changed, 10839 insertions(+), 2554 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/common/OperTypeEnum.h
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/exp/ExpPackDefs.cpp
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/exp/exp_clause.cpp
----------------------------------------------------------------------
diff --cc core/sql/exp/exp_clause.cpp
index 8fe135d,f4b9114..2f8f9be
--- a/core/sql/exp/exp_clause.cpp
+++ b/core/sql/exp/exp_clause.cpp
@@@ -338,18 -338,6 +338,19 @@@ ex_clause::ex_clause(clause_type type
case ITM_CURR_TRANSID:
setClassID(FUNC_CURR_TRANSID_ID);
break;
+ case ITM_SHA:
++ case ITM_SHA1:
+ setClassID(FUNC_SHA_ID);
+ break;
+ case ITM_SHA2:
+ setClassID(FUNC_SHA2_ID);
+ break;
+ case ITM_MD5:
+ setClassID(FUNC_MD5_ID);
+ break;
+ case ITM_CRC32:
+ setClassID(FUNC_CRC32_ID);
+ break;
case ITM_ISIPV4:
case ITM_ISIPV6:
setClassID(FUNC_ISIP_ID);
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/exp/exp_clause.h
----------------------------------------------------------------------
diff --cc core/sql/exp/exp_clause.h
index defad8b,c8b079b..1e9b926
--- a/core/sql/exp/exp_clause.h
+++ b/core/sql/exp/exp_clause.h
@@@ -203,12 -203,7 +203,12 @@@ public
FUNC_ISIP_ID = 118,
FUNC_INETATON_ID = 119,
FUNC_INETNTOA_ID = 120,
- FUNC_CRC32_ID = 121,
- FUNC_MD5_ID = 122,
- FUNC_SHA1_ID = 123,
- FUNC_SHA2_ID = 124,
- FUNC_SHA_ID = 125
-
- AGGR_GROUPING_ID = 121
++ AGGR_GROUPING_ID = 121,
++ FUNC_CRC32_ID = 122,
++ FUNC_MD5_ID = 123,
++ FUNC_SHA1_ID = 124,
++ FUNC_SHA2_ID = 125,
++ FUNC_SHA_ID = 126
};
// max number of operands (including result) in a clause.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/exp/exp_function.cpp
----------------------------------------------------------------------
diff --cc core/sql/exp/exp_function.cpp
index de36408,e0134de..439e944
--- a/core/sql/exp/exp_function.cpp
+++ b/core/sql/exp/exp_function.cpp
@@@ -7936,126 -7900,6 +7936,114 @@@ ex_expr::exp_return_type ExFunctionInet
return ex_expr::EXPR_OK;
}
+ex_expr::exp_return_type ExFunctionCrc32::eval(char * op_data[],
+ CollHeap *heap,
+ ComDiagsArea **diags)
+{
+ Attributes *resultAttr = getOperand(0);
+ Attributes *srcAttr = getOperand(1);
+
+ Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
+ Lng32 rlen = resultAttr->getLength();
+
- *(ULng32*)op_data[0] = 0;
- ULng32 crc = crc32(0L, Z_NULL, 0);
- crc = crc32 (crc, (const Bytef*)op_data[1], slen);
- *(ULng32*)op_data[0] = crc;
- return ex_expr::EXPR_OK;
++ *(ULng32*)op_data[0] = 0;
++ ULng32 crc = crc32(0L, Z_NULL, 0);
++ crc = crc32 (crc, (const Bytef*)op_data[1], slen);
++ *(ULng32*)op_data[0] = crc;
++ return ex_expr::EXPR_OK;
+}
+
++//only support SHA 256 for this version
++//TBD: add 224 and 384, 512 in next version
+ex_expr::exp_return_type ExFunctionSha2::eval(char * op_data[],
+ CollHeap *heap,
+ ComDiagsArea **diags)
+{
+
- unsigned char sha[SHA_DIGEST_LENGTH + 1]={0};
++ unsigned char sha[SHA256_DIGEST_LENGTH+ 1]={0};
+
+ Attributes *resultAttr = getOperand(0);
+ Attributes *srcAttr = getOperand(1);
+
+ Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
+ Lng32 rlen = resultAttr->getLength();
+
- if(rlen < 40)
- {
- //ExRaiseSqlError(heap, diagsArea, EXE_GETBIT_ERROR);
- return ex_expr::EXPR_ERROR;
- }
++ memset(op_data[0], 0, rlen);
+
- SHA_CTX sha_ctx;
++ SHA256_CTX sha_ctx;
+
- SHA_Init(&sha_ctx);
- SHA_Update(&sha_ctx, op_data[1], slen);
- SHA_Final((unsigned char*) sha,&sha_ctx);
++ SHA256_Init(&sha_ctx);
++ SHA256_Update(&sha_ctx, op_data[1], slen);
++ SHA256_Final((unsigned char*) sha,&sha_ctx);
+ char tmp[2];
- for(int i=0; i < SHA_DIGEST_LENGTH ; i++ )
++ for(int i=0; i < SHA256_DIGEST_LENGTH; i++ )
+ {
+ tmp[0]=tmp[1]='0';
+ sprintf(tmp, "%.2x", (int)sha[i]);
+ memcpy(op_data[0]+i*2, tmp, 2);
+ }
+
+ return ex_expr::EXPR_OK;
+}
+
+ex_expr::exp_return_type ExFunctionSha::eval(char * op_data[],
+ CollHeap *heap,
+ ComDiagsArea **diags)
+{
+
+ unsigned char sha[SHA_DIGEST_LENGTH + 1]={0};
+
+ Attributes *resultAttr = getOperand(0);
+ Attributes *srcAttr = getOperand(1);
-
+ Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
+ Lng32 rlen = resultAttr->getLength();
-
- if(rlen < 40)
- {
- //ExRaiseSqlError(heap, diagsArea, EXE_GETBIT_ERROR);
- return ex_expr::EXPR_ERROR;
- }
++ memset(op_data[0], 0, rlen);
+
+ SHA_CTX sha_ctx;
+
- SHA_Init(&sha_ctx);
- SHA_Update(&sha_ctx, op_data[1], slen);
- SHA_Final((unsigned char*) sha,&sha_ctx);
++ SHA1_Init(&sha_ctx);
++ SHA1_Update(&sha_ctx, op_data[1], slen);
++ SHA1_Final((unsigned char*) sha,&sha_ctx);
+ char tmp[2];
+ for(int i=0; i < SHA_DIGEST_LENGTH ; i++ )
+ {
+ tmp[0]=tmp[1]='0';
+ sprintf(tmp, "%.2x", (int)sha[i]);
+ memcpy(op_data[0]+i*2, tmp, 2);
+ }
+
+ return ex_expr::EXPR_OK;
+}
++
+ex_expr::exp_return_type ExFunctionMd5::eval(char * op_data[],
+ CollHeap *heap,
+ ComDiagsArea **diags)
+{
+ unsigned char md5[17]={0};
+
+ Attributes *resultAttr = getOperand(0);
+ Attributes *srcAttr = getOperand(1);
+
+ Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
+ Lng32 rlen = resultAttr->getLength();
+
- if(rlen < 32)
- {
- //ExRaiseSqlError(heap, diagsArea, EXE_GETBIT_ERROR);
- return ex_expr::EXPR_ERROR;
- }
-
++ memset(op_data[0], 0, rlen);
+ MD5_CTX md5_ctx;
+
+ MD5_Init(&md5_ctx);
+ MD5_Update(&md5_ctx, op_data[1], slen);
+ MD5_Final((unsigned char*) md5,&md5_ctx);
+ char tmp[2];
+ for(int i=0; i < 16; i++ )
+ {
+ tmp[0]=tmp[1]='0';
+ sprintf(tmp, "%.2x", (int)md5[i]);
+ memcpy(op_data[0]+i*2, tmp, 2);
+ }
+
+ return ex_expr::EXPR_OK;
+}
+
ex_expr::exp_return_type ExFunctionIsIP::eval(char * op_data[],
CollHeap *heap,
ComDiagsArea **diags)
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/generator/GenItemFunc.cpp
----------------------------------------------------------------------
diff --cc core/sql/generator/GenItemFunc.cpp
index f1a6ec3,81e23ff..685fa6f
--- a/core/sql/generator/GenItemFunc.cpp
+++ b/core/sql/generator/GenItemFunc.cpp
@@@ -218,42 -218,6 +218,43 @@@ short BuiltinFunction::codeGen(Generato
break;
+ case ITM_SHA:
++ case ITM_SHA1:
+ {
+ function_clause =
+ new(generator->getSpace()) ExFunctionSha(getOperatorType(),
+ attr, space);
+ }
+
+ break;
+
+ case ITM_SHA2:
+ {
+ function_clause =
+ new(generator->getSpace()) ExFunctionSha2(getOperatorType(),
+ attr, space);
+ }
+
+ break;
+
+ case ITM_MD5:
+ {
+ function_clause =
+ new(generator->getSpace()) ExFunctionMd5(getOperatorType(),
+ attr, space);
+ }
+
+ break;
+
+ case ITM_CRC32:
+ {
+ function_clause =
+ new(generator->getSpace()) ExFunctionCrc32(getOperatorType(),
+ attr, space);
+ }
+
+ break;
+
case ITM_ISIPV4:
case ITM_ISIPV6:
{
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/optimizer/BindItemExpr.cpp
----------------------------------------------------------------------
diff --cc core/sql/optimizer/BindItemExpr.cpp
index 32f84c4,af6a46d..f24f318
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@@ -3163,10 -3163,6 +3163,11 @@@ ItemExpr *BuiltinFunction::bindNode(Bin
{
case ITM_ISIPV4:
case ITM_ISIPV6:
+ case ITM_MD5:
+ case ITM_CRC32:
++ case ITM_SHA:
+ case ITM_SHA1:
+ case ITM_SHA2:
{
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/optimizer/SynthType.cpp
----------------------------------------------------------------------
diff --cc core/sql/optimizer/SynthType.cpp
index de4abd4,c0cca73..7373d3c
--- a/core/sql/optimizer/SynthType.cpp
+++ b/core/sql/optimizer/SynthType.cpp
@@@ -1010,64 -1010,7 +1010,65 @@@ const NAType *BuiltinFunction::synthesi
SQLChar(maxLength, typ1.supportsSQLnull());
}
break;
-
+ case ITM_SHA:
++ case ITM_SHA1:
+ case ITM_SHA2:
+ {
+ // type cast any params
+ ValueId vid1 = child(0)->getValueId();
+ SQLChar c1(ComSqlId::MAX_QUERY_ID_LEN);
+ vid1.coerceType(c1, NA_CHARACTER_TYPE);
+ //input type must be string
+ const NAType &typ1 = child(0)->getValueId().getType();
+
+ if (typ1.getTypeQualifier() != NA_CHARACTER_TYPE)
+ {
- *CmpCommon::diags() << DgSqlCode(-4045) << DgString0("IS_IP");
++ *CmpCommon::diags() << DgSqlCode(-4067) << DgString0("SHA");
+ return NULL;
+ }
+
+ retType = new HEAP
- SQLVarChar(40, FALSE);
++ SQLChar(128, FALSE);
+ if (typ1.supportsSQLnull())
+ {
+ retType->setNullable(TRUE);
+ }
+ }
+ break;
+ case ITM_MD5:
+ {
+ // type cast any params
+ ValueId vid1 = child(0)->getValueId();
+ SQLChar c1(ComSqlId::MAX_QUERY_ID_LEN);
+ vid1.coerceType(c1, NA_CHARACTER_TYPE);
+ //input type must be string
+ const NAType &typ1 = child(0)->getValueId().getType();
+
+ if (typ1.getTypeQualifier() != NA_CHARACTER_TYPE)
+ {
- *CmpCommon::diags() << DgSqlCode(-4045) << DgString0("IS_IP");
++ *CmpCommon::diags() << DgSqlCode(-4067) << DgString0("MD5");
+ return NULL;
+ }
+
+ retType = new HEAP
- SQLVarChar(33, FALSE);
++ SQLChar(32, FALSE);
+ if (typ1.supportsSQLnull())
+ {
+ retType->setNullable(TRUE);
+ }
+ }
+ break;
+ case ITM_CRC32:
+ {
+ const NAType &typ1 = child(0)->getValueId().getType();
+ retType = new HEAP
+ SQLInt(FALSE, FALSE); //unsigned int
+ if (typ1.supportsSQLnull())
+ {
+ retType->setNullable(TRUE);
+ }
+ }
+ break;
case ITM_ISIPV4:
case ITM_ISIPV6:
{
@@@ -1080,7 -1023,7 +1081,7 @@@
if (typ1.getTypeQualifier() != NA_CHARACTER_TYPE)
{
-- *CmpCommon::diags() << DgSqlCode(-4045) << DgString0("IS_IP");
++ *CmpCommon::diags() << DgSqlCode(-4067) << DgString0("IS_IP");
return NULL;
}
retType = new HEAP
@@@ -1103,7 -1046,7 +1104,7 @@@
if (typ1.getTypeQualifier() != NA_CHARACTER_TYPE)
{
-- *CmpCommon::diags() << DgSqlCode(-4045) << DgString0("INET_ATON");
++ *CmpCommon::diags() << DgSqlCode(-4067) << DgString0("INET_ATON");
return NULL;
}
retType = new HEAP
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/parser/ParKeyWords.cpp
----------------------------------------------------------------------
diff --cc core/sql/parser/ParKeyWords.cpp
index c996b0c,c838bf7..03b1c60
--- a/core/sql/parser/ParKeyWords.cpp
+++ b/core/sql/parser/ParKeyWords.cpp
@@@ -972,8 -970,6 +972,9 @@@ ParKeyWord ParKeyWords::keyWords_[] =
ParKeyWord("SET", TOK_SET, ANS_|RESWORD_|MPWORD_),
ParKeyWord("SETS", TOK_SETS, COMPAQ_|RESWORD_),
ParKeyWord("SG_TABLE", TOK_SG_TABLE, NONRESTOKEN_),
++ ParKeyWord("SHA", TOK_SHA, NONRESTOKEN_),
+ ParKeyWord("SHA1", TOK_SHA1, NONRESTOKEN_),
+ ParKeyWord("SHA2", TOK_SHA2, NONRESTOKEN_),
ParKeyWord("SHAPE", TOK_SHAPE, NONRESTOKEN_),
ParKeyWord("SHARE", TOK_SHARE, NONRESTOKEN_),
ParKeyWord("SHARED", TOK_SHARED, NONRESTOKEN_),
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/ece38ae9/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --cc core/sql/parser/sqlparser.y
index 10261d4,beea4d8..399f9fb
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@@ -9638,55 -9671,6 +9676,62 @@@ misc_function
$$ = $2;
}
+ | TOK_SHA '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
- BuiltinFunction(ITM_SHA,
++ BuiltinFunction(ITM_SHA1,
++ CmpCommon::statementHeap(),
++ 1, $3);
++ }
++ | TOK_SHA1 '(' value_expression ')'
++ {
++ $$ = new (PARSERHEAP())
++ BuiltinFunction(ITM_SHA1,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
+ | TOK_SHA2 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA2,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
+ | TOK_MD5 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_MD5,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
+ | TOK_CRC32 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_CRC32,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
+
+ | TOK_SHA1 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA1,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
+ | TOK_SHA2 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA2,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
| TOK_GREATEST '(' value_expression ',' value_expression ')'
{
$$ = new (PARSERHEAP())
[5/5] incubator-trafodion git commit: Merge [TRAFODION-2229] add
Hashing functions to Trafodion
Posted by li...@apache.org.
Merge [TRAFODION-2229] add Hashing functions to Trafodion
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/7a9000e0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/7a9000e0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/7a9000e0
Branch: refs/heads/master
Commit: 7a9000e00e7c602217f525ed62c395c5050dcac8
Parents: 9643700 63e5338
Author: Liu Ming <li...@apache.org>
Authored: Tue Nov 8 09:24:40 2016 +0000
Committer: Liu Ming <li...@apache.org>
Committed: Tue Nov 8 09:24:40 2016 +0000
----------------------------------------------------------------------
core/sql/common/OperTypeEnum.h | 4 +
core/sql/exp/ExpPackDefs.cpp | 22 +++-
core/sql/exp/exp_clause.cpp | 24 ++++
core/sql/exp/exp_clause.h | 6 +-
core/sql/exp/exp_function.cpp | 145 +++++++++++++++++++++++
core/sql/exp/exp_function.h | 116 ++++++++++++++++++
core/sql/generator/GenItemFunc.cpp | 36 ++++++
core/sql/optimizer/BindItemExpr.cpp | 4 +
core/sql/optimizer/SynthType.cpp | 63 +++++++++-
core/sql/parser/ParKeyWords.cpp | 7 +-
core/sql/parser/sqlparser.y | 45 +++++++
core/sql/regress/compGeneral/EXPECTED006.SB | 20 ++++
core/sql/regress/compGeneral/TEST006 | 3 +
13 files changed, 489 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/7a9000e0/core/sql/common/OperTypeEnum.h
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/7a9000e0/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
[2/5] incubator-trafodion git commit: second round of function support
Posted by li...@apache.org.
second round of function support
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/79d36dc3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/79d36dc3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/79d36dc3
Branch: refs/heads/master
Commit: 79d36dc32ecefca9a624ceeeb9246d49f54534b1
Parents: 4c4dfc4
Author: Liu Ming <ov...@sina.com>
Authored: Wed Nov 2 21:34:02 2016 -0400
Committer: Liu Ming <ov...@sina.com>
Committed: Wed Nov 2 21:34:02 2016 -0400
----------------------------------------------------------------------
core/sql/common/OperTypeEnum.h | 1 +
core/sql/exp/ExpPackDefs.cpp | 15 ++++
core/sql/exp/exp_clause.cpp | 18 ++++
core/sql/exp/exp_clause.h | 7 +-
core/sql/exp/exp_function.cpp | 141 +++++++++++++++++++++++++++++++-
core/sql/exp/exp_function.h | 87 ++++++++++++++++++++
core/sql/generator/GenItemFunc.cpp | 27 ++++++
core/sql/optimizer/SynthType.cpp | 47 +++++++++++
core/sql/parser/sqlparser.y | 42 ++++++++++
9 files changed, 383 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/common/OperTypeEnum.h
----------------------------------------------------------------------
diff --git a/core/sql/common/OperTypeEnum.h b/core/sql/common/OperTypeEnum.h
index 6e3981a..d32be18 100644
--- a/core/sql/common/OperTypeEnum.h
+++ b/core/sql/common/OperTypeEnum.h
@@ -786,6 +786,7 @@ enum OperatorTypeEnum {
ITM_MD5 = 2635,
ITM_SHA1 = 2636,
ITM_SHA2 = 2637,
+ ITM_SHA = 2638,
// Items for needed for Translating to UCS2 output strings
ITM_DATEFMT = 2990,
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/exp/ExpPackDefs.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/ExpPackDefs.cpp b/core/sql/exp/ExpPackDefs.cpp
index 3bfea00..c8b7c65 100644
--- a/core/sql/exp/ExpPackDefs.cpp
+++ b/core/sql/exp/ExpPackDefs.cpp
@@ -584,6 +584,21 @@ Long ExHeaderClause::pack(void * space)
return packClause(space, sizeof(ExHeaderClause));
}
+NA_EIDPROC Long ExFunctionSha::pack(void * space)
+{
+ return packClause(space, sizeof(ExFunctionSha));
+}
+
+NA_EIDPROC Long ExFunctionSha2::pack(void * space)
+{
+ return packClause(space, sizeof(ExFunctionSha2));
+}
+
+NA_EIDPROC Long ExFunctionMd5::pack(void * space)
+{
+ return packClause(space, sizeof(ExFunctionMd5));
+}
+
NA_EIDPROC Long ExFunctionCrc32::pack(void * space)
{
return packClause(space, sizeof(ExFunctionCrc32));
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/exp/exp_clause.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_clause.cpp b/core/sql/exp/exp_clause.cpp
index 79c42cc..8fe135d 100644
--- a/core/sql/exp/exp_clause.cpp
+++ b/core/sql/exp/exp_clause.cpp
@@ -338,6 +338,15 @@ ex_clause::ex_clause(clause_type type,
case ITM_CURR_TRANSID:
setClassID(FUNC_CURR_TRANSID_ID);
break;
+ case ITM_SHA:
+ setClassID(FUNC_SHA_ID);
+ break;
+ case ITM_SHA2:
+ setClassID(FUNC_SHA2_ID);
+ break;
+ case ITM_MD5:
+ setClassID(FUNC_MD5_ID);
+ break;
case ITM_CRC32:
setClassID(FUNC_CRC32_ID);
break;
@@ -987,6 +996,15 @@ NA_EIDPROC char *ex_clause::findVTblPtr(short classID)
case ex_clause::FUNC_HBASE_VERSION:
GetVTblPtr(vtblPtr, ExFunctionHbaseVersion);
break;
+ case ex_clause::FUNC_SHA_ID:
+ GetVTblPtr(vtblPtr, ExFunctionSha);
+ break;
+ case ex_clause::FUNC_SHA2_ID:
+ GetVTblPtr(vtblPtr, ExFunctionSha2);
+ break;
+ case ex_clause::FUNC_MD5_ID:
+ GetVTblPtr(vtblPtr, ExFunctionMd5);
+ break;
case ex_clause::FUNC_CRC32_ID:
GetVTblPtr(vtblPtr, ExFunctionCrc32);
break;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/exp/exp_clause.h
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_clause.h b/core/sql/exp/exp_clause.h
index 0ce3b51..defad8b 100644
--- a/core/sql/exp/exp_clause.h
+++ b/core/sql/exp/exp_clause.h
@@ -203,7 +203,12 @@ public:
FUNC_ISIP_ID = 118,
FUNC_INETATON_ID = 119,
FUNC_INETNTOA_ID = 120,
- FUNC_CRC32_ID = 121
+ FUNC_CRC32_ID = 121,
+ FUNC_MD5_ID = 122,
+ FUNC_SHA1_ID = 123,
+ FUNC_SHA2_ID = 124,
+ FUNC_SHA_ID = 125
+
};
// max number of operands (including result) in a clause.
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/exp/exp_function.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_function.cpp b/core/sql/exp/exp_function.cpp
index f819165..de36408 100644
--- a/core/sql/exp/exp_function.cpp
+++ b/core/sql/exp/exp_function.cpp
@@ -40,6 +40,10 @@
#include <math.h>
+#include <zlib.h>
+#include "openssl/md5.h"
+#include <openssl/sha.h>
+
#define MathSqrt(op, err) sqrt(op)
#include <ctype.h>
@@ -203,6 +207,9 @@ ExUnPackCol::ExUnPackCol(){};
ExFunctionRangeLookup::ExFunctionRangeLookup(){};
ExAuditImage::ExAuditImage(){};
ExFunctionCrc32::ExFunctionCrc32(){};
+ExFunctionMd5::ExFunctionMd5(){};
+ExFunctionSha::ExFunctionSha(){};
+ExFunctionSha2::ExFunctionSha2(){};
ExFunctionIsIP::ExFunctionIsIP(){};
ExFunctionInetAton::ExFunctionInetAton(){};
ExFunctionInetNtoa::ExFunctionInetNtoa(){};
@@ -227,6 +234,27 @@ ExFunctionCrc32::ExFunctionCrc32(OperatorTypeEnum oper_type,
};
+ExFunctionMd5::ExFunctionMd5(OperatorTypeEnum oper_type,
+ Attributes ** attr, Space * space)
+ : ex_function_clause(oper_type, 2, attr, space)
+{
+
+};
+
+ExFunctionSha::ExFunctionSha(OperatorTypeEnum oper_type,
+ Attributes ** attr, Space * space)
+ : ex_function_clause(oper_type, 2, attr, space)
+{
+
+};
+
+ExFunctionSha2::ExFunctionSha2(OperatorTypeEnum oper_type,
+ Attributes ** attr, Space * space)
+ : ex_function_clause(oper_type, 2, attr, space)
+{
+
+};
+
ExFunctionIsIP::ExFunctionIsIP(OperatorTypeEnum oper_type,
Attributes ** attr, Space * space)
: ex_function_clause(oper_type, 2, attr, space)
@@ -7912,11 +7940,122 @@ ex_expr::exp_return_type ExFunctionCrc32::eval(char * op_data[],
CollHeap *heap,
ComDiagsArea **diags)
{
+ Attributes *resultAttr = getOperand(0);
+ Attributes *srcAttr = getOperand(1);
+
+ Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
+ Lng32 rlen = resultAttr->getLength();
+
*(ULng32*)op_data[0] = 0;
-//stub for now
+ ULng32 crc = crc32(0L, Z_NULL, 0);
+ crc = crc32 (crc, (const Bytef*)op_data[1], slen);
+ *(ULng32*)op_data[0] = crc;
return ex_expr::EXPR_OK;
}
+ex_expr::exp_return_type ExFunctionSha2::eval(char * op_data[],
+ CollHeap *heap,
+ ComDiagsArea **diags)
+{
+
+ unsigned char sha[SHA_DIGEST_LENGTH + 1]={0};
+
+ Attributes *resultAttr = getOperand(0);
+ Attributes *srcAttr = getOperand(1);
+
+ Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
+ Lng32 rlen = resultAttr->getLength();
+
+ if(rlen < 40)
+ {
+ //ExRaiseSqlError(heap, diagsArea, EXE_GETBIT_ERROR);
+ return ex_expr::EXPR_ERROR;
+ }
+
+ SHA_CTX sha_ctx;
+
+ SHA_Init(&sha_ctx);
+ SHA_Update(&sha_ctx, op_data[1], slen);
+ SHA_Final((unsigned char*) sha,&sha_ctx);
+ char tmp[2];
+ for(int i=0; i < SHA_DIGEST_LENGTH ; i++ )
+ {
+ tmp[0]=tmp[1]='0';
+ sprintf(tmp, "%.2x", (int)sha[i]);
+ memcpy(op_data[0]+i*2, tmp, 2);
+ }
+
+ return ex_expr::EXPR_OK;
+}
+
+ex_expr::exp_return_type ExFunctionSha::eval(char * op_data[],
+ CollHeap *heap,
+ ComDiagsArea **diags)
+{
+
+ unsigned char sha[SHA_DIGEST_LENGTH + 1]={0};
+
+ Attributes *resultAttr = getOperand(0);
+ Attributes *srcAttr = getOperand(1);
+
+ Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
+ Lng32 rlen = resultAttr->getLength();
+
+ if(rlen < 40)
+ {
+ //ExRaiseSqlError(heap, diagsArea, EXE_GETBIT_ERROR);
+ return ex_expr::EXPR_ERROR;
+ }
+
+ SHA_CTX sha_ctx;
+
+ SHA_Init(&sha_ctx);
+ SHA_Update(&sha_ctx, op_data[1], slen);
+ SHA_Final((unsigned char*) sha,&sha_ctx);
+ char tmp[2];
+ for(int i=0; i < SHA_DIGEST_LENGTH ; i++ )
+ {
+ tmp[0]=tmp[1]='0';
+ sprintf(tmp, "%.2x", (int)sha[i]);
+ memcpy(op_data[0]+i*2, tmp, 2);
+ }
+
+ return ex_expr::EXPR_OK;
+}
+ex_expr::exp_return_type ExFunctionMd5::eval(char * op_data[],
+ CollHeap *heap,
+ ComDiagsArea **diags)
+{
+ unsigned char md5[17]={0};
+
+ Attributes *resultAttr = getOperand(0);
+ Attributes *srcAttr = getOperand(1);
+
+ Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
+ Lng32 rlen = resultAttr->getLength();
+
+ if(rlen < 32)
+ {
+ //ExRaiseSqlError(heap, diagsArea, EXE_GETBIT_ERROR);
+ return ex_expr::EXPR_ERROR;
+ }
+
+ MD5_CTX md5_ctx;
+
+ MD5_Init(&md5_ctx);
+ MD5_Update(&md5_ctx, op_data[1], slen);
+ MD5_Final((unsigned char*) md5,&md5_ctx);
+ char tmp[2];
+ for(int i=0; i < 16; i++ )
+ {
+ tmp[0]=tmp[1]='0';
+ sprintf(tmp, "%.2x", (int)md5[i]);
+ memcpy(op_data[0]+i*2, tmp, 2);
+ }
+
+ return ex_expr::EXPR_OK;
+}
+
ex_expr::exp_return_type ExFunctionIsIP::eval(char * op_data[],
CollHeap *heap,
ComDiagsArea **diags)
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/exp/exp_function.h
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_function.h b/core/sql/exp/exp_function.h
index 22ef8c9..cfa5907 100644
--- a/core/sql/exp/exp_function.h
+++ b/core/sql/exp/exp_function.h
@@ -885,6 +885,93 @@ public:
// ---------------------------------------------------------------------
};
+class SQLEXP_LIB_FUNC ExFunctionSha: public ex_function_clause {
+public:
+ NA_EIDPROC ExFunctionSha(OperatorTypeEnum oper_type,
+ Attributes ** attr,
+ Space * space);
+ NA_EIDPROC ExFunctionSha();
+
+ NA_EIDPROC ex_expr::exp_return_type eval(char *op_data[], CollHeap*,
+ ComDiagsArea** = 0);
+ NA_EIDPROC Long pack(void *);
+
+ // ---------------------------------------------------------------------
+ // Redefinition of methods inherited from NAVersionedObject.
+ // ---------------------------------------------------------------------
+ NA_EIDPROC virtual unsigned char getClassVersionID()
+ {
+ return 1;
+ }
+
+ NA_EIDPROC virtual void populateImageVersionIDArray()
+ {
+ setImageVersionID(2,getClassVersionID());
+ ex_function_clause::populateImageVersionIDArray();
+ }
+
+ NA_EIDPROC virtual short getClassSize() { return (short)sizeof(*this); }
+ // ---------------------------------------------------------------------
+};
+
+class SQLEXP_LIB_FUNC ExFunctionSha2: public ex_function_clause {
+public:
+ NA_EIDPROC ExFunctionSha2(OperatorTypeEnum oper_type,
+ Attributes ** attr,
+ Space * space);
+ NA_EIDPROC ExFunctionSha2();
+
+ NA_EIDPROC ex_expr::exp_return_type eval(char *op_data[], CollHeap*,
+ ComDiagsArea** = 0);
+ NA_EIDPROC Long pack(void *);
+
+ // ---------------------------------------------------------------------
+ // Redefinition of methods inherited from NAVersionedObject.
+ // ---------------------------------------------------------------------
+ NA_EIDPROC virtual unsigned char getClassVersionID()
+ {
+ return 1;
+ }
+
+ NA_EIDPROC virtual void populateImageVersionIDArray()
+ {
+ setImageVersionID(2,getClassVersionID());
+ ex_function_clause::populateImageVersionIDArray();
+ }
+
+ NA_EIDPROC virtual short getClassSize() { return (short)sizeof(*this); }
+ // ---------------------------------------------------------------------
+};
+
+class SQLEXP_LIB_FUNC ExFunctionMd5: public ex_function_clause {
+public:
+ NA_EIDPROC ExFunctionMd5(OperatorTypeEnum oper_type,
+ Attributes ** attr,
+ Space * space);
+ NA_EIDPROC ExFunctionMd5();
+
+ NA_EIDPROC ex_expr::exp_return_type eval(char *op_data[], CollHeap*,
+ ComDiagsArea** = 0);
+ NA_EIDPROC Long pack(void *);
+
+ // ---------------------------------------------------------------------
+ // Redefinition of methods inherited from NAVersionedObject.
+ // ---------------------------------------------------------------------
+ NA_EIDPROC virtual unsigned char getClassVersionID()
+ {
+ return 1;
+ }
+
+ NA_EIDPROC virtual void populateImageVersionIDArray()
+ {
+ setImageVersionID(2,getClassVersionID());
+ ex_function_clause::populateImageVersionIDArray();
+ }
+
+ NA_EIDPROC virtual short getClassSize() { return (short)sizeof(*this); }
+ // ---------------------------------------------------------------------
+};
+
class SQLEXP_LIB_FUNC ExFunctionIsIP : public ex_function_clause {
public:
NA_EIDPROC ExFunctionIsIP(OperatorTypeEnum oper_type,
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/generator/GenItemFunc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenItemFunc.cpp b/core/sql/generator/GenItemFunc.cpp
index d025c22..f1a6ec3 100644
--- a/core/sql/generator/GenItemFunc.cpp
+++ b/core/sql/generator/GenItemFunc.cpp
@@ -218,6 +218,33 @@ short BuiltinFunction::codeGen(Generator * generator)
break;
+ case ITM_SHA:
+ {
+ function_clause =
+ new(generator->getSpace()) ExFunctionSha(getOperatorType(),
+ attr, space);
+ }
+
+ break;
+
+ case ITM_SHA2:
+ {
+ function_clause =
+ new(generator->getSpace()) ExFunctionSha2(getOperatorType(),
+ attr, space);
+ }
+
+ break;
+
+ case ITM_MD5:
+ {
+ function_clause =
+ new(generator->getSpace()) ExFunctionMd5(getOperatorType(),
+ attr, space);
+ }
+
+ break;
+
case ITM_CRC32:
{
function_clause =
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/optimizer/SynthType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/SynthType.cpp b/core/sql/optimizer/SynthType.cpp
index 1566219..de4abd4 100644
--- a/core/sql/optimizer/SynthType.cpp
+++ b/core/sql/optimizer/SynthType.cpp
@@ -1010,6 +1010,53 @@ const NAType *BuiltinFunction::synthesizeType()
SQLChar(maxLength, typ1.supportsSQLnull());
}
break;
+ case ITM_SHA:
+ case ITM_SHA2:
+ {
+ // type cast any params
+ ValueId vid1 = child(0)->getValueId();
+ SQLChar c1(ComSqlId::MAX_QUERY_ID_LEN);
+ vid1.coerceType(c1, NA_CHARACTER_TYPE);
+ //input type must be string
+ const NAType &typ1 = child(0)->getValueId().getType();
+
+ if (typ1.getTypeQualifier() != NA_CHARACTER_TYPE)
+ {
+ *CmpCommon::diags() << DgSqlCode(-4045) << DgString0("IS_IP");
+ return NULL;
+ }
+
+ retType = new HEAP
+ SQLVarChar(40, FALSE);
+ if (typ1.supportsSQLnull())
+ {
+ retType->setNullable(TRUE);
+ }
+ }
+ break;
+ case ITM_MD5:
+ {
+ // type cast any params
+ ValueId vid1 = child(0)->getValueId();
+ SQLChar c1(ComSqlId::MAX_QUERY_ID_LEN);
+ vid1.coerceType(c1, NA_CHARACTER_TYPE);
+ //input type must be string
+ const NAType &typ1 = child(0)->getValueId().getType();
+
+ if (typ1.getTypeQualifier() != NA_CHARACTER_TYPE)
+ {
+ *CmpCommon::diags() << DgSqlCode(-4045) << DgString0("IS_IP");
+ return NULL;
+ }
+
+ retType = new HEAP
+ SQLVarChar(33, FALSE);
+ if (typ1.supportsSQLnull())
+ {
+ retType->setNullable(TRUE);
+ }
+ }
+ break;
case ITM_CRC32:
{
const NAType &typ1 = child(0)->getValueId().getType();
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/79d36dc3/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 2fd5209..10261d4 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -1036,6 +1036,7 @@ static void enableMakeQuotedStringISO88591Mechanism()
%token <tokval> TOK_SET
%token <tokval> TOK_SETS
%token <tokval> TOK_SG_TABLE
+%token <tokval> TOK_SHA
%token <tokval> TOK_SHA1
%token <tokval> TOK_SHA2
%token <tokval> TOK_SHAPE
@@ -9636,6 +9637,31 @@ misc_function :
{
$$ = $2;
}
+
+ | TOK_SHA '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
+ | TOK_SHA2 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA2,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
+ | TOK_MD5 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_MD5,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
| TOK_CRC32 '(' value_expression ')'
{
$$ = new (PARSERHEAP())
@@ -9645,6 +9671,22 @@ misc_function :
}
+ | TOK_SHA1 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA1,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
+ | TOK_SHA2 '(' value_expression ')'
+ {
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA2,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ }
+
| TOK_GREATEST '(' value_expression ',' value_expression ')'
{
$$ = new (PARSERHEAP())