You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by an...@apache.org on 2017/12/13 19:02:33 UTC

[11/12] incubator-trafodion git commit: JIRA TRAFODION-2834 Streamline supported xn access modes

JIRA TRAFODION-2834 Streamline supported xn access modes

traf DTM only supports 'read committed access' for selects
and 'set transaction ' stmts.
With this checkin, only those 2 options will be allowed.
All other access options will return an error.
Read uncommitted access will be treated as read committed.


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/6dd81240
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/6dd81240
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/6dd81240

Branch: refs/heads/master
Commit: 6dd81240697f689ce26b93021d17d4f602044c77
Parents: 0282c85
Author: Anoop Sharma <an...@esgyn.com>
Authored: Sat Dec 9 21:18:13 2017 +0000
Committer: Anoop Sharma <an...@esgyn.com>
Committed: Sat Dec 9 21:18:13 2017 +0000

----------------------------------------------------------------------
 .../jdbc_type2/samples/TransactionMode.java     |     2 +-
 core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp |    20 +-
 core/sql/bin/SqlciErrors.txt                    |     4 +-
 core/sql/comexe/ComQueue.h                      |     2 +-
 core/sql/common/ComTransInfo.cpp                |    24 +-
 core/sql/common/ComTransInfo.h                  |   212 +-
 core/sql/generator/GenExplain.cpp               |    30 +-
 core/sql/generator/GenPreCode.cpp               |     4 +-
 core/sql/generator/GenRelMisc.cpp               |     2 +-
 core/sql/generator/GenRelScan.cpp               |     2 +-
 core/sql/optimizer/BindRelExpr.cpp              |    42 +-
 core/sql/optimizer/Inlining.cpp                 |     6 +-
 core/sql/optimizer/NormRelExpr.cpp              |     4 +-
 core/sql/optimizer/RelCache.cpp                 |     2 +-
 core/sql/optimizer/RelExpr.cpp                  |     4 +-
 core/sql/optimizer/RelMisc.h                    |     2 +-
 core/sql/parser/ParKeyWords.cpp                 |     2 -
 core/sql/parser/SqlParserAux.cpp                |    16 +-
 core/sql/parser/SqlParserAux.h                  |     2 +-
 core/sql/parser/sqlparser.y                     |   144 +-
 core/sql/parser/ulexer.cpp                      |    34 +-
 core/sql/regress/compGeneral/EXPECTED001.SB     |    30 +-
 core/sql/regress/compGeneral/EXPECTEDTOK        |    46 +
 core/sql/regress/compGeneral/EXPECTEDTOK2       |     6 +-
 core/sql/regress/compGeneral/TEST001            |    12 +-
 core/sql/regress/core/EXPECTED020.SB            |     2 +-
 core/sql/regress/core/EXPECTED037.SB            |    22 +-
 core/sql/regress/core/TEST020                   |     2 +-
 core/sql/regress/hive/EXPECTED030               |   621 +-
 core/sql/regress/hive/EXPECTED040               |  2527 +++
 core/sql/regress/qat/eqatdml01                  |   230 +-
 core/sql/regress/qat/eqatdml02                  |   386 +-
 core/sql/regress/qat/eqatdml03                  |   124 +-
 core/sql/regress/qat/eqatdml04                  |   384 +-
 core/sql/regress/qat/eqatdml05                  | 14344 ++++++++---------
 core/sql/regress/qat/eqatdml06                  |  1352 +-
 core/sql/regress/qat/eqatdml07                  |  1930 +--
 core/sql/regress/qat/eqatdml08                  |    50 +-
 core/sql/regress/qat/eqatdml09                  |    54 +-
 core/sql/regress/qat/eqatdml10                  |  3026 ++--
 core/sql/regress/qat/eqatdml11                  |  3026 ++--
 core/sql/regress/qat/eqatdml14                  |   256 +-
 core/sql/regress/qat/qatdml01                   |    34 +-
 core/sql/regress/qat/qatdml02                   |    34 +-
 core/sql/regress/qat/qatdml03                   |    28 +-
 core/sql/regress/qat/qatdml04                   |    58 +-
 core/sql/regress/qat/qatdml05                   |    78 +-
 core/sql/regress/qat/qatdml06                   |    76 +-
 core/sql/regress/qat/qatdml07                   |    42 +-
 core/sql/regress/qat/qatdml08                   |    50 +-
 core/sql/regress/qat/qatdml09                   |    50 +-
 core/sql/regress/qat/qatdml10                   |    66 +-
 core/sql/regress/qat/qatdml11                   |    66 +-
 core/sql/regress/qat/qatdml14                   |    76 +-
 core/sql/regress/seabase/EXPECTED011            |    12 +-
 core/sql/regress/seabase/FILTER034              |    33 +
 core/sql/regress/seabase/TEST025                |     1 +
 core/sql/regress/tools/runregr_privs1.ksh       |     6 +-
 core/sql/regress/tools/runregr_privs2.ksh       |     6 +-
 core/sql/sqlcomp/CmpSeabaseDDLindex.cpp         |     2 +-
 core/sql/ustat/hs_globals.cpp                   |     2 +-
 61 files changed, 16276 insertions(+), 13434 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/conn/jdbc_type2/samples/TransactionMode.java
----------------------------------------------------------------------
diff --git a/core/conn/jdbc_type2/samples/TransactionMode.java b/core/conn/jdbc_type2/samples/TransactionMode.java
index 152145f..905582c 100644
--- a/core/conn/jdbc_type2/samples/TransactionMode.java
+++ b/core/conn/jdbc_type2/samples/TransactionMode.java
@@ -227,7 +227,7 @@ public class TransactionMode
 						// Perform the query within an internally managed jdbcMx transaction
 						// or no transaction when in 'external' transactionMode
 					case 0:
-						query ="select * from " + table + " for browse access";
+						query ="select * from " + table + " for read uncommitted access";
 						System.out.println(PROLOG + "Executing - '" + query + "'");
 						rs = stmt.executeQuery(query);
 						break;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp
----------------------------------------------------------------------
diff --git a/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp b/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp
index 95459a1..a0aaf26 100644
--- a/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp
+++ b/core/conn/odbc/src/odbc/nsksrvr/SrvrConnect.cpp
@@ -5621,7 +5621,7 @@ bool InsertControls(char* sqlString, odbc_SQLSvc_ExecDirect_exc_ *exception_)
 		else if (strnicmp(ControlType,"PLANINSCQS",10) == 0)
 		{
 			ControlQuery[0] = '\0';
-			sprintf(ControlQuery,"SELECT STATEMENT_NAME FROM NEO.PUBLIC_ACCESS_SCHEMA.MXCS_STATEMENT_CONTROLS WHERE STATEMENT_NAME = UPSHIFT('%s') AND CONTROL_TYPE = 2 FOR BROWSE ACCESS", StatementName);
+			sprintf(ControlQuery,"SELECT STATEMENT_NAME FROM NEO.PUBLIC_ACCESS_SCHEMA.MXCS_STATEMENT_CONTROLS WHERE STATEMENT_NAME = UPSHIFT('%s') AND CONTROL_TYPE = 2 FOR READ UNCOMMITTED ACCESS", StatementName);
 			iqqcode = QryControlSrvrStmt->ExecDirect(NULL, ControlQuery, EXTERNAL_STMT, TYPE_SELECT, SQL_ASYNC_ENABLE_OFF, 0);
 			if (iqqcode == SQL_ERROR)
 			{
@@ -5840,7 +5840,7 @@ bool LoadControls(char* sqlString, bool genOrexc, char* genRequestError, odbc_SQ
 		ResetControls(ResetQuery);
 
 		ControlQuery[0] = '\0';
-		sprintf(ControlQuery,"SELECT CONTROL_TEXT FROM NEO.PUBLIC_ACCESS_SCHEMA.MXCS_STATEMENT_CONTROLS where STATEMENT_NAME = UPSHIFT('%s') and CONTROL_TYPE = 1 FOR BROWSE ACCESS", StatementName);
+		sprintf(ControlQuery,"SELECT CONTROL_TEXT FROM NEO.PUBLIC_ACCESS_SCHEMA.MXCS_STATEMENT_CONTROLS where STATEMENT_NAME = UPSHIFT('%s') and CONTROL_TYPE = 1 FOR READ UNCOMMITTED ACCESS", StatementName);
 		iqqcode = QryControlSrvrStmt->ExecDirect(NULL, ControlQuery, EXTERNAL_STMT, TYPE_SELECT, SQL_ASYNC_ENABLE_OFF, 0);
 		if (iqqcode != SQL_SUCCESS)
 		{
@@ -5939,7 +5939,7 @@ bool LoadControls(char* sqlString, bool genOrexc, char* genRequestError, odbc_SQ
 		}
 
 		ControlQuery[0] = '\0';
-		sprintf(ControlQuery,"SELECT CONTROL_TEXT FROM NEO.PUBLIC_ACCESS_SCHEMA.MXCS_STATEMENT_CONTROLS where STATEMENT_NAME = UPSHIFT('%s') and CONTROL_TYPE = 2 ORDER BY CONTROL_SEQUENCE FOR BROWSE ACCESS", StatementName);
+		sprintf(ControlQuery,"SELECT CONTROL_TEXT FROM NEO.PUBLIC_ACCESS_SCHEMA.MXCS_STATEMENT_CONTROLS where STATEMENT_NAME = UPSHIFT('%s') and CONTROL_TYPE = 2 ORDER BY CONTROL_SEQUENCE FOR READ UNCOMMITTED ACCESS", StatementName);
 		iqqcode = QryControlSrvrStmt->ExecDirect(NULL, ControlQuery, EXTERNAL_STMT, TYPE_SELECT, SQL_ASYNC_ENABLE_OFF, 0);
 		if (iqqcode != SQL_SUCCESS)
 		{
@@ -6833,25 +6833,25 @@ bool ChkWSvcCommands(char* wsname, int& retcode, long type)
 	switch (type)
 	{
 	case CHECK_SERVICE:
-		sprintf(ControlQuery,"select service_id from NEO.NWMS_SCHEMA.SERVICES where service_name = \'%s\' for browse access", wsname);
+		sprintf(ControlQuery,"select service_id from NEO.NWMS_SCHEMA.SERVICES where service_name = \'%s\' for read uncommitted access", wsname);
 		break;
 	case CHECK_SERVICEMAX:
-		sprintf(ControlQuery,"select MAX(service_id) from NEO.NWMS_SCHEMA.SERVICES for browse access");
+		sprintf(ControlQuery,"select MAX(service_id) from NEO.NWMS_SCHEMA.SERVICES for read uncommitted access");
 		break;
 	case CHECK_SERVICEPRTY:
-		sprintf(ControlQuery,"select service_priority from NEO.NWMS_SCHEMA.SERVICES  where service_name = \'%s\' for browse access", wsname);
+		sprintf(ControlQuery,"select service_priority from NEO.NWMS_SCHEMA.SERVICES  where service_name = \'%s\' for read uncommitted access", wsname);
 		break;
 //	case CHECK_MAXQUERIES_TOTAL:
-//		sprintf(ControlQuery,"select cast(sum(cast(limit_value as integer)) as integer) from NEO.NWMS_SCHEMA.THRESHOLDS where threshold_type in (0,1) for browse access");
+//		sprintf(ControlQuery,"select cast(sum(cast(limit_value as integer)) as integer) from NEO.NWMS_SCHEMA.THRESHOLDS where threshold_type in (0,1) for read uncommitted access");
 //		break;
 	case CHECK_MAXQUERIES_OTHERS:
-		sprintf(ControlQuery,"select cast(sum(cast(limit_value as integer)) as integer) from NEO.NWMS_SCHEMA.THRESHOLDS where threshold_type in (0,1) and service_id <> %s for browse access", service_id);
+		sprintf(ControlQuery,"select cast(sum(cast(limit_value as integer)) as integer) from NEO.NWMS_SCHEMA.THRESHOLDS where threshold_type in (0,1) and service_id <> %s for read uncommitted access", service_id);
 		break;
 	case CHECK_QUERIES_WAITING:
-		sprintf(ControlQuery,"select limit_value from NEO.NWMS_SCHEMA.THRESHOLDS where threshold_type = 1 and service_id = %s for browse access", service_id);
+		sprintf(ControlQuery,"select limit_value from NEO.NWMS_SCHEMA.THRESHOLDS where threshold_type = 1 and service_id = %s for read uncommitted access", service_id);
 		break;
 	case CHECK_QUERIES_EXECUTING:
-		sprintf(ControlQuery,"select limit_value from NEO.NWMS_SCHEMA.THRESHOLDS where threshold_type = 0 and service_id = %s for browse access", service_id);
+		sprintf(ControlQuery,"select limit_value from NEO.NWMS_SCHEMA.THRESHOLDS where threshold_type = 0 and service_id = %s for read uncommitted access", service_id);
 		break;
 	default:
 		return false;

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/bin/SqlciErrors.txt
----------------------------------------------------------------------
diff --git a/core/sql/bin/SqlciErrors.txt b/core/sql/bin/SqlciErrors.txt
index a6f1dae..4b0389a 100644
--- a/core/sql/bin/SqlciErrors.txt
+++ b/core/sql/bin/SqlciErrors.txt
@@ -514,8 +514,8 @@
 1716 ZZZZZ 99999 BEGINNER MINOR DBADMIN Number of declared formal parameters with SQL parameter style cannot exceed 32.
 1717 ZZZZZ 99999 BEGINNER MINOR DBADMIN Encountered an error while processing a routine definition. Pass through input value with BINARY type cannot be empty.
 1718 ZZZZZ 99999 BEGINNER MINOR DBADMIN Encountered an error while processing a routine definition. File '$0~string0' is empty. A pass through input value with BINARY type cannot be empty.
-
-
+1719 ZZZZZ 99999 BEGINNER MINOR DBADMIN Access Type '$0~string0' is not supported.
+1720 ZZZZZ 99999 BEGINNER MINOR DBADMIN Isolation Level '$0~string0' is not supported.
 1999 ZZZZZ 99999 UUUUUUUU UUUUU UUUUUUU Last Catalog Manager error
 2000 ZZZZZ 99999 UUUUUUUU UUUUU UUUUUUU Error messages for compiler main, IPC, and DEFAULTS table; assertions for optimizer.
 2001 ZZZZZ 99999 ADVANCED MAJOR DIALOUT Error or warning $0~Int0 occurred while opening or reading from DEFAULTS table $1~TableName.  Using $2~String0 values.

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/comexe/ComQueue.h
----------------------------------------------------------------------
diff --git a/core/sql/comexe/ComQueue.h b/core/sql/comexe/ComQueue.h
index e110b49..7659a1b 100644
--- a/core/sql/comexe/ComQueue.h
+++ b/core/sql/comexe/ComQueue.h
@@ -324,7 +324,7 @@ public:
 
   void remove(void * entry);
 
-// To remove the last rrturned entry via getNext() in case of global scan
+// To remove the last returned entry via getNext() in case of global scan
 // of hash queue
   void remove();
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/common/ComTransInfo.cpp
----------------------------------------------------------------------
diff --git a/core/sql/common/ComTransInfo.cpp b/core/sql/common/ComTransInfo.cpp
index 81f1ce9..5ad9afc 100644
--- a/core/sql/common/ComTransInfo.cpp
+++ b/core/sql/common/ComTransInfo.cpp
@@ -49,9 +49,9 @@ short DP2LockFlags::transactionNeeded()
   return (getConsistencyLevel() == READ_UNCOMMITTED) ? 0 : -1;
 }
 
-void StmtLevelAccessOptions::updateAccessOptions(AccessType at, LockMode lm)
+void StmtLevelAccessOptions::updateAccessOptions(TransMode::AccessType at, LockMode lm)
 {
-  if (at != ACCESS_TYPE_NOT_SPECIFIED_)
+  if (at != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
     if (accessType_ < at)
       accessType_ = at;
   
@@ -66,12 +66,12 @@ DP2LockFlags StmtLevelAccessOptions::getDP2LockFlags()
 
   switch (accessType_)
     {
-    case BROWSE_:
+    case TransMode::READ_UNCOMMITTED_ACCESS_:
       flags.setConsistencyLevel(DP2LockFlags::READ_UNCOMMITTED);
       break;
       
-    case ACCESS_TYPE_NOT_SPECIFIED_:
-    case CLEAN_:
+    case TransMode::ACCESS_TYPE_NOT_SPECIFIED_:
+    case TransMode::READ_COMMITTED_ACCESS_:
       flags.setConsistencyLevel(DP2LockFlags::READ_COMMITTED);
       // QSTUFF
       // make sure table scans for embedded deletes or updates
@@ -82,11 +82,7 @@ DP2LockFlags StmtLevelAccessOptions::getDP2LockFlags()
 
       break;
       
-    case STABLE_:
-      flags.setConsistencyLevel(DP2LockFlags::STABLE);
-      break;
-
-    case REPEATABLE_:
+    case TransMode::REPEATABLE_READ_ACCESS_:
       flags.setConsistencyLevel(DP2LockFlags::SERIALIZABLE);
       break;
         
@@ -99,7 +95,7 @@ DP2LockFlags StmtLevelAccessOptions::getDP2LockFlags()
     // while this could be argued either way the advantages for 
     // efficient subscriptions outweight any short commings.
 
-   case SKIP_CONFLICT_:
+    case TransMode::SKIP_CONFLICT_ACCESS_:
       flags.setConsistencyLevel(DP2LockFlags::READ_COMMITTED);
       flags.setSkipLockedRows();
       // makes sure scans for embedded updates or deletes cause 
@@ -317,16 +313,16 @@ void verifyUpdatableTrans(StmtLevelAccessOptions * sAxOpt,
 			  TransMode::IsolationLevel isolationLevelForUpdate,
 			  Lng32 &errCodeA, Lng32 &errCodeB)
 {
-  if (sAxOpt && sAxOpt->accessType() == BROWSE_)
+  if (sAxOpt && sAxOpt->accessType() == TransMode::READ_UNCOMMITTED_ACCESS_)
     errCodeA = -3140;
   else if (((! sAxOpt) ||
-	    (sAxOpt->accessType() == ACCESS_TYPE_NOT_SPECIFIED_)) &&
+	    (sAxOpt->accessType() == TransMode::ACCESS_TYPE_NOT_SPECIFIED_)) &&
            (tm->isolationLevel() == TransMode::READ_UNCOMMITTED_) &&
 	   ((isolationLevelForUpdate == TransMode::IL_NOT_SPECIFIED_) ||
 	    (isolationLevelForUpdate == TransMode::READ_UNCOMMITTED_)))
     errCodeA = -3140;
   else if (((! sAxOpt) ||
-	    (sAxOpt->accessType() == ACCESS_TYPE_NOT_SPECIFIED_)) &&
+	    (sAxOpt->accessType() == TransMode::ACCESS_TYPE_NOT_SPECIFIED_)) &&
            (tm->accessMode() != TransMode::READ_WRITE_) &&
      	   ((isolationLevelForUpdate == TransMode::IL_NOT_SPECIFIED_) ||
     	    (isolationLevelForUpdate == TransMode::READ_UNCOMMITTED_) ||

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/common/ComTransInfo.h
----------------------------------------------------------------------
diff --git a/core/sql/common/ComTransInfo.h b/core/sql/common/ComTransInfo.h
index 9498f39..36af463 100644
--- a/core/sql/common/ComTransInfo.h
+++ b/core/sql/common/ComTransInfo.h
@@ -51,52 +51,6 @@ enum TransStmtType
   SET_TRANSACTION_
 };
 
-
-enum AccessType
-  {
-  // These values are mirrored by enum TransMode::IsolationLevel,
-  // which requires that the values NEVER CHANGE
-  // and that they form an ORDERED SEQUENCE.
-  // 
-  // There are gaps here to allow later addition of intervening lock consistency
-  // values, e.g. CLEAN and STABLE, preserving the ORDERED SEQUENCE.
-  // These values kind-of sort-of match enum DP2LockFlags::ConsistencyLevel.
-  // 
-  // We define the values here only because this enum appears first in the file.
-  //
-  BROWSE_                       = 00,
-
- // QSTUFF
-  // when propagating access options a higher/stronger access type
-  // is overwriting a lower/weaker access type. For now we assume
-  // that skip conflict is between  browse and stable, thus when
-  // somebody requires stable, repeatable or serializable access this will
-  // overwrite the skip conflict access type and skip conflict will not
-  // be able to overwrite repeatable and serializable. 
-
-  // note:: the whole treatment of access types is questionable as sql/mx does 
-  // not really have stable access but only read committed which is not correctly
-  // reflected here and one also must distinguish between skip conflict in an 
-  // update statement where one must always lock selected rows exclusively
-  // which is currently only done with a hack in the binder. Skip conflict in 
-  // that context is to repeatable read as it does not lock a range but only 
-  // the records accessed thus allows now records to be inserted in the ranges
-  // scanned.
-
-  SKIP_CONFLICT_        = 05,
-
-  // since stable really means read committed that looks like a questionable hack
-  // QSTUFF
-
-  CLEAN_                        = 10,
-  STABLE_                       = 11,
-  REPEATABLE_                   = 20,
-  SERIALIZABLE_placeholder_     = 30,   // does not exist in SQL/MP
-  ACCESS_TYPE_NOT_SPECIFIED_    = -1
-  
- 
-};
-
   
 // PROTECTED_ mode allows read operation against the table but prevents
 // writes to it. Currently used with lock table operation only.
@@ -229,85 +183,20 @@ private:
 };
 
 
-////////////////////////////////////////////////////////////////
-// These are the access options that are specified in a SQL
-// statements (FOR BROWSE ACCESS, IN SHARE MODE, etc).
-// This is a Tandem extension. Do HELP from sql/mp sqlci or
-// look at sql/mp manual or SQL/ARK Language spec
-// for details on these options. If these are specified in a
-// query, they override any options specified via a SET 
-// TRANSACTION statement.
-////////////////////////////////////////////////////////////////
-class StmtLevelAccessOptions
-{
- 
-
-public:
-  StmtLevelAccessOptions(AccessType at = ACCESS_TYPE_NOT_SPECIFIED_,
-                         LockMode lm = LOCK_MODE_NOT_SPECIFIED_)
-    : accessType_(at), lockMode_(lm)
-        // QSTUFF
-        ,updateOrDelete_ (FALSE)
-        // QSTUFF
-        ,scanLockForIM_(FALSE)
-  {}
-
-  NABoolean operator==(const StmtLevelAccessOptions &o) const
-  { return accessType_ == o.accessType_ && lockMode_ == o.lockMode_; }
-
-  AccessType& accessType()      { return accessType_; }
-  AccessType accessType() const { return accessType_; }
-  LockMode& lockMode()          { return lockMode_;   }
-
-  NABoolean userSpecified()
-  {
-    return (accessType_ != ACCESS_TYPE_NOT_SPECIFIED_ ||
-            lockMode_   != LOCK_MODE_NOT_SPECIFIED_);
-  }
-  
-  void updateAccessOptions(AccessType at, LockMode lm = LOCK_MODE_NOT_SPECIFIED_);
-
-  // based on the current access options, return the corresponding DP2LockFlags
-  DP2LockFlags getDP2LockFlags();
-
-  // QSTUFF
-  void setUpdateOrDelete (NABoolean u) { updateOrDelete_ = u; };
-  NABoolean isUpdateOrDelete() { return updateOrDelete_; };
-  // QSTUFF
- 
-  void setScanLockForIM(NABoolean u) { scanLockForIM_ = u; };
-  NABoolean scanLockForIM(){ return scanLockForIM_; };
-
-private:
-  AccessType accessType_;
-  LockMode   lockMode_;
-  // QSTUFF
-  NABoolean  updateOrDelete_;
-  // QSTUFF
-
-  //-------------------------------------------------------------------------
-  // This option attribute is set for all scans that are on the left side of
-  // an TSJ "for write" when there is an update or delete and Index Maintenance.
-  // This is needed by the executor to ensure that selected rows are 
-  // appropriately locked, even if scanned from an index, to protect against 
-  // index corruption.  The attribute is propagated to ComTdbDp2SubsOper and 
-  // ComTdbDp2UniqueOper and used during execution to ask DP2 for serializable
-  // locks.
-  //
-  // This is to address genesis solution 10-040802-8483, and also addresses 
-  // solution 10-031111-1215.  The original fix for 10-040802-8483 caused
-  // deadlocks in "refresh MVGROUP" to get error 73 when 
-  // MV_REFRESH_MAX_PARALLELISM > 1 (see solution 10-070322-3467), so it has
-  // been modified to limit the scan nodes that will use serializable locking
-  // to those nodes on the left side of the TSJforWrite.
-  //------------------------------------------------------------------------- 
-  NABoolean  scanLockForIM_;
-};
-
 class TransMode : public NAVersionedObject
 {
 public:
 
+  enum AccessType
+    {
+      READ_UNCOMMITTED_ACCESS_   = 00,
+      SKIP_CONFLICT_ACCESS_      = 05,
+      READ_COMMITTED_ACCESS_     = 10,
+      REPEATABLE_READ_ACCESS_    = 20,
+      SERIALIZABLE_ACCESS_       = 30,
+      ACCESS_TYPE_NOT_SPECIFIED_ = -1
+    };
+
   // These values get stored in generated code, so MUST NOT BE CHANGED.
   // The values must form a logical sequence -- see the xxCompatible()
   // code below, and StmtLevelAccessOptions::updateAccessOptions.
@@ -315,17 +204,18 @@ public:
   // Enum TransMode::IsolationLevel maps to enum AccessType.
   // The static funcs that follow do this mapping, in both directions.
   //
+
   enum IsolationLevel
   {
-    READ_UNCOMMITTED_ = BROWSE_,
-    READ_COMMITTED_   = CLEAN_,
-    REPEATABLE_READ_  = REPEATABLE_,
-    SERIALIZABLE_     = SERIALIZABLE_placeholder_,
+    READ_UNCOMMITTED_ = READ_UNCOMMITTED_ACCESS_,
+    READ_COMMITTED_   = READ_COMMITTED_ACCESS_,
+    REPEATABLE_READ_  = REPEATABLE_READ_ACCESS_,
+    SERIALIZABLE_     = SERIALIZABLE_ACCESS_,
     IL_NOT_SPECIFIED_ = ACCESS_TYPE_NOT_SPECIFIED_
   };
 
   static AccessType     ILtoAT(IsolationLevel il)
-  { return (il == SERIALIZABLE_) ? REPEATABLE_ : (AccessType)il; }
+  { return (il == SERIALIZABLE_) ? REPEATABLE_READ_ACCESS_ : (AccessType)il; }
 
   static IsolationLevel ATtoIL(AccessType at)
   { return (IsolationLevel)at; }
@@ -551,6 +441,76 @@ private:
   UInt32 multiCommitSize_;                                           // 20-23
 };
 
+////////////////////////////////////////////////////////////////
+// These are the access options that are specified in a SQL
+// statements (FOR BROWSE ACCESS, IN SHARE MODE, etc).
+// This is a Tandem extension. Do HELP from sql/mp sqlci or
+// look at sql/mp manual or SQL/ARK Language spec
+// for details on these options. If these are specified in a
+// query, they override any options specified via a SET 
+// TRANSACTION statement.
+////////////////////////////////////////////////////////////////
+class StmtLevelAccessOptions
+{
+public:
+  StmtLevelAccessOptions(TransMode::AccessType at = TransMode::ACCESS_TYPE_NOT_SPECIFIED_,
+                         LockMode lm = LOCK_MODE_NOT_SPECIFIED_)
+    : accessType_(at), lockMode_(lm)
+    ,updateOrDelete_ (FALSE)
+    ,scanLockForIM_(FALSE)
+  {}
+
+  NABoolean operator==(const StmtLevelAccessOptions &o) const
+  { return accessType_ == o.accessType_ && lockMode_ == o.lockMode_; }
+
+  TransMode::AccessType& accessType()      { return accessType_; }
+  TransMode::AccessType accessType() const { return accessType_; }
+  LockMode& lockMode()          { return lockMode_;   }
+
+  NABoolean userSpecified()
+  {
+    return (accessType_ != TransMode::ACCESS_TYPE_NOT_SPECIFIED_ ||
+            lockMode_   != LOCK_MODE_NOT_SPECIFIED_);
+  }
+  
+  void updateAccessOptions(TransMode::AccessType at, 
+                           LockMode lm = LOCK_MODE_NOT_SPECIFIED_);
+
+  // based on the current access options, return the corresponding DP2LockFlags
+  DP2LockFlags getDP2LockFlags();
+
+  // QSTUFF
+  void setUpdateOrDelete (NABoolean u) { updateOrDelete_ = u; };
+  NABoolean isUpdateOrDelete() { return updateOrDelete_; };
+  // QSTUFF
+ 
+  void setScanLockForIM(NABoolean u) { scanLockForIM_ = u; };
+  NABoolean scanLockForIM(){ return scanLockForIM_; };
+
+private:
+  TransMode::AccessType accessType_;
+  LockMode   lockMode_;
+  NABoolean  updateOrDelete_;
+
+  //-------------------------------------------------------------------------
+  // This option attribute is set for all scans that are on the left side of
+  // an TSJ "for write" when there is an update or delete and Index Maintenance.
+  // This is needed by the executor to ensure that selected rows are 
+  // appropriately locked, even if scanned from an index, to protect against 
+  // index corruption.  The attribute is propagated to ComTdbDp2SubsOper and 
+  // ComTdbDp2UniqueOper and used during execution to ask DP2 for serializable
+  // locks.
+  //
+  // This is to address genesis solution 10-040802-8483, and also addresses 
+  // solution 10-031111-1215.  The original fix for 10-040802-8483 caused
+  // deadlocks in "refresh MVGROUP" to get error 73 when 
+  // MV_REFRESH_MAX_PARALLELISM > 1 (see solution 10-070322-3467), so it has
+  // been modified to limit the scan nodes that will use serializable locking
+  // to those nodes on the left side of the TSJforWrite.
+  //------------------------------------------------------------------------- 
+  NABoolean  scanLockForIM_;
+};
+
 // verify that statement-level access and session-level setting are OK.
 // set errCodeA/errCodeB to 0/0 if all OK, else to -3140/-3141.
 void verifyUpdatableTrans(StmtLevelAccessOptions * sAxOpt, 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/generator/GenExplain.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenExplain.cpp b/core/sql/generator/GenExplain.cpp
index 17a8c7a..4707dc8 100644
--- a/core/sql/generator/GenExplain.cpp
+++ b/core/sql/generator/GenExplain.cpp
@@ -553,22 +553,20 @@ FileScan::addSpecificExplainInfo(ExplainTupleMaster *explainTuple,
   
   description += "access_mode: ";
     switch(accessOptions().accessType()) {
-      case BROWSE_:     description += "read uncommitted ";
-                        break;
-      case SKIP_CONFLICT_: description += "skip conflict ";
-                        break;
-      case CLEAN_:      description += "read committed ";
-                        break;
-      case STABLE_:     description += "stable ";
-                        break;
-      case REPEATABLE_: description += "serializable ";
-                        break;
-      case SERIALIZABLE_placeholder_: description += "mx serializable ";
-                        break;
-      case ACCESS_TYPE_NOT_SPECIFIED_: description += "not specified, defaulted to read committed ";
-                        break;
-      default:          description += "unknown ";
-                        break;
+    case TransMode::READ_UNCOMMITTED_ACCESS_:     description += "read uncommitted ";
+      break;
+    case TransMode::SKIP_CONFLICT_ACCESS_: description += "skip conflict ";
+      break;
+    case TransMode::READ_COMMITTED_ACCESS_:      description += "read committed ";
+      break;
+    case TransMode::REPEATABLE_READ_ACCESS_: description += "repeatable read ";
+      break;
+    case TransMode::SERIALIZABLE_: description += "serializable ";
+      break;
+    case TransMode::ACCESS_TYPE_NOT_SPECIFIED_: description += "not specified, defaulted to read committed ";
+      break;
+    default:          description += "unknown ";
+      break;
     }; 
 
   // now get columns_retrieved

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/generator/GenPreCode.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenPreCode.cpp b/core/sql/generator/GenPreCode.cpp
index 40baf03..c016cd5 100644
--- a/core/sql/generator/GenPreCode.cpp
+++ b/core/sql/generator/GenPreCode.cpp
@@ -1854,7 +1854,7 @@ RelExpr * RelRoot::preCodeGen(Generator * generator,
 		doMaxOneRowOpt = FALSE;
 
 	      if ((s->getGroupAttr()->isStream()) ||
-		  (s->accessOptions().accessType() == SKIP_CONFLICT_))
+		  (s->accessOptions().accessType() == TransMode::SKIP_CONFLICT_ACCESS_))
 		{
 		  //doMaxOneInputRowOpt = FALSE;
 		  //doMaxOneRowOpt = FALSE;
@@ -4236,7 +4236,7 @@ RelExpr * GenericUpdate::preCodeGen(Generator * generator,
       generator->setUpdErrorOnError(FALSE);
     }
 
-  if ((accessOptions().accessType() == SKIP_CONFLICT_) ||
+  if ((accessOptions().accessType() == TransMode::SKIP_CONFLICT_ACCESS_) ||
       (getGroupAttr()->isStream()) ||
       (newRecBeforeExprArray().entries() > 0)) // set on rollback
     {

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/generator/GenRelMisc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenRelMisc.cpp b/core/sql/generator/GenRelMisc.cpp
index db46831..160ff0f 100644
--- a/core/sql/generator/GenRelMisc.cpp
+++ b/core/sql/generator/GenRelMisc.cpp
@@ -785,7 +785,7 @@ short RelRoot::codeGen(Generator * generator)
   TransMode * transMode = new(space) TransMode();
   transMode->updateTransMode(generator->getTransMode());
   //
-  if (accessOptions().accessType() != ACCESS_TYPE_NOT_SPECIFIED_)
+  if (accessOptions().accessType() != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
     {
       // "FOR xxx ACCESS" becomes an IsolationLevel, and both IL and AccessMode
       // are set in the transMode

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/generator/GenRelScan.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenRelScan.cpp b/core/sql/generator/GenRelScan.cpp
index 913ec60..013651b 100644
--- a/core/sql/generator/GenRelScan.cpp
+++ b/core/sql/generator/GenRelScan.cpp
@@ -3272,7 +3272,7 @@ short HbaseAccess::codeGen(Generator * generator)
 
   if ((accessOptions().userSpecified()) &&
     //      (accessOptions().getDP2LockFlags().getConsistencyLevel() == DP2LockFlags::READ_UNCOMMITTED))
-      (accessOptions().accessType() == BROWSE_))
+      (accessOptions().accessType() == TransMode::READ_UNCOMMITTED_ACCESS_))
     {
       hbasescan_tdb->setReadUncommittedScan(TRUE);
     }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/optimizer/BindRelExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindRelExpr.cpp b/core/sql/optimizer/BindRelExpr.cpp
index bb40e55..536746e 100644
--- a/core/sql/optimizer/BindRelExpr.cpp
+++ b/core/sql/optimizer/BindRelExpr.cpp
@@ -994,6 +994,9 @@ void castComputedColumnsToAnsiTypes(BindWA *bindWA,
                                     RETDesc *rd,
                                     ValueIdList &compExpr)
 {
+  if (! rd)
+    return;
+
   const ColumnDescList &cols = *rd->getColumnList();
   CollIndex i = cols.entries();
   CMPASSERT(i == compExpr.entries());
@@ -2168,7 +2171,7 @@ RelExpr *BindWA::bindView(const CorrName &viewName,
   // or ignore any accessOpts from the view, for a consistent access model.
 
   if ((CmpCommon::getDefault(ALLOW_ISOLATION_LEVEL_IN_CREATE_VIEW) == DF_OFF) ||
-      (viewRoot->accessOptions().accessType() == ACCESS_TYPE_NOT_SPECIFIED_))
+      (viewRoot->accessOptions().accessType() == TransMode::ACCESS_TYPE_NOT_SPECIFIED_))
     {
       // if cqd is set and view options were explicitely specified,
       // then do not overwrite it with accessOptions.
@@ -2549,7 +2552,7 @@ RETDesc *RelExpr::getRETDesc() const
 {
   if (RETDesc_)
     return RETDesc_;
-  if (getArity() == 1)
+  if ((getArity() == 1) && (child(0)))
     return child(0)->getRETDesc();
   else
     return NULL;
@@ -5802,7 +5805,7 @@ RelExpr *RelRoot::bindNode(BindWA *bindWA)
 
   if (isTrueRoot()) {
 
-    if (child(0)->getGroupAttr()->isEmbeddedUpdateOrDelete()) {
+    if (child(0) && child(0)->getGroupAttr()->isEmbeddedUpdateOrDelete()) {
       // Olt optimization is now supported for embedded updates/deletes (pub/sub
       // thingy) for now.
       oltOptInfo().setOltOpt(TRUE);
@@ -5901,8 +5904,10 @@ RelExpr *RelRoot::bindNode(BindWA *bindWA)
     if (isEmptySelectList())
       setRETDesc(new (bindWA->wHeap()) RETDesc(bindWA));
     else {
-      setRETDesc(child(0)->getRETDesc());
-      getRETDesc()->getValueIdList(compExpr());
+      if (child(0)) {
+        setRETDesc(child(0)->getRETDesc());
+        getRETDesc()->getValueIdList(compExpr());
+      }
     }
   }
   else {
@@ -6011,6 +6016,7 @@ RelExpr *RelRoot::bindNode(BindWA *bindWA)
   // # columns, we make that check in the CallSP::bindNode, so ignore it
   // for now.
   if (isTrueRoot() &&
+      (child(0)) &&
       (child(0)->getOperatorType() != REL_CALLSP &&
       (child(0)->getOperatorType() != REL_COMPOUND_STMT &&
       (child(0)->getOperatorType() != REL_TUPLE &&
@@ -6686,9 +6692,9 @@ RelExpr *RelRoot::bindNode(BindWA *bindWA)
 
   if (bindWA->getHoldableType() == SQLCLIDEV_ANSI_HOLDABLE)
   {
-    if (accessOptions().accessType() != ACCESS_TYPE_NOT_SPECIFIED_)
+    if (accessOptions().accessType() != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
     {
-      if (accessOptions().accessType() == REPEATABLE_)
+      if (accessOptions().accessType() == TransMode::REPEATABLE_READ_ACCESS_)
       {
         *CmpCommon::diags() << DgSqlCode(-4381);
         bindWA->setErrStatus();
@@ -6698,7 +6704,7 @@ RelExpr *RelRoot::bindNode(BindWA *bindWA)
     else
     {
       TransMode::IsolationLevel il=CmpCommon::transMode()->getIsolationLevel();
-      if (CmpCommon::transMode()->ILtoAT(il) == REPEATABLE_ )
+      if (CmpCommon::transMode()->ILtoAT(il) == TransMode::REPEATABLE_READ_ACCESS_)
       {
         *CmpCommon::diags() << DgSqlCode(-4381);
         bindWA->setErrStatus();
@@ -8220,18 +8226,18 @@ RelExpr *Scan::bindNode(BindWA *bindWA)
 
   // See Halloween handling code in GenericUpdate::bindNode
   if (accessOptions().userSpecified()) {
-    if ( accessOptions().accessType() == REPEATABLE_ ||
-         accessOptions().accessType() == STABLE_     ||
-         accessOptions().accessType() == BROWSE_
+    if ( accessOptions().accessType() == TransMode::REPEATABLE_READ_ACCESS_ ||
+         accessOptions().accessType() == TransMode::READ_COMMITTED_ACCESS_  ||
+         accessOptions().accessType() == TransMode::READ_UNCOMMITTED_ACCESS_
       ) {
         naTable->setRefsIncompatibleDP2Halloween();
     }
   }
   else {
     TransMode::IsolationLevel il = CmpCommon::transMode()->getIsolationLevel();
-    if((CmpCommon::transMode()->ILtoAT(il) == REPEATABLE_ ) ||
-       (CmpCommon::transMode()->ILtoAT(il) == STABLE_     ) ||
-       (CmpCommon::transMode()->ILtoAT(il) == BROWSE_     )) {
+    if((CmpCommon::transMode()->ILtoAT(il) == TransMode::REPEATABLE_READ_ACCESS_ ) ||
+       (CmpCommon::transMode()->ILtoAT(il) == TransMode::READ_COMMITTED_ACCESS_  ) ||
+       (CmpCommon::transMode()->ILtoAT(il) == TransMode::READ_UNCOMMITTED_ACCESS_     )) {
         naTable->setRefsIncompatibleDP2Halloween();
     }
   }
@@ -13534,9 +13540,9 @@ RelExpr * GenericUpdate::bindNode(BindWA *bindWA)
         // Now check the transaction isolation level, which can override
         // the access mode.  Note that il was initialized above for the
         // check for an updatable trans, i.e., errors 3140 and 3141.
-        if((CmpCommon::transMode()->ILtoAT(il) == REPEATABLE_ ) ||
-           (CmpCommon::transMode()->ILtoAT(il) == STABLE_     ) ||
-           (CmpCommon::transMode()->ILtoAT(il) == BROWSE_     )) 
+        if((CmpCommon::transMode()->ILtoAT(il) == TransMode::REPEATABLE_READ_ACCESS_ ) ||
+           (CmpCommon::transMode()->ILtoAT(il) == TransMode::READ_COMMITTED_ACCESS_     ) ||
+           (CmpCommon::transMode()->ILtoAT(il) == TransMode::READ_UNCOMMITTED_ACCESS_     )) 
            cannotUseDP2Locks = TRUE;
 
         // Save the result with this GenericUpdate object.  It will be 
@@ -13749,7 +13755,7 @@ NABoolean GenericUpdate::checkForMergeRestrictions(BindWA *bindWA)
     return TRUE;
   }
   
-  if ((accessOptions().accessType() == SKIP_CONFLICT_) ||
+  if ((accessOptions().accessType() == TransMode::SKIP_CONFLICT_ACCESS_) ||
       (getGroupAttr()->isStream()) ||
       (newRecBeforeExprArray().entries() > 0)) // set on rollback
   {

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/optimizer/Inlining.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/Inlining.cpp b/core/sql/optimizer/Inlining.cpp
index 41b5e8e..a3c096a 100644
--- a/core/sql/optimizer/Inlining.cpp
+++ b/core/sql/optimizer/Inlining.cpp
@@ -2576,7 +2576,7 @@ RelExpr* GenericUpdate::createRISubtree(BindWA *bindWA,
   ItemExpr *newScanPredicate = parser.getItemExprTree 
     ((char *)scanPredicateTxt.data());
   newScan->addSelPredTree(newScanPredicate);
-  ((Scan *)newScan)->accessOptions().accessType() = REPEATABLE_;
+  ((Scan *)newScan)->accessOptions().accessType() = TransMode::REPEATABLE_READ_ACCESS_;
   // Do not collect STOI info for security checks.
   newScan->getInliningInfo().setFlags(II_AvoidSecurityChecks);
 
@@ -2670,7 +2670,7 @@ RelExpr* GenericUpdate::createRISubtree(BindWA *bindWA,
   // Create the Root Node.
   RelExpr *newRoot = new (heap) 
     RelRoot(newGrby,
-	    REPEATABLE_,
+	    TransMode::REPEATABLE_READ_ACCESS_,
 	    SHARE_);
 
   ((RelRoot *)newRoot)->setEmptySelectList();
@@ -2711,7 +2711,7 @@ RelExpr* GenericUpdate::inlineRI (BindWA *bindWA,
   if (riSubtree->getOperatorType() != REL_ROOT) {
     riSubtree = new (heap) 
       RelRoot(riSubtree,
-              REPEATABLE_,
+              TransMode::REPEATABLE_READ_ACCESS_,
               SHARE_);
     ((RelRoot *)riSubtree)->setEmptySelectList();
   }

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/optimizer/NormRelExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/NormRelExpr.cpp b/core/sql/optimizer/NormRelExpr.cpp
index 6a4dc4f..781ecc9 100644
--- a/core/sql/optimizer/NormRelExpr.cpp
+++ b/core/sql/optimizer/NormRelExpr.cpp
@@ -7001,7 +7001,7 @@ NABoolean RelRoot::isUpdatableBasic(NABoolean isView,
   if (scan->getOperatorType() != REL_SCAN)
     return FALSE;
 
-  if (scan->accessOptions().accessType() == BROWSE_)    // "read-only table"
+  if (scan->accessOptions().accessType() == TransMode::READ_UNCOMMITTED_ACCESS_)    // "read-only table"
     return FALSE;
 
   TransMode::IsolationLevel il;
@@ -7013,7 +7013,7 @@ NABoolean RelRoot::isUpdatableBasic(NABoolean isView,
     ActiveSchemaDB()->getDefaults().getIsolationLevel
       (il,
        CmpCommon::getDefault(ISOLATION_LEVEL_FOR_UPDATES));
-  if (scan->accessOptions().accessType() == ACCESS_TYPE_NOT_SPECIFIED_ &&
+  if (scan->accessOptions().accessType() == TransMode::ACCESS_TYPE_NOT_SPECIFIED_ &&
       il == TransMode::READ_UNCOMMITTED_)
     return FALSE;
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/optimizer/RelCache.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelCache.cpp b/core/sql/optimizer/RelCache.cpp
index 2496f65..b3ee6da 100644
--- a/core/sql/optimizer/RelCache.cpp
+++ b/core/sql/optimizer/RelCache.cpp
@@ -1007,7 +1007,7 @@ void RelRoot::generateCacheKey(CacheWA &cwa) const
   tmode.updateTransMode(CmpCommon::transMode());
 
   StmtLevelAccessOptions &opts = ((RelRoot*)this)->accessOptions();
-  if (opts.accessType() != ACCESS_TYPE_NOT_SPECIFIED_) {
+  if (opts.accessType() != TransMode::ACCESS_TYPE_NOT_SPECIFIED_) {
     tmode.updateAccessModeFromIsolationLevel
       (TransMode::ATtoIL(opts.accessType()));
     tmode.setStmtLevelAccessOptions();

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/optimizer/RelExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExpr.cpp b/core/sql/optimizer/RelExpr.cpp
index 3ae230d..5a841c7 100644
--- a/core/sql/optimizer/RelExpr.cpp
+++ b/core/sql/optimizer/RelExpr.cpp
@@ -10800,13 +10800,13 @@ RelRoot::RelRoot(RelExpr *input,
     firstNRowsParam_(NULL),
     flags_(0)
 {
-  accessOptions().accessType() = ACCESS_TYPE_NOT_SPECIFIED_;
+  accessOptions().accessType() = TransMode::ACCESS_TYPE_NOT_SPECIFIED_;
   accessOptions().lockMode() = LOCK_MODE_NOT_SPECIFIED_;
   isCIFOn_ = FALSE;
 }
 
 RelRoot::RelRoot(RelExpr *input,
-		 AccessType at,
+		 TransMode::AccessType at,
 		 LockMode lm,
 		 OperatorTypeEnum otype,
 		 ItemExpr *compExpr,

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/optimizer/RelMisc.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelMisc.h b/core/sql/optimizer/RelMisc.h
index 99513c6..d25d21a 100644
--- a/core/sql/optimizer/RelMisc.h
+++ b/core/sql/optimizer/RelMisc.h
@@ -143,7 +143,7 @@ public:
 	  CollHeap *oHeap = CmpCommon::statementHeap());
 
   RelRoot(RelExpr *child,
-	  AccessType at,
+	  TransMode::AccessType at,
 	  LockMode lm,
 	  OperatorTypeEnum otype = REL_ROOT,
 	  ItemExpr *compExpr = NULL,

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/parser/ParKeyWords.cpp
----------------------------------------------------------------------
diff --git a/core/sql/parser/ParKeyWords.cpp b/core/sql/parser/ParKeyWords.cpp
index 2186dd4..f604c23 100644
--- a/core/sql/parser/ParKeyWords.cpp
+++ b/core/sql/parser/ParKeyWords.cpp
@@ -143,7 +143,6 @@ ParKeyWord ParKeyWords::keyWords_[] = {
   ParKeyWord("BOTH",               TOK_BOTH,        ANS_|RESWORD_|MPWORD_),
   ParKeyWord("BREADTH",            IDENTIFIER,      POTANS_|RESWORD_),
   ParKeyWord("BRIEF",              TOK_BRIEF,       NONRESTOKEN_),
-  ParKeyWord("BROWSE",             TOK_BROWSE,      FIRST_|SECOND_|NONRESTOKEN_),
   ParKeyWord("BT",                 TOK_BT,          NONRESTOKEN_),
   ParKeyWord("BUFFER",             TOK_BUFFER,      NONRESTOKEN_),
   ParKeyWord("BUFFERED",           TOK_BUFFERED,    NONRESTOKEN_),
@@ -1043,7 +1042,6 @@ ParKeyWord ParKeyWords::keyWords_[] = {
   ParKeyWord("SQL_VARCHAR",        TOK_VARCHAR,     COMPAQ_|RESWORD_),
   ParKeyWord("SQL_WARNING",        TOK_SQL_WARNING, NONRESTOKEN_),
   ParKeyWord("SQRT",               TOK_SQRT,        NONRESTOKEN_),
-  ParKeyWord("STABLE",             TOK_STABLE,      FIRST_|SECOND_|NONRESTOKEN_),
   ParKeyWord("START",              TOK_START,       COMPAQ_|NONRESWORD_),
 // used in nist618 test
   ParKeyWord("STATE",              TOK_STATE,       COMPAQ_|NONRESWORD_),

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/parser/SqlParserAux.cpp
----------------------------------------------------------------------
diff --git a/core/sql/parser/SqlParserAux.cpp b/core/sql/parser/SqlParserAux.cpp
index 7ef5295..c73d78d 100644
--- a/core/sql/parser/SqlParserAux.cpp
+++ b/core/sql/parser/SqlParserAux.cpp
@@ -556,12 +556,12 @@ void ForUpdateSpec::finalizeUpdatability(RelExpr *top)
 
 
 NABoolean finalizeAccessOptions(RelExpr *top,
-                                AccessType at,
+                                TransMode::AccessType at,
                                 LockMode   lm)
 {
   if (top->getOperatorType() == REL_TUPLE ||
       top->getOperatorType() == REL_TUPLE_LIST) {
-    return (at == ACCESS_TYPE_NOT_SPECIFIED_ && lm == LOCK_MODE_NOT_SPECIFIED_);
+    return (at == TransMode::ACCESS_TYPE_NOT_SPECIFIED_ && lm == LockMode::LOCK_MODE_NOT_SPECIFIED_);
   }
 
   // In case of an INSERT VALUES statement, this is a Tuple node.
@@ -571,8 +571,8 @@ NABoolean finalizeAccessOptions(RelExpr *top,
 
   RelRoot *treeTop = (RelRoot *)top;
 
-  if (at != ACCESS_TYPE_NOT_SPECIFIED_) {
-    if (treeTop->accessOptions().accessType() != ACCESS_TYPE_NOT_SPECIFIED_) {
+  if (at != TransMode::ACCESS_TYPE_NOT_SPECIFIED_) {
+    if (treeTop->accessOptions().accessType() != TransMode::ACCESS_TYPE_NOT_SPECIFIED_) {
       *SqlParser_Diags << DgSqlCode(-3196);
       // Access type cannot be specified more than once.
       return FALSE;	// error
@@ -580,8 +580,8 @@ NABoolean finalizeAccessOptions(RelExpr *top,
     treeTop->accessOptions().accessType() = at;
   }
 
-  if (lm != LOCK_MODE_NOT_SPECIFIED_) {
-    if (treeTop->accessOptions().lockMode() != LOCK_MODE_NOT_SPECIFIED_) {
+  if (lm != LockMode::LOCK_MODE_NOT_SPECIFIED_) {
+    if (treeTop->accessOptions().lockMode() != LockMode::LOCK_MODE_NOT_SPECIFIED_) {
       *SqlParser_Diags << DgSqlCode(-3197);
       // Lock mode cannot be specified more than once.
       return FALSE;	// error
@@ -2685,8 +2685,8 @@ RelExpr * processReturningClause(RelExpr * re, UInt32 returningType)
   
   RelRoot * root = new (PARSERHEAP())
     RelRoot(insert, 
-	    ACCESS_TYPE_NOT_SPECIFIED_, 
-	    LOCK_MODE_NOT_SPECIFIED_, 
+	    TransMode::ACCESS_TYPE_NOT_SPECIFIED_, 
+	    LockMode::LOCK_MODE_NOT_SPECIFIED_, 
 	    REL_ROOT, cr);
   
   if ((insert->child(0)) &&

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/parser/SqlParserAux.h
----------------------------------------------------------------------
diff --git a/core/sql/parser/SqlParserAux.h b/core/sql/parser/SqlParserAux.h
index 7c27ca8..fddfec3 100644
--- a/core/sql/parser/SqlParserAux.h
+++ b/core/sql/parser/SqlParserAux.h
@@ -221,7 +221,7 @@ private:
 
 
 NABoolean finalizeAccessOptions(RelExpr *top,
-                                AccessType at = ACCESS_TYPE_NOT_SPECIFIED_,
+                                TransMode::AccessType at = TransMode::ACCESS_TYPE_NOT_SPECIFIED_,
                                 LockMode   lm = LOCK_MODE_NOT_SPECIFIED_);
 
 // The purpose of this function is to return a pointer to a HostVar object.

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 9e16c20..e0c310e 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -487,8 +487,6 @@ static void enableMakeQuotedStringISO88591Mechanism()
 %token <tokval> TOK_BLOB
 %token <tokval> TOK_BLOCKS
 %token <tokval> TOK_BOTH
-%token <tokval> TOK_BROWSE       	/* Tandem extension */
-%token <tokval> TOK_BROWSE_ACCESS      	/* Tandem extension */
 %token <tokval> TOK_BOOLEAN
 %token <tokval> TOK_BY
 %token <tokval> TOK_BYTEINT             /* TD extension that HP wants to ignore */
@@ -1077,8 +1075,6 @@ static void enableMakeQuotedStringISO88591Mechanism()
 %token <tokval> TOK_SORT                /* Tandem extension non-reserved word */
 %token <tokval> TOK_SORT_KEY
 %token <tokval> TOK_SP_RESULT_SET
-%token <tokval> TOK_STABLE              /* Tandem extension */
-%token <tokval> TOK_STABLE_ACCESS	/* Tandem extension */
 %token <tokval> TOK_STATUS
 %token <tokval> TOK_STDDEV              /* Tandem extension */
 %token <tokval> TOK_STOP                /* Tandem extension */
@@ -1589,7 +1585,7 @@ static void enableMakeQuotedStringISO88591Mechanism()
   StringvalWithCharSet		stringval_with_charset;
 
   action               		*actn_ptr;
-  AccessType                    accesstype;
+  TransMode::AccessType         accesstype;
   ComAnsiNameSpace              nameSpaceEnum;
   ComColumnOrdering 	     	columnOrderingEnum;
   ComCreateViewBehavior		createViewBehaviorEnum;
@@ -6485,7 +6481,7 @@ table_reference : table_name_and_hint
 
                  RelRoot * root = new (PARSERHEAP())
                    RelRoot($3, 
-                           ACCESS_TYPE_NOT_SPECIFIED_, 
+                           TransMode::ACCESS_TYPE_NOT_SPECIFIED_, 
                            LOCK_MODE_NOT_SPECIFIED_, 
                            REL_ROOT);
 
@@ -6520,7 +6516,7 @@ table_reference : table_name_and_hint
 		 
 		 RelRoot * root = new (PARSERHEAP())
 		   RelRoot($3, 
-			   ACCESS_TYPE_NOT_SPECIFIED_, 
+			   TransMode::ACCESS_TYPE_NOT_SPECIFIED_, 
 			   LOCK_MODE_NOT_SPECIFIED_, 
 			   REL_ROOT);
                  $$ = new (PARSERHEAP())
@@ -6635,7 +6631,7 @@ table_reference : table_name_and_hint
                 NAString id("x");
                 RelRoot * root = new (PARSERHEAP())
                   RelRoot(t, 
-                          ACCESS_TYPE_NOT_SPECIFIED_, 
+                          TransMode::ACCESS_TYPE_NOT_SPECIFIED_, 
                           LOCK_MODE_NOT_SPECIFIED_, 
                           REL_ROOT);
                 
@@ -6711,7 +6707,7 @@ upd_stmt_w_acc_type_and_as_clause : '(' update_statement_searched access_type ')
 					     new(PARSERHEAP()) 
 					     RelRoot($2,REL_ROOT,colRef);
 					   
-					   if ($3  != ACCESS_TYPE_NOT_SPECIFIED_)
+					   if ($3  != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 					     update->accessOptions().accessType() = $3;
 					   
 					   $2->child(0)->getGroupAttr()->setEmbeddedIUD(REL_UNARY_UPDATE);
@@ -6745,7 +6741,7 @@ upd_stmt_w_acc_type_and_as_clause_col_list : '(' update_statement_searched acces
 					     new(PARSERHEAP())
 					     RelRoot($2,REL_ROOT,colRef);
 					
-					   if ($3 != ACCESS_TYPE_NOT_SPECIFIED_)
+					   if ($3 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 					     update->accessOptions().accessType() = $3;
 
 					   $2->child(0)->getGroupAttr()->setEmbeddedIUD(REL_UNARY_UPDATE);
@@ -6775,7 +6771,7 @@ upd_stmt_w_acc_type_rtn_list_and_as_clause : '(' update_statement_searched acces
 				      new(PARSERHEAP()) 
 				      RelRoot($2,REL_ROOT,$4);
 				    
-				    if ($3 != ACCESS_TYPE_NOT_SPECIFIED_)
+				    if ($3 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 				      update->accessOptions().accessType() = $3;
 				    
 				    $2->child(0)->getGroupAttr()->setEmbeddedIUD(REL_UNARY_UPDATE);
@@ -6803,7 +6799,7 @@ upd_stmt_w_acc_type_rtn_list_and_as_clause_col_list : '('  update_statement_sear
 				   RelRoot *update =
 				     new(PARSERHEAP()) RelRoot($2,REL_ROOT,$4);
 				   
-				   if ($3 != ACCESS_TYPE_NOT_SPECIFIED_)
+				   if ($3 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 				     update->accessOptions().accessType() = $3;
 				   
 				   $2->child(0)->getGroupAttr()->setEmbeddedIUD(REL_UNARY_UPDATE);
@@ -6841,7 +6837,7 @@ del_stmt_w_acc_type_and_as_clause : '(' delete_statement access_type ')' as_clau
 				   RelRoot *update = 
 				     new(PARSERHEAP()) RelRoot($2,REL_ROOT);
 				   
-				   if ($3 != ACCESS_TYPE_NOT_SPECIFIED_)
+				   if ($3 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 				     update->accessOptions().accessType() = $3;
 				   
 				   // If firstN rows flag is set, then this statement is considered an MTS delete 
@@ -6881,7 +6877,7 @@ del_stmt_w_acc_type_and_as_clause_col_list : '('  delete_statement access_type '
 		      RelRoot *update = 
 			new(PARSERHEAP()) RelRoot($2,REL_ROOT);
 		      
-		      if ($3 != ACCESS_TYPE_NOT_SPECIFIED_)
+		      if ($3 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 			update->accessOptions().accessType() = $3;
 		      
 		      // If firstN rows flag is set, then this statement is considered an MTS delete 
@@ -6922,7 +6918,7 @@ del_stmt_w_acc_type_rtn_list_and_as_clause : '(' delete_statement access_type re
 		      RelRoot *update = 
 			new(PARSERHEAP()) RelRoot($2,REL_ROOT,$4);
 		      
-		      if ($3 != ACCESS_TYPE_NOT_SPECIFIED_)
+		      if ($3 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 			update->accessOptions().accessType() = $3;
 		      
 		      // If firstN rows flag is set, then this statement is considered an MTS delete 
@@ -6963,7 +6959,7 @@ del_stmt_w_acc_type_rtn_list_and_as_clause_col_list : '('  delete_statement acce
 		  RelRoot *update =
 		    new(PARSERHEAP()) RelRoot($2,REL_ROOT, $4);
 		  
-		  if ($3 != ACCESS_TYPE_NOT_SPECIFIED_)
+		  if ($3 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 		    update->accessOptions().accessType() = $3;
 		  
 		  // If firstN rows flag is set, then this statement is considered an MTS delete 
@@ -8212,7 +8208,7 @@ primary :     '(' value_expression ')'
 
 		RelExpr * root_child = getTableExpressionRelExpr(from_clause, where_clause, NULL, NULL, NULL, NULL, NULL);
 		RelRoot *root =  new (PARSERHEAP())
-					    RelRoot(root_child, ACCESS_TYPE_NOT_SPECIFIED_, LOCK_MODE_NOT_SPECIFIED_, REL_ROOT, select_list);
+					    RelRoot(root_child, TransMode::ACCESS_TYPE_NOT_SPECIFIED_, LOCK_MODE_NOT_SPECIFIED_, REL_ROOT, select_list);
 		RelRoot * root1 = finalize(root);
 		$$ = new (PARSERHEAP()) RowSubquery(root1);
 	      }
@@ -13726,46 +13722,68 @@ query_select_list : select_list
 
 
 /* type accesstype */
-//   "[FOR] BROWSE ACCESS" and "[FOR] STABLE ACCESS" are supported for
-//    compatibility with SQL/MP.
-//   "[FOR] CLEAN ACCESS" was removed from here because it was never
-//    part of SQL/MP, and "CLEAN" is not an Ansi keyword.
-access_type :  	TOK_BROWSE_ACCESS			{$$ = BROWSE_;}
-	      | TOK_STABLE_ACCESS			
+access_type:
+	        TOK_REPEATABLE_READ TOK_ACCESS		
                 {
-		  $$ = STABLE_;
-#ifdef _DEBUG
-		  if (getenv("NO_TEST_STABLE"))
-		    $$ = CLEAN_;
-#endif
-		}
-	      | TOK_REPEATABLE_ACCESS			{$$ = REPEATABLE_;}
-	      | TOK_REPEATABLE_READ TOK_ACCESS		{$$ = REPEATABLE_;}
-	      | TOK_SERIALIZABLE_ACCESS			{$$ = REPEATABLE_;}
+                  *SqlParser_Diags << DgSqlCode(-1719)
+                                   << DgString0("REPEATABLE READ");
+                  YYERROR;
+                  
+                  $$ = TransMode::REPEATABLE_READ_ACCESS_;
+                }
+	      | TOK_SERIALIZABLE_ACCESS			
+                {
+                  *SqlParser_Diags << DgSqlCode(-1719)
+                                   << DgString0("SERIALIZABLE");
+                  YYERROR;
 
-	      | TOK_FOR_BROWSE TOK_ACCESS		{$$ = BROWSE_;}
-	      | TOK_FOR_STABLE TOK_ACCESS		
+                  $$ = TransMode::REPEATABLE_READ_ACCESS_;
+                }
+	      | TOK_FOR_REPEATABLE TOK_READ TOK_ACCESS	
                 {
-		  $$ = STABLE_;
-#ifdef _DEBUG
-		  if (getenv("NO_TEST_STABLE"))
-		    $$ = CLEAN_;
-#endif
-		}
-	      | TOK_FOR_REPEATABLE TOK_ACCESS		{$$ = REPEATABLE_;}
-	      | TOK_FOR_REPEATABLE TOK_READ TOK_ACCESS	{$$ = REPEATABLE_;}
-	      | TOK_FOR_SERIALIZABLE TOK_ACCESS		{$$ = REPEATABLE_;}
+                  *SqlParser_Diags << DgSqlCode(-1719)
+                                   << DgString0("REPEATABLE READ");
+                  YYERROR;
 
-	      | TOK_READ TOK_UNCOMMITTED TOK_ACCESS	{$$ = BROWSE_;}
-	      | TOK_READ TOK_COMMITTED TOK_ACCESS	{$$ = CLEAN_;}
-	      | TOK_FOR_READ TOK_UNCOMMITTED TOK_ACCESS	{$$ = BROWSE_;}
-	      | TOK_FOR_READ TOK_COMMITTED TOK_ACCESS	{$$ = CLEAN_;}
+                  $$ = TransMode::REPEATABLE_READ_ACCESS_;
+                }
+	      | TOK_FOR_SERIALIZABLE TOK_ACCESS		
+                {
+                  *SqlParser_Diags << DgSqlCode(-1719)
+                                   << DgString0("SERIALIZABLE");
+                  YYERROR;
 
-	      | TOK_FOR_SKIP TOK_CONFLICT TOK_ACCESS 	{$$ = SKIP_CONFLICT_;}
-	      | TOK_SKIP_CONFLICT_ACCESS             	{$$ = SKIP_CONFLICT_;}
+                  $$ = TransMode::REPEATABLE_READ_ACCESS_;
+                }
+              | TOK_READ TOK_UNCOMMITTED TOK_ACCESS	
+                {
+                  $$ = TransMode::READ_COMMITTED_ACCESS_;
+                }
+	      | TOK_READ TOK_COMMITTED TOK_ACCESS	
+                {
+                  $$ = TransMode::READ_COMMITTED_ACCESS_;
+                }
+	      | TOK_FOR_READ TOK_UNCOMMITTED TOK_ACCESS	
+                {
+                  $$ = TransMode::READ_COMMITTED_ACCESS_;
+                }
+	      | TOK_FOR_READ TOK_COMMITTED TOK_ACCESS	
+                {
+                  $$ = TransMode::READ_COMMITTED_ACCESS_;
+                }
+	      | TOK_FOR_SKIP TOK_CONFLICT TOK_ACCESS 	
+                {
+                  $$ = TransMode::SKIP_CONFLICT_ACCESS_;
+                }
+	      | TOK_SKIP_CONFLICT_ACCESS             	
+                {
+                  $$ = TransMode::SKIP_CONFLICT_ACCESS_;
+                }
 
 	      | /* empty */
-					    {$$ = ACCESS_TYPE_NOT_SPECIFIED_;}
+		{
+                  $$ = TransMode::ACCESS_TYPE_NOT_SPECIFIED_;
+                }
 
 
 /* The following production is an "okay"  way to do things
@@ -14135,8 +14153,22 @@ isolation_level :    TOK_ISOLATION TOK_LEVEL isolation_level_enum
 
 isolation_level_enum : TOK_READ TOK_UNCOMMITTED { $$ = TransMode::READ_UNCOMMITTED_; }
                      | TOK_READ TOK_COMMITTED	{ $$ = TransMode::READ_COMMITTED_; }
-                     | TOK_REPEATABLE_READ	{ $$ = TransMode::REPEATABLE_READ_; }
-                     | TOK_SERIALIZABLE		{ $$ = TransMode::SERIALIZABLE_; }
+                     | TOK_REPEATABLE_READ	
+                     { 
+                       *SqlParser_Diags << DgSqlCode(-1720)
+                                        << DgString0("REPEATABLE READ");
+                       YYERROR;
+                       
+                       $$ = TransMode::REPEATABLE_READ_; 
+                     }
+                     | TOK_SERIALIZABLE		
+                     { 
+                       *SqlParser_Diags << DgSqlCode(-1720)
+                                        << DgString0("SERIALIZABLE");
+                       YYERROR;
+
+                       $$ = TransMode::SERIALIZABLE_; 
+                     }
 
 transaction_access_mode : transaction_access
                           {
@@ -14797,7 +14829,7 @@ dml_query : query_expression order_by_clause access_type
 #ifndef NDEBUG	// To test packing.
                 char* env = getenv("PACKING_FACTOR");
                 if ($2 == NULL && // no ORDER BY specified
-                    $3 == ACCESS_TYPE_NOT_SPECIFIED_ &&
+                    $3 == TransMode::ACCESS_TYPE_NOT_SPECIFIED_ &&
                     $4 == LOCK_MODE_NOT_SPECIFIED_ &&
                     env && atol(env) > 0)
                 {
@@ -28776,14 +28808,14 @@ triggered_after_action: empty   // Empty or any option not listed below
 		{
 		  $$ = finalize($1, FALSE);
 		  RelRoot * treeTopPtr = (RelRoot *)$$;
-		  if ($2 != ACCESS_TYPE_NOT_SPECIFIED_)
+		  if ($2 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 		    treeTopPtr->accessOptions().accessType() = $2;
 		}
 	      | delete_statement  access_type
 		{
 		  $$ = finalize($1, FALSE);
 		  RelRoot * treeTopPtr = (RelRoot *)$$;
-		  if ($2 != ACCESS_TYPE_NOT_SPECIFIED_)
+		  if ($2 != TransMode::ACCESS_TYPE_NOT_SPECIFIED_)
 		    treeTopPtr->accessOptions().accessType() = $2;
 		}
               | signal_statement 
@@ -33299,9 +33331,7 @@ nonreserved_word :      TOK_ABORT
                       | TOK_AREA
 		      | TOK_AUTOABORT
                       | TOK_AUTOMATIC // MV
-                      | TOK_BROWSE
                       | TOK_REPEATABLE
-                      | TOK_STABLE
                       | TOK_SERIALIZABLE
 	        //          | TOK_ANSIVARCHAR  //->nonreserved_datatype   
                       | TOK_ALL_DDL

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/parser/ulexer.cpp
----------------------------------------------------------------------
diff --git a/core/sql/parser/ulexer.cpp b/core/sql/parser/ulexer.cpp
index 65bb59c..8fc8df4 100644
--- a/core/sql/parser/ulexer.cpp
+++ b/core/sql/parser/ulexer.cpp
@@ -2911,28 +2911,22 @@ Int32 yyULexer::yylex(YYSTYPE *lvalp)
                           // retract to end of kwd1.
                           retractToMark(end1);
                           return anSQLMXKeyword(keyWordEntry1->getTokenCode(), lvalp);
-                        case TOK_BROWSE:
 			case TOK_MAXRUNTIME:
                         case TOK_REPEATABLE:
                         case TOK_SERIALIZABLE:
-                        case TOK_STABLE:
                         case TOK_SKIP:				// QSTUFF
                           // un-null-terminate 1st kwd
                           *end1 = holdChar1;
                           doBeforeAction();
                           // FOR <kwd2> is a compound kwd
                           return aCompoundKeyword
-                            (keyWordEntry2->getTokenCode() == TOK_BROWSE
-                             ? TOK_FOR_BROWSE 
-                             : (keyWordEntry2->getTokenCode() == TOK_REPEATABLE
-                                ? TOK_FOR_REPEATABLE
-                                : (keyWordEntry2->getTokenCode() == TOK_STABLE
-                                   ? TOK_FOR_STABLE
-                                   : (keyWordEntry2->getTokenCode() == TOK_SKIP
-                                      ? TOK_FOR_SKIP             // QSTUFF
-                                      : (keyWordEntry2->getTokenCode() == TOK_SERIALIZABLE
-					 ? TOK_FOR_SERIALIZABLE : TOK_FOR_MAXRUNTIME)))), lvalp);
-
+                            (keyWordEntry2->getTokenCode() == TOK_REPEATABLE
+                             ? TOK_FOR_REPEATABLE
+                             : (keyWordEntry2->getTokenCode() == TOK_SKIP
+                                ? TOK_FOR_SKIP             // QSTUFF
+                                : (keyWordEntry2->getTokenCode() == TOK_SERIALIZABLE
+                                   ? TOK_FOR_SERIALIZABLE : TOK_FOR_MAXRUNTIME)), lvalp);
+                      
                         case TOK_READ:
                           // un-null-terminate 1st kwd
                           *end1 = holdChar1;
@@ -2976,13 +2970,6 @@ Int32 yyULexer::yylex(YYSTYPE *lvalp)
                           }
 			}
                       break;
-                    case TOK_BROWSE:
-                      return eitherCompoundOrSimpleKeyword
-                        (keyWordEntry2->getTokenCode() == TOK_ACCESS,
-                         TOK_BROWSE_ACCESS,
-                         keyWordEntry1->getTokenCode(),
-                         end1, holdChar1, lvalp);
-                      break;
                     case TOK_INITIALIZE:
 		      if (keyWordEntry2->getTokenCode() == TOK_MAINTAIN)
 			return eitherCompoundOrSimpleKeyword
@@ -3106,13 +3093,6 @@ Int32 yyULexer::yylex(YYSTYPE *lvalp)
                          keyWordEntry1->getTokenCode(),
                          end1, holdChar1, lvalp);
                       break;
-                    case TOK_STABLE:
-                      return eitherCompoundOrSimpleKeyword
-                        (keyWordEntry2->getTokenCode() == TOK_ACCESS,
-                         TOK_STABLE_ACCESS,
-                         keyWordEntry1->getTokenCode(),
-                         end1, holdChar1, lvalp);
-                      break;
                     case TOK_SKIP:				// QSTUFF
                       if (keyWordEntry2->getTokenCode() == TOK_CONFLICT){
 			// un-null-terminate 1st kwd

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/regress/compGeneral/EXPECTED001.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTED001.SB b/core/sql/regress/compGeneral/EXPECTED001.SB
index cc2a48c..3d24807 100644
--- a/core/sql/regress/compGeneral/EXPECTED001.SB
+++ b/core/sql/regress/compGeneral/EXPECTED001.SB
@@ -131,7 +131,7 @@ DNO          ENO          ENAME                 SALARY        DNAME
 +> intersect
 +>select eno, ename, dno from t022;
 
-ENO          ENAME                 DNO
+ENO          ENAME                 DNO        
 -----------  --------------------  -----------
 
           2  Jones                          33
@@ -153,7 +153,7 @@ ENO          ENAME                 DNO
 +> intersect
 +>select eno, ename, dno from t022 where dno <50;
 
-ENO          ENAME                 DNO
+ENO          ENAME                 DNO        
 -----------  --------------------  -----------
 
           2  Jones                          33
@@ -161,7 +161,7 @@ ENO          ENAME                 DNO
 
 --- 2 row(s) selected.
 >>
->>select * from  t021
+>>select * from  t021 
 +> intersect
 +>select * from  t022;
 
@@ -170,14 +170,14 @@ ENO          ENAME                 DNO
 *** ERROR[8822] The statement was not prepared.
 
 >>
->>select * from
+>>select * from 
 +>(
 +>select eno, ename, dno from t021
 +> intersect
 +>select eno, ename, dno from t022
 +>) ;
 
-ENO          ENAME                 DNO
+ENO          ENAME                 DNO        
 -----------  --------------------  -----------
 
           2  Jones                          33
@@ -187,7 +187,7 @@ ENO          ENAME                 DNO
 --- 3 row(s) selected.
 >>select eno, ename, dno from t021 except select * from t022;
 
-ENO          ENAME                 DNO
+ENO          ENAME                 DNO        
 -----------  --------------------  -----------
 
           1  Smith                          33
@@ -211,30 +211,30 @@ ENO          ENAME                 DNO
 DNO          DNAME                 (EXPR)               
 -----------  --------------------  ---------------------
 
-         55  Production                          1000.00
          33  Sales                               5000.00
          44  Marketing                           4000.00
+         55  Production                          1000.00
 
 --- 3 row(s) selected.
 >>
 >>-- modify the statistics such that the pushed down groupby wins
 >>select dno,dname,sum(salary)
 +>from t01emp rows10000 natural join t01dept rows1000
-+>group by dno,dname for browse access;
++>group by dno,dname;
 
 DNO          DNAME                 (EXPR)               
 -----------  --------------------  ---------------------
 
-         55  Production                          1000.00
          33  Sales                               5000.00
          44  Marketing                           4000.00
+         55  Production                          1000.00
 
 --- 3 row(s) selected.
 >>
 >>-- set showshape off;
 >>
 >>-- exchange join and groupby and add count(*) > 0 clause to the groupby
->>select distinct t01dept.* from t01emp,t01dept for browse access;
+>>select distinct t01dept.* from t01emp,t01dept;
 
 DNO          DNAME                 DREGION    
 -----------  --------------------  -----------
@@ -252,7 +252,7 @@ DNO          DNAME                 DREGION
 >>
 >>select dno,dname,sum(salary), max(dregion)
 +>from t01emp rows10000 natural join t01dept rows1000
-+>group by dno,dname for browse access;
++>group by dno,dname;
 
 DNO          DNAME                 (EXPR)                 (EXPR)     
 -----------  --------------------  ---------------------  -----------
@@ -271,7 +271,7 @@ DNO          DNAME                 (EXPR)                 (EXPR)
 +>from (select eno + dregion, dno, dname, salary
 +>      from t01emp rows10000 natural join t01dept rows1000)
 +>			 as t("eno + dregion",dno,dname,salary)
-+>group by "eno + dregion",dno,dname for browse access;
++>group by "eno + dregion",dno,dname;
 
 eno + dregion         DNO          DNAME                 SAL
 --------------------  -----------  --------------------  ---------------------
@@ -287,7 +287,7 @@ eno + dregion         DNO          DNAME                 SAL
 >>
 >>select dname,sum(salary), max(dregion)
 +>from t01emp rows10000 natural join t01dept rows1000
-+>group by dname for browse access;
++>group by dname;
 
 DNAME                 (EXPR)                 (EXPR)     
 --------------------  ---------------------  -----------
@@ -4435,7 +4435,7 @@ Smith                               2000.00
 +>            join t01emp rows15e4 on rows14e4.eno = rows15e4.eno
 +>            join t01emp rows16e4 on rows15e4.eno = rows16e4.eno
 +>group by rows12e4.eno,rows13e4.eno,rows14e4.eno,rows15e4.eno,rows16e4.eno
-+>for browse access;
++>;
 
 (EXPR)                ENO          ENO          ENO          ENO          ENO
 --------------------  -----------  -----------  -----------  -----------  -----------
@@ -4855,7 +4855,7 @@ LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 
 *** WARNING[6020] Due to query complexity, the query plan generated might be sub-optimal. Consider simplifying the query.
 
-*** WARNING[2053] Optimizer pass two assertion failure (hasEnoughMemory) in file ../optimizer/opt.cpp at line 7063. Attempting to recover and produce a plan.
+*** WARNING[2053] Optimizer pass two assertion failure (hasEnoughMemory) in file ../optimizer/opt.cpp at line 6974. Attempting to recover and produce a plan.
 
 --- SQL command prepared.
 >>

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/regress/compGeneral/EXPECTEDTOK
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTEDTOK b/core/sql/regress/compGeneral/EXPECTEDTOK
new file mode 100644
index 0000000..b39dd41
--- /dev/null
+++ b/core/sql/regress/compGeneral/EXPECTEDTOK
@@ -0,0 +1,46 @@
+sqlparser.y: warning: 73 shift/reduce conflicts [-Wconflicts-sr]
+sqlparser.y: warning: 12 reduce/reduce conflicts [-Wconflicts-rr]
+ 
+nnnn conflicts: 1 shift/reduce nnnn olap_sequence_function: set_function_specification . TOK_OVER '(' opt_olap_part_clause opt_olap_order_clause ')'
+nnnn conflicts: 1 shift/reduce nnnn value_expression: value_expression_sans_collate . collation_option
+nnnn conflicts: 8 shift/reduce nnnn primary: row_subquery .
+nnnn conflicts: 1 shift/reduce nnnn sql_statement: TOK_BEGIN . TOK_DECLARE TOK_SECTION
+nnnn conflicts: 9 shift/reduce nnnn row_subquery: '(' row_subquery . ')'
+nnnn conflicts: 1 reduce/reduce nnnn row_subquery: rel_subquery .
+nnnn conflicts: 1 reduce/reduce nnnn transaction_statement: TOK_BEGIN .
+nnnn conflicts: 1 shift/reduce nnnn show_statement: TOK_SHOWCONTROL showcontrol_type . optional_control_identifier optional_comma_match_clause
+nnnn conflicts: 1 shift/reduce nnnn extended_label_name: TOK_INDEX . label_name
+nnnn conflicts: 1 shift/reduce nnnn table_as_stream_any: table_as_stream .
+nnnn conflicts: 1 shift/reduce nnnn row_subquery: '(' row_subquery . ')'
+nnnn conflicts: 1 shift/reduce nnnn input_hostvar_expression: HOSTVAR .
+nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
+nnnn conflicts: 2 shift/reduce nnnn value_expression_list_comma: value_expression . ',' value_expression
+nnnn conflicts: 1 shift/reduce nnnn value_expression_list_comma: value_expression . ',' value_expression
+nnnn conflicts: 1 shift/reduce nnnn primary: row_subquery .
+nnnn conflicts: 1 shift/reduce nnnn control_statement: TOK_CONTROL TOK_QUERY TOK_SHAPE . query_shape_options query_shape_control
+nnnn conflicts: 1 reduce/reduce nnnn procedure_or_function: TOK_PROCEDURES .
+nnnn conflicts: 1 reduce/reduce nnnn procedure_or_function: TOK_FUNCTIONS .
+nnnn conflicts: 1 shift/reduce nnnn drop_catalog_statement: TOK_DROP TOK_CATALOG . catalog_name extension_drop_behavior
+nnnn conflicts: 1 reduce/reduce nnnn procedure_or_function: TOK_TABLE_MAPPING TOK_FUNCTIONS .
+nnnn conflicts: 13 shift/reduce nnnn query_spec_body: query_select_list table_expression . access_type optional_lock_mode
+nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
+nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
+nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
+nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
+nnnn conflicts: 1 shift/reduce nnnn query_shape_control: shape_identifier .
+nnnn conflicts: 2 shift/reduce, 1 reduce/reduce nnnn query_exp_for_cursor: query_expression . for_update_spec
+nnnn conflicts: 13 shift/reduce nnnn query_spec_body: query_select_list into_clause table_expression . access_type optional_lock_mode
+nnnn conflicts: 1 shift/reduce nnnn query_spec_body: query_select_list table_expression access_type . optional_lock_mode
+nnnn conflicts: 1 shift/reduce nnnn mv_definition: create_mv_keywords ddl_qualified_name optional_view_column_list refresh_type . create_mv_attribute_table_lists mv_initialization_clause optional_query_rewrite optional_create_mv_file_options optional_in_memory_clause as_token query_expression
+nnnn conflicts: 1 shift/reduce nnnn table_name_and_hint: table_name . optimizer_hint hbase_access_options
+nnnn conflicts: 1 shift/reduce nnnn table_reference: table_as_procedure .
+nnnn conflicts: 1 shift/reduce nnnn table_reference: table_as_stream_any .
+nnnn conflicts: 1 shift/reduce nnnn table_reference: table_as_tmudf_function .
+nnnn conflicts: 1 shift/reduce nnnn table_reference: rel_subquery .
+nnnn conflicts: 1 shift/reduce nnnn query_spec_body: query_select_list into_clause table_expression access_type . optional_lock_mode
+nnnn conflicts: 1 shift/reduce nnnn file_attribute_clause: file_attribute_keyword file_attribute_list .
+nnnn conflicts: 1 shift/reduce nnnn id_group: '(' identifier . ')' TOK_TO identifier
+nnnn conflicts: 1 reduce/reduce nnnn table_reference: '(' Front_Of_Insert . Rest_Of_insert_statement ')' as_clause
+nnnn conflicts: 1 shift/reduce nnnn transpose_list: transpose_set .
+nnnn conflicts: 1 shift/reduce nnnn salt_by_clause: TOK_SALT TOK_USING NUMERIC_LITERAL_EXACT_NO_SCALE TOK_PARTITIONS . optional_salt_num_regions optional_salt_column_list
+nnnn conflicts: 1 shift/reduce nnnn pipeline_clause: TOK_PIPELINE '(' pipeline_mv_name_list ')' . pipeline_def_list

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/regress/compGeneral/EXPECTEDTOK2
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/EXPECTEDTOK2 b/core/sql/regress/compGeneral/EXPECTEDTOK2
index 80c5e22..87d8497 100644
--- a/core/sql/regress/compGeneral/EXPECTEDTOK2
+++ b/core/sql/regress/compGeneral/EXPECTEDTOK2
@@ -1,4 +1,4 @@
-sqlparser.y: warning: 72 shift/reduce conflicts [-Wconflicts-sr]
+sqlparser.y: warning: 62 shift/reduce conflicts [-Wconflicts-sr]
 sqlparser.y: warning: 12 reduce/reduce conflicts [-Wconflicts-rr]
  
 nnnn conflicts: 1 shift/reduce nnnn olap_sequence_function: set_function_specification . TOK_OVER '(' opt_olap_part_clause opt_olap_order_clause ')'
@@ -22,14 +22,14 @@ nnnn conflicts: 1 reduce/reduce nnnn procedure_or_function: TOK_PROCEDURES .
 nnnn conflicts: 1 reduce/reduce nnnn procedure_or_function: TOK_FUNCTIONS .
 nnnn conflicts: 1 shift/reduce nnnn drop_catalog_statement: TOK_DROP TOK_CATALOG . catalog_name extension_drop_behavior
 nnnn conflicts: 1 reduce/reduce nnnn procedure_or_function: TOK_TABLE_MAPPING TOK_FUNCTIONS .
-nnnn conflicts: 13 shift/reduce nnnn query_spec_body: query_select_list table_expression . access_type optional_lock_mode
+nnnn conflicts: 8 shift/reduce nnnn query_spec_body: query_select_list table_expression . access_type optional_lock_mode
 nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
 nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
 nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
 nnnn conflicts: 1 reduce/reduce nnnn primary: row_subquery .
 nnnn conflicts: 1 shift/reduce nnnn query_shape_control: shape_identifier .
 nnnn conflicts: 2 shift/reduce, 1 reduce/reduce nnnn query_exp_for_cursor: query_expression . for_update_spec
-nnnn conflicts: 13 shift/reduce nnnn query_spec_body: query_select_list into_clause table_expression . access_type optional_lock_mode
+nnnn conflicts: 8 shift/reduce nnnn query_spec_body: query_select_list into_clause table_expression . access_type optional_lock_mode
 nnnn conflicts: 1 shift/reduce nnnn query_spec_body: query_select_list table_expression access_type . optional_lock_mode
 nnnn conflicts: 1 shift/reduce nnnn mv_definition: create_mv_keywords ddl_qualified_name optional_view_column_list refresh_type . create_mv_attribute_table_lists mv_initialization_clause optional_query_rewrite optional_create_mv_file_options optional_in_memory_clause as_token query_expression
 nnnn conflicts: 1 shift/reduce nnnn table_name_and_hint: table_name . optimizer_hint hbase_access_options

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/regress/compGeneral/TEST001
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/TEST001 b/core/sql/regress/compGeneral/TEST001
index d8f33ca..4dece52 100755
--- a/core/sql/regress/compGeneral/TEST001
+++ b/core/sql/regress/compGeneral/TEST001
@@ -162,12 +162,12 @@ group by dno,dname;
 -- modify the statistics such that the pushed down groupby wins
 select dno,dname,sum(salary)
 from t01emp rows10000 natural join t01dept rows1000
-group by dno,dname for browse access;
+group by dno,dname;
 
 -- set showshape off;
 
 -- exchange join and groupby and add count(*) > 0 clause to the groupby
-select distinct t01dept.* from t01emp,t01dept for browse access;
+select distinct t01dept.* from t01emp,t01dept;
 
 -- won't push down, aggregate function references both tables
 -- (later, add a rewrite rule for groupby that eliminates max(region))
@@ -176,7 +176,7 @@ select distinct t01dept.* from t01emp,t01dept for browse access;
 
 select dno,dname,sum(salary), max(dregion)
 from t01emp rows10000 natural join t01dept rows1000
-group by dno,dname for browse access;
+group by dno,dname;
 
 
 -- can't push down, groupby column "eno + dregion" references both tables
@@ -186,13 +186,13 @@ select "eno + dregion",dno,dname,sum(salary) as sal
 from (select eno + dregion, dno, dname, salary
       from t01emp rows10000 natural join t01dept rows1000)
 			 as t("eno + dregion",dno,dname,salary)
-group by "eno + dregion",dno,dname for browse access;
+group by "eno + dregion",dno,dname;
 
 -- can't push down, groupby columns don't cover t01dept.key
 
 select dname,sum(salary), max(dregion)
 from t01emp rows10000 natural join t01dept rows1000
-group by dname for browse access;
+group by dname;
 
 -- set showshape off;
 
@@ -225,7 +225,7 @@ from t01emp t1 join t01emp rows12e4 on t1.eno <> rows12e4.eno
             join t01emp rows15e4 on rows14e4.eno = rows15e4.eno
             join t01emp rows16e4 on rows15e4.eno = rows16e4.eno
 group by rows12e4.eno,rows13e4.eno,rows14e4.eno,rows15e4.eno,rows16e4.eno
-for browse access;
+;
 
 -- set showshape off;
 

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/regress/core/EXPECTED020.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/core/EXPECTED020.SB b/core/sql/regress/core/EXPECTED020.SB
index 41440e0..61689a3 100644
--- a/core/sql/regress/core/EXPECTED020.SB
+++ b/core/sql/regress/core/EXPECTED020.SB
@@ -640,7 +640,7 @@ TRAFODION_SCAN
 >>-- work.  
 >>#ifMX
 >>explain options 'f' select * from TAB1 where col1 < 15
-+> for serializable access;
++> for read committed access;
 
 LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
 ---- ---- ---- --------------------  --------  --------------------  ---------

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/regress/core/EXPECTED037.SB
----------------------------------------------------------------------
diff --git a/core/sql/regress/core/EXPECTED037.SB b/core/sql/regress/core/EXPECTED037.SB
index af2239b..c5c1e28 100755
--- a/core/sql/regress/core/EXPECTED037.SB
+++ b/core/sql/regress/core/EXPECTED037.SB
@@ -75,7 +75,7 @@
 >>invoke table_name;
 
 -- Definition of Trafodion table TRAFODION.SCH.TABLE_NAME
--- Definition current  Tue Jul 19 01:27:42 2016
+-- Definition current  Thu Dec  7 05:50:27 2017
 
   (
     SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
@@ -224,7 +224,7 @@
 >>invoke system_name;
 
 -- Definition of Trafodion table TRAFODION.SCH.SYSTEM_NAME
--- Definition current  Tue Jul 19 01:27:44 2016
+-- Definition current  Thu Dec  7 05:50:32 2017
 
   (
     SYSKEY                           LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE
@@ -2860,7 +2860,7 @@ SELECT TRAILING TRAILING from (values(0)) TRAILING(TRAILING);
 
 *** ERROR[15001] A syntax error occurred at or before: 
 SELECT UNIQUE UNIQUE from (values(0)) UNIQUE(UNIQUE);
-            ^ (13 characters from start of SQL statement)
+                   ^ (20 characters from start of SQL statement)
 
 *** ERROR[8822] The statement was not prepared.
 
@@ -2870,7 +2870,7 @@ SELECT UNIQUE UNIQUE from (values(0)) UNIQUE(UNIQUE);
 
 *** ERROR[15001] A syntax error occurred at or before: 
 SELECT UPDATE UPDATE from (values(0)) UPDATE(UPDATE);
-            ^ (13 characters from start of SQL statement)
+                   ^ (20 characters from start of SQL statement)
 
 *** ERROR[8822] The statement was not prepared.
 
@@ -4383,12 +4383,7 @@ SELECT DUAL DUAL from (values(0)) DUAL(DUAL);
 >>-- Expect SYNTAX error - A matching pair
 >>prepare s1 from SELECT BROWSE ACCESS from (values(0)) ACCESS(BROWSE);
 
-*** ERROR[15001] A syntax error occurred at or before: 
-SELECT BROWSE ACCESS from (values(0)) ACCESS(BROWSE);
-                   ^ (20 characters from start of SQL statement)
-
-*** ERROR[8822] The statement was not prepared.
-
+--- SQL command prepared.
 >>
 >>-- Expect success
 >>prepare s1 from SELECT BROWSE BROWSE from (values(0)) BROWSE(BROWSE);
@@ -4763,12 +4758,7 @@ SELECT SKIP CONFLICT from (values(0)) CONFLICT(SKIP);
 >>-- Expect SYNTAX error - A matching pair
 >>prepare s1 from SELECT STABLE ACCESS from (values(0)) ACCESS(STABLE);
 
-*** ERROR[15001] A syntax error occurred at or before: 
-SELECT STABLE ACCESS from (values(0)) ACCESS(STABLE);
-                   ^ (20 characters from start of SQL statement)
-
-*** ERROR[8822] The statement was not prepared.
-
+--- SQL command prepared.
 >>
 >>-- Expect success
 >>prepare s1 from SELECT STABLE BROWSE from (values(0)) BROWSE(STABLE);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/6dd81240/core/sql/regress/core/TEST020
----------------------------------------------------------------------
diff --git a/core/sql/regress/core/TEST020 b/core/sql/regress/core/TEST020
index 20c5388..82937b8 100755
--- a/core/sql/regress/core/TEST020
+++ b/core/sql/regress/core/TEST020
@@ -411,7 +411,7 @@ operator
 -- work.  
 #ifMX
 explain options 'f' select * from TAB1 where col1 < 15
- for serializable access;
+ for read committed access;
 #ifMX
 
 --QUERY 20