You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by ry...@apache.org on 2016/11/28 04:35:10 UTC
[1/4] incubator-trafodion git commit: [TRAFODION-2229]SHA2 function
enhancement
Repository: incubator-trafodion
Updated Branches:
refs/heads/master f1238e00f -> 664a2bb3e
[TRAFODION-2229]SHA2 function enhancement
SHA2 support more funtcions than SHA-256. Now, it support SHA-224,
SHA-256, SHA-384, SHA-512.
SHA2(str, hash_length)
The first argument is the string to be hashed.
The second is the desired bit length of the result, which must have a
value of 224, 256, 384, 512, or 0(which is same with 256).
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/964fc401
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/964fc401
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/964fc401
Branch: refs/heads/master
Commit: 964fc401ac85d05997b0b3273ebb854d0ed3e80a
Parents: f1238e0
Author: Weiqing Xu <we...@esgyn.cn>
Authored: Tue Nov 22 05:21:02 2016 +0000
Committer: Weiqing Xu <we...@esgyn.cn>
Committed: Sun Nov 27 14:39:06 2016 +0000
----------------------------------------------------------------------
core/sql/exp/exp_function.cpp | 80 +++++++++++++++++++++---
core/sql/optimizer/SynthType.cpp | 32 +++++++++-
core/sql/parser/sqlparser.y | 4 +-
core/sql/regress/compGeneral/EXPECTED006.SB | 45 +++++++++++++
core/sql/regress/compGeneral/TEST006 | 6 ++
5 files changed, 154 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/964fc401/core/sql/exp/exp_function.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_function.cpp b/core/sql/exp/exp_function.cpp
index af9845b..cfd98d2 100644
--- a/core/sql/exp/exp_function.cpp
+++ b/core/sql/exp/exp_function.cpp
@@ -252,7 +252,7 @@ ExFunctionSha::ExFunctionSha(OperatorTypeEnum oper_type,
ExFunctionSha2::ExFunctionSha2(OperatorTypeEnum oper_type,
Attributes ** attr, Space * space)
- : ex_function_clause(oper_type, 2, attr, space)
+ : ex_function_clause(oper_type, 3, attr, space)
{
};
@@ -7962,37 +7962,97 @@ ex_expr::exp_return_type ExFunctionCrc32::eval(char * op_data[],
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[SHA256_DIGEST_LENGTH+ 1]={0};
+ unsigned char sha[SHA512_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();
+
+ Lng32 hash_len= *(Lng32 *)op_data[2];
+
+ // the length of result
+ Lng32 rlen = SHA512_DIGEST_LENGTH;
str_pad(op_data[0], rlen, ' ');
- SHA256_CTX sha_ctx;
+ switch (hash_len) {
+ case 0:
+ case 256:
+ SHA256_CTX sha_ctx_256;
+ if (!SHA256_Init(&sha_ctx_256))
+ goto sha2_error;
+ if (!SHA256_Update(&sha_ctx_256, op_data[1], slen))
+ goto sha2_error;
+ if (!SHA256_Final((unsigned char *)sha, &sha_ctx_256))
+ goto sha2_error;
+
+ rlen = SHA256_DIGEST_LENGTH;
+ break;
+
+ case 224:
+ SHA256_CTX sha_ctx_224;
+
+ if (!SHA224_Init(&sha_ctx_224))
+ goto sha2_error;
+ if (!SHA224_Update(&sha_ctx_224, op_data[1], slen))
+ goto sha2_error;
+ if (!SHA224_Final((unsigned char *)sha, &sha_ctx_224))
+ goto sha2_error;
+
+ rlen = SHA224_DIGEST_LENGTH;
+ break;
+
+ case 384:
+ SHA512_CTX sha_ctx_384;
+ if (!SHA384_Init(&sha_ctx_384))
+ goto sha2_error;
+ if (!SHA384_Update(&sha_ctx_384, op_data[1], slen))
+ goto sha2_error;
+ if (!SHA384_Final((unsigned char *)sha, &sha_ctx_384))
+ goto sha2_error;
+
+ rlen = SHA384_DIGEST_LENGTH;
+ break;
+
+ case 512:
+ SHA512_CTX sha_ctx_512;
+ if (!SHA512_Init(&sha_ctx_512))
+ goto sha2_error;
+ if (!SHA512_Update(&sha_ctx_512, op_data[1], slen))
+ goto sha2_error;
+ if (!SHA512_Final((unsigned char *)sha, &sha_ctx_512))
+ goto sha2_error;
+
+ rlen = SHA512_DIGEST_LENGTH;
+ break;
+
+ default:
+ ExRaiseSqlError(heap, diags, EXE_BAD_ARG_TO_MATH_FUNC);
+ *(*diags) << DgString0("SHA2");
+ return ex_expr::EXPR_ERROR;
+ }
- SHA256_Init(&sha_ctx);
- SHA256_Update(&sha_ctx, op_data[1], slen);
- SHA256_Final((unsigned char*) sha,&sha_ctx);
char tmp[3];
- for(int i=0; i < SHA256_DIGEST_LENGTH; i++ )
+ for(int i=0; i < rlen; i++ )
{
tmp[0]=tmp[1]=tmp[2]='0';
sprintf(tmp, "%.2x", (int)sha[i]);
str_cpy_all(op_data[0]+i*2, tmp, 2);
}
+ getOperand(0)->setVarLength(rlen * 2, op_data[-MAX_OPERANDS]);
return ex_expr::EXPR_OK;
+sha2_error:
+ ExRaiseFunctionSqlError(heap, diags, EXE_INTERNAL_ERROR,
+ derivedFunction(),
+ origFunctionOperType());
+ return ex_expr::EXPR_ERROR;
}
ex_expr::exp_return_type ExFunctionSha::eval(char * op_data[],
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/964fc401/core/sql/optimizer/SynthType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/SynthType.cpp b/core/sql/optimizer/SynthType.cpp
index c180e9f..e62c8af 100644
--- a/core/sql/optimizer/SynthType.cpp
+++ b/core/sql/optimizer/SynthType.cpp
@@ -1011,7 +1011,6 @@ const NAType *BuiltinFunction::synthesizeType()
}
break;
case ITM_SHA1:
- case ITM_SHA2:
{
// type cast any params
ValueId vid1 = child(0)->getValueId();
@@ -1034,6 +1033,37 @@ const NAType *BuiltinFunction::synthesizeType()
}
}
break;
+
+ case ITM_SHA2:
+ {
+ ValueId vid1 = child(0)->getValueId();
+ SQLChar c1(ComSqlId::MAX_QUERY_ID_LEN);
+ vid1.coerceType(c1, NA_CHARACTER_TYPE);
+
+ const NAType &typ1 = child(0)->getValueId().getType();
+
+ if (typ1.getTypeQualifier() != NA_CHARACTER_TYPE)
+ {
+ *CmpCommon::diags() << DgSqlCode(-4067) << DgString0("SHA2");
+ return NULL;
+ }
+
+ // type cast any params
+ ValueId vid = child(0)->getValueId();
+ vid.coerceType(NA_NUMERIC_TYPE);
+ const NAType &typ2 = child(1)->getValueId().getType();
+
+ if (typ2.getTypeQualifier() != NA_NUMERIC_TYPE)
+ {
+ *CmpCommon::diags() << DgSqlCode(-4045) << DgString0("SHA2");
+ return NULL;
+ }
+
+ retType = new HEAP
+ SQLVarChar(1024, typ1.supportsSQLnull());
+ }
+ break;
+
case ITM_MD5:
{
// type cast any params
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/964fc401/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 8fa5728..060b167 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -9695,12 +9695,12 @@ misc_function :
1, $3);
}
- | TOK_SHA2 '(' value_expression ')'
+ | TOK_SHA2 '(' value_expression, ',', value_expression ')'
{
$$ = new (PARSERHEAP())
BuiltinFunction(ITM_SHA2,
CmpCommon::statementHeap(),
- 1, $3);
+ 2, $3, $5);
}
| TOK_MD5 '(' value_expression ')'
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/964fc401/core/sql/regress/compGeneral/EXPECTED006.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED006.SB b/core/sql/regress/compGeneral/EXPECTED006.SB
index 67a57da..6ff0a64 100644
--- a/core/sql/regress/compGeneral/EXPECTED006.SB
+++ b/core/sql/regress/compGeneral/EXPECTED006.SB
@@ -1779,4 +1779,49 @@ Lane L500
Lynn L500
--- 2 row(s) selected.
+>>select sha2('the original data', 0) from dual;
+
+(EXPR)
+----------
+
+38fd175fead1af0a96f46a9ed32d443857c16d0069c19e0cd7239340a1f94334
+
+--- 1 row(s) selected.
+>>select sha2('the original data', 128) from dual;
+
+*** ERROR[8428] The argument to function SHA2 is not valid.
+
+--- 0 row(s) selected.
+>>select sha2('the original data', 224) from dual;
+
+(EXPR)
+----------
+
+82e1dae1bc1b2d862d30ddb6e16a717e5de6a143ab8c56c32a310a5b
+
+--- 1 row(s) selected.
+>>select sha2('the original data', 256) from dual;
+
+(EXPR)
+----------
+
+38fd175fead1af0a96f46a9ed32d443857c16d0069c19e0cd7239340a1f94334
+
+--- 1 row(s) selected.
+>>select sha2('the original data', 384) from dual;
+
+(EXPR)
+----------
+
+bc0050f3ff7a540c74a42664c53a7f9fd485622374a43eb4a62cd84e48f483237bed50f6562f8c6e405454c4dbb0d4a3
+
+--- 1 row(s) selected.
+>>select sha2('the original data', 512) from dual;
+
+(EXPR)
+----------
+
+18091a172d94aae1ae530ced02bde7f022229f446348f5d3b36989c2e6fd59f5252c7a7f8ecb71a74cb724448243ff71651f87aed155aee7340fad1b02567b60
+
+--- 1 row(s) selected.
>>log;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/964fc401/core/sql/regress/compGeneral/TEST006
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/TEST006 b/core/sql/regress/compGeneral/TEST006
index 2ee1598..edee936 100644
--- a/core/sql/regress/compGeneral/TEST006
+++ b/core/sql/regress/compGeneral/TEST006
@@ -673,3 +673,9 @@ select name, SOUNDEX(name) from t006emp1 where SOUNDEX(name)=SOUNDEX('Lynn');
select name, SOUNDEX(name) from t006emp2 where SOUNDEX(name)=SOUNDEX('Jon');
select name, SOUNDEX(name) from t006emp2 where SOUNDEX(name)=SOUNDEX('Roy');
select name, SOUNDEX(name) from t006emp2 where SOUNDEX(name)=SOUNDEX('Lynn');
+select sha2('the original data', 0) from dual;
+select sha2('the original data', 128) from dual;
+select sha2('the original data', 224) from dual;
+select sha2('the original data', 256) from dual;
+select sha2('the original data', 384) from dual;
+select sha2('the original data', 512) from dual;
[4/4] incubator-trafodion git commit: Merge [TRAFODION-2229] PR-849
SHA2 function enhancement
Posted by ry...@apache.org.
Merge [TRAFODION-2229] PR-849 SHA2 function enhancement
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/664a2bb3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/664a2bb3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/664a2bb3
Branch: refs/heads/master
Commit: 664a2bb3e90b4f70381d3e0a30de81b497b11f6f
Parents: 7098095 34465b7
Author: ryzuo <jo...@gmail.com>
Authored: Mon Nov 28 04:35:21 2016 +0000
Committer: ryzuo <jo...@gmail.com>
Committed: Mon Nov 28 04:35:21 2016 +0000
----------------------------------------------------------------------
core/sql/bin/SqlciErrors.txt | 2 +
core/sql/common/OperTypeEnum.h | 8 +-
core/sql/exp/ExpPackDefs.cpp | 5 +
core/sql/exp/exp_clause.cpp | 29 +++-
core/sql/exp/exp_clause.h | 3 +-
core/sql/exp/exp_clause_derived.h | 169 +++++++++++++++++++++++
core/sql/exp/exp_function.cpp | 82 +++++++++--
core/sql/exp/exp_function.h | 6 +-
core/sql/exp/exp_like.cpp | 80 +++++++++++
core/sql/generator/GenItemFunc.cpp | 33 ++++-
core/sql/optimizer/BindItemExpr.cpp | 20 ++-
core/sql/optimizer/ItemCache.cpp | 4 +-
core/sql/optimizer/ItemExpr.cpp | 40 +++++-
core/sql/optimizer/ItemFunc.h | 104 ++++++++++++--
core/sql/optimizer/NormItemExpr.cpp | 2 +-
core/sql/optimizer/SynthType.cpp | 43 +++++-
core/sql/parser/ParKeyWords.cpp | 1 +
core/sql/parser/sqlparser.y | 52 ++++++-
core/sql/regress/compGeneral/EXPECTED006.SB | 52 ++++++-
core/sql/regress/compGeneral/TEST006 | 6 +
core/sql/regress/executor/EXPECTED002.SB | 99 ++++++++++++-
core/sql/regress/executor/TEST002 | 29 +++-
22 files changed, 802 insertions(+), 67 deletions(-)
----------------------------------------------------------------------
[2/4] incubator-trafodion git commit: return fixed length char for
SHA2 function
Posted by ry...@apache.org.
return fixed length char for SHA2 function
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/e6ab8154
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/e6ab8154
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/e6ab8154
Branch: refs/heads/master
Commit: e6ab8154756ad2ec3976d7a99977e812d2d262ee
Parents: 964fc40
Author: Weiqing Xu <we...@esgyn.cn>
Authored: Wed Nov 23 11:44:39 2016 +0000
Committer: Weiqing Xu <we...@esgyn.cn>
Committed: Sun Nov 27 14:41:18 2016 +0000
----------------------------------------------------------------------
core/sql/common/OperTypeEnum.h | 5 ++-
core/sql/exp/exp_clause.cpp | 5 ++-
core/sql/exp/exp_function.cpp | 14 +++-----
core/sql/exp/exp_function.h | 6 +++-
core/sql/generator/GenItemFunc.cpp | 25 ++++++++++++--
core/sql/optimizer/BindItemExpr.cpp | 4 +++
core/sql/optimizer/SynthType.cpp | 33 +++++++++++-------
core/sql/parser/sqlparser.y | 43 +++++++++++++++++++++---
core/sql/regress/compGeneral/EXPECTED006.SB | 5 +--
9 files changed, 107 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/common/OperTypeEnum.h
----------------------------------------------------------------------
diff --git a/core/sql/common/OperTypeEnum.h b/core/sql/common/OperTypeEnum.h
index 109485c..f1b69cd 100644
--- a/core/sql/common/OperTypeEnum.h
+++ b/core/sql/common/OperTypeEnum.h
@@ -794,7 +794,10 @@ enum OperatorTypeEnum {
ITM_CRC32 = 2634,
ITM_MD5 = 2635,
ITM_SHA1 = 2636,
- ITM_SHA2 = 2637,
+ ITM_SHA2_256 = 2637,
+ ITM_SHA2_224 = 2638,
+ ITM_SHA2_384 = 2639,
+ ITM_SHA2_512 = 2640,
// Items for needed for Translating to UCS2 output strings
ITM_DATEFMT = 2990,
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/exp/exp_clause.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_clause.cpp b/core/sql/exp/exp_clause.cpp
index 5ccd0d9..46beabd 100644
--- a/core/sql/exp/exp_clause.cpp
+++ b/core/sql/exp/exp_clause.cpp
@@ -344,7 +344,10 @@ ex_clause::ex_clause(clause_type type,
case ITM_SHA1:
setClassID(FUNC_SHA1_ID);
break;
- case ITM_SHA2:
+ case ITM_SHA2_224:
+ case ITM_SHA2_256:
+ case ITM_SHA2_384:
+ case ITM_SHA2_512:
setClassID(FUNC_SHA2_ID);
break;
case ITM_MD5:
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/exp/exp_function.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_function.cpp b/core/sql/exp/exp_function.cpp
index cfd98d2..4096309 100644
--- a/core/sql/exp/exp_function.cpp
+++ b/core/sql/exp/exp_function.cpp
@@ -251,8 +251,8 @@ ExFunctionSha::ExFunctionSha(OperatorTypeEnum oper_type,
};
ExFunctionSha2::ExFunctionSha2(OperatorTypeEnum oper_type,
- Attributes ** attr, Space * space)
- : ex_function_clause(oper_type, 3, attr, space)
+ Attributes ** attr, Space * space, Lng32 mode)
+ : ex_function_clause(oper_type, 2, attr, space), mode(mode)
{
};
@@ -7974,14 +7974,10 @@ ex_expr::exp_return_type ExFunctionSha2::eval(char * op_data[],
Lng32 slen = srcAttr->getLength(op_data[-MAX_OPERANDS+1]);
- Lng32 hash_len= *(Lng32 *)op_data[2];
-
// the length of result
Lng32 rlen = SHA512_DIGEST_LENGTH;
- str_pad(op_data[0], rlen, ' ');
-
- switch (hash_len) {
+ switch (mode) {
case 0:
case 256:
SHA256_CTX sha_ctx_256;
@@ -8037,6 +8033,7 @@ ex_expr::exp_return_type ExFunctionSha2::eval(char * op_data[],
*(*diags) << DgString0("SHA2");
return ex_expr::EXPR_ERROR;
}
+ str_pad(op_data[0], rlen, ' ');
char tmp[3];
for(int i=0; i < rlen; i++ )
@@ -8045,8 +8042,7 @@ ex_expr::exp_return_type ExFunctionSha2::eval(char * op_data[],
sprintf(tmp, "%.2x", (int)sha[i]);
str_cpy_all(op_data[0]+i*2, tmp, 2);
}
-
- getOperand(0)->setVarLength(rlen * 2, op_data[-MAX_OPERANDS]);
+
return ex_expr::EXPR_OK;
sha2_error:
ExRaiseFunctionSqlError(heap, diags, EXE_INTERNAL_ERROR,
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/exp/exp_function.h
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_function.h b/core/sql/exp/exp_function.h
index 8131fa2..cc6b558 100644
--- a/core/sql/exp/exp_function.h
+++ b/core/sql/exp/exp_function.h
@@ -918,7 +918,8 @@ class SQLEXP_LIB_FUNC ExFunctionSha2: public ex_function_clause {
public:
NA_EIDPROC ExFunctionSha2(OperatorTypeEnum oper_type,
Attributes ** attr,
- Space * space);
+ Space * space,
+ Lng32 mode);
NA_EIDPROC ExFunctionSha2();
NA_EIDPROC ex_expr::exp_return_type eval(char *op_data[], CollHeap*,
@@ -941,6 +942,9 @@ public:
NA_EIDPROC virtual short getClassSize() { return (short)sizeof(*this); }
// ---------------------------------------------------------------------
+
+private:
+ Lng32 mode;
};
class SQLEXP_LIB_FUNC ExFunctionSoundex: public ex_function_clause {
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/generator/GenItemFunc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenItemFunc.cpp b/core/sql/generator/GenItemFunc.cpp
index 6a60634..f560cbc 100644
--- a/core/sql/generator/GenItemFunc.cpp
+++ b/core/sql/generator/GenItemFunc.cpp
@@ -233,11 +233,32 @@ short BuiltinFunction::codeGen(Generator * generator)
break;
- case ITM_SHA2:
+ case ITM_SHA2_256:
+ case ITM_SHA2_224:
+ case ITM_SHA2_384:
+ case ITM_SHA2_512:
{
+ Lng32 mode = 0;
+ switch (getOperatorType()) {
+ case ITM_SHA2_256:
+ mode = 256;
+ break;
+
+ case ITM_SHA2_224:
+ mode = 224;
+ break;
+
+ case ITM_SHA2_384:
+ mode = 384;
+ break;
+
+ case ITM_SHA2_512:
+ mode = 512;
+ break;
+ }
function_clause =
new(generator->getSpace()) ExFunctionSha2(getOperatorType(),
- attr, space);
+ attr, space, mode);
}
break;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/optimizer/BindItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp
index 23b02aa..c4d21b5 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -3169,6 +3169,10 @@ ItemExpr *BuiltinFunction::bindNode(BindWA *bindWA)
case ITM_SHA1:
case ITM_SHA2:
case ITM_SOUNDEX:
+ case ITM_SHA2_224:
+ case ITM_SHA2_256:
+ case ITM_SHA2_384:
+ case ITM_SHA2_512:
{
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/optimizer/SynthType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/SynthType.cpp b/core/sql/optimizer/SynthType.cpp
index e62c8af..1fb7366 100644
--- a/core/sql/optimizer/SynthType.cpp
+++ b/core/sql/optimizer/SynthType.cpp
@@ -1034,7 +1034,10 @@ const NAType *BuiltinFunction::synthesizeType()
}
break;
- case ITM_SHA2:
+ case ITM_SHA2_256:
+ case ITM_SHA2_224:
+ case ITM_SHA2_384:
+ case ITM_SHA2_512:
{
ValueId vid1 = child(0)->getValueId();
SQLChar c1(ComSqlId::MAX_QUERY_ID_LEN);
@@ -1048,19 +1051,25 @@ const NAType *BuiltinFunction::synthesizeType()
return NULL;
}
- // type cast any params
- ValueId vid = child(0)->getValueId();
- vid.coerceType(NA_NUMERIC_TYPE);
- const NAType &typ2 = child(1)->getValueId().getType();
-
- if (typ2.getTypeQualifier() != NA_NUMERIC_TYPE)
- {
- *CmpCommon::diags() << DgSqlCode(-4045) << DgString0("SHA2");
- return NULL;
+ Lng32 resultLen = 0;
+ switch (getOperatorType()) {
+ case ITM_SHA2_224:
+ resultLen = (224 * 2) / 8;
+ break;
+ case ITM_SHA2_256:
+ resultLen = (256 * 2) / 8;
+ break;
+ case ITM_SHA2_384:
+ resultLen = (384 * 2) / 8;
+ break;
+ case ITM_SHA2_512:
+ resultLen = (512 * 2) / 8;
+ break;
+ default:
+ break;
}
-
retType = new HEAP
- SQLVarChar(1024, typ1.supportsSQLnull());
+ SQLChar(resultLen, typ1.supportsSQLnull());
}
break;
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 060b167..05860ba 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -9695,12 +9695,45 @@ misc_function :
1, $3);
}
- | TOK_SHA2 '(' value_expression, ',', value_expression ')'
+ | TOK_SHA2 '(' value_expression ',' NUMERIC_LITERAL_EXACT_NO_SCALE ')'
{
- $$ = new (PARSERHEAP())
- BuiltinFunction(ITM_SHA2,
- CmpCommon::statementHeap(),
- 2, $3, $5);
+ int mode = atoInt64($5->data());
+ switch (mode) {
+ case 0:
+ case 256:
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA2_256,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ break;
+
+ case 224:
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA2_224,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ break;
+
+ case 384:
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA2_384,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ break;
+
+ case 512:
+ $$ = new (PARSERHEAP())
+ BuiltinFunction(ITM_SHA2_512,
+ CmpCommon::statementHeap(),
+ 1, $3);
+ break;
+
+ default:
+ *SqlParser_Diags << DgSqlCode(-4045) << DgString0("SHA2");
+ YYERROR;
+ break;
+ }
+
}
| TOK_MD5 '(' value_expression ')'
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/e6ab8154/core/sql/regress/compGeneral/EXPECTED006.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED006.SB b/core/sql/regress/compGeneral/EXPECTED006.SB
index 6ff0a64..9e9d9e2 100644
--- a/core/sql/regress/compGeneral/EXPECTED006.SB
+++ b/core/sql/regress/compGeneral/EXPECTED006.SB
@@ -1789,9 +1789,10 @@ Lynn L500
--- 1 row(s) selected.
>>select sha2('the original data', 128) from dual;
-*** ERROR[8428] The argument to function SHA2 is not valid.
+*** ERROR[4045] The operand of function SHA2 must be numeric.
+
+*** ERROR[8822] The statement was not prepared.
---- 0 row(s) selected.
>>select sha2('the original data', 224) from dual;
(EXPR)
[3/4] incubator-trafodion git commit: update the error message for
SHA2
Posted by ry...@apache.org.
update the error message for SHA2
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/34465b7a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/34465b7a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/34465b7a
Branch: refs/heads/master
Commit: 34465b7a385b4cdd0a46933cf0a4beda58a2a27c
Parents: e6ab815
Author: Weiqing Xu <we...@esgyn.cn>
Authored: Sun Nov 27 15:46:30 2016 +0000
Committer: Weiqing Xu <we...@esgyn.cn>
Committed: Sun Nov 27 15:46:30 2016 +0000
----------------------------------------------------------------------
core/sql/optimizer/BindItemExpr.cpp | 1 -
core/sql/parser/sqlparser.y | 2 +-
core/sql/regress/compGeneral/EXPECTED006.SB | 8 ++++----
3 files changed, 5 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/34465b7a/core/sql/optimizer/BindItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp
index c4d21b5..d811efd 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -3167,7 +3167,6 @@ ItemExpr *BuiltinFunction::bindNode(BindWA *bindWA)
case ITM_MD5:
case ITM_CRC32:
case ITM_SHA1:
- case ITM_SHA2:
case ITM_SOUNDEX:
case ITM_SHA2_224:
case ITM_SHA2_256:
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/34465b7a/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 05860ba..11f3067 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -9729,7 +9729,7 @@ misc_function :
break;
default:
- *SqlParser_Diags << DgSqlCode(-4045) << DgString0("SHA2");
+ yyerror("The second operand expects 0, 224, 256, 384 or 512");
YYERROR;
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/34465b7a/core/sql/regress/compGeneral/EXPECTED006.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED006.SB b/core/sql/regress/compGeneral/EXPECTED006.SB
index 9e9d9e2..741b6dc 100644
--- a/core/sql/regress/compGeneral/EXPECTED006.SB
+++ b/core/sql/regress/compGeneral/EXPECTED006.SB
@@ -1706,7 +1706,7 @@ d3d9446802a44259755d38e6d163e820 852952723 b1d5781111d84f7b3fe45a0852e59758cd
>>select SOUNDEX('Jon') from dual;
(EXPR)
-------
+----------
J500
@@ -1714,7 +1714,7 @@ J500
>>select SOUNDEX('Roy') from dual;
(EXPR)
-------
+----------
R000
@@ -1722,7 +1722,7 @@ R000
>>select SOUNDEX('Lynn') from dual;
(EXPR)
-------
+----------
L500
@@ -1789,7 +1789,7 @@ Lynn L500
--- 1 row(s) selected.
>>select sha2('the original data', 128) from dual;
-*** ERROR[4045] The operand of function SHA2 must be numeric.
+*** ERROR[15002] Internal parser error: The second operand expects 0, 224, 256, 384 or 512.
*** ERROR[8822] The statement was not prepared.