You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by hz...@apache.org on 2016/12/23 19:18:25 UTC
[2/7] incubator-trafodion git commit: [TRAFODION-2399] Syntax error
when loading from salted table
[TRAFODION-2399] Syntax error when loading from salted table
This was caused by methods to generate an SQL string literal
from a constant value. In some cases it repeated the character
set name introducer.
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/1417baf4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/1417baf4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/1417baf4
Branch: refs/heads/master
Commit: 1417baf4d15b45dd390c6ff1bfd6078cdf137f53
Parents: 91a809b
Author: Hans Zeller <hz...@apache.org>
Authored: Tue Dec 20 22:26:13 2016 +0000
Committer: Hans Zeller <hz...@apache.org>
Committed: Tue Dec 20 22:26:13 2016 +0000
----------------------------------------------------------------------
core/sql/common/CharType.cpp | 2 +-
core/sql/common/sql_charset_strings.h | 2 ++
core/sql/optimizer/ItemExpr.cpp | 21 ++++++++++++++-------
core/sql/optimizer/ValueDesc.cpp | 6 +++++-
4 files changed, 22 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/1417baf4/core/sql/common/CharType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/common/CharType.cpp b/core/sql/common/CharType.cpp
index 4babc92..299fe56 100644
--- a/core/sql/common/CharType.cpp
+++ b/core/sql/common/CharType.cpp
@@ -167,7 +167,7 @@ NAString CharType::getCharSetName() const
NAString CharType::getCharSetAsPrefix(CharInfo::CharSet cs)
{
- return NAString("_") + CharInfo::getCharSetName(cs);
+ return NAString(SQLCHARSET_INTRODUCER_IN_LITERAL) + CharInfo::getCharSetName(cs);
}
NAString CharType::getCharSetAsPrefix() const
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/1417baf4/core/sql/common/sql_charset_strings.h
----------------------------------------------------------------------
diff --git a/core/sql/common/sql_charset_strings.h b/core/sql/common/sql_charset_strings.h
index d7bc3e1..8a45228 100644
--- a/core/sql/common/sql_charset_strings.h
+++ b/core/sql/common/sql_charset_strings.h
@@ -78,6 +78,8 @@
#define SQLCHARSETSYNONYM_SQL_TEXT "SQL_TEXT"
#define SQLCHARSETSTRING_UNKNOWN "_unknown_"
+#define SQLCHARSET_INTRODUCER_IN_LITERAL "_"
+
#ifndef SQLCOLLATIONSTRING_DEFINED
#define SQLCOLLATIONSTRING_DEFINED 1
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/1417baf4/core/sql/optimizer/ItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ItemExpr.cpp b/core/sql/optimizer/ItemExpr.cpp
index 508ea9f..4f715c2 100644
--- a/core/sql/optimizer/ItemExpr.cpp
+++ b/core/sql/optimizer/ItemExpr.cpp
@@ -10716,13 +10716,18 @@ NAString ConstValue::getConstStr(NABoolean transformNeeded) const
else if(getType()->getTypeQualifier() == NA_CHARACTER_TYPE)
{
CharType* chType = (CharType*)getType();
+ NAString txt;
- // 4/8/96: added the Boolean switch so that displayable
- // and non-displayable version can be differed.
if ( transformNeeded )
- return chType->getCharSetAsPrefix() + getText();
+ txt = getText();
else
- return chType->getCharSetAsPrefix() + getTextForQuery(QUERY_FORMAT);
+ txt = getTextForQuery(QUERY_FORMAT);
+
+ // if result doesn't have a charset specifier already, add one
+ if (txt.index(SQLCHARSET_INTRODUCER_IN_LITERAL) == 0)
+ return txt;
+ else
+ return chType->getCharSetAsPrefix() + txt;
}
else
{
@@ -10800,6 +10805,8 @@ const NAString ConstValue::getText4CacheKey() const
return getText();
}
else {
+ NAString result = getText();
+
// we want to return _charset'strfoo' instead of 'strfoo'.
// This is to fix genesis case 10-040616-0347 "NF: query cache does not
// work properly on || for certain character set". The root cause here
@@ -10808,9 +10815,9 @@ const NAString ConstValue::getText4CacheKey() const
// select ?p1 || _ksc5601'arg' from ...
// select ?p1 || _kanji'arg from ...
// The solution is to make them different via charset prefixes.
- NAString result("_", CmpCommon::statementHeap());
- result += CharInfo::getCharSetName(((CharType*)getType())->getCharSet());
- result += getText();
+ if (result.index(SQLCHARSET_INTRODUCER_IN_LITERAL) != 0)
+ result.prepend(((CharType*)getType())->getCharSetAsPrefix());
+
return result;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/1417baf4/core/sql/optimizer/ValueDesc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ValueDesc.cpp b/core/sql/optimizer/ValueDesc.cpp
index 2fdaa22..b0d77ba 100644
--- a/core/sql/optimizer/ValueDesc.cpp
+++ b/core/sql/optimizer/ValueDesc.cpp
@@ -6691,7 +6691,11 @@ ValueIdList::computeEncodedKey(const TableDesc* tDesc, NABoolean isMaxKey,
// and no inputs, all VEGies should have constants in
// them and should be replaced with those
ie = ie->replaceVEGExpressions(availableValues, availableValues);
- value = ie->evaluate(STMTHEAP);
+ if (ie->getOperatorType() == ITM_CONSTANT)
+ value = static_cast<ConstValue *>(ie);
+ else
+ value = ie->evaluate(STMTHEAP);
+
if ( !value )
return NULL;
} else