You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by db...@apache.org on 2016/06/01 15:40:44 UTC
[1/2] incubator-trafodion git commit: [TRAFODION-2020] Safer APIs to
manipulate Sql_ParserFlags
Repository: incubator-trafodion
Updated Branches:
refs/heads/master 492f23f6f -> 8b39f2298
[TRAFODION-2020] Safer APIs to manipulate Sql_ParserFlags
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/b7fff131
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/b7fff131
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/b7fff131
Branch: refs/heads/master
Commit: b7fff131c11997de1644ad21a2e7bf4ff5e0c707
Parents: d199362
Author: Dave Birdsall <db...@apache.org>
Authored: Tue May 31 20:28:54 2016 +0000
Committer: Dave Birdsall <db...@apache.org>
Committed: Tue May 31 20:28:54 2016 +0000
----------------------------------------------------------------------
core/sql/parser/SqlParserGlobalsCmn.h | 52 +++++++++++++++++++++++++++++-
core/sql/ustat/hs_globals.cpp | 8 ++---
core/sql/ustat/hs_la.cpp | 11 ++++---
3 files changed, 61 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b7fff131/core/sql/parser/SqlParserGlobalsCmn.h
----------------------------------------------------------------------
diff --git a/core/sql/parser/SqlParserGlobalsCmn.h b/core/sql/parser/SqlParserGlobalsCmn.h
index 0babe43..d72b6c3 100644
--- a/core/sql/parser/SqlParserGlobalsCmn.h
+++ b/core/sql/parser/SqlParserGlobalsCmn.h
@@ -136,6 +136,12 @@ enum SqlParser_Flags_Enum {
inline static ULng32 Get_SqlParser_Flags(ULng32 flagbits)
{ return SqlParser_Flags & flagbits; }
+ // Deprecated; use Or_SqlParser_Flags or the PushAndSetSqlParserFlags
+ // class instead.
+ // This method tends to be error-prone because callers often are
+ // not aware of the different semantics when flagbits are zero.
+ // Oftentimes this method is coded when the caller really wanted
+ // to do a simple assign instead.
inline static void Set_SqlParser_Flags(ULng32 flagbits)
{
if (flagbits)
@@ -144,18 +150,62 @@ enum SqlParser_Flags_Enum {
SqlParser_Flags = 0;
}
+ inline static void Or_SqlParser_Flags(ULng32 flagbits)
+ {
+ SqlParser_Flags |= flagbits;
+ }
+
inline static void Assign_SqlParser_Flags(ULng32 flagbits)
{
SqlParser_Flags = flagbits;
}
- inline static void Reset_SqlParser_Flags(ULng32 flagbits)
+ // Deprecated; use UnOr_SqlParser_Flags or the PushAndSetSqlParserFlags
+ // class instead.
+ // This method tends to be error-prone because callers often are
+ // not aware of the different semantics when flagbits are zero.
+ inline static void Reset_SqlParser_Flags(ULng32 flagbits)
{
if (flagbits)
SqlParser_Flags &= ~flagbits;
else
SqlParser_Flags = 0;
}
+
+ // Turns off the bits given in flagbits. If you want to return
+ // bits to a previous state (whether on or off), use
+ // Assign_SqlParser_Flags or the PushAndSetSqlParserFlags class.
+ inline static void UnOr_SqlParser_Flags(ULng32 flagbits)
+ {
+ SqlParser_Flags &= ~flagbits;
+ }
+
+ // If you simply want to turn on one or more parser flags in the
+ // scope of one method, and then reset those flags to their original
+ // state on exit, use this class. Code a call to the constructor
+ // at the point where you want the flags set. The destructor will
+ // return them to the original state when it is called. When used
+ // as a stack variable this is very convenient; the flags get reset
+ // when the scope is exited. And it is exception-safe.
+ class PushAndSetSqlParserFlags
+ {
+ public:
+
+ PushAndSetSqlParserFlags(ULng32 flagbits) : savedBits_(SqlParser_Flags)
+ {
+ Or_SqlParser_Flags(flagbits);
+ };
+
+ ~PushAndSetSqlParserFlags(void)
+ {
+ Assign_SqlParser_Flags(savedBits_);
+ };
+
+ private:
+
+ ULng32 savedBits_; // the value of SqlParser_Flags at ctor time
+ };
+
#endif
#if defined(SQLPARSERGLOBALS_NADEFAULTS) || defined(SQLPARSERGLOBALSCMN__INITIALIZE)
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b7fff131/core/sql/ustat/hs_globals.cpp
----------------------------------------------------------------------
diff --git a/core/sql/ustat/hs_globals.cpp b/core/sql/ustat/hs_globals.cpp
index 50c15d5..e744c2e 100644
--- a/core/sql/ustat/hs_globals.cpp
+++ b/core/sql/ustat/hs_globals.cpp
@@ -4979,9 +4979,10 @@ Int64 HSGlobalsClass::getInternalSortMemoryRequirements(NABoolean performISForMC
Lng32 HSGlobalsClass::validateIUSWhereClause()
{
Lng32 retcode = 0;
- ULng32 savedParserFlags = Get_SqlParser_Flags(0xFFFFFFFF);
- Set_SqlParser_Flags(PARSING_IUS_WHERE_CLAUSE);
+ // set PARSING_IUS_WHERE_CLAUSE bit in Sql_ParserFlags; return it to
+ // its entry value on exit
+ PushAndSetSqlParserFlags savedParserFlags(PARSING_IUS_WHERE_CLAUSE);
NAString query = "select count(*) from ";
query.append(getTableName(strrchr(user_table->data(), '.')+1, nameSpace));
@@ -5019,9 +5020,6 @@ Lng32 HSGlobalsClass::validateIUSWhereClause()
retcode = diagsArea.mainSQLCODE();
}
- // Restore parser flags to prior settings.
- Set_SqlParser_Flags (savedParserFlags);
-
return retcode;
}
http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b7fff131/core/sql/ustat/hs_la.cpp
----------------------------------------------------------------------
diff --git a/core/sql/ustat/hs_la.cpp b/core/sql/ustat/hs_la.cpp
index 61c66dc..979e87e 100644
--- a/core/sql/ustat/hs_la.cpp
+++ b/core/sql/ustat/hs_la.cpp
@@ -129,9 +129,14 @@ void HSTableDef::setNATable()
if (isVolatile())
corrName.setIsVolatile(TRUE);
Scan scan(corrName, NULL, REL_SCAN, STMTHEAP);
- ULng32 savedParserFlags = Get_SqlParser_Flags(0xFFFFFFFF);
+ ULng32 flagToSet = 0; // don't turn on flag unless next 'if' is true
if (CmpCommon::context()->sqlSession()->volatileSchemaInUse())
- Set_SqlParser_Flags(ALLOW_VOLATILE_SCHEMA_IN_TABLE_NAME);
+ flagToSet = ALLOW_VOLATILE_SCHEMA_IN_TABLE_NAME;
+
+ // set ALLOW_VOLATILE_SCHEMA_IN_TABLE_NAME bit in Sql_ParserFlags
+ // if needed, and return it to its entry value on exit
+ PushAndSetSqlParserFlags savedParserFlags(flagToSet);
+
scan.bindNode(&bindWA);
if (!bindWA.errStatus())
{
@@ -139,8 +144,6 @@ void HSTableDef::setNATable()
HS_ASSERT(naTbl_);
objectType_ = naTbl_->getObjectType();
}
- // Restore parser flags to prior settings.
- Set_SqlParser_Flags (savedParserFlags);
}
void HSSqTableDef::GetLabelInfo(labelDetail detail)
[2/2] incubator-trafodion git commit: Merge [TRAFODION-2020] PR 512
Safer APIs to manipulate Sql_ParserFlags
Posted by db...@apache.org.
Merge [TRAFODION-2020] PR 512 Safer APIs to manipulate Sql_ParserFlags
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/8b39f229
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/8b39f229
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/8b39f229
Branch: refs/heads/master
Commit: 8b39f229864149d0d2f701e74f3f0c0c466cee2b
Parents: 492f23f b7fff13
Author: Dave Birdsall <db...@apache.org>
Authored: Wed Jun 1 15:34:00 2016 +0000
Committer: Dave Birdsall <db...@apache.org>
Committed: Wed Jun 1 15:34:00 2016 +0000
----------------------------------------------------------------------
core/sql/parser/SqlParserGlobalsCmn.h | 52 +++++++++++++++++++++++++++++-
core/sql/ustat/hs_globals.cpp | 8 ++---
core/sql/ustat/hs_la.cpp | 11 ++++---
3 files changed, 61 insertions(+), 10 deletions(-)
----------------------------------------------------------------------