Merge remote branch 'origin/pr/1712/head' into merge_1712
diff --git a/core/sql/cli/Cli.cpp b/core/sql/cli/Cli.cpp
index 9e14307..3d5f033 100644
--- a/core/sql/cli/Cli.cpp
+++ b/core/sql/cli/Cli.cpp
@@ -10529,9 +10529,9 @@
       cliRC = cqdCliInterface->holdAndSetCQD("traf_no_dtm_xn", "ON");
     }
 
-  Lng32 numTries = 0;
+  Lng32 numTries = 0, maxRetryNum = sga->getSGRetryNum();
   NABoolean isOk = FALSE;
-  while ((NOT isOk) && (numTries < 10))
+  while ((NOT isOk) && (numTries < maxRetryNum))
     {
       if (startLocalXn)
         {
@@ -10598,8 +10598,11 @@
         }
       
       numTries++;
-      
-      DELAY(100 + numTries*25);
+      Lng32 delayTime = 100 + numTries*25 + rand()%10; 
+      if( delayTime < 1000)   //MAX is 1 second
+          DELAY(delayTime);
+      else
+          DELAY( 900 + rand() % 100);
     }
 
     // could not update it after 10 tries. Return error.
diff --git a/core/sql/common/SequenceGeneratorAttributes.h b/core/sql/common/SequenceGeneratorAttributes.h
index 2220781..714f38e 100644
--- a/core/sql/common/SequenceGeneratorAttributes.h
+++ b/core/sql/common/SequenceGeneratorAttributes.h
@@ -80,7 +80,8 @@
     sgCache_(psgCache),
     sgNextValue_(psgNextValue),
     sgEndValue_(psgEndValue),
-    sgRedefTime_(psgRedefTime)
+    sgRedefTime_(psgRedefTime),
+    sgRetryNum_(100)
   {}
 
       
@@ -98,7 +99,8 @@
     sgCache_(0),
     sgNextValue_(0),
     sgEndValue_(0),
-    sgRedefTime_(0)
+    sgRedefTime_(0),
+    sgRetryNum_(100)
       {}
   
   // copy ctor
@@ -117,7 +119,8 @@
     sgCache_(sga.sgCache_),
     sgNextValue_(sga.sgNextValue_),
     sgEndValue_(sga.sgEndValue_),
-    sgRedefTime_(sga.sgRedefTime_)
+    sgRedefTime_(sga.sgRedefTime_),
+    sgRetryNum_(100)
       {}
   
   // ---------------------------------------------------------------------
@@ -138,6 +141,11 @@
   const Int64                      &getSGNextValue()   const     { return sgNextValue_; }
   const Int64                      &getSGEndValue()   const     { return sgEndValue_; }
   const Int64                      &getSGRedefTime() const     { return sgRedefTime_; }
+  const UInt32			&getSGRetryNum() const     { return sgRetryNum_; }
+
+  void setSGRetryNum(const UInt32 v) 
+  { sgRetryNum_ = v; }
+
   void setSGStartValue(const Int64 psgStartValue)
   { sgStartValue_= psgStartValue; }
 
@@ -205,6 +213,7 @@
   Int64                        sgNextValue_;
   Int64                        sgEndValue_;
   Int64                        sgRedefTime_;
+  UInt32			sgRetryNum_;
 }; // class SequenceGeneratorAttributes
 
 #endif  /* SEQUENCEGENERATORATTRIBUTES_H */
diff --git a/core/sql/executor/ExExeUtilCli.cpp b/core/sql/executor/ExExeUtilCli.cpp
index 1c827f6..434e4dd 100644
--- a/core/sql/executor/ExExeUtilCli.cpp
+++ b/core/sql/executor/ExExeUtilCli.cpp
@@ -46,8 +46,8 @@
   : numEntries_(numEntries)
 {
   
-   ex_assert( numEntries <= MAX_OUTPUT_ENTRIES, "try to fetch more than max rows allowed");
-  
+   ex_assert( numEntries <= MAX_OUTPUT_ENTRIES, "try to fetch more than max columns allowed");
+
    for (Int32 i = 0; i < numEntries_; i++)
     {
       data_[i] = NULL;
diff --git a/core/sql/executor/ExExeUtilGet.cpp b/core/sql/executor/ExExeUtilGet.cpp
index b54674e..b9d4c68 100644
--- a/core/sql/executor/ExExeUtilGet.cpp
+++ b/core/sql/executor/ExExeUtilGet.cpp
@@ -298,6 +298,7 @@
   {" where (c.component_uid=o.component_uid) "},
   {"   and (o.component_uid=p.component_uid) "},
   {"   and (o.operation_code=p.operation_code) "},
+  {"   and (o.is_system <> 'U') "},
   {"   and (c.component_name='%s') %s "},
   {" order by 1 "},
   {" ; "}
@@ -1716,34 +1717,6 @@
       break;
     }
 
-   // if user has DML_SELECT, can perform object operations
-   case ComTdbExeUtilGetMetadataInfo::CATALOGS_:
-   case ComTdbExeUtilGetMetadataInfo::SCHEMAS_IN_CATALOG_:
-   case ComTdbExeUtilGetMetadataInfo::VIEWS_IN_CATALOG_:
-   case ComTdbExeUtilGetMetadataInfo::SEQUENCES_IN_CATALOG_:
-   case ComTdbExeUtilGetMetadataInfo::TABLES_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::INDEXES_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::VIEWS_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::LIBRARIES_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::PROCEDURES_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::SEQUENCES_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::FUNCTIONS_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::TABLE_FUNCTIONS_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::OBJECTS_IN_SCHEMA_:
-   case ComTdbExeUtilGetMetadataInfo::INDEXES_ON_TABLE_:
-   case ComTdbExeUtilGetMetadataInfo::VIEWS_ON_TABLE_:
-   case ComTdbExeUtilGetMetadataInfo::VIEWS_ON_VIEW_:
-   case ComTdbExeUtilGetMetadataInfo::OBJECTS_ON_TABLE_:
-   case ComTdbExeUtilGetMetadataInfo::PARTITIONS_FOR_TABLE_:
-   case ComTdbExeUtilGetMetadataInfo::PARTITIONS_FOR_INDEX_:
-   case ComTdbExeUtilGetMetadataInfo::TABLES_IN_VIEW_:
-   case ComTdbExeUtilGetMetadataInfo::VIEWS_IN_VIEW_:
-   case ComTdbExeUtilGetMetadataInfo::OBJECTS_IN_VIEW_:
-    {
-      if (componentPrivileges.hasSQLPriv(ComUser::getCurrentUser(),SQLOperation::DML_SELECT,true))
-        return FALSE;
-      break;
-    }
    default:
      break;
   }
diff --git a/core/sql/exp/ExpSeqGen.cpp b/core/sql/exp/ExpSeqGen.cpp
index 849760b..203f071 100644
--- a/core/sql/exp/ExpSeqGen.cpp
+++ b/core/sql/exp/ExpSeqGen.cpp
@@ -50,6 +50,7 @@
 {
   fetchNewRange_ = TRUE;
   cliInterfaceArr_ = NULL;
+  retryNum_ = 100; //default retry times
 }
 
 short SeqGenEntry::fetchNewRange(SequenceGeneratorAttributes &inSGA)
@@ -61,6 +62,8 @@
   sga = inSGA;
   if (sga.getSGCache() == 0)
     sga.setSGCache(1); 
+
+  sga.setSGRetryNum(getRetryNum());
   cliRC = SQL_EXEC_SeqGenCliInterface(&cliInterfaceArr_, &sga);
   if (cliRC < 0)
     return (short)cliRC;
@@ -143,6 +146,8 @@
       sgQueue()->insert((char*)&hashVal, sizeof(hashVal), sge);
     }
 
+  sge->setRetryNum(getRetryNum());
+
   return sge;
 }
 
diff --git a/core/sql/exp/ExpSeqGen.h b/core/sql/exp/ExpSeqGen.h
index 3db3ab0..6e3f7a5 100644
--- a/core/sql/exp/ExpSeqGen.h
+++ b/core/sql/exp/ExpSeqGen.h
@@ -55,6 +55,9 @@
 
   Int64 getSGObjectUID() { return sgUID_; }
 
+  void setRetryNum(UInt32 n) { retryNum_ = n; }
+  UInt32 getRetryNum() { return retryNum_ ; }
+
  private:
   short fetchNewRange(SequenceGeneratorAttributes &inSGA);
 
@@ -68,6 +71,8 @@
   Int64 cachedCurrValue_;
 
   void * cliInterfaceArr_;
+
+  UInt32 retryNum_;
 };
 
 class SequenceValueGenerator : public NABasicObject
@@ -80,11 +85,15 @@
 
   HashQueue * sgQueue() { return sgQueue_;}
   CollHeap * getHeap() { return heap_; }
+  void setRetryNum(UInt32 n) { retryNum_ = n; }
+  UInt32 getRetryNum() { return retryNum_; }
 
  private:
   CollHeap * heap_;
 
   HashQueue * sgQueue_;
+
+  UInt32 retryNum_;
 };
 
 
diff --git a/core/sql/exp/exp_function.cpp b/core/sql/exp/exp_function.cpp
index 1b47f8f..b04995d 100644
--- a/core/sql/exp/exp_function.cpp
+++ b/core/sql/exp/exp_function.cpp
@@ -736,6 +736,7 @@
 						 Space * space)
   : ex_function_clause(oper_type, 1, attr, space),
     sga_(sga),
+    retryNum_(),
     flags_(0)
 {
 };
@@ -7622,6 +7623,7 @@
   char * result =  op_data[0];
 
   SequenceValueGenerator * seqValGen = getExeGlobals()->seqGen();
+  seqValGen->setRetryNum(getRetryNum());
   Int64 seqVal = 0;
   if (isCurr())
     rc = seqValGen->getCurrSeqVal(sga_, seqVal);
diff --git a/core/sql/exp/exp_function.h b/core/sql/exp/exp_function.h
index b4031ad..c67cf84 100644
--- a/core/sql/exp/exp_function.h
+++ b/core/sql/exp/exp_function.h
@@ -4055,6 +4055,10 @@
 
   NABoolean isCurr() { return ((flags_ & IS_CURR) != 0); }
 
+  void setRetryNum(UInt32 n) { retryNum_ = n; }
+
+  UInt32 getRetryNum() { return retryNum_; }
+
  private:
 enum
   {
@@ -4064,7 +4068,8 @@
   SequenceGeneratorAttributes sga_;
 
   UInt32 flags_;
-  char filler1_[4];
+
+  UInt32 retryNum_;
   // ---------------------------------------------------------------------
 };
 
diff --git a/core/sql/generator/GenItemFunc.cpp b/core/sql/generator/GenItemFunc.cpp
index 4faff64..ac6d21c 100644
--- a/core/sql/generator/GenItemFunc.cpp
+++ b/core/sql/generator/GenItemFunc.cpp
@@ -2889,6 +2889,8 @@
      *naTable_->getSGAttributes(),
      space);
 
+  sv->setRetryNum(CmpCommon::getDefaultLong(TRAF_SEQUENCE_RETRY_TIMES));
+
   if (cacheSize > 0)
     ((SequenceGeneratorAttributes*)naTable_->getSGAttributes())->setSGCache(origCacheSize);
 
diff --git a/core/sql/regress/compGeneral/EXPECTED042 b/core/sql/regress/compGeneral/EXPECTED042
index 1cd8b5f..e90380e 100644
--- a/core/sql/regress/compGeneral/EXPECTED042
+++ b/core/sql/regress/compGeneral/EXPECTED042
@@ -1,9 +1,9 @@
 >>showstats for table t042_orderline on ol_o_id detail;
 
 Detailed Histogram data for Table TRAFODION.ORDERENTRY.T042_ORDERLINE
-Table ID: 8379103414832633643
+Table ID: 3587850068614533656
 
-Hist ID:    1428267625
+Hist ID:    1404295272
 Column(s):  OL_O_ID
 Total Rows: 10
 Total UEC:  4
@@ -1759,7 +1759,7 @@
 >>-- test compile time
 >>
 >>sh more /proc/loadavg  | cut -d' ' -f 1-3 | sed -e 's/^/System load: /' >> LOG042;
-System load: 1.39 2.74 2.71
+System load: 2.75 2.02 1.56
 >>sh grep "model name" /proc/cpuinfo | head -1 | cut -d '@' -f 2 | sed -e 's/^/CPU frequency: /' >> LOG042;
 CPU frequency: model name	: Intel Core Processor (Haswell)
 >>set statistics on;
@@ -1767,10 +1767,10 @@
 
 --- SQL command prepared.
 
-Start Time             2018/03/22 01:04:54.921227
-End Time               2018/03/22 01:04:54.924930
-Elapsed Time                      00:00:00.003703
-Compile Time                      00:00:00.003703
+Start Time             2018/08/27 16:40:52.450248
+End Time               2018/08/27 16:40:52.453421
+Elapsed Time                      00:00:00.003173
+Compile Time                      00:00:00.003173
 Execution Time                    00:00:00.000000
 
 
@@ -1801,10 +1801,10 @@
 
 --- SQL command prepared.
 
-Start Time             2018/03/22 01:04:55.115150
-End Time               2018/03/22 01:04:55.117539
-Elapsed Time                      00:00:00.002389
-Compile Time                      00:00:00.002389
+Start Time             2018/08/27 16:40:52.648361
+End Time               2018/08/27 16:40:52.651112
+Elapsed Time                      00:00:00.002751
+Compile Time                      00:00:00.002751
 Execution Time                    00:00:00.000000
 
 
@@ -1952,29 +1952,29 @@
 NUM_HITS    NUM_PARAMS  (EXPR)      (EXPR)
 ----------  ----------  ----------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
-         0           1  ====QUERY:  select is_audited, num_salt_partns, row_format, flags from TRAFODION."_MD_".TABLES where table_uid = 8379103414832633643 for read committed access                                                      
+         0           1  ====QUERY:  select is_audited, num_salt_partns, row_format, flags from TRAFODION."_MD_".TABLES where table_uid = 3587850068614533656 for read committed access                                                      
          0           2  ====QUERY:  select column_name, column_number, column_class, fs_data_type, column_size, column_precision, column_scale, datetime_start_field, datetime_end_field, trim(is_upshifted), column_flags, nullable, trim(c
-         0           3  ====QUERY:  select column_name, column_number, keyseq_number, ordering, cast(0 as int not null)  from TRAFODION."_MD_".KEYS where object_uid = 8379103414832633643 and nonkeycol = 0 for read committed access order
+         0           3  ====QUERY:  select column_name, column_number, keyseq_number, ordering, cast(0 as int not null)  from TRAFODION."_MD_".KEYS where object_uid = 3587850068614533656 and nonkeycol = 0 for read committed access order
          0           4  ====QUERY:  select object_uid, object_owner, schema_owner, flags, create_time from TRAFODION."_MD_".OBJECTS where catalog_name = 'TRAFODION' and schema_name = 'ORDERENTRY' and object_name = 'DESCRIBE__'  and obje
          0           4  ====QUERY:  select object_uid, object_owner, schema_owner, flags, create_time from TRAFODION."_MD_".OBJECTS where catalog_name = 'TRAFODION' and schema_name = '_MD_' and object_name = 'OBJECTS'  and object_type =
          0           5  ====QUERY:  select object_uid, object_owner, schema_owner, flags, create_time from TRAFODION."_MD_".OBJECTS where catalog_name = 'TRAFODION' and schema_name = 'ORDERENTRY' and object_name = 'T042_ORDERLINE'  and 
-         1           1  ====QUERY:  select is_audited, num_salt_partns, row_format, flags from TRAFODION."_MD_".TABLES where table_uid = 8379103414832637810 for read committed access                                                      
+         1           1  ====QUERY:  select is_audited, num_salt_partns, row_format, flags from TRAFODION."_MD_".TABLES where table_uid = 3587850068614538557 for read committed access                                                      
          1           1  ====QUERY:  select trim(O.catalog_name || '.' || '"' || O.schema_name || '"' || '.' || '"' || O.object_name || '"' ) constr_name, trim(O2.catalog_name || '.' || '"' || O2.schema_name || '"' || '.' || '"' || O2.ob
          1           2  ====QUERY:  select column_name, column_number, column_class, fs_data_type, column_size, column_precision, column_scale, datetime_start_field, datetime_end_field, trim(is_upshifted), column_flags, nullable, trim(c
-         1           2  ====QUERY:  select column_name, column_number, keyseq_number, ordering , cast(0 as int not null) from TRAFODION."_MD_".KEYS where object_uid = 8379103414832633687 for read committed access order by keyseq_number 
-         1           3  ====QUERY:  select column_name, column_number, keyseq_number, ordering, cast(0 as int not null)  from TRAFODION."_MD_".KEYS where object_uid = 8379103414832637810 and nonkeycol = 0 for read committed access order
+         1           2  ====QUERY:  select column_name, column_number, keyseq_number, ordering , cast(0 as int not null) from TRAFODION."_MD_".KEYS where object_uid = 3587850068614533750 for read committed access order by keyseq_number 
+         1           3  ====QUERY:  select column_name, column_number, keyseq_number, ordering, cast(0 as int not null)  from TRAFODION."_MD_".KEYS where object_uid = 3587850068614538557 and nonkeycol = 0 for read committed access order
          1           5  ====QUERY:  select object_uid, object_owner, schema_owner, flags, create_time from TRAFODION."_MD_".OBJECTS where catalog_name = 'TRAFODION' and schema_name = 'ORDERENTRY' and object_name = 'T042_T1'  and object_
-         2           1  ====QUERY:  SELECT COMPONENT_UID, OPERATION_CODE, GRANTEE_ID, GRANTOR_ID, GRANTEE_NAME, GRANTOR_NAME, GRANT_DEPTH FROM TRAFODION."_PRIVMGR_MD_".COMPONENT_PRIVILEGES WHERE COMPONENT_UID = 1 AND OPERATION_CODE IN (
-         2           1  ====QUERY:  SELECT COMPONENT_UID, OPERATION_CODE, GRANTEE_ID, GRANTOR_ID, GRANTEE_NAME, GRANTOR_NAME, GRANT_DEPTH FROM TRAFODION."_PRIVMGR_MD_".COMPONENT_PRIVILEGES WHERE COMPONENT_UID = 1 AND OPERATION_CODE IN (
+         2           1  ====QUERY:  SELECT COMPONENT_UID, OPERATION_CODE, GRANTEE_ID, GRANTOR_ID, GRANTEE_NAME, GRANTOR_NAME, GRANT_DEPTH FROM TRAFODION."_PRIVMGR_MD_".COMPONENT_PRIVILEGES WHERE COMPONENT_UID = 1 AND GRANTEE_ID IN (1000
+         2           1  ====QUERY:  SELECT COMPONENT_UID, OPERATION_CODE, GRANTEE_ID, GRANTOR_ID, GRANTEE_NAME, GRANTOR_NAME, GRANT_DEPTH FROM TRAFODION."_PRIVMGR_MD_".COMPONENT_PRIVILEGES WHERE COMPONENT_UID = 1 AND GRANTEE_ID IN (3333
          2           1  ====QUERY:  SELECT HISTOGRAM_ID, COLUMN_NUMBER, COLCOUNT, INTERVAL_COUNT, ROWCOUNT, TOTAL_UEC, JULIANTIMESTAMP(STATS_TIME), LOW_VALUE, HIGH_VALUE, JULIANTIMESTAMP(READ_TIME), READ_COUNT, SAMPLE_SECS, COL_SECS, SA
          2           1  ====QUERY:  SELECT HISTOGRAM_ID, INTERVAL_NUMBER, INTERVAL_ROWCOUNT, INTERVAL_UEC, INTERVAL_BOUNDARY, CAST(STD_DEV_OF_FREQ AS DOUBLE PRECISION), V1, V2, V5 FROM TRAFODION.ORDERENTRY.SB_HISTOGRAM_INTERVALS WHERE T
          2           1  ====QUERY:  SELECT OBJECT_UID, OBJECT_NAME, OBJECT_TYPE, GRANTEE_ID, GRANTEE_NAME, GRANTEE_TYPE, GRANTOR_ID, GRANTOR_NAME, GRANTOR_TYPE, PRIVILEGES_BITMAP, GRANTABLE_BITMAP FROM TRAFODION."_PRIVMGR_MD_".OBJECT_PR
-         2           1  ====QUERY:  SELECT object_uid,object_name,grantee_id,grantee_name,grantor_id,grantor_name,column_number,privileges_bitmap,grantable_bitmap FROM TRAFODION."_PRIVMGR_MD_".COLUMN_PRIVILEGES where object_uid = 837910
-         2           1  ====QUERY:  select check_option, is_updatable, is_insertable from TRAFODION."_MD_".VIEWS where view_uid = 8379103414832633643 for read committed access                                                             
+         2           1  ====QUERY:  SELECT object_uid,object_name,grantee_id,grantee_name,grantor_id,grantor_name,column_number,privileges_bitmap,grantable_bitmap FROM TRAFODION."_PRIVMGR_MD_".COLUMN_PRIVILEGES where object_uid = 358785
+         2           1  ====QUERY:  select check_option, is_updatable, is_insertable from TRAFODION."_MD_".VIEWS where view_uid = 3587850068614533656 for read committed access                                                             
          2           2  ====QUERY:  select O.catalog_name, O.schema_name, O.object_name, I.keytag, I.is_unique, I.is_explicit, I.key_colcount, I.nonkey_colcount, T.num_salt_partns, T.row_format, I.index_uid from TRAFODION."_MD_".INDEXES
          2           3  ====QUERY:  select O.object_name, C.constraint_type, C.col_count, C.constraint_uid, C.enforced, C.flags from TRAFODION."_MD_".OBJECTS O, TRAFODION."_MD_".TABLE_CONSTRAINTS C where O.catalog_name = 'TRAFODION' and
-         2           3  ====QUERY:  select octet_length(text), text from TRAFODION."_MD_".TEXT where text_uid = 8379103414832633643 and text_type = 2 and sub_id = 0 for read committed access order by seq_num                             
-         3           3  ====QUERY:  select octet_length(text), text from TRAFODION."_MD_".TEXT where text_uid = 8379103414832637810 and text_type = 2 and sub_id = 0 for read committed access order by seq_num                             
+         2           3  ====QUERY:  select octet_length(text), text from TRAFODION."_MD_".TEXT where text_uid = 3587850068614533656 and text_type = 2 and sub_id = 0 for read committed access order by seq_num                             
+         3           3  ====QUERY:  select octet_length(text), text from TRAFODION."_MD_".TEXT where text_uid = 3587850068614538557 and text_type = 2 and sub_id = 0 for read committed access order by seq_num                             
         12           4  ====QUERY:  select object_uid, object_owner, schema_owner, flags, create_time from TRAFODION."_MD_".OBJECTS where catalog_name = 'TRAFODION' and schema_name = '_MD_' and object_name = 'TABLES'  and object_type = 
 
 --- 24 row(s) selected.
@@ -2115,8 +2115,8 @@
          2              1               0
          2              1               0
          2              1               1
-         2              1              10
-         2              1              10
+         2              1               2
+         2              1               2
          2              2               3
          2              3               0
          3              3               0
diff --git a/core/sql/regress/privs1/EXPECTED132 b/core/sql/regress/privs1/EXPECTED132
index 7a60061..e56bc0a 100644
--- a/core/sql/regress/privs1/EXPECTED132
+++ b/core/sql/regress/privs1/EXPECTED132
@@ -344,7 +344,7 @@
 >>create index t132t1_ndx1 on t132t1 (c2) no populate;
 
 --- SQL operation complete.
->>drop index t132t2_ndx1;
+>>cleanup index t132t2_ndx1;
 
 --- SQL operation complete.
 >>create index t132t2_ndx1 on t132t2 (c2) no populate;
@@ -404,7 +404,7 @@
 >>create index t132t1_ndx1 on t132t1 (c2) no populate;
 
 --- SQL operation complete.
->>drop index t132t2_ndx1;
+>>cleanup index t132t2_ndx1;
 
 --- SQL operation complete.
 >>create index t132t2_ndx1 on t132t2 (c2) no populate;
@@ -412,7 +412,7 @@
 --- SQL operation complete.
 >>
 >>
->>-- if user belongs to DB__ROOTROLE, has DML privileges, so can populate indexes
+>>-- if user belongs to DB__ROOTROLE, DB__ROOTROLE does not have DML privileges
 >>grant role DB__ROOTROLE to sql_user2;
 
 --- SQL operation complete.
@@ -424,10 +424,18 @@
 >>
 >>populate index t132t1_ndx1 on t132t1;
 
---- SQL operation complete.
+*** ERROR[4481] The user does not have SELECT privilege on table or view TRAFODION.T132SCH.T132T1.
+
+*** ERROR[4481] The user does not have INSERT privilege on table or view TRAFODION.T132SCH.T132T1.
+
+--- SQL operation failed with errors.
 >>populate index t132t2_ndx1 on t132t2;
 
---- SQL operation complete.
+*** ERROR[4481] The user does not have SELECT privilege on table or view TRAFODION.T132SCH.T132T2.
+
+*** ERROR[4481] The user does not have INSERT privilege on table or view TRAFODION.T132SCH.T132T2.
+
+--- SQL operation failed with errors.
 >>
 >>changeuser db__root;
 >>obey TEST132(popindex_check_reset);
@@ -443,7 +451,7 @@
 (EXPR)              
 --------------------
 
-                   8
+                   0
 
 --- 1 row(s) selected.
 >>select count(*) from table (index_table t132t2_ndx1);
@@ -451,7 +459,7 @@
 (EXPR)              
 --------------------
 
-                   8
+                   0
 
 --- 1 row(s) selected.
 >>
@@ -461,7 +469,7 @@
 >>create index t132t1_ndx1 on t132t1 (c2) no populate;
 
 --- SQL operation complete.
->>drop index t132t2_ndx1;
+>>cleanup index t132t2_ndx1;
 
 --- SQL operation complete.
 >>create index t132t2_ndx1 on t132t2 (c2) no populate;
@@ -527,7 +535,7 @@
 >>create index t132t1_ndx1 on t132t1 (c2) no populate;
 
 --- SQL operation complete.
->>drop index t132t2_ndx1;
+>>cleanup index t132t2_ndx1;
 
 --- SQL operation complete.
 >>create index t132t2_ndx1 on t132t2 (c2) no populate;
diff --git a/core/sql/regress/privs1/EXPECTED137 b/core/sql/regress/privs1/EXPECTED137
index 208beb0..127963f 100755
--- a/core/sql/regress/privs1/EXPECTED137
+++ b/core/sql/regress/privs1/EXPECTED137
@@ -922,108 +922,67 @@
 --- SQL operation complete.
 >>showddl component sql_operations;
 
-REGISTER COMPONENT SQL_OPERATIONS SYSTEM DETAIL 'Component for SQL operations';
+REGISTER COMPONENT SQL_OPERATIONS SYSTEM DETAIL
+  'System component SQL_OPERATIONS';
 
 CREATE COMPONENT PRIVILEGE ALTER AS 'A0' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to alter database objects';
+  'Allow grantee to perform ALTER operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE ALTER_ROUTINE_ACTION AS 'AA' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to alter routine actions';
-
--- GRANT COMPONENT PRIVILEGE "ALTER_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "ALTER_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE ALTER_TRIGGER AS 'AG' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter triggers';
-
--- GRANT COMPONENT PRIVILEGE "ALTER_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "ALTER_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE ALTER_SCHEMA AS 'AH' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to alter schemas';
+  'Allow grantee to perform ALTER_SCHEMA operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_LIBRARY AS 'AL' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter libraries';
+  DETAIL 'Allow grantee to perform ALTER_LIBRARY operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_SEQUENCE AS 'AQ' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter sequence generators';
+  DETAIL 'Allow grantee to perform ALTER_SEQUENCE operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_SEQUENCE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_SEQUENCE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_ROUTINE AS 'AR' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter routines';
+  DETAIL 'Allow grantee to perform ALTER_ROUTINE operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_TABLE AS 'AT' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to alter tables';
+  'Allow grantee to perform ALTER_TABLE operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_VIEW AS 'AV' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to alter views';
+  'Allow grantee to perform ALTER_VIEW operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE ALTER_SYNONYM AS 'AY' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter synonyms';
-
--- GRANT COMPONENT PRIVILEGE "ALTER_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "ALTER_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE CREATE AS 'C0' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to create database objects';
+  'Allow grantee to perform CREATE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE CREATE_ROUTINE_ACTION AS 'CA' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to create routine actions';
-
--- GRANT COMPONENT PRIVILEGE "CREATE_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "CREATE_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE CREATE_CATALOG AS 'CC' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create catalogs';
-
--- GRANT COMPONENT PRIVILEGE "CREATE_CATALOG" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "CREATE_CATALOG" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE CREATE_TRIGGER AS 'CG' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create triggers';
-
--- GRANT COMPONENT PRIVILEGE "CREATE_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "CREATE_TRIGGER" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE CREATE_SCHEMA AS 'CH' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create schemas';
+  DETAIL 'Allow grantee to perform CREATE_SCHEMA operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_SCHEMA" ON "SQL_OPERATIONS" TO "PUBLIC";
@@ -1031,321 +990,216 @@
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_INDEX AS 'CI' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to create indexes';
+  'Allow grantee to perform CREATE_INDEX operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_INDEX" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_INDEX" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_LIBRARY AS 'CL' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create libraries';
+  DETAIL 'Allow grantee to perform CREATE_LIBRARY operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_LIBRARY" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE COMMENT AS 'CO' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to comment on objects and columns';
+  'Allow grantee to perform COMMENT operation';
 
 -- GRANT COMPONENT PRIVILEGE "COMMENT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "COMMENT" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_PROCEDURE AS 'CP' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create procedures';
+  DETAIL 'Allow grantee to perform CREATE_PROCEDURE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_PROCEDURE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_PROCEDURE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_SEQUENCE AS 'CQ' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create sequence generators';
+  DETAIL 'Allow grantee to perform CREATE_SEQUENCE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_SEQUENCE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_SEQUENCE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_ROUTINE AS 'CR' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create routines';
+  DETAIL 'Allow grantee to perform CREATE_ROUTINE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_ROUTINE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_TABLE AS 'CT' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to create tables';
+  'Allow grantee to perform CREATE_TABLE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_VIEW AS 'CV' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to create views';
+  'Allow grantee to perform CREATE_VIEW operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE CREATE_SYNONYM AS 'CY' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create synonyms';
-
--- GRANT COMPONENT PRIVILEGE "CREATE_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "CREATE_SYNONYM" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE DROP AS 'D0' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop database objects';
+  'Allow grantee to perform DROP operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE DROP_ROUTINE_ACTION AS 'DA' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to drop routine actions';
-
--- GRANT COMPONENT PRIVILEGE "DROP_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DROP_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DROP_CATALOG AS 'DC' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop catalogs';
-
--- GRANT COMPONENT PRIVILEGE "DROP_CATALOG" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DROP_CATALOG" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DROP_TRIGGER AS 'DG' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop triggers';
-
--- GRANT COMPONENT PRIVILEGE "DROP_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DROP_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE DROP_SCHEMA AS 'DH' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop schemas';
+  'Allow grantee to perform DROP_SCHEMA operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_INDEX AS 'DI' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop indexes';
+  'Allow grantee to perform DROP_INDEX operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_INDEX" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_INDEX" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_LIBRARY AS 'DL' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop libraries';
+  'Allow grantee to perform DROP_LIBRARY operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_PROCEDURE AS 'DP' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to drop procedures';
+  DETAIL 'Allow grantee to perform DROP_PROCEDURE operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_PROCEDURE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_PROCEDURE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_SEQUENCE AS 'DQ' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to drop sequence generators';
+  DETAIL 'Allow grantee to perform DROP_SEQUENCE operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_SEQUENCE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_SEQUENCE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_ROUTINE AS 'DR' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop routines';
+  'Allow grantee to perform DROP_ROUTINE operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_TABLE AS 'DT' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop tables';
+  'Allow grantee to perform DROP_TABLE operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_VIEW AS 'DV' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop views';
+  'Allow grantee to perform DROP_VIEW operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE DROP_SYNONYM AS 'DY' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop synonyms';
-
--- GRANT COMPONENT PRIVILEGE "DROP_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DROP_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE MANAGE AS 'M0' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to manage all SQL Operations';
+  'Allow grantee to perform MANAGE operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_COMPONENTS AS 'MC' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to manage components';
+  DETAIL 'Allow grantee to perform MANAGE_COMPONENTS operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_COMPONENTS" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_COMPONENTS" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_LIBRARY AS 'ML' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to manage libraries';
+  DETAIL 'Allow grantee to perform MANAGE_LIBRARY operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_LIBRARY" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_PRIVILEGES AS 'MP' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to manage privileges on SQL objects';
+  DETAIL 'Allow grantee to perform MANAGE_PRIVILEGES operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_PRIVILEGES" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_PRIVILEGES" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_ROLES AS 'MR' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to manage roles';
+  'Allow grantee to perform MANAGE_ROLES operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_ROLES" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_ROLES" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_STATISTICS AS 'MS' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to show and update statistics';
+  DETAIL 'Allow grantee to perform MANAGE_STATISTICS operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_STATISTICS" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_STATISTICS" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_LOAD AS 'MT' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to perform LOAD and UNLOAD commands';
+  'Allow grantee to perform MANAGE_LOAD operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_LOAD" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_LOAD" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_USERS AS 'MU' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to manage users';
+  'Allow grantee to perform MANAGE_USERS operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_USERS" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_USERS" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE DML_DELETE AS 'PD' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to delete rows';
+CREATE COMPONENT PRIVILEGE DML_SELECT_METADATA AS 'PM' ON SQL_OPERATIONS SYSTEM
+  DETAIL 'Allow grantee to perform DML_SELECT_METADATA operation';
 
--- GRANT COMPONENT PRIVILEGE "DML_DELETE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_DELETE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_EXECUTE AS 'PE' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to execute functions';
-
--- GRANT COMPONENT PRIVILEGE "DML_EXECUTE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_EXECUTE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_USAGE AS 'PG' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to use libraries and sequences';
-
--- GRANT COMPONENT PRIVILEGE "DML_USAGE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_USAGE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_INSERT AS 'PI' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to insert rows';
-
--- GRANT COMPONENT PRIVILEGE "DML_INSERT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_INSERT" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_REFERENCES AS 'PR' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to reference columns';
-
--- GRANT COMPONENT PRIVILEGE "DML_REFERENCES" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_REFERENCES" ON "SQL_OPERATIONS" TO
+-- GRANT COMPONENT PRIVILEGE "DML_SELECT_METADATA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
+GRANT COMPONENT PRIVILEGE "DML_SELECT_METADATA" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE DML_SELECT AS 'PS' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to select rows';
-
--- GRANT COMPONENT PRIVILEGE "DML_SELECT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_SELECT" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_UPDATE AS 'PU' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to update rows';
-
--- GRANT COMPONENT PRIVILEGE "DML_UPDATE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_UPDATE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE QUERY_ACTIVATE AS 'QA' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to activate queries';
+  DETAIL 'Allow grantee to perform QUERY_ACTIVATE operation';
 
 -- GRANT COMPONENT PRIVILEGE "QUERY_ACTIVATE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "QUERY_ACTIVATE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE QUERY_CANCEL AS 'QC' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to cancel queries';
+  'Allow grantee to perform QUERY_CANCEL operation';
 
 -- GRANT COMPONENT PRIVILEGE "QUERY_CANCEL" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "QUERY_CANCEL" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE QUERY_SUSPEND AS 'QS' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to suspend queries';
+  DETAIL 'Allow grantee to perform QUERY_SUSPEND operation';
 
 -- GRANT COMPONENT PRIVILEGE "QUERY_SUSPEND" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "QUERY_SUSPEND" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE REGISTER_HIVE_OBJECT AS 'RH' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to register hive object in traf metadata';
-
--- GRANT COMPONENT PRIVILEGE "REGISTER_HIVE_OBJECT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "REGISTER_HIVE_OBJECT" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE REMAP_USER AS 'RU' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to remap DB__ users to a different external username';
-
--- GRANT COMPONENT PRIVILEGE "REMAP_USER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "REMAP_USER" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE SHOW AS 'SW' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to view metadata information about objects';
+  'Allow grantee to perform SHOW operation';
 
 -- GRANT COMPONENT PRIVILEGE "SHOW" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "SHOW" ON "SQL_OPERATIONS" TO "PUBLIC";
 GRANT COMPONENT PRIVILEGE "SHOW" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE USE_ALTERNATE_SCHEMA AS 'UA' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to use non-default schemas';
-
--- GRANT COMPONENT PRIVILEGE "USE_ALTERNATE_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "USE_ALTERNATE_SCHEMA" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE UNREGISTER_HIVE_OBJECT AS 'UH' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to unregister hive object from traf metadata';
-
--- GRANT COMPONENT PRIVILEGE "UNREGISTER_HIVE_OBJECT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "UNREGISTER_HIVE_OBJECT" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
 
 --- SQL operation complete.
 >>
@@ -1485,108 +1339,67 @@
 >>
 >>showddl component sql_operations;
 
-REGISTER COMPONENT SQL_OPERATIONS SYSTEM DETAIL 'Component for SQL operations';
+REGISTER COMPONENT SQL_OPERATIONS SYSTEM DETAIL
+  'System component SQL_OPERATIONS';
 
 CREATE COMPONENT PRIVILEGE ALTER AS 'A0' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to alter database objects';
+  'Allow grantee to perform ALTER operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE ALTER_ROUTINE_ACTION AS 'AA' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to alter routine actions';
-
--- GRANT COMPONENT PRIVILEGE "ALTER_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "ALTER_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE ALTER_TRIGGER AS 'AG' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter triggers';
-
--- GRANT COMPONENT PRIVILEGE "ALTER_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "ALTER_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE ALTER_SCHEMA AS 'AH' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to alter schemas';
+  'Allow grantee to perform ALTER_SCHEMA operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_LIBRARY AS 'AL' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter libraries';
+  DETAIL 'Allow grantee to perform ALTER_LIBRARY operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_SEQUENCE AS 'AQ' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter sequence generators';
+  DETAIL 'Allow grantee to perform ALTER_SEQUENCE operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_SEQUENCE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_SEQUENCE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_ROUTINE AS 'AR' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter routines';
+  DETAIL 'Allow grantee to perform ALTER_ROUTINE operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_TABLE AS 'AT' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to alter tables';
+  'Allow grantee to perform ALTER_TABLE operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE ALTER_VIEW AS 'AV' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to alter views';
+  'Allow grantee to perform ALTER_VIEW operation';
 
 -- GRANT COMPONENT PRIVILEGE "ALTER_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "ALTER_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE ALTER_SYNONYM AS 'AY' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to alter synonyms';
-
--- GRANT COMPONENT PRIVILEGE "ALTER_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "ALTER_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE CREATE AS 'C0' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to create database objects';
+  'Allow grantee to perform CREATE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE CREATE_ROUTINE_ACTION AS 'CA' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to create routine actions';
-
--- GRANT COMPONENT PRIVILEGE "CREATE_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "CREATE_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE CREATE_CATALOG AS 'CC' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create catalogs';
-
--- GRANT COMPONENT PRIVILEGE "CREATE_CATALOG" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "CREATE_CATALOG" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE CREATE_TRIGGER AS 'CG' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create triggers';
-
--- GRANT COMPONENT PRIVILEGE "CREATE_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "CREATE_TRIGGER" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE CREATE_SCHEMA AS 'CH' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create schemas';
+  DETAIL 'Allow grantee to perform CREATE_SCHEMA operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_SCHEMA" ON "SQL_OPERATIONS" TO "PUBLIC";
@@ -1594,321 +1407,216 @@
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_INDEX AS 'CI' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to create indexes';
+  'Allow grantee to perform CREATE_INDEX operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_INDEX" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_INDEX" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_LIBRARY AS 'CL' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create libraries';
+  DETAIL 'Allow grantee to perform CREATE_LIBRARY operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_LIBRARY" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE COMMENT AS 'CO' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to comment on objects and columns';
+  'Allow grantee to perform COMMENT operation';
 
 -- GRANT COMPONENT PRIVILEGE "COMMENT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "COMMENT" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_PROCEDURE AS 'CP' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create procedures';
+  DETAIL 'Allow grantee to perform CREATE_PROCEDURE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_PROCEDURE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_PROCEDURE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_SEQUENCE AS 'CQ' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create sequence generators';
+  DETAIL 'Allow grantee to perform CREATE_SEQUENCE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_SEQUENCE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_SEQUENCE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_ROUTINE AS 'CR' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create routines';
+  DETAIL 'Allow grantee to perform CREATE_ROUTINE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_ROUTINE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_TABLE AS 'CT' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to create tables';
+  'Allow grantee to perform CREATE_TABLE operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE CREATE_VIEW AS 'CV' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to create views';
+  'Allow grantee to perform CREATE_VIEW operation';
 
 -- GRANT COMPONENT PRIVILEGE "CREATE_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "CREATE_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE CREATE_SYNONYM AS 'CY' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to create synonyms';
-
--- GRANT COMPONENT PRIVILEGE "CREATE_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "CREATE_SYNONYM" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE DROP AS 'D0' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop database objects';
+  'Allow grantee to perform DROP operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE DROP_ROUTINE_ACTION AS 'DA' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to drop routine actions';
-
--- GRANT COMPONENT PRIVILEGE "DROP_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DROP_ROUTINE_ACTION" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DROP_CATALOG AS 'DC' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop catalogs';
-
--- GRANT COMPONENT PRIVILEGE "DROP_CATALOG" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DROP_CATALOG" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DROP_TRIGGER AS 'DG' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop triggers';
-
--- GRANT COMPONENT PRIVILEGE "DROP_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DROP_TRIGGER" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE DROP_SCHEMA AS 'DH' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop schemas';
+  'Allow grantee to perform DROP_SCHEMA operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_INDEX AS 'DI' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop indexes';
+  'Allow grantee to perform DROP_INDEX operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_INDEX" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_INDEX" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_LIBRARY AS 'DL' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop libraries';
+  'Allow grantee to perform DROP_LIBRARY operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_PROCEDURE AS 'DP' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to drop procedures';
+  DETAIL 'Allow grantee to perform DROP_PROCEDURE operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_PROCEDURE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_PROCEDURE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_SEQUENCE AS 'DQ' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to drop sequence generators';
+  DETAIL 'Allow grantee to perform DROP_SEQUENCE operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_SEQUENCE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_SEQUENCE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_ROUTINE AS 'DR' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop routines';
+  'Allow grantee to perform DROP_ROUTINE operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_ROUTINE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_TABLE AS 'DT' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop tables';
+  'Allow grantee to perform DROP_TABLE operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_TABLE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE DROP_VIEW AS 'DV' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop views';
+  'Allow grantee to perform DROP_VIEW operation';
 
 -- GRANT COMPONENT PRIVILEGE "DROP_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "DROP_VIEW" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE DROP_SYNONYM AS 'DY' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to drop synonyms';
-
--- GRANT COMPONENT PRIVILEGE "DROP_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DROP_SYNONYM" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE MANAGE AS 'M0' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to manage all SQL Operations';
+  'Allow grantee to perform MANAGE operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_COMPONENTS AS 'MC' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to manage components';
+  DETAIL 'Allow grantee to perform MANAGE_COMPONENTS operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_COMPONENTS" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_COMPONENTS" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_LIBRARY AS 'ML' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to manage libraries';
+  DETAIL 'Allow grantee to perform MANAGE_LIBRARY operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_LIBRARY" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_LIBRARY" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_PRIVILEGES AS 'MP' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to manage privileges on SQL objects';
+  DETAIL 'Allow grantee to perform MANAGE_PRIVILEGES operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_PRIVILEGES" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_PRIVILEGES" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_ROLES AS 'MR' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to manage roles';
+  'Allow grantee to perform MANAGE_ROLES operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_ROLES" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_ROLES" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_STATISTICS AS 'MS' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to show and update statistics';
+  DETAIL 'Allow grantee to perform MANAGE_STATISTICS operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_STATISTICS" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_STATISTICS" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_LOAD AS 'MT' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to perform LOAD and UNLOAD commands';
+  'Allow grantee to perform MANAGE_LOAD operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_LOAD" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_LOAD" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE MANAGE_USERS AS 'MU' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to manage users';
+  'Allow grantee to perform MANAGE_USERS operation';
 
 -- GRANT COMPONENT PRIVILEGE "MANAGE_USERS" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "MANAGE_USERS" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE DML_DELETE AS 'PD' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to delete rows';
+CREATE COMPONENT PRIVILEGE DML_SELECT_METADATA AS 'PM' ON SQL_OPERATIONS SYSTEM
+  DETAIL 'Allow grantee to perform DML_SELECT_METADATA operation';
 
--- GRANT COMPONENT PRIVILEGE "DML_DELETE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_DELETE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_EXECUTE AS 'PE' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to execute functions';
-
--- GRANT COMPONENT PRIVILEGE "DML_EXECUTE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_EXECUTE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_USAGE AS 'PG' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to use libraries and sequences';
-
--- GRANT COMPONENT PRIVILEGE "DML_USAGE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_USAGE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_INSERT AS 'PI' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to insert rows';
-
--- GRANT COMPONENT PRIVILEGE "DML_INSERT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_INSERT" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_REFERENCES AS 'PR' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to reference columns';
-
--- GRANT COMPONENT PRIVILEGE "DML_REFERENCES" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_REFERENCES" ON "SQL_OPERATIONS" TO
+-- GRANT COMPONENT PRIVILEGE "DML_SELECT_METADATA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
+GRANT COMPONENT PRIVILEGE "DML_SELECT_METADATA" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE DML_SELECT AS 'PS' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to select rows';
-
--- GRANT COMPONENT PRIVILEGE "DML_SELECT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_SELECT" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE DML_UPDATE AS 'PU' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to update rows';
-
--- GRANT COMPONENT PRIVILEGE "DML_UPDATE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "DML_UPDATE" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE QUERY_ACTIVATE AS 'QA' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to activate queries';
+  DETAIL 'Allow grantee to perform QUERY_ACTIVATE operation';
 
 -- GRANT COMPONENT PRIVILEGE "QUERY_ACTIVATE" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "QUERY_ACTIVATE" ON "SQL_OPERATIONS" TO
   "DB__ROOTROLE" WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE QUERY_CANCEL AS 'QC' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to cancel queries';
+  'Allow grantee to perform QUERY_CANCEL operation';
 
 -- GRANT COMPONENT PRIVILEGE "QUERY_CANCEL" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "QUERY_CANCEL" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
 CREATE COMPONENT PRIVILEGE QUERY_SUSPEND AS 'QS' ON SQL_OPERATIONS SYSTEM
-  DETAIL 'Allow grantee to suspend queries';
+  DETAIL 'Allow grantee to perform QUERY_SUSPEND operation';
 
 -- GRANT COMPONENT PRIVILEGE "QUERY_SUSPEND" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "QUERY_SUSPEND" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
   WITH GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE REGISTER_HIVE_OBJECT AS 'RH' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to register hive object in traf metadata';
-
--- GRANT COMPONENT PRIVILEGE "REGISTER_HIVE_OBJECT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "REGISTER_HIVE_OBJECT" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE REMAP_USER AS 'RU' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to remap DB__ users to a different external username';
-
--- GRANT COMPONENT PRIVILEGE "REMAP_USER" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "REMAP_USER" ON "SQL_OPERATIONS" TO "DB__ROOTROLE"
-  WITH GRANT OPTION;
-
 CREATE COMPONENT PRIVILEGE SHOW AS 'SW' ON SQL_OPERATIONS SYSTEM DETAIL
-  'Allow grantee to view metadata information about objects';
+  'Allow grantee to perform SHOW operation';
 
 -- GRANT COMPONENT PRIVILEGE "SHOW" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
 GRANT COMPONENT PRIVILEGE "SHOW" ON "SQL_OPERATIONS" TO "PUBLIC";
 GRANT COMPONENT PRIVILEGE "SHOW" ON "SQL_OPERATIONS" TO "DB__ROOTROLE" WITH
   GRANT OPTION;
 
-CREATE COMPONENT PRIVILEGE USE_ALTERNATE_SCHEMA AS 'UA' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to use non-default schemas';
-
--- GRANT COMPONENT PRIVILEGE "USE_ALTERNATE_SCHEMA" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "USE_ALTERNATE_SCHEMA" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
-CREATE COMPONENT PRIVILEGE UNREGISTER_HIVE_OBJECT AS 'UH' ON SQL_OPERATIONS
-  SYSTEM DETAIL 'Allow grantee to unregister hive object from traf metadata';
-
--- GRANT COMPONENT PRIVILEGE "UNREGISTER_HIVE_OBJECT" ON "SQL_OPERATIONS" TO "DB__ROOT" WITH GRANT OPTION;
-GRANT COMPONENT PRIVILEGE "UNREGISTER_HIVE_OBJECT" ON "SQL_OPERATIONS" TO
-  "DB__ROOTROLE" WITH GRANT OPTION;
-
 
 --- SQL operation complete.
 >>
diff --git a/core/sql/regress/privs1/TEST132 b/core/sql/regress/privs1/TEST132
index 58d22b9..bc26393 100755
--- a/core/sql/regress/privs1/TEST132
+++ b/core/sql/regress/privs1/TEST132
@@ -159,7 +159,7 @@
 changeuser db__root;
 obey TEST132(popindex_check_reset);
 
--- if user belongs to DB__ROOTROLE, has DML privileges, so can populate indexes
+-- if user belongs to DB__ROOTROLE, DB__ROOTROLE does not have DML privileges
 grant role DB__ROOTROLE to sql_user2;
 changeuser sql_user2;
 obey TEST132(populate_index);
@@ -184,7 +184,7 @@
 ?section populate_index
 set schema t132sch;
 
-populate index t132t1_ndx1 on t132t1;;
+populate index t132t1_ndx1 on t132t1;
 populate index t132t2_ndx1 on t132t2;
 
 ?section popindex_check_reset
@@ -196,7 +196,7 @@
 
 cleanup index t132t1_ndx1;
 create index t132t1_ndx1 on t132t1 (c2) no populate;
-drop index t132t2_ndx1;
+cleanup index t132t2_ndx1;
 create index t132t2_ndx1 on t132t2 (c2) no populate;
 
 ?section test_show
diff --git a/core/sql/sqlcomp/CmpSeabaseDDL.h b/core/sql/sqlcomp/CmpSeabaseDDL.h
index 6215f7d..22ee692 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDL.h
+++ b/core/sql/sqlcomp/CmpSeabaseDDL.h
@@ -1456,6 +1456,7 @@
   short createPrivMgrRepos(ExeCliInterface *cliInterface, NABoolean ddlXns);
   short initSeabaseAuthorization(ExeCliInterface *cliInterface,
                                  NABoolean ddlXns,
+                                 NABoolean isUpgrade,
                                  std::vector<std::string> &tablesCreated,
                                  std::vector<std::string> &tablesUpgraded);
 
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLauth.h b/core/sql/sqlcomp/CmpSeabaseDDLauth.h
index 1fc6d42..fbfe354 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLauth.h
+++ b/core/sql/sqlcomp/CmpSeabaseDDLauth.h
@@ -37,6 +37,7 @@
 
 #include "ComSmallDefs.h"
 #include "PrivMgrDefs.h"
+#include "PrivMgrComponentDefs.h"
 #include "NAUserId.h"
 #include <vector>
 
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
index ae401f8..79ed311 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
@@ -7466,7 +7466,7 @@
   std::vector<std::string> tablesCreated;
   std::vector<std::string> tablesUpgraded;
 
-  if (initSeabaseAuthorization(cliInterface, ddlXns,
+  if (initSeabaseAuthorization(cliInterface, ddlXns, FALSE /*isUpgrade*/,
                                tablesCreated, tablesUpgraded) < 0)
     return -1;
 
@@ -7985,6 +7985,7 @@
 short CmpSeabaseDDL::initSeabaseAuthorization(
   ExeCliInterface *cliInterface,
   NABoolean ddlXns,
+  NABoolean isUpgrade,
   std::vector<std::string> &tablesCreated,
   std::vector<std::string> &tablesUpgraded)
 { 
@@ -8069,28 +8070,34 @@
 
   NABoolean warnings = FALSE;
 
-  // Adjust hive external table ownership - if someone creates external 
-  // tables before initializing authorization, the external schemas are 
-  // owned by DB__ROOT -> change to DB__HIVEROLE.  
-  // Also if you have initialized authorization and created external tables 
-  // before the fix for JIRA 1895, rerunning initialize authorization will 
-  // fix the metadata inconsistencies
-  if (adjustHiveExternalSchemas(cliInterface) != 0)
-    warnings = TRUE;
-
-  // If someone initializes trafodion with library management but does not 
-  // initialize authorization, then the role DB__LIBMGRROLE has not been 
-  // granted to LIBMGR procedures.  Do this now
-  cliRC = existsInSeabaseMDTable(cliInterface,
-                                 getSystemCatalog(), SEABASE_LIBMGR_SCHEMA, 
-                                 SEABASE_LIBMGR_LIBRARY,
-                                 COM_LIBRARY_OBJECT, TRUE, FALSE);
-  if (cliRC == 1) // library exists
+  // Now that initialize trafodion creates authorization tables, only need
+  // to make adjustments for existing installations.
+  if (isUpgrade)
   {
-    cliRC = grantLibmgrPrivs(cliInterface);
-    if (cliRC == -1)
+    // Adjust hive external table ownership - if someone creates external 
+    // tables before initializing authorization, the external schemas are 
+    // owned by DB__ROOT -> change to DB__HIVEROLE.  
+    // Also if you have initialized authorization and created external tables 
+    // before the fix for JIRA 1895, rerunning initialize authorization will 
+    // fix the metadata inconsistencies
+    if (adjustHiveExternalSchemas(cliInterface) != 0)
       warnings = TRUE;
+
+    // If someone initializes trafodion with library management but does not 
+    // initialize authorization, then the role DB__LIBMGRROLE has not been 
+    // granted to LIBMGR procedures.  
+    cliRC = existsInSeabaseMDTable(cliInterface,
+                                   getSystemCatalog(), SEABASE_LIBMGR_SCHEMA, 
+                                   SEABASE_LIBMGR_LIBRARY,
+                                   COM_LIBRARY_OBJECT, TRUE, FALSE);
+    if (cliRC == 1) // library exists
+    {
+      cliRC = grantLibmgrPrivs(cliInterface);
+      if (cliRC == -1)
+        warnings = TRUE;
+    }
   }
+
   if (NOT ddlXns)
     endXnIfStartedHere(cliInterface, xnWasStartedHere, cliRC);
   
@@ -8781,7 +8788,7 @@
       std::vector<std::string> tablesUpgraded;
 
       // Can ignore status returned, diags area contains any unexpected errors
-      initSeabaseAuthorization(&cliInterface, ddlExpr->ddlXns(),
+      initSeabaseAuthorization(&cliInterface, ddlExpr->ddlXns(), TRUE /*isUpgrade*/,
                                tablesCreated, tablesUpgraded);
 
 #ifdef _DEBUG
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp b/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp
index eb68813..b2cea77 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp
@@ -2602,7 +2602,7 @@
   std::vector<std::string> tablesUpgraded;
 
   // initSeabaseAuthorization will create or upgrade PrivMgr metadata tables
-  if (initSeabaseAuthorization(cliInterface, ddlXns,
+  if (initSeabaseAuthorization(cliInterface, ddlXns, TRUE /*isUpgrade*/,
                                tablesCreated, tablesUpgraded) < 0)
     return -1;
 
diff --git a/core/sql/sqlcomp/DefaultConstants.h b/core/sql/sqlcomp/DefaultConstants.h
index 290205f..b9f0fe3 100644
--- a/core/sql/sqlcomp/DefaultConstants.h
+++ b/core/sql/sqlcomp/DefaultConstants.h
@@ -2945,6 +2945,12 @@
   // this is used to change cache size of sequence numbers for a session.
   // It overwrites the cache size that was specified during sequence creation.
   TRAF_SEQUENCE_CACHE_SIZE,
+ 
+  // this is used to set the retry time if two concurrent update of sequence
+  // conflict, and how many times will retry
+  // by default it is 100, when you saw error 1583, you can try to increase
+  // this settings
+  TRAF_SEQUENCE_RETRY_TIMES,
 
   TRAF_LOAD_MAX_HFILE_SIZE,
 
diff --git a/core/sql/sqlcomp/PrivMgr.cpp b/core/sql/sqlcomp/PrivMgr.cpp
index 679bf28..0a5f265 100644
--- a/core/sql/sqlcomp/PrivMgr.cpp
+++ b/core/sql/sqlcomp/PrivMgr.cpp
@@ -302,6 +302,27 @@
 }
 
 // *****************************************************************************
+// * Function:  PrivMgr::getSQLUnusedOpsCount()
+// *
+// *    Returns the number of unused operations from the hard coded table
+// *    in PrivMgrComponentDefs.h for the sql_operations component.
+// *
+// *****************************************************************************
+int32_t PrivMgr::getSQLUnusedOpsCount()
+{
+  int32_t numUnusedOps = 0;
+  size_t numOps = sizeof(sqlOpList)/sizeof(ComponentOpStruct);
+  for (int i = 0; i < numOps; i++)
+  {
+    const ComponentOpStruct &opDefinition = sqlOpList[i];
+    if (opDefinition.unusedOp)
+      numUnusedOps++;
+  }
+  return numUnusedOps;
+}
+
+
+// *****************************************************************************
 // *                                                                           *
 // * Function: PrivMgr::getSQLOperationName                                    *
 // *                                                                           *
@@ -592,6 +613,7 @@
 }
 //**************** End of PrivMgr::getSQLOperationDescription ******************
 
+
 // *****************************************************************************
 // *                                                                           *
 // * Function: PrivMgr::isAuthIDGrantedPrivs                                   *
@@ -860,6 +882,42 @@
 
 // *****************************************************************************
 // *                                                                           *
+// * Function: PrivMgr::isSQLManageOperation                                   *
+// *                                                                           *
+// *    Determines if a SQL operation is within the list of manage operations. *
+// *                                                                           *
+// *****************************************************************************
+// *                                                                           *
+// *  Parameters:                                                              *
+// *                                                                           *
+// *  <operation>                     SQLOperation                    In       *
+// *    is the operation.                                                      *
+// *                                                                           *
+// *****************************************************************************
+// *                                                                           *
+// * Returns: bool                                                             *
+// *                                                                           *
+// * true: operation is a manage operation.                                    *
+// * false: operation is not a manage operation.                               *
+// *                                                                           *
+// *****************************************************************************
+bool PrivMgr::isSQLManageOperation(const char * operationCode)
+
+{
+  size_t numOps = sizeof(sqlOpList)/sizeof(ComponentOpStruct);
+  for (int i = 0; i < numOps; i++)
+  {
+    const ComponentOpStruct &opDefinition = sqlOpList[i];
+    if (std::string(opDefinition.operationCode) == std::string(operationCode))
+      return (PrivMgr::isSQLManageOperation((SQLOperation)opDefinition.operationID));
+   }
+   return false;
+}
+//******************* End of PrivMgr::isSQLManageOperation *********************
+
+
+// *****************************************************************************
+// *                                                                           *
 // * Function: PrivMgr::ObjectEnumToLit                                        *
 // *                                                                           *
 // *    Returns the two character literal associated with the object type enum.*
diff --git a/core/sql/sqlcomp/PrivMgr.h b/core/sql/sqlcomp/PrivMgr.h
index d04c410..fd6b8bd 100644
--- a/core/sql/sqlcomp/PrivMgr.h
+++ b/core/sql/sqlcomp/PrivMgr.h
@@ -28,6 +28,7 @@
 #include <string>
 #include <vector>
 #include "PrivMgrDefs.h"
+#include "PrivMgrComponentDefs.h"
 #include "ComSmallDefs.h"
 #include "CmpSeabaseDDLauth.h"
 
@@ -103,13 +104,15 @@
       const int32_t authID,
       std::string &authName);
     
-    static const char * getSQLOperationName(SQLOperation operation);
     static const char * getSQLOperationCode(SQLOperation operation);
     static const char * getSQLOperationDescription(SQLOperation operation);
+    static const char * getSQLOperationName(SQLOperation operation);
+    static int32_t getSQLUnusedOpsCount();
     static bool isSQLAlterOperation(SQLOperation operation);
     static bool isSQLCreateOperation(SQLOperation operation);
     static bool isSQLDropOperation(SQLOperation operation);
     static bool isSQLManageOperation(SQLOperation operation);
+    static bool isSQLManageOperation(const char * operationCode);
     static const char * ObjectEnumToLit(ComObjectType objectType);
     static ComObjectType ObjectLitToEnum(const char *objectLiteral);    
     static bool isRoleID(int_32 authID){ return CmpSeabaseDDLauth::isRoleID(authID); }
diff --git a/core/sql/sqlcomp/PrivMgrComponentDefs.h b/core/sql/sqlcomp/PrivMgrComponentDefs.h
index 8986dd9..c5a4289 100644
--- a/core/sql/sqlcomp/PrivMgrComponentDefs.h
+++ b/core/sql/sqlcomp/PrivMgrComponentDefs.h
@@ -53,6 +53,7 @@
 //   isAdminOp     - grant DB__ADMIN/DB__ADMINROLE this operation
 //   isDMLOp       - this is a DML operation
 //   isPublicOp    - grant PUBLIC this operation
+//   unusedOp      - operation is not supported at this time but maybe later
 struct ComponentOpStruct
 {
   int32_t      operationID;
@@ -62,6 +63,7 @@
   const bool   isAdminOp;
   const bool   isDMLOp;
   const bool   isPublicOp;
+  const bool   unusedOp;
 };
 
 // The ComponentListStruct describes the relationship between a component UID,
@@ -83,14 +85,10 @@
 // USER_COMPONENT_START_UID begins user defined components
 enum ComponentOp{ INVALID_COMPONENT_UID        = 0,
                   SQL_OPERATIONS_COMPONENT_UID = 1,
-                  DBMGR_COMPONENT_UID          = 2,
-                  WMS_COMPONENT_UID            = 3,
                   USER_COMPONENT_START_UID     = 1000};
 
 // List of components
 #define SQL_OPERATIONS_NAME "SQL_OPERATIONS"
-#define DBMGR_NAME          "DBMGR"
-#define WMS_NAME            "WMS"
 
 // Defines component operations for SQL_OPERATIONS:
 //  to add a new operation, add an entry to this list (in alphebetic order)
@@ -106,6 +104,7 @@
    ALTER_TABLE,
    ALTER_TRIGGER,
    ALTER_VIEW,
+   COMMENT,
    CREATE,
    CREATE_CATALOG,
    CREATE_INDEX,
@@ -147,7 +146,6 @@
    MANAGE_PRIVILEGES,
    MANAGE_ROLES,
    MANAGE_STATISTICS,
-   MANAGE_TENANTS,
    MANAGE_USERS,
    QUERY_ACTIVATE,
    QUERY_CANCEL,
@@ -171,114 +169,78 @@
 //    recommend that PUBLIC granted only a small subset of privileges
 static const ComponentOpStruct sqlOpList[] =
 {
- {(int32_t)SQLOperation::ALTER,               "A0","ALTER",true,true,false,false},
- {(int32_t)SQLOperation::ALTER_LIBRARY,       "AL","ALTER_LIBRARY",true,false,false,false},
- {(int32_t)SQLOperation::ALTER_ROUTINE,       "AR","ALTER_ROUTINE",true,false,false,false},
- {(int32_t)SQLOperation::ALTER_ROUTINE_ACTION,"AA","ALTER_ROUTINE_ACTION",true,false,false,false},
- {(int32_t)SQLOperation::ALTER_SCHEMA,        "AH","ALTER_SCHEMA",true,false,false,false},
- {(int32_t)SQLOperation::ALTER_SEQUENCE,      "AQ","ALTER_SEQUENCE",true,false,false,false},
- {(int32_t)SQLOperation::ALTER_SYNONYM,       "AY","ALTER_SYNONYM",true,false,false,false},
- {(int32_t)SQLOperation::ALTER_TABLE,         "AT","ALTER_TABLE",true,false,false,false},
- {(int32_t)SQLOperation::ALTER_TRIGGER,       "AG","ALTER_TRIGGER",true,false,false,false},
- {(int32_t)SQLOperation::ALTER_VIEW,          "AV","ALTER_VIEW",true,false,false,false},
+ {(int32_t)SQLOperation::ALTER,               "A0","ALTER",true,true,false,false,false},
+ {(int32_t)SQLOperation::ALTER_LIBRARY,       "AL","ALTER_LIBRARY",true,false,false,false,false},
+ {(int32_t)SQLOperation::ALTER_ROUTINE,       "AR","ALTER_ROUTINE",true,false,false,false,false},
+ {(int32_t)SQLOperation::ALTER_ROUTINE_ACTION,"AA","ALTER_ROUTINE_ACTION",true,false,false,false,true},
+ {(int32_t)SQLOperation::ALTER_SCHEMA,        "AH","ALTER_SCHEMA",true,false,false,false,false},
+ {(int32_t)SQLOperation::ALTER_SEQUENCE,      "AQ","ALTER_SEQUENCE",true,false,false,false,false},
+ {(int32_t)SQLOperation::ALTER_SYNONYM,       "AY","ALTER_SYNONYM",true,false,false,false,true},
+ {(int32_t)SQLOperation::ALTER_TABLE,         "AT","ALTER_TABLE",true,false,false,false,false},
+ {(int32_t)SQLOperation::ALTER_TRIGGER,       "AG","ALTER_TRIGGER",true,false,false,false,true},
+ {(int32_t)SQLOperation::ALTER_VIEW,          "AV","ALTER_VIEW",true,false,false,false,false},
 
- {(int32_t)SQLOperation::CREATE,              "C0","CREATE",true,true,false,false },
- {(int32_t)SQLOperation::CREATE_CATALOG,      "CC","CREATE_CATALOG",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_INDEX,        "CI","CREATE_INDEX",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_LIBRARY,      "CL","CREATE_LIBRARY",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_PROCEDURE,    "CP","CREATE_PROCEDURE",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_ROUTINE,      "CR","CREATE_ROUTINE",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_ROUTINE_ACTION,"CA","CREATE_ROUTINE_ACTION",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_SCHEMA,       "CH","CREATE_SCHEMA",true,false,false,true},
- {(int32_t)SQLOperation::CREATE_SEQUENCE,     "CQ","CREATE_SEQUENCE",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_SYNONYM,      "CY","CREATE_SYNONYM",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_TABLE,        "CT","CREATE_TABLE",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_TRIGGER,      "CG","CREATE_TRIGGER",true,false,false,false},
- {(int32_t)SQLOperation::CREATE_VIEW,         "CV","CREATE_VIEW",true,false,false,false},
+ {(int32_t)SQLOperation::COMMENT,             "CO","COMMENT",true,true,false,false,false},
 
- {(int32_t)SQLOperation::DML_DELETE,     "PD","DML_DELETE",false,false,true,false},
- {(int32_t)SQLOperation::DML_EXECUTE,    "PE","DML_EXECUTE",false,false,true,false},
- {(int32_t)SQLOperation::DML_INSERT,     "PI","DML_INSERT",false,false,true,false},
- {(int32_t)SQLOperation::DML_REFERENCES, "PR","DML_REFERENCES",false,false,true,false},
- {(int32_t)SQLOperation::DML_SELECT,     "PS","DML_SELECT",false,false,true,false},
- {(int32_t)SQLOperation::DML_SELECT_METADATA,"PM","DML_SELECT_METADATA",true,true,true,false},
- {(int32_t)SQLOperation::DML_UPDATE,     "PU","DML_UPDATE",false,false,true,false},
- {(int32_t)SQLOperation::DML_USAGE,      "PG","DML_USAGE",false,false,true,false},
+ {(int32_t)SQLOperation::CREATE,              "C0","CREATE",true,true,false,false,false },
+ {(int32_t)SQLOperation::CREATE_CATALOG,      "CC","CREATE_CATALOG",true,false,false,false,true},
+ {(int32_t)SQLOperation::CREATE_INDEX,        "CI","CREATE_INDEX",true,false,false,false,false},
+ {(int32_t)SQLOperation::CREATE_LIBRARY,      "CL","CREATE_LIBRARY",true,false,false,false,false},
+ {(int32_t)SQLOperation::CREATE_PROCEDURE,    "CP","CREATE_PROCEDURE",true,false,false,false,false},
+ {(int32_t)SQLOperation::CREATE_ROUTINE,      "CR","CREATE_ROUTINE",true,false,false,false,false},
+ {(int32_t)SQLOperation::CREATE_ROUTINE_ACTION,"CA","CREATE_ROUTINE_ACTION",true,false,false,false,true},
+ {(int32_t)SQLOperation::CREATE_SCHEMA,       "CH","CREATE_SCHEMA",true,false,false,true,false},
+ {(int32_t)SQLOperation::CREATE_SEQUENCE,     "CQ","CREATE_SEQUENCE",true,false,false,false,false},
+ {(int32_t)SQLOperation::CREATE_SYNONYM,      "CY","CREATE_SYNONYM",true,false,false,false,true},
+ {(int32_t)SQLOperation::CREATE_TABLE,        "CT","CREATE_TABLE",true,false,false,false,false},
+ {(int32_t)SQLOperation::CREATE_TRIGGER,      "CG","CREATE_TRIGGER",true,false,false,false,true},
+ {(int32_t)SQLOperation::CREATE_VIEW,         "CV","CREATE_VIEW",true,false,false,false,false},
 
- {(int32_t)SQLOperation::DROP,               "D0","DROP",true,true,false,false },
- {(int32_t)SQLOperation::DROP_CATALOG,       "DC","DROP_CATALOG",true,false,false,false},
- {(int32_t)SQLOperation::DROP_INDEX,         "DI","DROP_INDEX",true,false,false,false},
- {(int32_t)SQLOperation::DROP_LIBRARY,       "DL","DROP_LIBRARY",true,false,false,false},
- {(int32_t)SQLOperation::DROP_PROCEDURE,     "DP","DROP_PROCEDURE",true,false,false,false},
- {(int32_t)SQLOperation::DROP_ROUTINE,       "DR","DROP_ROUTINE",true,false,false,false},
- {(int32_t)SQLOperation::DROP_ROUTINE_ACTION,"DA","DROP_ROUTINE_ACTION",true,false,false,false},
- {(int32_t)SQLOperation::DROP_SCHEMA,        "DH","DROP_SCHEMA",true,false,false,false},
- {(int32_t)SQLOperation::DROP_SEQUENCE,      "DQ","DROP_SEQUENCE",true,false,false,false},
- {(int32_t)SQLOperation::DROP_SYNONYM,       "DY","DROP_SYNONYM",true,false,false,false},
- {(int32_t)SQLOperation::DROP_TABLE,         "DT","DROP_TABLE",true,false,false,false},
- {(int32_t)SQLOperation::DROP_TRIGGER,       "DG","DROP_TRIGGER",true,false,false,false},
- {(int32_t)SQLOperation::DROP_VIEW,          "DV","DROP_VIEW",true,false,false,false},
+ {(int32_t)SQLOperation::DML_DELETE,     "PD","DML_DELETE",false,false,true,false,true},
+ {(int32_t)SQLOperation::DML_EXECUTE,    "PE","DML_EXECUTE",false,false,true,false,true},
+ {(int32_t)SQLOperation::DML_INSERT,     "PI","DML_INSERT",false,false,true,false,true},
+ {(int32_t)SQLOperation::DML_REFERENCES, "PR","DML_REFERENCES",false,false,true,false,true},
+ {(int32_t)SQLOperation::DML_SELECT,     "PS","DML_SELECT",false,false,true,false,true},
+ {(int32_t)SQLOperation::DML_SELECT_METADATA,"PM","DML_SELECT_METADATA",true,true,true,false,false},
+ {(int32_t)SQLOperation::DML_UPDATE,     "PU","DML_UPDATE",false,false,true,false,true},
+ {(int32_t)SQLOperation::DML_USAGE,      "PG","DML_USAGE",false,false,true,false,true},
 
- {(int32_t)SQLOperation::MANAGE,            "M0","MANAGE",true,true,false,false},
- {(int32_t)SQLOperation::MANAGE_COMPONENTS, "MC","MANAGE_COMPONENTS",true,false,false,false},
- {(int32_t)SQLOperation::MANAGE_LIBRARY,    "ML","MANAGE_LIBRARY",true,false,false,false},
- {(int32_t)SQLOperation::MANAGE_LOAD,       "MT","MANAGE_LOAD",true,false,false,false},
- {(int32_t)SQLOperation::MANAGE_PRIVILEGES, "MP","MANAGE_PRIVILEGES",true,false,false,false},
- {(int32_t)SQLOperation::MANAGE_ROLES,      "MR","MANAGE_ROLES",true,false,false,false},
- {(int32_t)SQLOperation::MANAGE_STATISTICS, "MS","MANAGE_STATISTICS",true,false,false,false},
- {(int32_t)SQLOperation::MANAGE_TENANTS,    "MX","MANAGE_TENANTS",true,false,false,false},
- {(int32_t)SQLOperation::MANAGE_USERS,      "MU","MANAGE_USERS",true,false,false,false},
+ {(int32_t)SQLOperation::DROP,               "D0","DROP",true,true,false,false,false},
+ {(int32_t)SQLOperation::DROP_CATALOG,       "DC","DROP_CATALOG",true,false,false,false,true},
+ {(int32_t)SQLOperation::DROP_INDEX,         "DI","DROP_INDEX",true,false,false,false,false},
+ {(int32_t)SQLOperation::DROP_LIBRARY,       "DL","DROP_LIBRARY",true,false,false,false,false},
+ {(int32_t)SQLOperation::DROP_PROCEDURE,     "DP","DROP_PROCEDURE",true,false,false,false,false},
+ {(int32_t)SQLOperation::DROP_ROUTINE,       "DR","DROP_ROUTINE",true,false,false,false,false},
+ {(int32_t)SQLOperation::DROP_ROUTINE_ACTION,"DA","DROP_ROUTINE_ACTION",true,false,false,false,true},
+ {(int32_t)SQLOperation::DROP_SCHEMA,        "DH","DROP_SCHEMA",true,false,false,false,false},
+ {(int32_t)SQLOperation::DROP_SEQUENCE,      "DQ","DROP_SEQUENCE",true,false,false,false,false},
+ {(int32_t)SQLOperation::DROP_SYNONYM,       "DY","DROP_SYNONYM",true,false,false,false,true},
+ {(int32_t)SQLOperation::DROP_TABLE,         "DT","DROP_TABLE",true,false,false,false,false},
+ {(int32_t)SQLOperation::DROP_TRIGGER,       "DG","DROP_TRIGGER",true,false,false,false,true},
+ {(int32_t)SQLOperation::DROP_VIEW,          "DV","DROP_VIEW",true,false,false,false,false},
 
- {(int32_t)SQLOperation::QUERY_ACTIVATE, "QA","QUERY_ACTIVATE",true,true,false,false},
- {(int32_t)SQLOperation::QUERY_CANCEL,   "QC","QUERY_CANCEL",true,true,false,false},
- {(int32_t)SQLOperation::QUERY_SUSPEND,  "QS","QUERY_SUSPEND",true,true,false,false},
- {(int32_t)SQLOperation::REGISTER_HIVE_OBJECT,  "RH","REGISTER_HIVE_OBJECT",true,true,false,false},
+ {(int32_t)SQLOperation::MANAGE,            "M0","MANAGE",true,true,false,false,false},
+ {(int32_t)SQLOperation::MANAGE_COMPONENTS, "MC","MANAGE_COMPONENTS",true,false,false,false,false},
+ {(int32_t)SQLOperation::MANAGE_LIBRARY,    "ML","MANAGE_LIBRARY",true,false,false,false,false},
+ {(int32_t)SQLOperation::MANAGE_LOAD,       "MT","MANAGE_LOAD",true,false,false,false,false},
+ {(int32_t)SQLOperation::MANAGE_PRIVILEGES, "MP","MANAGE_PRIVILEGES",true,false,false,false,false},
+ {(int32_t)SQLOperation::MANAGE_ROLES,      "MR","MANAGE_ROLES",true,false,false,false,false},
+ {(int32_t)SQLOperation::MANAGE_STATISTICS, "MS","MANAGE_STATISTICS",true,false,false,false,false},
+ {(int32_t)SQLOperation::MANAGE_USERS,      "MU","MANAGE_USERS",true,false,false,false,false},
 
- {(int32_t)SQLOperation::REMAP_USER,           "RU","REMAP_USER",true,true,false,false},
- {(int32_t)SQLOperation::SHOW,                 "SW","SHOW",true,true,false,false},
- {(int32_t)SQLOperation::UNREGISTER_HIVE_OBJECT,  "UH","UNREGISTER_HIVE_OBJECT",true,true,false,false},
- {(int32_t)SQLOperation::USE_ALTERNATE_SCHEMA, "UA","USE_ALTERNATE_SCHEMA",true,true,false,false}
+ {(int32_t)SQLOperation::QUERY_ACTIVATE, "QA","QUERY_ACTIVATE",true,true,false,false,false},
+ {(int32_t)SQLOperation::QUERY_CANCEL,   "QC","QUERY_CANCEL",true,true,false,false,false},
+ {(int32_t)SQLOperation::QUERY_SUSPEND,  "QS","QUERY_SUSPEND",true,true,false,false,false},
+ {(int32_t)SQLOperation::REGISTER_HIVE_OBJECT,  "RH","REGISTER_HIVE_OBJECT",true,true,false,false,true},
+
+ {(int32_t)SQLOperation::REMAP_USER,           "RU","REMAP_USER",true,true,false,false,true},
+ {(int32_t)SQLOperation::SHOW,                 "SW","SHOW",true,true,false,true,false},
+ {(int32_t)SQLOperation::UNREGISTER_HIVE_OBJECT,  "UH","UNREGISTER_HIVE_OBJECT",true,true,false,false,true},
+ {(int32_t)SQLOperation::USE_ALTERNATE_SCHEMA, "UA","USE_ALTERNATE_SCHEMA",true,true,false,false,true}
 };
 
-// Defines the component operations for DBMGR:
-//   add an entry to this list for new DBMGR operations(in alphabetic order) 
-//   and to the corresponding dbmgrOpList
-enum class DBMGROperation {
-   MANAGE_ALERTS = 2,
-   MANAGE_SESSIONS,
-   SHOW_ACTIVE_QUERIES,
-   SHOW_EVENT_LOGS,
-   SHOW_REPOS_QUERIES
-};
-
-// Assign initial privileges for DBMGROperation (based on ComponentOpStruct):
-static const ComponentOpStruct dbmgrOpList[] =
-{
- {(int32_t)DBMGROperation::MANAGE_ALERTS,       "MA","MANAGE_ALERTS",true,true,false,false},
- {(int32_t)DBMGROperation::MANAGE_SESSIONS,     "MS","MANAGE_SESSIONS",true,true,false,false},
- {(int32_t)DBMGROperation::SHOW_ACTIVE_QUERIES, "AQ","SHOW_ACTIVE_QUERIES",true,true,false,false},
- {(int32_t)DBMGROperation::SHOW_EVENT_LOGS,     "EL","SHOW_EVENT_LOGS",true,true,false,false},
- {(int32_t)DBMGROperation::SHOW_REPOS_QUERIES,  "RQ","SHOW_REPOS_QUERIES",true,true,false,false}
-};
-
-// Defines the component operations for WMS:
-//   add an entry to this list for new WMS operations (in alphabetic order) 
-//   and to the corresponding wmsOpList
-enum class WMSOperation {
-   MANAGE_WMS = 2
-};
-
-// Assign initial privileges for DBMGROperation (based on ComponentOpStruct):
-static const ComponentOpStruct wmsOpList[] =
-{
- {(int32_t)WMSOperation::MANAGE_WMS,       "MW","MANAGE_WMS",true,true,false,false},
-};
-
-
 // List of components
 static const ComponentListStruct componentList[]
-{ { (int64_t)SQL_OPERATIONS_COMPONENT_UID, SQL_OPERATIONS_NAME, sizeof(sqlOpList)/sizeof(ComponentOpStruct), (ComponentOpStruct *)&sqlOpList },
-  { (int64_t)DBMGR_COMPONENT_UID, DBMGR_NAME, sizeof(dbmgrOpList)/sizeof(ComponentOpStruct), (ComponentOpStruct *)&dbmgrOpList },
-  { (int64_t)WMS_COMPONENT_UID, WMS_NAME, sizeof(wmsOpList)/sizeof(ComponentOpStruct), (ComponentOpStruct *)&wmsOpList } };
+{ { (int64_t)SQL_OPERATIONS_COMPONENT_UID, SQL_OPERATIONS_NAME, sizeof(sqlOpList)/sizeof(ComponentOpStruct), (ComponentOpStruct *)&sqlOpList } };
 
 #endif
diff --git a/core/sql/sqlcomp/PrivMgrComponentOperations.cpp b/core/sql/sqlcomp/PrivMgrComponentOperations.cpp
index bcbfa6b..280710a 100644
--- a/core/sql/sqlcomp/PrivMgrComponentOperations.cpp
+++ b/core/sql/sqlcomp/PrivMgrComponentOperations.cpp
@@ -58,6 +58,7 @@
 class MyRow : public PrivMgrMDRow
 {
 public:
+
 // -------------------------------------------------------------------
 // Constructors and destructors:
 // -------------------------------------------------------------------
@@ -71,7 +72,7 @@
       componentUID_ = other.componentUID_;              
       operationCode_ = other.operationCode_;
       operationName_ = other.operationName_;
-      isSystem_ = other.isSystem_;
+      operationType_ = other.operationType_;
       operationDescription_ = other.operationDescription_;
    };
    virtual ~MyRow() {};
@@ -82,14 +83,14 @@
       const int64_t componentUID,
       const std::string & operationCode,
       std::string & operationName,
-      bool & isSystem,
+      PrivMgrComponentOperations::OperationType & operationType,
       std::string & operationDescription); 
    
    bool lookupByName(
       const int64_t componentUID,
       const std::string & operationName,
       std::string & operationCode,
-      bool & isSystem,
+      PrivMgrComponentOperations::OperationType & operationType,
       std::string & operationDescription);
     
 // -------------------------------------------------------------------
@@ -100,7 +101,7 @@
     int64_t            componentUID_;
     std::string        operationCode_;
     std::string        operationName_;
-    bool                isSystem_;
+    PrivMgrComponentOperations::OperationType      operationType_;
     std::string        operationDescription_;
     
 private: 
@@ -155,6 +156,10 @@
       const std::string & whereClause,  
       std::vector<MyRow *> &rowList);
 
+   PrivStatus update(
+      const std::string &setClause,
+      const std::string &whereClause);
+
 private:   
    MyTable();
    void setRow(OutputInfo *pCliRow, MyRow &rowOut);
@@ -284,7 +289,7 @@
 // *    is a 2 character code associated with the operation unique to the      *
 // *    component.                                                             *
 // *                                                                           *
-// *  <isSystemOperation>             bool                            In       *
+// *  <isSystem>                      bool                            In       *
 // *    is true if the operation is a system operation.                        *
 // *                                                                           *
 // *  <operationDescription>          const std::string &             In       *
@@ -305,14 +310,12 @@
    const std::string & componentName,
    const std::string & operationName,
    const std::string & operationCode,
-   bool isSystemOperation,
+   bool isSystem,
    const std::string & operationDescription,
    const bool existsErrorOK) 
   
 {
 
-//TODO: Related, could check for setting isSystem, could be separate
-// privilege, or restricted to DB__ROOT.
 PrivMgrComponentPrivileges componentPrivileges(metadataLocation_, pDiags_);
 
    if (!ComUser::isRootUserID()&&
@@ -379,7 +382,7 @@
 
 // An operation can only be a system operation if its component is a 
 // system component.   
-   if (isSystemOperation && !isSystemComponent)
+   if (isSystem && !isSystemComponent)
    {
       *pDiags_ << DgSqlCode(-CAT_COMPONENT_NOT_SYSTEM);
       return STATUS_ERROR;
@@ -391,7 +394,7 @@
    row.componentUID_ = componentUID;
    row.operationCode_ = operationCode;
    row.operationName_ = operationName;
-   row.isSystem_ = isSystemOperation;
+   row.operationType_ = (isSystem ? OP_TYPE_SYSTEM : OP_TYPE_USER);
    row.operationDescription_ = operationDescription;
    
 MyTable &myTable = static_cast<MyTable &>(myTable_);
@@ -434,8 +437,8 @@
 // *    is a 2 character code associated with the operation unique to the      *
 // *    component.                                                             *
 // *                                                                           *
-// *  <isSystemOperation>             const bool                      In       *
-// *    is true if the operation is a system operation.                        *
+// *  <operationTypeUnused>           const bool                      In       *
+// *    type of component, user, system, or unused.                            *
 // *                                                                           *
 // *  <operationDescription>          const std::string &             In       *
 // *    is a descrption of the operation.                                      *
@@ -464,15 +467,13 @@
    const int64_t componentUID,
    const std::string & operationName,
    const std::string & operationCode,
-   const bool isSystemOperation,
+   const bool operationTypeUnused,
    const std::string & operationDescription,
    const int32_t granteeID,
    const std::string & granteeName,
    const int32_t grantDepth,
    const bool checkExistence)
-  
 {
-
    PrivStatus privStatus = STATUS_GOOD;
 
    // If operation already created, no need to create
@@ -484,7 +485,7 @@
    row.componentUID_ = componentUID;
    row.operationCode_ = operationCode;
    row.operationName_ = operationName;
-   row.isSystem_ = isSystemOperation;
+   row.operationType_ = (operationTypeUnused ? OP_TYPE_UNUSED : OP_TYPE_SYSTEM);
    row.operationDescription_ = operationDescription;
    
    MyTable &myTable = static_cast<MyTable &>(myTable_);
@@ -563,6 +564,7 @@
   
   std::string whereClause("WHERE COMPONENT_UID = ");
   whereClause += componentUIDString;
+  whereClause += " and is_system <> 'U'";
   
   PrivStatus privStatus = myTable.selectWhere(whereClause, rowList);
 
@@ -571,13 +573,16 @@
    for(int i = 0; i < rowList.size(); i++)
    {
       MyRow* myRow = rowList[i];
+      if (myRow->operationType_ == OP_TYPE_UNUSED)
+        continue;
+
       std::string componentText;
       componentText += "CREATE COMPONENT PRIVILEGE ";
       componentText += myRow->operationName_ + " AS "; 
       componentText += "'" + myRow->operationCode_ + "'";
       componentText += " ON " + componentName;
       
-      if(myRow->isSystem_)
+      if(myRow->operationType_ == OP_TYPE_SYSTEM)
         componentText += " SYSTEM";
 
       if(!myRow->operationDescription_.empty())
@@ -722,8 +727,6 @@
   
 {
 
-//TODO: Related, could check for setting isSystem, could be separate
-// privilege, or restricted to DB__ROOT.
 PrivMgrComponentPrivileges componentPrivileges(metadataLocation_, pDiags_);
 
    if (!ComUser::isRootUserID()&&
@@ -808,7 +811,6 @@
 //************* End of PrivMgrComponentOperations::dropOperation ***************
 
 
-
 // *****************************************************************************
 // *                                                                           *
 // * Function: PrivMgrComponentOperations::fetchByName                         *
@@ -832,7 +834,6 @@
 // *                                                                           *
 // *  <isSystem>                      bool &                          Out      *
 // *    passes back true if the component operation is a system level          *
-// *  component operation, otherwise false.                                    *
 // *                                                                           *
 // *  <operationDescription>          std::string &                   Out      *
 // *    passes back the description of the component operation.                *
@@ -864,7 +865,7 @@
       return STATUS_NOTFOUND;
 
    operationCode = row.operationCode_;
-   isSystem = row.isSystem_;
+   isSystem = (row.operationType_ == OP_TYPE_SYSTEM);
    operationDescription = row.operationDescription_;
    return STATUS_GOOD;
 
@@ -877,34 +878,76 @@
 // *                                                                           *
 // * Function: PrivMgrComponentOperations::getCount                            *
 // *                                                                           *
-// *    Returns the number of component operations.                            *
+// *    Returns:                                                               *
+// *       the total number of operations                                      *
+// *       the number of unused operations                                     *
 // *                                                                           *
 // *****************************************************************************
 // *                                                                           *
-// * Returns: int64_t                                                          *
+// * Returns: PrivStatus                                                       *
 // *                                                                           *
-// *    Returns the number of component operations.                            *
+// *    STATUS_GOOD     : found operations                                     *
+// *    STATUS_NOTFOUND : no operations were found                             *
+// *    STATUS_ERROR    : unexpected error reading metadata                    *
 // *                                                                           *
 // *****************************************************************************
-int64_t PrivMgrComponentOperations::getCount()
-   
+PrivStatus PrivMgrComponentOperations::getCount(
+  const int64_t &componentUID,
+  int32_t &numOps,
+  int32_t &numUnusedOps)
 {
-                                   
-std::string whereClause(" ");   
+  char buf[getMetadataLocation().size() + 300];
+  snprintf (buf, sizeof(buf), "select distinct is_system, count(is_system) over "
+            "(partition by is_system) from %s.%s where component_uid = %ld",
+            getMetadataLocation().c_str(),PRIVMGR_COMPONENT_OPERATIONS,
+            componentUID);
 
-int64_t rowCount = 0;   
-MyTable &myTable = static_cast<MyTable &>(myTable_);
+  // set pointer in diags area
+  int32_t diagsMark = pDiags_->mark();
 
-// set pointer in diags area
-int32_t diagsMark = pDiags_->mark();
+  ExeCliInterface cliInterface(STMTHEAP, 0, NULL,
+  CmpCommon::context()->sqlSession()->getParentQid());
+  Queue * tableQueue = NULL;
+  int32_t cliRC =  cliInterface.fetchAllRows(tableQueue, buf, 0, false, false, true);
 
-PrivStatus privStatus = myTable.selectCountWhere(whereClause,rowCount);
+  if (cliRC < 0)
+  {
+    cliInterface.retrieveSQLDiagnostics(CmpCommon::diags());
+    return STATUS_ERROR;
+  }
+  if (cliRC == 100) // did not find the row
+  {
+    pDiags_->rewind(diagsMark);
+    return STATUS_NOTFOUND;
+  }
 
-   if (privStatus != STATUS_GOOD)
-      pDiags_->rewind(diagsMark);
-      
-   return rowCount;
+  numOps = 0;
+  numUnusedOps = 0;
 
+  char * ptr = NULL;
+  int32_t len = 0;
+  char value[3];
+
+  int32_t opTypeCount;
+
+  // column 0: operation type 
+  // column 1: count of rows for operation type
+  tableQueue->position();
+  for (int idx = 0; idx < tableQueue->numEntries(); idx++)
+  {
+    OutputInfo * pCliRow = (OutputInfo*)tableQueue->getNext();
+    pCliRow->get(0,ptr,len);
+    strncpy(value,ptr,len);
+    value[len] = 0;
+    pCliRow->get(1,ptr,len);
+    opTypeCount = *(reinterpret_cast<int32_t*>(ptr));
+
+    numOps += opTypeCount;
+    if (value[0] == 'U')
+      numUnusedOps += opTypeCount;
+  }
+
+  return STATUS_GOOD;
 }
 //***************** End of PrivMgrComponentOperations::getCount ****************
 
@@ -961,6 +1004,93 @@
 
 
 // *****************************************************************************
+//  method:  updateOperationCodes
+// 
+// Goes through the ComponentOpStruct for the sql_operations component and
+//   creates two lists:
+//     list of unused operations
+//     list of system operations.
+//
+// Updates the component_operations table and 
+//   sets is_system to "U" for unused operations
+//   sets is_system to "Y" for system operations
+//
+// TBD - add support for all components, not just sql_operations
+// *****************************************************************************
+PrivStatus PrivMgrComponentOperations::updateOperationCodes(
+  const int64_t & componentUID  )
+{
+   if (componentUID != SQL_OPERATIONS_COMPONENT_UID)
+   {
+      PRIVMGR_INTERNAL_ERROR("Invalid component UID in PrivMgrComponentOperations::updateOperationCodes");
+      return STATUS_ERROR;
+   }
+
+   std::string unusedItems ("where component_uid = ");
+   unusedItems += UIDToString(componentUID);
+   unusedItems += " and operation_code in (";
+   std::string systemItems(unusedItems);
+
+   size_t numOps = sizeof(sqlOpList)/sizeof(ComponentOpStruct);
+   bool firstUnusedOp = true;
+   bool firstSystemOp = true;
+   for (int i = 0; i < numOps; i++)
+   {
+      const ComponentOpStruct &opDefinition = sqlOpList[i];
+      if (opDefinition.unusedOp)
+      {
+         if (firstUnusedOp)
+         {
+            unusedItems += "'";
+            firstUnusedOp = false;
+         }
+         else
+            unusedItems += ", '";
+
+         unusedItems += opDefinition.operationCode;
+         unusedItems += "'";
+      }
+
+
+     else
+      {
+         if (firstSystemOp)
+         {
+            systemItems += "'";
+            firstSystemOp = false;
+         }
+         else
+            systemItems += ", '";
+
+         systemItems += opDefinition.operationCode;
+         systemItems += "'";
+      }
+
+   }
+
+   MyTable &myTable = static_cast<MyTable &>(myTable_);
+
+   // Change system components to unused components
+   if (!firstUnusedOp)
+   {
+      unusedItems += ")";
+      std::string setClause("set is_system = 'U' ");
+      if (myTable.update(setClause, unusedItems) == STATUS_ERROR)
+         return STATUS_ERROR;
+   }
+
+    // Change unused components to system components
+   if (!firstSystemOp)
+   {
+      systemItems += ")";
+      std::string setClause("set is_system = 'Y' ");
+      if (myTable.update(setClause, systemItems) == STATUS_ERROR)
+         return STATUS_ERROR;
+   }
+   return STATUS_GOOD;
+}
+
+// *****************************************************************************
 // *                                                                           *
 // * Function: PrivMgrComponentOperations::nameExists                          *
 // *                                                                           *
@@ -1005,9 +1135,6 @@
 //******************** End of PrivMgrComponents::nameExists ********************
 
 
-
-
-
 // *****************************************************************************
 //    MyTable methods
 // *****************************************************************************
@@ -1050,7 +1177,7 @@
 
 // Check the last row read before reading metadata.
    if (lastRowRead_.lookupByCode(componentUID,operationCode,
-                                 row.operationName_,row.isSystem_,
+                                 row.operationName_,row.operationType_,
                                  row.operationDescription_))
    {
       row.componentUID_ = componentUID; 
@@ -1175,7 +1302,7 @@
 
 // Check the last row read before reading metadata.
    if (lastRowRead_.lookupByName(componentUID,operationName,
-                                 row.operationCode_,row.isSystem_,
+                                 row.operationCode_,row.operationType_,
                                  row.operationDescription_))
    {
       row.componentUID_ = componentUID; 
@@ -1242,23 +1369,16 @@
 // *****************************************************************************
 PrivStatus MyTable::insert(const PrivMgrMDRow & rowIn)
 {
+   char insertStatement[1000];
+   const MyRow & row = static_cast<const MyRow &>(rowIn);
+   char operationType = PrivMgrComponentOperations::compTypeToLit(row.operationType_);
 
-char insertStatement[1000];
-
-const MyRow & row = static_cast<const MyRow &>(rowIn);
-char isSystem[3] = {0};
-
-   if (row.isSystem_)
-      isSystem[0] = 'Y';
-   else
-      isSystem[0] = 'N';
-
-   sprintf(insertStatement, "insert into %s values (%ld, '%s', '%s', '%s', '%s')",     
+   sprintf(insertStatement, "insert into %s values (%ld, '%s', '%s', '%c', '%s')",     
            tableName_.c_str(),
            row.componentUID_,
            row.operationCode_.c_str(),
            row.operationName_.c_str(),
-           isSystem,
+           operationType,
            row.operationDescription_.c_str());
            
    return CLIImmediate(insertStatement);
@@ -1340,10 +1460,7 @@
    cliInterface.getPtrAndLen(4,ptr,len);
    strncpy(value,ptr,len);
    value[len] = 0;
-   if (value[0] == 'Y')
-      row.isSystem_ = true;
-   else
-      row.isSystem_ = false;
+   row.operationType_ = PrivMgrComponentOperations::compTypeToEnum(value[0]);
       
    // column 5: operation_description
    cliInterface.getPtrAndLen(5,ptr,len);
@@ -1360,6 +1477,25 @@
 
 
 // *****************************************************************************
+// method:  update
+//
+// Updates metadata based on the passed in set and where clauses.
+// *****************************************************************************
+PrivStatus MyTable::update(
+  const std::string & setClause,
+  const std::string & whereClause)
+{
+   char updateStatement[setClause.size() + whereClause.size() + tableName_.size() + 100];
+
+   sprintf(updateStatement, "update %s %s %s",
+           tableName_.c_str(),
+           setClause.c_str(),
+           whereClause.c_str());
+           
+   return CLIImmediate(updateStatement);
+}
+
+// *****************************************************************************
 //    MyRow methods
 // *****************************************************************************
 
@@ -1384,9 +1520,8 @@
 // *  <operationName>                 std::string &                   Out      *
 // *    passes back the name of the component operation.                       *
 // *                                                                           *
-// *  <isSystem>                      bool &                          Out      *
-// *    passes back true if the component operation is a system level          *
-// *  component operation, otherwise false.                                    *
+// *  <operationType>                 OperationType &                 Out      *
+// *    passes back the component type, system, user, or unused.               *
 // *                                                                           *
 // *  <operationDescription>          std::string &                   Out      *
 // *    passes back the description of the component operation.                *
@@ -1403,7 +1538,7 @@
    const int64_t componentUID,
    const std::string & operationCode,
    std::string & operationName,
-   bool & isSystem,
+   PrivMgrComponentOperations::OperationType & operationType,
    std::string & operationDescription) 
    
 {
@@ -1415,7 +1550,7 @@
        operationCode != operationCode)
       return false;
       
-   isSystem = isSystem_;
+   operationType = operationType_;
    operationName = operationName_;
    operationDescription = operationDescription_;
    return true;
@@ -1445,9 +1580,8 @@
 // *  <operationCode>                 std::string &                   Out      *
 // *    passes back the code associated with the component operation.          *
 // *                                                                           *
-// *  <isSystem>                      bool &                          Out      *
-// *    passes back true if the component operation is a system level          *
-// *  component operation, otherwise false.                                    *
+// *  <OperationType>                 operationType &                 Out      *
+// *    passes back the component type, system, user, or unused.               *
 // *                                                                           *
 // *  <operationDescription>          std::string &                   Out      *
 // *    passes back the description of the component operation.                *
@@ -1464,7 +1598,7 @@
    const int64_t componentUID,
    const std::string & operationName,
    std::string & operationCode,
-   bool & isSystem,
+   PrivMgrComponentOperations::OperationType & operationType,
    std::string & operationDescription) 
    
 {
@@ -1476,7 +1610,7 @@
        operationName != operationName_)
       return false;
       
-   isSystem = isSystem_;
+   operationType = operationType_;
    operationCode = operationCode_;
    operationDescription = operationDescription_;
    return true;
@@ -1585,10 +1719,7 @@
   pCliRow->get(3,ptr,len);
   strncpy(value,ptr,len);
   value[len] = 0;
-  if (value[0] == 'Y')
-     row.isSystem_ = true;
-  else
-     row.isSystem_ = false;
+  row.operationType_ = PrivMgrComponentOperations::compTypeToEnum(value[0]);
 
   // column 5: OPERATION_DESCRIPTION
   pCliRow->get(4,ptr,len);
diff --git a/core/sql/sqlcomp/PrivMgrComponentOperations.h b/core/sql/sqlcomp/PrivMgrComponentOperations.h
index 7d0069d..4e769c6 100644
--- a/core/sql/sqlcomp/PrivMgrComponentOperations.h
+++ b/core/sql/sqlcomp/PrivMgrComponentOperations.h
@@ -40,6 +40,11 @@
 {
 public:
 
+   enum OperationType { OP_TYPE_UNKNOWN,
+                        OP_TYPE_SYSTEM,
+                        OP_TYPE_USER,
+                        OP_TYPE_UNUSED };
+
    // -------------------------------------------------------------------
    // Constructors and destructors:
    // -------------------------------------------------------------------
@@ -55,6 +60,27 @@
     
    void clear();
 
+   static OperationType compTypeToEnum (const char operationType )
+   {
+      switch (operationType)
+      {
+         case 'Y': return OP_TYPE_SYSTEM; 
+         case 'N': return OP_TYPE_USER; 
+         case 'U': return OP_TYPE_UNUSED; 
+         default: return OP_TYPE_UNKNOWN; 
+      }
+   }
+   static char compTypeToLit (OperationType type)
+   {
+      switch(type)
+      {
+         case OP_TYPE_SYSTEM: return 'Y';
+         case OP_TYPE_USER: return 'N'; 
+         case OP_TYPE_UNUSED: return 'U';
+         default: return ' ';
+      }
+   }
+   
    PrivStatus createOperation(
       const std::string & componentName,
       const std::string & operationName,
@@ -67,7 +93,7 @@
       const int64_t componentUID,
       const std::string & operationName,
       const std::string & operationCode,
-      const bool isSystemOperation,
+      const bool operationTypeUnused,
       const std::string & operationDescription,
       const int32_t granteeID,
       const std::string & granteeName,
@@ -103,10 +129,16 @@
       bool isSystem,
       std::string & operationDescription);
 
-   int64_t getCount();
-   
+   PrivStatus getCount(
+     const int64_t &componentUID,
+     int32_t &numOps,
+     int32_t &numUnusedOps);
+
    bool isComponentUsed(const std::string & componentUIDString);      
       
+   PrivStatus updateOperationCodes(
+      const int64_t & componentUID);
+
    bool nameExists(
       const int64_t componentUID,
       const std::string & operationName);
diff --git a/core/sql/sqlcomp/PrivMgrComponentPrivileges.cpp b/core/sql/sqlcomp/PrivMgrComponentPrivileges.cpp
index a82da0f..257a123 100644
--- a/core/sql/sqlcomp/PrivMgrComponentPrivileges.cpp
+++ b/core/sql/sqlcomp/PrivMgrComponentPrivileges.cpp
@@ -23,6 +23,7 @@
 #include "PrivMgrComponentPrivileges.h"
 
 #include "PrivMgrDefs.h"  
+#include "PrivMgrComponentDefs.h"
 #include "PrivMgrMD.h"
 #include "PrivMgrMDTable.h"
 #include "PrivMgrComponents.h"
@@ -142,12 +143,14 @@
     
    inline void clear() { lastRowRead_.clear(); };
       
-   PrivStatus fetchDMLPrivInfo(
+   PrivStatus fetchCompPrivInfo(
       const int32_t                granteeID,
       const std::vector<int32_t> & roleIDs,
-      PrivObjectBitmap           & DMLBitmap,
-      bool                       & hasManagePrivileges);
-      
+      PrivObjectBitmap           & DMLPrivs,
+      bool                       & hasManagePrivPriv,
+      bool                       & hasSelectMetadata,
+      bool                       & hasAnyManagePriv);
+
    PrivStatus fetchOwner(
       const int64_t componentUID,
       const std::string & operationCode,
@@ -430,8 +433,8 @@
 // *    is a string representation of the unique ID associated with the        *
 // *    component.                                                             *
 // *                                                                           *
-// *  <operationCode>                 const std::string &             In       *
-// *    is the two character code associated with the component operation.     *
+// *  <operationCodeList>             const std::string &             In       *
+// *    is a list of 2 character operation codes associateed with the component*
 // *                                                                           *
 // *****************************************************************************
 // *                                                                           *
@@ -447,10 +450,8 @@
    const std::string & operationCode) 
    
 {
-
-MyTable &myTable = static_cast<MyTable &>(myTable_);
-
-std::string whereClause("WHERE ");
+  MyTable &myTable = static_cast<MyTable &>(myTable_);
+  std::string whereClause("WHERE ");
 
    whereClause += "COMPONENT_UID = ";
    whereClause += componentUIDString.c_str();
@@ -458,11 +459,8 @@
    whereClause += operationCode.c_str();
    whereClause += "'";
    
-   return myTable.deleteWhere(whereClause);
-
+  return myTable.deleteWhere(whereClause);
 }
-//*********** End of PrivMgrComponentPrivileges::dropAllForOperation ***********
-
 
 
 // *****************************************************************************
@@ -593,11 +591,15 @@
 // *    Returns the number of grants of component privileges.                  *
 // *                                                                           *
 // *****************************************************************************
-int64_t PrivMgrComponentPrivileges::getCount()
-   
+int64_t PrivMgrComponentPrivileges::getCount(int_32 componentUID)
 {
                                    
-std::string whereClause(" ");   
+std::string whereClause(" ");
+if (componentUID != INVALID_COMPONENT_UID)
+{
+  whereClause = "where component_uid = ";
+  whereClause += to_string((long long int)componentUID);
+}
 
 int64_t rowCount = 0;   
 MyTable &myTable = static_cast<MyTable &>(myTable_);
@@ -619,10 +621,10 @@
 
 // *****************************************************************************
 // *                                                                           *
-// * Function: PrivMgrComponentPrivileges::getSQLDMLPrivileges                 *
+// * Function: PrivMgrComponentPrivileges::getSQLCompPrivs                     *
 // *                                                                           *
-// *    Returns the SQL_OPERATION privileges associated with DML privileges    *
-// * for the specified authorization ID.                                       *
+// *    Returns the SQL_OPERATIONS privileges that may affect privileges       *
+// * for metadata tables.                                                      *
 // *                                                                           *
 // *****************************************************************************
 // *                                                                           *
@@ -637,25 +639,35 @@
 // *  <DMLBitmap>                     PrivObjectBitmap &              In       *
 // *    passes back the system-level DML privileges granted to the grantee.    *
 // *                                                                           *
-// *  <hasManagePrivileges>           bool &                          In       *
+// *  <hasManagePrivPriv>             bool &                          In       *
 // *    passes back if the user has MANAGE_PRIVILEGES authority.               *
 // *                                                                           *
+// *  <hasSelectMetadata>             bool &                          In       *
+// *    passes back if the user has DML_SELECT_PRIVILEGE                       *
+// *                                                                           *
+// *  <hasAnyManagePriv>              bool &                          In       *
+// *    passes back if the user has any MANAGE privilege                       *
+// *                                                                           *
 // *****************************************************************************
-void PrivMgrComponentPrivileges::getSQLDMLPrivileges(
+
+void PrivMgrComponentPrivileges::getSQLCompPrivs(
    const int32_t                granteeID,
    const std::vector<int32_t> & roleIDs,
-   PrivObjectBitmap           & DMLBitmap,
-   bool                       & hasManagePrivileges)
+   PrivObjectBitmap           & DMLPrivs,
+   bool                       & hasManagePrivPriv,
+   bool                       & hasSelectMetadata,
+   bool                       & hasAnyManagePriv)
 
 {
-                                   
+
 MyTable &myTable = static_cast<MyTable &>(myTable_);
 
 // set pointer in diags area
 int32_t diagsMark = pDiags_->mark();
 
-PrivStatus privStatus = myTable.fetchDMLPrivInfo(granteeID,roleIDs,DMLBitmap,
-                                                 hasManagePrivileges);
+PrivStatus privStatus = myTable.fetchCompPrivInfo(granteeID,roleIDs,DMLPrivs,
+                                                  hasManagePrivPriv, hasSelectMetadata,
+                                                  hasAnyManagePriv);
 
    if (privStatus != STATUS_GOOD)
       pDiags_->rewind(diagsMark);
@@ -2033,7 +2045,7 @@
 
 // *****************************************************************************
 // *                                                                           *
-// * Function: MyTable::fetchDMLPrivInfo                                       *
+// * Function: MyTable::fetchCompPrivInfo                                      *
 // *                                                                           *
 // *    Reads from the COMPONENT_PRIVILEGES table and returns the              * 
 // *    SQL_OPERATIONS privileges associated with DML privileges.              *
@@ -2051,7 +2063,7 @@
 // *  <DMLBitmap>                     PrivObjectBitmap &              In       *
 // *    passes back the system-level DML privileges granted to the grantee.    *
 // *                                                                           *
-// *  <hasManagePrivileges>           bool &                          In       *
+// *  <hasManagePrivPriv>             bool &                          In       *
 // *    passes back if the user has MANAGE_PRIVILEGES authority.               *
 // *                                                                           *
 // *****************************************************************************
@@ -2062,38 +2074,31 @@
 // *           *: Error encountered.                                           *
 // *                                                                           *
 // *****************************************************************************
-PrivStatus MyTable::fetchDMLPrivInfo(
+PrivStatus MyTable::fetchCompPrivInfo(
    const int32_t                granteeID,
    const std::vector<int32_t> & roleIDs,
-   PrivObjectBitmap           & DMLBitmap,
-   bool                       & hasManagePrivileges)
-   
+   PrivObjectBitmap           & DMLPrivs,
+   bool                       & hasManagePrivPriv,
+   bool                       & hasSelectMetadata,
+   bool                       & hasAnyManagePriv)
+
 {
-
-// Check the last grantee data read before reading metadata.
-
+   // Check the last grantee data read before reading metadata.
+#if 0
+   // If privileges change between calls, then cache is not refreshed
+   // comment out this check for now
    if (userDMLPrivs_.granteeID_ == granteeID && 
        userDMLPrivs_.roleIDs_ == roleIDs)
    {
-      DMLBitmap = userDMLPrivs_.DMLBitmap_;
-      hasManagePrivileges = userDMLPrivs_.managePrivileges_;
+      DMLPrivs = userDMLPrivs_.DMLPrivs_;
+      hasManagePrivPriv = userDMLPrivs_.managePrivileges_;
       return STATUS_GOOD;
    } 
-      
-// Not found in cache, look for the priv info in metadata.
-// ??? - is the component_uid for SQL_OPERATIONS always going to be 1?
-std::string whereClause("WHERE COMPONENT_UID = 1 AND OPERATION_CODE IN ('");
+#endif
+   // Not found in cache, look for the priv info in metadata.
+   std::string whereClause("WHERE COMPONENT_UID = 1 ");
 
-   for (SQLOperation operation = SQLOperation::FIRST_DML_PRIV;
-        static_cast<int>(operation) <= static_cast<int>(SQLOperation::LAST_DML_PRIV); 
-        operation = static_cast<SQLOperation>(static_cast<int>(operation) + 1))
-   {
-      whereClause += PrivMgr::getSQLOperationCode(operation);
-      whereClause += "','";
-   }
-
-   whereClause += PrivMgr::getSQLOperationCode(SQLOperation::MANAGE_PRIVILEGES);
-   whereClause += "') AND GRANTEE_ID IN (";
+   whereClause += "AND GRANTEE_ID IN (";
    whereClause += PrivMgr::authIDToString(granteeID);
    whereClause += ",";
    for (size_t ri = 0; ri < roleIDs.size(); ri++)
@@ -2103,76 +2108,86 @@
    }
    whereClause += PrivMgr::authIDToString(PUBLIC_USER);
    whereClause += ")";
-   
-std::string orderByClause;
-   
-std::vector<MyRow> rows;
 
-PrivStatus privStatus = selectAllWhere(whereClause,orderByClause,rows);
+   std::string orderByClause;
+
+   std::vector<MyRow> rows;
+
+   PrivStatus privStatus = selectAllWhere(whereClause,orderByClause,rows);
 
    if (privStatus != STATUS_GOOD && privStatus != STATUS_WARNING)
       return privStatus;
-   
-// Initialize cache.
+
+   // Initialize cache.
    userDMLPrivs_.granteeID_ = granteeID;
    userDMLPrivs_.roleIDs_ = roleIDs;
    userDMLPrivs_.managePrivileges_ = false;
-   userDMLPrivs_.DMLBitmap_.reset();  
-    
-   for (size_t r = 0; r < rows.size(); r++)
+   userDMLPrivs_.DMLBitmap_.reset();
+
+   hasAnyManagePriv = false;
+
+ for (size_t r = 0; r < rows.size(); r++)
    {
       MyRow &row = rows[r];
-      
+
+      if (PrivMgr::isSQLManageOperation(row.operationCode_.c_str()))
+        hasAnyManagePriv = true;
+
       if (row.operationCode_ == PrivMgr::getSQLOperationCode(SQLOperation::MANAGE_PRIVILEGES))
       {
          userDMLPrivs_.managePrivileges_ = true;
          continue;
-      }   
-      
+      }
+
       if (row.operationCode_ == PrivMgr::getSQLOperationCode(SQLOperation::DML_DELETE))
       {
          userDMLPrivs_.DMLBitmap_.set(DELETE_PRIV);
          continue;
-      }   
-      
+      }
+
       if (row.operationCode_ == PrivMgr::getSQLOperationCode(SQLOperation::DML_INSERT))
       {
          userDMLPrivs_.DMLBitmap_.set(INSERT_PRIV);
          continue;
-      }   
-      
+      }
       if (row.operationCode_ == PrivMgr::getSQLOperationCode(SQLOperation::DML_REFERENCES))
       {
          userDMLPrivs_.DMLBitmap_.set(REFERENCES_PRIV);
          continue;
-      }   
-      
+      }
+
       if (row.operationCode_ == PrivMgr::getSQLOperationCode(SQLOperation::DML_SELECT))
       {
          userDMLPrivs_.DMLBitmap_.set(SELECT_PRIV);
          continue;
-      }   
-      
+      }
+
+      if (row.operationCode_ == PrivMgr::getSQLOperationCode(SQLOperation::DML_EXECUTE))
+      {
+         userDMLPrivs_.DMLBitmap_.set(EXECUTE_PRIV);
+         continue;
+      }
+
       if (row.operationCode_ == PrivMgr::getSQLOperationCode(SQLOperation::DML_UPDATE))
       {
          userDMLPrivs_.DMLBitmap_.set(UPDATE_PRIV);
          continue;
-      }   
-      
+      }
+
       if (row.operationCode_ == PrivMgr::getSQLOperationCode(SQLOperation::DML_USAGE))
       {
          userDMLPrivs_.DMLBitmap_.set(USAGE_PRIV);
          continue;
-      }   
+      }
    }
-   
-   hasManagePrivileges = userDMLPrivs_.managePrivileges_;
-   DMLBitmap = userDMLPrivs_.DMLBitmap_;   
-   
-   return STATUS_GOOD;
 
-}   
-//******************* End of MyTable::fetchDMLPrivInfo *************************
+   hasManagePrivPriv = userDMLPrivs_.managePrivileges_;
+   DMLPrivs = userDMLPrivs_.DMLBitmap_;
+
+
+   return STATUS_GOOD;
+}
+//******************* End of MyTable::fetchCompPrivInfo*************************
 
 // *****************************************************************************
 // *                                                                           *
diff --git a/core/sql/sqlcomp/PrivMgrComponentPrivileges.h b/core/sql/sqlcomp/PrivMgrComponentPrivileges.h
index b87e31f..3f7eadf 100644
--- a/core/sql/sqlcomp/PrivMgrComponentPrivileges.h
+++ b/core/sql/sqlcomp/PrivMgrComponentPrivileges.h
@@ -82,14 +82,16 @@
       const std::string & componentName,
       const std::string & operationName);
       
-   int64_t getCount();
+   int64_t getCount( const int32_t componentUID = INVALID_COMPONENT_UID );
      
-   void getSQLDMLPrivileges(
+   void getSQLCompPrivs(
       const int32_t                granteeID,
       const std::vector<int32_t> & roleIDs,
-      PrivObjectBitmap           & DMLBitmap,
-      bool                       & hasManagePrivileges);
-      
+      PrivObjectBitmap           & DMLPrivs,
+      bool                       & hasManagePrivPriv,
+      bool                       & hasSelectMetadata,
+      bool                       & hasAnyManagePriv);
+
    PrivStatus grantPrivilege(
       const std::string & componentName,
       const std::vector<std::string> & operations,
diff --git a/core/sql/sqlcomp/PrivMgrDefs.h b/core/sql/sqlcomp/PrivMgrDefs.h
index 5820460..8f69e9e 100644
--- a/core/sql/sqlcomp/PrivMgrDefs.h
+++ b/core/sql/sqlcomp/PrivMgrDefs.h
@@ -38,6 +38,13 @@
 // *
 // *****************************************************************************
 
+#define PRIVMGR_INTERNAL_ERROR(text)                                      \
+   *pDiags_ << DgSqlCode(-CAT_INTERNAL_EXCEPTION_ERROR)                   \
+            << DgString0(__FILE__)                                        \
+            << DgInt0(__LINE__)                                           \
+            << DgString1(text)                                            
+
+
 // Returns the result of the operation 
 enum PrivStatus { STATUS_UNKNOWN   = 20,
                   STATUS_GOOD      = 21,
@@ -70,16 +77,6 @@
 }
   
 
-enum {SQL_OPERATIONS_COMPONENT_UID = 1};
-#define SQL_OPERATION_NAME "SQL_OPERATIONS"
-
-#define PRIVMGR_INTERNAL_ERROR(text)                                      \
-   *pDiags_ << DgSqlCode(-CAT_INTERNAL_EXCEPTION_ERROR)                   \
-            << DgString0(__FILE__)                                        \
-            << DgInt0(__LINE__)                                           \
-            << DgString1(text)                                            
-
-
 enum class PrivClass {
    ALL = 2,
    OBJECT = 3,
@@ -155,77 +152,6 @@
    
 }
      
-// Defines the list of privileges that are supported for the 
-// SQLOperation component
-enum class SQLOperation {
-   ALTER = 2,
-   ALTER_LIBRARY,
-   ALTER_ROUTINE,
-   ALTER_ROUTINE_ACTION,
-   ALTER_SCHEMA,
-   ALTER_SEQUENCE,
-   ALTER_SYNONYM,
-   ALTER_TABLE,
-   ALTER_TRIGGER,
-   ALTER_VIEW,
-   CREATE,
-   CREATE_CATALOG,
-   CREATE_INDEX,
-   CREATE_LIBRARY,
-   CREATE_PROCEDURE,
-   CREATE_ROUTINE,
-   CREATE_ROUTINE_ACTION,
-   CREATE_SCHEMA,
-   CREATE_SEQUENCE,
-   CREATE_SYNONYM,
-   CREATE_TABLE,
-   CREATE_TRIGGER,
-   CREATE_VIEW,
-   DML_DELETE,
-   DML_EXECUTE,
-   DML_INSERT,
-   DML_REFERENCES,
-   DML_SELECT,
-   DML_UPDATE,
-   DML_USAGE,
-   DROP,
-   DROP_CATALOG,
-   DROP_INDEX,
-   DROP_LIBRARY,
-   DROP_PROCEDURE,
-   DROP_ROUTINE,
-   DROP_ROUTINE_ACTION,
-   DROP_SCHEMA,
-   DROP_SEQUENCE,
-   DROP_SYNONYM,
-   DROP_TABLE,
-   DROP_TRIGGER,
-   DROP_VIEW,
-   MANAGE,
-   MANAGE_COMPONENTS,
-   MANAGE_LIBRARY,
-   MANAGE_LOAD,
-   MANAGE_PRIVILEGES,
-   MANAGE_ROLES,
-   MANAGE_STATISTICS,
-   MANAGE_USERS,
-   QUERY_ACTIVATE,
-   QUERY_CANCEL,
-   QUERY_SUSPEND,
-   REMAP_USER,
-   REGISTER_HIVE_OBJECT,
-   SHOW,
-   UNREGISTER_HIVE_OBJECT,
-   USE_ALTERNATE_SCHEMA,
-   COMMENT,
-   FIRST_OPERATION = ALTER,
-   LAST_OPERATION = COMMENT,
-   NUMBER_OF_OPERATIONS = LAST_OPERATION - FIRST_OPERATION + 1,
-   UNKNOWN,
-   FIRST_DML_PRIV = DML_DELETE,
-   LAST_DML_PRIV = DML_USAGE
-};
-
 enum class PrivDropBehavior {
    CASCADE = 2,
    RESTRICT = 3
diff --git a/core/sql/sqlcomp/PrivMgrMD.cpp b/core/sql/sqlcomp/PrivMgrMD.cpp
index 91047e7..94e8226 100644
--- a/core/sql/sqlcomp/PrivMgrMD.cpp
+++ b/core/sql/sqlcomp/PrivMgrMD.cpp
@@ -153,127 +153,171 @@
 // ----------------------------------------------------------------------------
 
 PrivStatus PrivMgrMDAdmin::initializeComponentPrivileges()
-
 {
    std::string traceMsg;
-   log(__FILE__, "initializing component privileges", -1);
+   log(__FILE__, "Initializing component privileges", -1);
    PrivStatus privStatus = STATUS_GOOD;
 
-  // First register the component.
-  PrivMgrComponents components(metadataLocation_,pDiags_);
-  bool componentExists = (components.exists(SQL_OPERATION_NAME));
-  if (!componentExists)
-  {
-    privStatus = components.registerComponentInternal(SQL_OPERATION_NAME,
-                                                      SQL_OPERATIONS_COMPONENT_UID,
-                                                      true,"Component for SQL operations");
-    if (privStatus != STATUS_GOOD)
-    {
-      log(__FILE__, "ERROR: unable to register SQL_OPERATIONS component", -1);
-      return STATUS_ERROR;
-    }
-  }
-      
-// Component is registered, now create all the operations associated with
-// the component.  A grant from the system to the grantee (DB__ROOT) will
-// be added for each operation.                                         
-                                
-PrivMgrComponentOperations componentOperations(metadataLocation_,pDiags_);
-std::vector<std::string> operationCodes;
-
-int32_t DB__ROOTID = ComUser::getRootUserID();
-std::string DB__ROOTName(ComUser::getRootUserName());
-
-   for (SQLOperation operation = SQLOperation::FIRST_OPERATION;
-        static_cast<int>(operation) <= static_cast<int>(SQLOperation::LAST_OPERATION); 
-        operation = static_cast<SQLOperation>(static_cast<int>(operation) + 1))
+   PrivMgrComponents components(metadataLocation_,pDiags_);
+   size_t numComps = sizeof(componentList)/sizeof(ComponentListStruct);
+   for (int c = 0; c < numComps; c++)
    {
-      const char *codePtr = PrivMgr::getSQLOperationCode(operation);
-      privStatus = componentOperations.createOperationInternal(SQL_OPERATIONS_COMPONENT_UID,
-                                                               PrivMgr::getSQLOperationName(operation),
-                                                               codePtr,true,
-                                                               PrivMgr::getSQLOperationDescription(operation),
-                                                               DB__ROOTID,DB__ROOTName,-1,
-                                                               componentExists);
-                                                       
-      if (privStatus == STATUS_GOOD)
-         operationCodes.push_back(codePtr); 
-      else
+      // Get description of component
+      const ComponentListStruct &compDefinition = componentList[c];
+      int64_t compUID(compDefinition.componentUID);
+      std::string compName(compDefinition.componentName);
+      std::string compDef("System component ");
+      compDef += compName;
+
+      log(__FILE__, compDef, -1);
+
+      bool componentExists = (components.exists(compName));
+      if (!componentExists)
       {
-         traceMsg = "WARNING unable to create component operation: ";
-         traceMsg += PrivMgr::getSQLOperationName(operation);
-         log(__FILE__, traceMsg, -1);
-      } 
-   }
+        // Register component
+        privStatus = components.registerComponentInternal(compName,compUID,true,compDef);
+        if (privStatus != STATUS_GOOD)
+        {
+           traceMsg = "ERROR: unable to register component ";
+           traceMsg += compName.c_str();
+           log(__FILE__, traceMsg.c_str(), -1);
+           return STATUS_ERROR;
+        }
+      }
 
-// In the unlikely event no operations were created, we are done.   
-   if (operationCodes.size() == 0)
-      return STATUS_GOOD;
+      // Component is registered, now create all the operations associated with
+      // the component.  A grant from the system to the owner (DB__ROOT) will
+      // be added for each operation. In addition, set up the list of grants
+      // for different users/roles.
+      //   allOpsList - list of operations (granted to owner)
+      //   rootRoleList - list of operations granted to DB__ROOTROLE
+      //   publicList - list of operations granted to PUBLIC
+      std::vector<std::string> allOpsList;
+      std::vector<std::string> rootRoleList;
+      std::vector<std::string> publicList;
+
+      PrivMgrComponentPrivileges componentPrivileges(metadataLocation_,pDiags_);
+      PrivMgrComponentOperations componentOperations(metadataLocation_,pDiags_);
+      int32_t DB__ROOTID = ComUser::getRootUserID();
+      std::string DB__ROOTName(ComUser::getRootUserName());
+
+      int32_t numOps = compDefinition.numOps;
+      int32_t numExistingOps = 0;
+      int32_t numExistingUnusedOps = 0;
+      if (componentOperations.getCount(compUID, numExistingOps, numExistingUnusedOps) == STATUS_ERROR)
+        return STATUS_ERROR;
+
+      // Add any new operations
+      if ( numExistingOps < numOps)
+      {
+         // The ComponentOpStruct describes the component operations required for
+         // each component. Each entry contains the operationCode,
+         // operationName, whether the privileges should be granted for 
+         // DB__ROOTROLE, and PUBLIC, etc. 
+         for (int i = 0; i < numOps; i++)
+         {
+            const ComponentOpStruct opDefinition = compDefinition.componentOps[i];
+
+            std::string description = "Allow grantee to perform ";
+            description += opDefinition.operationName;
+            description += " operation";
+
+            // create the operation
+            privStatus = componentOperations.createOperationInternal(compUID,
+                                                                     opDefinition.operationName,
+                                                                     opDefinition.operationCode,
+                                                                     opDefinition.unusedOp,
+                                                                     description,
+                                                                     DB__ROOTID,DB__ROOTName,-1,
+                                                                     componentExists);
+                                                       
+           if (privStatus == STATUS_GOOD)
+           {
+              // All operations are included in the allOpsList
+              allOpsList.push_back(opDefinition.operationName);
+              if (opDefinition.isRootRoleOp)
+                rootRoleList.push_back(opDefinition.operationCode);
+              if (opDefinition.isPublicOp)
+                publicList.push_back(opDefinition.operationCode);
+           }
+           else
+           {
+              traceMsg = "WARNING unable to create component operation: ";
+              traceMsg += opDefinition.operationName;
+              log(__FILE__, traceMsg, -1);
+              return privStatus;
+           }   
+        }
+
+        // In the unlikely event no operations were created, we are done.   
+        if (allOpsList.size() == 0)
+           return STATUS_GOOD;
       
-PrivMgrComponentPrivileges componentPrivileges(metadataLocation_,pDiags_);
-   
-// Grant all SQL_OPERATIONS to DB__ROOTROLE WITH GRANT OPTION                                      
-   privStatus = componentPrivileges.grantPrivilegeInternal(SQL_OPERATIONS_COMPONENT_UID,
-                                                           operationCodes,
-                                                           ComUser::getRootUserID(),
-                                                           ComUser::getRootUserName(),
-                                                           ROOT_ROLE_ID,
-                                                           DB__ROOTROLE,-1,
-                                                           componentExists);
+        // Grant all SQL_OPERATIONS to DB__ROOTROLE WITH GRANT OPTION                                      
+        privStatus = componentPrivileges.grantPrivilegeInternal(compUID,
+                                                                rootRoleList,
+                                                                DB__ROOTID,
+                                                                ComUser::getRootUserName(),
+                                                                ROOT_ROLE_ID,
+                                                                DB__ROOTROLE,-1,
+                                                                componentExists);
                                                            
-   if (privStatus != STATUS_GOOD)
-   {
-      traceMsg = "ERROR unable to grant DB__ROOTROLE to components";
-      log(__FILE__, traceMsg, -1);
-      return privStatus;
-   }
+        if (privStatus != STATUS_GOOD)
+        {
+           traceMsg = "ERROR unable to grant DB__ROOTROLE to components";
+           log(__FILE__, traceMsg, -1);
+           return privStatus;
+        }
                                       
-// Grant SQL_OPERATIONS CREATE_SCHEMA and SHOW to PUBLIC 
-std::vector<std::string> CSOperationCodes;
+        // Grant privileges to PUBLIC
+        privStatus = componentPrivileges.grantPrivilegeInternal(compUID,
+                                                                publicList,
+                                                                DB__ROOTID,
+                                                                ComUser::getRootUserName(),
+                                                                PUBLIC_USER,
+                                                                PUBLIC_AUTH_NAME,0,
+                                                                componentExists);
+        if (privStatus != STATUS_GOOD)
+        {
+           traceMsg = "ERROR unable to grant PUBLIC to components";
+           log(__FILE__, traceMsg, -1);
+           return privStatus;
+        }
+      }
 
-   CSOperationCodes.push_back(PrivMgr::getSQLOperationCode(SQLOperation::CREATE_SCHEMA));
-   CSOperationCodes.push_back(PrivMgr::getSQLOperationCode(SQLOperation::SHOW));
-                                     
-   privStatus = componentPrivileges.grantPrivilegeInternal(SQL_OPERATIONS_COMPONENT_UID,
-                                                           CSOperationCodes,
-                                                           ComUser::getRootUserID(),
-                                                           ComUser::getRootUserName(),
-                                                           PUBLIC_USER,
-                                                           PUBLIC_AUTH_NAME,0,
-                                                           componentExists);
-                                      
-   if (privStatus != STATUS_GOOD)
-   {
-      traceMsg = "ERROR unable to grant PUBLIC to components";
-      log(__FILE__, traceMsg, -1);
-      return privStatus;
+      // Update component_privileges and update operation codes appropriately
+      size_t numUnusedOps = PrivMgr::getSQLUnusedOpsCount();
+      if (numExistingOps > 0 /* doing upgrade */ &&
+          (numUnusedOps != numExistingUnusedOps))
+      {
+         privStatus = componentOperations.updateOperationCodes(compUID);
+         if (privStatus == STATUS_ERROR)
+            return privStatus;
+      }
+
+      // Verify counts from tables.
+
+      // Minimum number of privileges granted is:
+      //   one for each operation (owner)
+      //   one for each entry in rootRoleList and publicList
+      // This check was added because of issues with insert/upsert, is it still needed?
+      int64_t expectedPrivCount = numOps + rootRoleList.size() + publicList.size();
+
+      if (componentPrivileges.getCount(compUID) < expectedPrivCount)
+      {
+         std::string message ("Expecting ");
+         message += to_string((long long int)expectedPrivCount);
+         message += " component privileges, instead ";
+         message += PrivMgr::authIDToString(numExistingOps);
+         message += " were found.";
+         traceMsg = "ERROR: ";
+         traceMsg += message;
+         log(__FILE__, message, -1);
+         PRIVMGR_INTERNAL_ERROR(message.c_str());
+         return STATUS_ERROR;
+      }
    }
-      
-// Verify counts for tables.
-
-// Minimum number of privileges granted is 2 for each operation (one each
-// for DB__ROOT and DB__ROOTROLE) plus the two grants to PUBLIC.
-
-int64_t expectedPrivCount = static_cast<int64_t>(SQLOperation::NUMBER_OF_OPERATIONS) * 2 + 2;
-
-   if (components.getCount() != 1 ||
-       componentOperations.getCount() != static_cast<int64_t>(SQLOperation::NUMBER_OF_OPERATIONS) ||
-       componentPrivileges.getCount() < expectedPrivCount)
-   {
-      std::string message ("Expecting ");
-      message += to_string((long long int)expectedPrivCount);
-      message += " component privileges, instead ";
-      message += to_string((long long int)componentPrivileges.getCount());
-      message += " were found.";
-      traceMsg = "ERROR: ";
-      traceMsg += message;
-      log(__FILE__, message, -1);
-      PRIVMGR_INTERNAL_ERROR(message.c_str());
-      return STATUS_ERROR;
-   }
-     
    return STATUS_GOOD; 
-
 }
 
 // ----------------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/PrivMgrPrivileges.cpp b/core/sql/sqlcomp/PrivMgrPrivileges.cpp
index 513a2bd..81e6b37 100644
--- a/core/sql/sqlcomp/PrivMgrPrivileges.cpp
+++ b/core/sql/sqlcomp/PrivMgrPrivileges.cpp
@@ -4375,7 +4375,7 @@
 // *  <objectType> is the type of the subject object.
 // *  <granteeID> specifies the userID to accumulate
 // *  <roleIDs> is vector of roleIDs granted to the grantee
-// *  <hasManagePrivileges> returns whether the grantee has MANAGE_PRIVILEGES authority
+// *  <hasManagePrivPriv> returns whether the grantee has MANAGE_PRIVILEGES authority
 // *  <summarizedPrivs> contains the summarized privileges
 // *                                                                     
 // * Returns: PrivStatus                                               
@@ -4390,12 +4390,12 @@
    const int32_t granteeID,
    const std::vector<int32_t> & roleIDs,
    PrivMgrDesc &summarizedPrivs,
-   bool & hasManagePrivileges,
+   bool & hasManagePrivPriv,
    std::vector <ComSecurityKey *>* secKeySet 
    )
 {
   PrivStatus retcode = STATUS_GOOD;
-  hasManagePrivileges = false;
+  hasManagePrivPriv = false;
   bool hasPublicGrantee = false;
   
   // Check to see if the granteeID is the system user
@@ -4406,7 +4406,7 @@
     bitmap.set();
     PrivMgrCoreDesc coreTablePrivs(bitmap, bitmap);
     summarizedPrivs.setTablePrivs(coreTablePrivs);
-    hasManagePrivileges = true;
+    hasManagePrivPriv = true;
     return STATUS_GOOD;
   }
   
@@ -4414,10 +4414,13 @@
   PrivObjectBitmap systemPrivs;
   PrivMgrComponentPrivileges componentPrivileges(metadataLocation_,pDiags_);
   
-  componentPrivileges.getSQLDMLPrivileges(granteeID,roleIDs,systemPrivs,
-                                          hasManagePrivileges);
+  bool hasSelectMetadata = false;
+  bool hasAnyManagePriv = false;
+  componentPrivileges.getSQLCompPrivs(granteeID,roleIDs,systemPrivs,
+                                      hasManagePrivPriv, hasSelectMetadata,
+                                      hasAnyManagePriv);
 
-  if (hasManagePrivileges && hasAllDMLPrivs(objectType,systemPrivs))
+  if (hasManagePrivPriv && hasAllDMLPrivs(objectType,systemPrivs))
   {
     PrivMgrCoreDesc coreTablePrivs(systemPrivs,systemPrivs);
     summarizedPrivs.setTablePrivs(coreTablePrivs);
@@ -4454,7 +4457,7 @@
   
     PrivObjectBitmap grantableBitmap;
   
-    if (hasManagePrivileges)
+    if (hasManagePrivPriv)
        grantableBitmap = systemPrivs;
   
     PrivMgrCoreDesc temp2(systemPrivs,grantableBitmap);
diff --git a/core/sql/sqlcomp/nadefaults.cpp b/core/sql/sqlcomp/nadefaults.cpp
index 73ab57c..bd7e334 100644
--- a/core/sql/sqlcomp/nadefaults.cpp
+++ b/core/sql/sqlcomp/nadefaults.cpp
@@ -2954,6 +2954,8 @@
   DD_____(TRAF_SAMPLE_TABLE_LOCATION,                  "/user/trafodion/sample/"),
   DDint__(TRAF_SEQUENCE_CACHE_SIZE,        "-1"),
 
+  DDint__(TRAF_SEQUENCE_RETRY_TIMES,        "100"),
+
   DDkwd__(TRAF_SIMILARITY_CHECK,			"ROOT"),
 
   DDkwd__(TRAF_STORE_OBJECT_DESC,                    "OFF"),   
diff --git a/docs/sql_reference/src/asciidoc/_chapters/sql_functions_and_expressions.adoc b/docs/sql_reference/src/asciidoc/_chapters/sql_functions_and_expressions.adoc
index 5dce089..44b968a 100644
--- a/docs/sql_reference/src/asciidoc/_chapters/sql_functions_and_expressions.adoc
+++ b/docs/sql_reference/src/asciidoc/_chapters/sql_functions_and_expressions.adoc
@@ -257,6 +257,8 @@
 | <<week_function,WEEK Function>>                                           | Returns an integer in the range 1 through 54 that represents the
 corresponding week of the year.
 | INTEGER (from 1 to 54)
+| <<unix_timestamp_function,UNIX_TIMESTAMP Function>>                       | Returns a Unix timestamp 
+| INTEGER 
 | <<year_function,YEAR Function>>                                           | Returns an integer that represents the year.
 | INTEGER 
 |===
@@ -442,7 +444,10 @@
 | <<nvl_function,NVL Function>>                                   | Returns the value of the first operand unless it is NULL, in which case it returns the value of the second operand.
 | <<user_function,USER Function>>                                 | Returns either the database user name of the current user who invoked the function or the database user name
 associated with the specified user ID number.
-| <<sys_guid_function,SYS_GUID Function>>                         | Returns a globally unique identifier.
+| <<sys_guid_function,SYS_GUID Function>>                         | Returns a globally unique identifier, similar to Oracle's SYS_GUID function.
+| <<uuid_function,UUID Function>>                                 | Returns a globally unique identifier.
+| <<uuid_short_function,UUID_SHORT Function>>                     | Returns a “short” universal identifier as a 64-bit unsigned integer.
+| <<sleep_function,SLEEP Function>>                               | Sleep for a number of seconds
 |===
 
 See the individual entry for the function.
@@ -11291,6 +11296,101 @@
 ```
 
 <<<
+[[uuid_function]]
+== UUID Function
+Returns a Universal Unique Identifier (UUID) generated according to RFC 4122. 
+A UUID is designed as a number that is globally unique in space and time. 
+Two calls to UUID() are expected to generate two different values, even if 
+these calls are performed on two separate devices not connected to each other.
+
+NOTE: UUID() behavior is non-deterministic. Therefore it is best to use it 
+only in SELECT lists. Using it in a WHERE clause, for example, may result in i
+non-deterministic predicate evaluation.
+
+
+```
+UUID ()
+```
+
+[[data_type_of_the_result]]
+==== Data Type of the Result
+
+The data type of the result is always CHAR(36).
+
+[[examples_of_uuid]]
+=== Examples of UUID
+
+* Returns a global unique identifier
++
+```
+SELECT UUID() AS ID FROM dual;
+
+ID
+-------------------------
+  5cdd380c-33ba-3216-1352-2c9d624042c3
+--- 1 row(s) selected.
+```
+
+<<<
+[[uuid_short_function]]
+== UUID_SHORT Function
+Returns a “short” universal identifier as a 64-bit unsigned integer.
+
+NOTE: UUID_SHORT() behavior is non-deterministic. Therefore it is best to use it 
+only in SELECT lists. Using it in a WHERE clause, for example, may result in i
+non-deterministic predicate evaluation.
+
+
+```
+UUID_SHORT ()
+```
+
+[[data_type_of_the_result]]
+==== Data Type of the Result
+
+The data type of the result is always UNSIGNED LARGEINT.
+
+[[examples_of_uuid_short]]
+=== Examples of UUID_SHORT
+
+* Returns a global unique identifier as a 64-bit unsigned integer.
++
+```
+SELECT UUID_SHORT() AS ID FROM dual;
+
+ID
+-------------------------
+  4716501302154732154 
+
+--- 1 row(s) selected.
+```
+
+<<<
+[[sleep_function]]
+== SLEEP Function
+Sleeps (pauses) for the number of seconds given by the duration argument, then returns 1. 
+
+```
+SLEEP( seconds )
+```
+
+[[examples_of_sleep]]
+=== Examples of SLEEP
+
+* Sleep (Pause) for a given number of seconds
++
+```
+SELECT SLEEP(5) AS ID FROM dual;
+
+(EXPR)
+-----------
+
+          1
+
+--- 1 row(s) selected.
+```
+
+<<<
 [[variance_function]]
 == VARIANCE Function
 
@@ -11508,6 +11608,39 @@
 2008-04-10 2008-04-21 08:15:00.000000   2008
 ```
 
+<<<
+[[unix_timestamp_function]]
+== UNIX_TIMESTAMP Function
+If called with no argument, returns a Unix timestamp (seconds since '1970-01-01 00:00:00' UTC) 
+as an unsigned integer. If UNIX_TIMESTAMP() is called with a date argument, it returns the value 
+of the argument as seconds since '1970-01-01 00:00:00' UTC.
+
+UNIX_TIMESTAMP is a MySQL SQL extension.
+
+```
+UNIX_TIMESTAMP (datetime-expression | emtpy)
+```
+
+* `_datetime-expression_`
++
+is an expression that evaluates to a datetime value of type DATE or
+TIMESTAMP. See <<datetime_value_expressions,Datetime Value Expressions>>.
+
+[[examples_of_unix_timestamp]]
+=== Examples of UNIX_TIMESTAMP 
+
++
+```
+>>select unix_timestamp() from dual;
+
+(EXPR)
+--------------------
+
+          1534672251
+
+--- 1 row(s) selected.
+
+```
 
 <<<
 [[zeroifnull_function]]