[TRAFODION-3087] Add Considerations for *CREATE INDEX Statement* in *Trafodion SQL Reference Manual* and Fix Typos
diff --git a/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp b/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp
index 423b0a6..b4ca5c4 100644
--- a/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp
+++ b/core/conn/odbc/src/odbc/nsksrvrcore/srvrothers.cpp
@@ -5242,6 +5242,8 @@
if (retcode == SQL_ERROR)
{
ERROR_DESC_def *p_buffer = QryCatalogSrvrStmt->sqlError.errorList._buffer;
+ char errNumStr[128] = {0};
+ sprintf(errNumStr, "%d", (int)p_buffer->sqlcode);
strncpy(RequestError, p_buffer->errorText,sizeof(RequestError) -1);
RequestError[sizeof(RequestError) - 1] = '\0';
@@ -5251,7 +5253,7 @@
ODBCMX_SERVER,
srvrGlobal->srvrObjRef,
2,
- p_buffer->sqlcode,
+ errNumStr,
RequestError);
exception_->exception_nr = odbc_SQLSvc_GetSQLCatalogs_ParamError_exn_;
@@ -6533,6 +6535,8 @@
if (retcode == SQL_ERROR)
{
ERROR_DESC_def *p_buffer = QryLobExtractSrvrStmt->sqlError.errorList._buffer;
+ char errNumStr[128] = {0};
+ sprintf(errNumStr, "%d", (int)p_buffer->sqlcode);
strncpy(RequestError, p_buffer->errorText, sizeof(RequestError) - 1);
SendEventMsg(MSG_SQL_ERROR,
@@ -6541,7 +6545,7 @@
ODBCMX_SERVER,
srvrGlobal->srvrObjRef,
2,
- p_buffer->sqlcode,
+ errNumStr,
RequestError);
exception_->exception_nr = odbc_SQLsrvr_ExtractLob_ParamError_exn_;
@@ -6616,6 +6620,9 @@
if (retcode == SQL_ERROR)
{
ERROR_DESC_def * p_buffer = QryLobUpdateSrvrStmt->sqlError.errorList._buffer;
+ char errNumStr[128] = {0};
+ sprintf(errNumStr, "%d", (int)p_buffer->sqlcode);
+
strncpy(RequestError, p_buffer->errorText, sizeof(RequestError) - 1);
SendEventMsg(MSG_SQL_ERROR,
@@ -6624,7 +6631,7 @@
ODBCMX_SERVER,
srvrGlobal->srvrObjRef,
2,
- p_buffer->sqlcode,
+ errNumStr,
RequestError);
exception_->exception_nr = odbc_SQLSvc_UpdateLob_ParamError_exn_;
exception_->u.SQLError.errorList._length = QryLobUpdateSrvrStmt->sqlError.errorList._length;
diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp
index 9e84ac4..67c7471 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -8622,7 +8622,12 @@
ItemExpr *Parameter::bindNode(BindWA *bindWA)
{
if (nodeIsBound())
+ {
+ OperatorTypeEnum opTyp = getOperatorType();
+ // All user inputs are treated as outer references in the current scope.
+ bindWA->getCurrentScope()->addOuterRef(getValueId());
return getValueId().getItemExpr();
+ }
if (bindWA->getCurrentScope()->context()->inTDFunction())
{
//Paramaters and outer references are not supported with rank function.
diff --git a/core/sql/optimizer/ItemExpr.cpp b/core/sql/optimizer/ItemExpr.cpp
index 920d2f4..ace5a84 100644
--- a/core/sql/optimizer/ItemExpr.cpp
+++ b/core/sql/optimizer/ItemExpr.cpp
@@ -3886,23 +3886,7 @@
ItemExpr * DynamicParam::copyTopNode(ItemExpr *derivedNode, CollHeap* outHeap)
{
- ItemExpr *result;
-
- if (derivedNode == NULL) {
- result = new (outHeap) DynamicParam(paramName_, indicatorName_, outHeap);
- ((DynamicParam *) result)->setRowsetSize(rowsetSize_);
- ((DynamicParam *) result)->setRowsetInfo(rowsetInfo_);
- ((DynamicParam *) result)->setParamHeading(heading_);
- ((DynamicParam *) result)->setParamTablename(tablename_);
- // we remember our original dynamic parameter because we
- // must use their valueid at dynamicparam::codegen time
- ((DynamicParam *) result)->setOriginal(this);
- }
-
- else
- result = derivedNode;
-
- return Parameter::copyTopNode(result, outHeap);
+ return this;
}
const NAType * DynamicParam::pushDownType(NAType& desiredType,
diff --git a/core/sql/optimizer/ValueDesc.cpp b/core/sql/optimizer/ValueDesc.cpp
index 45f92e1..0e12ffb 100644
--- a/core/sql/optimizer/ValueDesc.cpp
+++ b/core/sql/optimizer/ValueDesc.cpp
@@ -6382,7 +6382,32 @@
{
short vLen = val.length();
- if ((constType->getTypeQualifier() == NA_NUMERIC_TYPE) &&
+ if (constType->getTypeQualifier() == NA_INTERVAL_TYPE)
+ {
+ // In some code paths, the text may have "INTERVAL 'xxx' <qualifier>"
+ // junk around it so we have to strip that off. (Example: An equality
+ // predicate when query caching has been turned off via
+ // CQD QUERY_CACHE '0'. Another example happens with BETWEEN, whether
+ // or not query caching is turned off. See JIRA TRAFODION-3088 for
+ // that example.)
+ Lng32 start = val.index("'");
+ Lng32 minus = val.index("-");
+ if (start > 0)
+ {
+ Lng32 end = val.index("'", start+1);
+ if (end > 0)
+ {
+ val = val(start+1, (end-start-1));
+ if ((minus > 0) && (minus < start)) // '-' before the string part
+ {
+ // prepend '-' to the output
+ val.prepend('-', 1);
+ }
+ vLen = val.length();
+ }
+ }
+ }
+ else if ((constType->getTypeQualifier() == NA_NUMERIC_TYPE) &&
(((NumericType*)constType)->isExact()) &&
(NOT ((NumericType*)constType)->isBigNum()) &&
(constType->getScale() > 0))