TRAFODION-3121 Enhance 'initialize trafodion' to return progress status

-- init traf will now return status during various steps.
   'Started' indication will be returned when that step starts.
   'Completed' will be returned when it completes successfully.
   'Failed' will be returned if that step fails.
   Elapsed time for each step will be shown in {ET hh:mm:ss} format.

-- method CmpSeabaseDDL::initSeabaseMD is rewritten and moved from
  file CmpSeabaseDDLcommon.cpp to new file CmpSeabaseDDLinitraf.cpp.

-- priv mgr tables are now always created during init traf.

-- a 'no return status' option has been added if status is not to be
  returned during init traf. This is used when init traf is called
  internally, for ex, during upgrade.
  It is not an externalized option.

-- Output of init traf is shown below.
   Note: output is not a printf/cout to stdout.
   It is returned as selected rows to the caller.

Apache Trafodion Conversational Interface 2.3.0
Copyright (c) 2015-2017 Apache Software Foundation
>>initialize trafodion;
Initialize Trafodion: Started

Verify User: Started
Verify User: Completed {ET: 00:00:00}

Version Check: Started
Version Check: Completed {ET: 00:00:00}

Create Metadata Tables: Started
Create Metadata Tables: Completed {ET: 00:00:49}

Update Metadata Tables: Started
Update Metadata Tables: Completed {ET: 00:00:06}

Create Schema Objects: Started
Create Schema Objects: Completed {ET: 00:00:20}

Create Metadata Views: Started
Create Metadata Views: Completed {ET: 00:00:05}

Create Repository Tables: Started
Create Repository Tables: Completed {ET: 00:00:16}

Create PrivMgr Tables: Started
Create PrivMgr Tables: Completed {ET: 00:00:29}

Create Library Manager: Started
Create Library Manager: Completed {ET: 00:00:51}

Initialize Trafodion: Completed {ET: 00:03:09}

--- SQL operation complete.


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

Branch: refs/heads/master
Commit: 6f0f102a0365f69693828e18ee48271a41f07611
Parents: 072708f
Author: Anoop Sharma <[email protected]>
Authored: Wed Jun 27 22:21:25 2018 +0000
Committer: Anoop Sharma <[email protected]>
Committed: Wed Jun 27 22:21:25 2018 +0000

----------------------------------------------------------------------
 core/sqf/conf/log4j.dtm.config            |   5 +
 core/sqf/conf/log4j.sql.config            |   3 +
 core/sql/arkcmp/CmpContext.cpp            |  11 +
 core/sql/arkcmp/CmpStatement.cpp          |   2 +-
 core/sql/cli/Cli.cpp                      |  12 +
 core/sql/cli/sqlcli.h                     |   5 +-
 core/sql/comexe/CmpMessage.cpp            |   3 +-
 core/sql/comexe/CmpMessage.h              |  37 +-
 core/sql/comexe/ComTdbDDL.h               |  13 +-
 core/sql/common/DateTimeType.cpp          |   6 +-
 core/sql/common/DatetimeType.h            |   2 +-
 core/sql/common/IntervalType.h            |   2 +-
 core/sql/executor/ExExeUtil.h             |   3 +-
 core/sql/executor/ExExeUtilCli.cpp        |  10 +
 core/sql/executor/ExExeUtilCli.h          |   2 +
 core/sql/executor/ExExeUtilCommon.cpp     |  13 +-
 core/sql/executor/ex_ddl.cpp              |  36 +-
 core/sql/executor/ex_ddl.h                |   1 +
 core/sql/executor/ex_transaction.cpp      |   3 +-
 core/sql/exp/exp_datetime.cpp             |   6 +-
 core/sql/generator/GenPreCode.cpp         |   4 +
 core/sql/generator/GenRelExeUtil.cpp      |   3 +-
 core/sql/generator/GenRelMisc.cpp         |   3 +
 core/sql/nskgmake/sqlcomp/Makefile        |   1 +
 core/sql/optimizer/QRDescGenerator.cpp    |   6 +-
 core/sql/optimizer/RelExeUtil.cpp         |   7 -
 core/sql/optimizer/RelExeUtil.h           |   1 +
 core/sql/parser/sqlparser.y               |  28 +-
 core/sql/sqlcomp/CmpDDLCatErrorCodes.h    |   4 +
 core/sql/sqlcomp/CmpSeabaseDDL.h          |   4 +-
 core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp |   5 +-
 core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp  | 417 +++---------
 core/sql/sqlcomp/CmpSeabaseDDLinitraf.cpp | 844 +++++++++++++++++++++++++
 core/sql/sqlcomp/CmpSeabaseDDLroutine.cpp |   4 +-
 core/sql/sqlcomp/CmpSeabaseDDLtable.cpp   |   4 +-
 core/sql/sqlcomp/CmpSeabaseDDLupgrade.cpp |   6 +-
 core/sql/sqlcomp/CmpSeabaseDDLview.cpp    |   1 -
 37 files changed, 1119 insertions(+), 398 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sqf/conf/log4j.dtm.config
----------------------------------------------------------------------
diff --git a/core/sqf/conf/log4j.dtm.config b/core/sqf/conf/log4j.dtm.config
index 49de700..feaf588 100644
--- a/core/sqf/conf/log4j.dtm.config
+++ b/core/sqf/conf/log4j.dtm.config
@@ -40,10 +40,15 @@ 
log4j.appender.dtmAppender.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n
 log4j.appender.dtmAppender.immediateFlush=true
 log4j.appender.dtmAppender.Append=true
 #log4j.appender.dtmAppender.DatePattern='.'yyyy-MM-dd 
+#log4j.additivity.org.trafodion.dtm=false
+#log4j.additivity.org.apache.hadoop.hbase.client.transactional=false
 
 # Custom Logging levels
 
 log4j.logger.org.apache.zookeeper=ERROR,dtmAppender
 log4j.logger.org.apache.hadoop.hbase=ERROR,dtmAppender
 log4j.logger.org.trafodion.dtm=INFO,dtmAppender
+#log4j.logger.org.trafodion.dtm=DEBUG,dtmAppender
+#log4j.logger.org.trafodion.dtm.HBaseTxClient=TRACE,dtmAppender
+#log4j.logger.org.apache.hadoop.hbase.client.transactional=TRACE,dtmAppender
 

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sqf/conf/log4j.sql.config
----------------------------------------------------------------------
diff --git a/core/sqf/conf/log4j.sql.config b/core/sqf/conf/log4j.sql.config
index c9df58b..909ba64 100644
--- a/core/sqf/conf/log4j.sql.config
+++ b/core/sqf/conf/log4j.sql.config
@@ -36,8 +36,11 @@ 
log4j.appender.sqlAppender.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n
 log4j.appender.sqlAppender.immediateFlush=true
 log4j.appender.sqlAppender.MaxFileSize=64MB
 log4j.appender.sqlAppender.MaxBackupIndex=20
+#log4j.additivity.org.apache.hadoop.hbase.client.transactional=false
 
 # Custom Logging levels
 
 log4j.logger.org.apache=ERROR,sqlAppender
 log4j.logger.org.trafodion.sql=INFO,sqlAppender
+#log4j.logger.org.trafodion.sql=DEBUG,sqlAppender
+#log4j.logger.org.apache.hadoop.hbase.client.transactional=TRACE,sqlAppender

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/arkcmp/CmpContext.cpp
----------------------------------------------------------------------
diff --git a/core/sql/arkcmp/CmpContext.cpp b/core/sql/arkcmp/CmpContext.cpp
index 78c3c63..e502047 100644
--- a/core/sql/arkcmp/CmpContext.cpp
+++ b/core/sql/arkcmp/CmpContext.cpp
@@ -863,6 +863,17 @@ CmpContext::compileDirect(char *data, UInt32 data_len, 
CollHeap *outHeap,
         copyData = TRUE;
         break;
       } // end of case (CmpMessageObj::DDL)
+      case (CmpMessageObj::DDL_WITH_STATUS) :
+      {
+        // request is from ExDDLTcb::work() to get statement explain
+        cmpStatement = new CTXTHEAP CmpStatement(this);
+        CmpMessageDDLwithStatus ddlStmt(data, data_len, CTXTHEAP);
+ 
+        Assign_SqlParser_Flags(parserFlags);
+        rs = cmpStatement->process(ddlStmt);
+        copyData = TRUE;
+        break;
+      } // end of case (CmpMessageObj::DDL)
       case (CmpMessageObj::DESCRIBE) :
       {
         // request is from ExDescribeTcb::work() to get statement explain

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/arkcmp/CmpStatement.cpp
----------------------------------------------------------------------
diff --git a/core/sql/arkcmp/CmpStatement.cpp b/core/sql/arkcmp/CmpStatement.cpp
index 57253b9..7f72a99 100644
--- a/core/sql/arkcmp/CmpStatement.cpp
+++ b/core/sql/arkcmp/CmpStatement.cpp
@@ -995,7 +995,7 @@ CmpStatement::process(const CmpMessageDDLwithStatus 
&statement)
                                          currCatName, currSchName))
         return CmpStatement_ERROR;
     }
-  else if (dws->getMDcleanup())
+  else if (dws->getMDcleanup() || dws->getInitTraf())
     {
       CmpSeabaseDDL cmpSBD(heap_);
       if (cmpSBD.executeSeabaseDDL(ddlExpr, ddlNode,

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/cli/Cli.cpp
----------------------------------------------------------------------
diff --git a/core/sql/cli/Cli.cpp b/core/sql/cli/Cli.cpp
index a942bca..58777f1 100644
--- a/core/sql/cli/Cli.cpp
+++ b/core/sql/cli/Cli.cpp
@@ -7148,6 +7148,18 @@ Lng32 SQLCLI_Xact(/*IN*/ CliGlobals * cliGlobals,
       }
     break;
 
+    case SQLTRANS_SUSPEND:
+      {
+        currContext.getTransaction()->suspendTransaction();
+      }
+    break;
+
+    case SQLTRANS_RESUME:
+      {
+        currContext.getTransaction()->resumeTransaction();
+      }
+    break;
+
     default:
       diags << DgSqlCode(-CLI_INVALID_SQLTRANS_COMMAND);
       return SQLCLI_ReturnCode(&currContext,diags.mainSQLCODE());

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/cli/sqlcli.h
----------------------------------------------------------------------
diff --git a/core/sql/cli/sqlcli.h b/core/sql/cli/sqlcli.h
index 3a8a5b4..831ab27 100644
--- a/core/sql/cli/sqlcli.h
+++ b/core/sql/cli/sqlcli.h
@@ -696,7 +696,10 @@ enum SQLTRANS_COMMAND {
   SQLTRANS_BEGIN_WITH_DP2_XNS   = 9,
 
   /* inherit the global transaction and make it the current xn */
-  SQLTRANS_INHERIT          = 10
+  SQLTRANS_INHERIT          = 10,
+
+  SQLTRANS_SUSPEND          = 11,
+  SQLTRANS_RESUME           = 12,
 };
 
 /* specifies the type/format of an AUTHID */

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/comexe/CmpMessage.cpp
----------------------------------------------------------------------
diff --git a/core/sql/comexe/CmpMessage.cpp b/core/sql/comexe/CmpMessage.cpp
index af0827b..79831a4 100644
--- a/core/sql/comexe/CmpMessage.cpp
+++ b/core/sql/comexe/CmpMessage.cpp
@@ -261,7 +261,8 @@ CmpCompileInfo::CmpCompileInfo(char * sourceStr, Lng32 
sourceStrLen,
        sqltext_(sourceStr), sqlTextLen_(sourceStrLen),
        sqlTextCharSet_(sourceStrCharSet),
        schemaName_(schemaName), schemaNameLen_(schemaNameLen),
-       inputArrayMaxsize_(inputArrayMaxsize)
+       inputArrayMaxsize_(inputArrayMaxsize),
+       unused2_(0)
 {
   if (atomicity == 1) {
       flags_ |= ROWSET_ATOMICITY_SPECIFIED;

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/comexe/CmpMessage.h
----------------------------------------------------------------------
diff --git a/core/sql/comexe/CmpMessage.h b/core/sql/comexe/CmpMessage.h
index 3733239..8f34630 100644
--- a/core/sql/comexe/CmpMessage.h
+++ b/core/sql/comexe/CmpMessage.h
@@ -818,19 +818,22 @@ class CmpDDLwithStatusInfo : public CmpCompileInfo
 
   enum
   {
-    DONE_                = 0x0001,
-    COMPUTE_ST_    = 0x0002,
-    COMPUTE_ET_    = 0x0004,
-    RETURN_ET_       = 0x0008,
-    START_               = 0x0010,
-    END_                   = 0x0020,
+    DONE_           = 0x0001,
+    COMPUTE_ST_     = 0x0002,
+    COMPUTE_ET_     = 0x0004,
+    RETURN_ET_      = 0x0008,
+    START_          = 0x0010,
+    END_            = 0x0020,
     XN_STARTED_     = 0x0040,
     MD_UPGRADE_     = 0x0080,
-    GET_MD_VERSION_    = 0x0100,
-    GET_SW_VERSION_    = 0x0200,
-    MD_CLEANUP_           = 0x0400,
-    CHECK_ONLY_          = 0x0800,
-    RETURN_DETAILS_    = 0x1000
+    GET_MD_VERSION_ = 0x0100,
+    GET_SW_VERSION_ = 0x0200,
+    MD_CLEANUP_     = 0x0400,
+    CHECK_ONLY_     = 0x0800,
+    RETURN_DETAILS_ = 0x1000,
+    INIT_TRAF_      = 0x2000,
+    MINIMAL_IT_     = 0x4000,
+    DDL_XNS_        = 0x8000,
   };
 
  public:
@@ -897,6 +900,18 @@ class CmpDDLwithStatusInfo : public CmpCompileInfo
   {(v ? statusFlags_ |= RETURN_DETAILS_ : statusFlags_ &= ~RETURN_DETAILS_); }
   NABoolean getReturnDetails() { return (statusFlags_ & RETURN_DETAILS_) != 0;}
 
+  void setInitTraf(NABoolean v)
+  {(v ? statusFlags_ |= INIT_TRAF_ : statusFlags_ &= ~INIT_TRAF_); }
+  NABoolean getInitTraf() { return (statusFlags_ & INIT_TRAF_) != 0;}
+
+  void setMinimalInitTraf(NABoolean v)
+  {(v ? statusFlags_ |= MINIMAL_IT_ : statusFlags_ &= ~MINIMAL_IT_); }
+  NABoolean getMinimalInitTraf() { return (statusFlags_ & MINIMAL_IT_) != 0;}
+
+  void setDDLXns(NABoolean v)
+  {(v ? statusFlags_ |= DDL_XNS_ : statusFlags_ &= ~DDL_XNS_); }
+  NABoolean getDDLXns() { return (statusFlags_ & DDL_XNS_) != 0;}
+
   void setMsg(const char * msg)
   {
     msgLen_ = strlen(msg);

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/comexe/ComTdbDDL.h
----------------------------------------------------------------------
diff --git a/core/sql/comexe/ComTdbDDL.h b/core/sql/comexe/ComTdbDDL.h
index b1576b7..65492d4 100644
--- a/core/sql/comexe/ComTdbDDL.h
+++ b/core/sql/comexe/ComTdbDDL.h
@@ -320,15 +320,20 @@ public:
   {(v ? flags2_ |= RETURN_DETAILS : flags2_ &= ~RETURN_DETAILS); }
   NABoolean getReturnDetails() { return (flags2_ & RETURN_DETAILS) != 0;}
 
+  void setInitTraf(NABoolean v)
+  {(v ? flags2_ |= INIT_TRAF : flags2_ &= ~INIT_TRAF); }
+  NABoolean getInitTraf() { return (flags2_ & INIT_TRAF) != 0;}
+
 protected:
   enum Flags 
   { 
     GET_MD_VERSION          = 0x0001,
     GET_SW_VERSION          = 0x0002,
-    MD_UPGRADE                 = 0x0004,
-    MD_CLEANUP                 = 0x0008,
-    CHECK_ONLY                 = 0x0010,
-    RETURN_DETAILS           = 0x0020
+    MD_UPGRADE              = 0x0004,
+    MD_CLEANUP              = 0x0008,
+    CHECK_ONLY              = 0x0010,
+    RETURN_DETAILS          = 0x0020,
+    INIT_TRAF               = 0x0040
   };
  
   UInt16 flags2_;                       // 00-01

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/common/DateTimeType.cpp
----------------------------------------------------------------------
diff --git a/core/sql/common/DateTimeType.cpp b/core/sql/common/DateTimeType.cpp
index be5a903..c9cab0f 100644
--- a/core/sql/common/DateTimeType.cpp
+++ b/core/sql/common/DateTimeType.cpp
@@ -315,11 +315,11 @@ Int64 DatetimeType::julianTimestampValue(const char * 
value, const short valueLe
       str_cpy_all((char *) &fraction, datetimeOpData, sizeof(fraction));
       if (fractionPrec > 0)
         {
-          if (fractionPrec > DatetimeType::MAX_FRACTION_PRECISION_MSEC)
+          if (fractionPrec > DatetimeType::MAX_FRACTION_PRECISION_USEC)
             // Adjust the fractional seconds part to be the number of 
microseconds
-            fraction /= (Lng32)pow(10, (fractionPrec - 
DatetimeType::MAX_FRACTION_PRECISION_MSEC));
+            fraction /= (Lng32)pow(10, (fractionPrec - 
DatetimeType::MAX_FRACTION_PRECISION_USEC));
           else 
-            fraction *= (Lng32)pow(10, 
(DatetimeType::MAX_FRACTION_PRECISION_MSEC - fractionPrec));
+            fraction *= (Lng32)pow(10, 
(DatetimeType::MAX_FRACTION_PRECISION_USEC - fractionPrec));
         }
     }
   short timestamp[] = {

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/common/DatetimeType.h
----------------------------------------------------------------------
diff --git a/core/sql/common/DatetimeType.h b/core/sql/common/DatetimeType.h
index 9aa5373..e56b575 100644
--- a/core/sql/common/DatetimeType.h
+++ b/core/sql/common/DatetimeType.h
@@ -69,7 +69,7 @@ class DatetimeType : public DatetimeIntervalCommonType
 public:
 
   enum { DEFAULT_FRACTION_PRECISION = 0 };      // See ANSI 6.1 SR 25: zero
-  enum { MAX_FRACTION_PRECISION_MSEC = 6 }; // max microseconds fract precision
+  enum { MAX_FRACTION_PRECISION_USEC = 6 }; // max microseconds fract precision
   enum { MAX_FRACTION_PRECISION = 9 };  // See ANSI 6.1 SR 26: max is at least 
6.
                                         // Changed to 9 to support nano secs 
                                         // fractional precision

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/common/IntervalType.h
----------------------------------------------------------------------
diff --git a/core/sql/common/IntervalType.h b/core/sql/common/IntervalType.h
index 3315524..ec80729 100644
--- a/core/sql/common/IntervalType.h
+++ b/core/sql/common/IntervalType.h
@@ -325,7 +325,7 @@ public:
   enum { DEFAULT_LEADING_PRECISION  =  2,      // ANSI 10.1 SR 5: two
         MAX_LEADING_PRECISION      = MAX_NUMERIC_PRECISION, // 10.1 SR 3: >=2
         DEFAULT_FRACTION_PRECISION =  6,       // ANSI 10.1 SR 6: six
-        MAX_FRACTION_PRECISION_MSEC=  6,       // ANSI 10.1 SR 4: >=6
+        MAX_FRACTION_PRECISION_USEC=  6,       // ANSI 10.1 SR 4: >=6
         MAX_FRACTION_PRECISION     =  9        // ANSI 10.1 SR 4: >=6
        };
 

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/executor/ExExeUtil.h
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExExeUtil.h b/core/sql/executor/ExExeUtil.h
index 9b95a63..ceaa940 100644
--- a/core/sql/executor/ExExeUtil.h
+++ b/core/sql/executor/ExExeUtil.h
@@ -235,7 +235,8 @@ class ExExeUtilTcb : public ex_tcb
 
   NABoolean isUpQueueFull(short size);
 
-  char * getTimeAsString(Int64 t, char * timeBuf);
+  static char * getTimeAsString(Int64 t, char * timeBuf,
+                                NABoolean noUsec = FALSE);
   char * getTimestampAsString(Int64 t, char * timeBuf);
 
   short initializeInfoList(Queue* &infoList);

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/executor/ExExeUtilCli.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExExeUtilCli.cpp 
b/core/sql/executor/ExExeUtilCli.cpp
index f71a8ff..d10ef19 100644
--- a/core/sql/executor/ExExeUtilCli.cpp
+++ b/core/sql/executor/ExExeUtilCli.cpp
@@ -2081,6 +2081,16 @@ Lng32 ExeCliInterface::statusXn()
   return SQL_EXEC_Xact(SQLTRANS_STATUS, NULL);
 }
 
+Lng32 ExeCliInterface::suspendXn()
+{
+  return SQL_EXEC_Xact(SQLTRANS_SUSPEND, 0);
+}
+
+Lng32 ExeCliInterface::resumeXn()
+{
+  return SQL_EXEC_Xact(SQLTRANS_RESUME, 0);
+}
+
 Lng32 ExeCliInterface::createContext(char * contextHandle)
 {
   Lng32 rc = 0;

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/executor/ExExeUtilCli.h
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExExeUtilCli.h b/core/sql/executor/ExExeUtilCli.h
index 859c852..62fff82 100644
--- a/core/sql/executor/ExExeUtilCli.h
+++ b/core/sql/executor/ExExeUtilCli.h
@@ -239,6 +239,8 @@ private:
   static Lng32 commitXn();
   static Lng32 rollbackXn();
   static Lng32 statusXn();
+  static Lng32 suspendXn();
+  static Lng32 resumeXn();
 
   Lng32 createContext(char* contextHandle); // out buf will return context 
handle
   Lng32 switchContext(char* contextHandle); // in buf contains context handle

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/executor/ExExeUtilCommon.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExExeUtilCommon.cpp 
b/core/sql/executor/ExExeUtilCommon.cpp
index b623ee3..6566f91 100644
--- a/core/sql/executor/ExExeUtilCommon.cpp
+++ b/core/sql/executor/ExExeUtilCommon.cpp
@@ -337,7 +337,8 @@ short ExExeUtilTcb::moveRowToUpQueue(const char * row, 
Lng32 len,
   return  retcode;
 }
 
-char * ExExeUtilTcb::getTimeAsString(Int64 elapsedTime, char * timeBuf)
+char * ExExeUtilTcb::getTimeAsString(Int64 elapsedTime, char * timeBuf,
+                                     NABoolean noUsec)
 {
   ULng32 sec = (ULng32) (elapsedTime / 1000000);
   ULng32 usec = (ULng32) (elapsedTime % 1000000);
@@ -346,9 +347,13 @@ char * ExExeUtilTcb::getTimeAsString(Int64 elapsedTime, 
char * timeBuf)
   ULng32 hour = min/60;
   min = min % 60;
   
-  str_sprintf (timeBuf,  "%02u:%02u:%02u.%03u",
-              hour, min, sec, TO_FMT3u(usec));
-
+  if (noUsec)
+    str_sprintf (timeBuf,  "%02u:%02u:%02u",
+                 hour, min, sec);
+  else
+    str_sprintf (timeBuf,  "%02u:%02u:%02u.%03u",
+                 hour, min, sec, TO_FMT3u(usec));
+   
   return timeBuf;
 }
 

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/executor/ex_ddl.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ex_ddl.cpp b/core/sql/executor/ex_ddl.cpp
index f221abd..30181b9 100644
--- a/core/sql/executor/ex_ddl.cpp
+++ b/core/sql/executor/ex_ddl.cpp
@@ -479,6 +479,8 @@ short ExDDLwithStatusTcb::work()
             currEntry_ = 0;
             currPtr_ = NULL;
 
+            queryStartTime_ = NA_JulianTimestamp();
+
             if (ddlTdb().hbaseDDL())
               {
                 if (ddlTdb().hbaseDDLNoUserXn())
@@ -530,6 +532,9 @@ short ExDDLwithStatusTcb::work()
                 if (ddlTdb().getReturnDetails())
                   mdi_->setReturnDetails(TRUE);
               }
+            else if (ddlTdb().getInitTraf())
+              mdi_->setInitTraf(TRUE);
+
             mdi_->setHbaseDDL(TRUE);            
 
             if (ddlTdb().inputExpr_)
@@ -562,9 +567,6 @@ short ExDDLwithStatusTcb::work()
                 callEmbeddedCmp_ = FALSE;
               }
 
-            // TEMP, until embedded call is fixed to handle returning status.
-            callEmbeddedCmp_ = FALSE;
-
             step_ = SETUP_NEXT_STEP_;
          }
           break;
@@ -608,8 +610,9 @@ short ExDDLwithStatusTcb::work()
                currContext->getSqlParserFlags(),
                parentQid, str_len(parentQid), cpDiagsArea);
 
-            getHeap()->deallocateMemory(data_);
- 
+            if (currContext->getDiagsArea())
+              currContext->getDiagsArea()->clear();
+
             if ((cpDiagsArea) &&
                 ((cpDiagsArea->getNumber(DgSqlCode::WARNING_) > 0) ||
                  (cpDiagsArea->getNumber(DgSqlCode::ERROR_) > 0)))
@@ -680,15 +683,18 @@ short ExDDLwithStatusTcb::work()
                 
                 replyDWS_ = (CmpDDLwithStatusInfo*)(new(getHeap()) 
char[replyBufLen_]);
                 memcpy((char*)replyDWS_, replyBuf_, replyBufLen_);
-                cmp_->getHeap()->deallocateMemory((void*)replyBuf_);
+                if (cmp_)
+                  cmp_->getHeap()->deallocateMemory((void*)replyBuf_);
+                else
+                  currContext->exHeap()->deallocateMemory((void*)replyBuf_);
                 replyBuf_ = NULL;
                 replyBufLen_ = 0;
 
                 replyDWS_->unpack((char*)replyDWS_);
 
-                if (mdi_->computeST())
+                if (replyDWS_->computeST())
                   startTime_ = NA_JulianTimestamp();
-                else if (mdi_->computeET())
+                else if (replyDWS_->computeET())
                   endTime_ = NA_JulianTimestamp();
               }
             
@@ -719,7 +725,19 @@ short ExDDLwithStatusTcb::work()
             char buf[1000];
             if (strlen(replyDWS_->msg()) > 0)
               {
-                str_sprintf(buf, "%s", replyDWS_->msg());
+                if (replyDWS_->returnET())
+                  {
+                    if (replyDWS_->done())
+                      startTime_ = queryStartTime_;
+
+                    char timeBuf[100];
+                    ExExeUtilTcb::getTimeAsString((endTime_-startTime_), 
timeBuf,
+                                                  TRUE);
+                    str_sprintf(buf, "%s {ET: %s}", replyDWS_->msg(),
+                                timeBuf);
+                  }
+                else
+                  str_sprintf(buf, "%s", replyDWS_->msg());
                 if (moveRowToUpQueue(&qparent_, ddlTdb().tuppIndex(), buf, 0, 
&rc))
                   return rc;
               }

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/executor/ex_ddl.h
----------------------------------------------------------------------
diff --git a/core/sql/executor/ex_ddl.h b/core/sql/executor/ex_ddl.h
index efb3eac..5d72f74 100644
--- a/core/sql/executor/ex_ddl.h
+++ b/core/sql/executor/ex_ddl.h
@@ -275,6 +275,7 @@ public:
 
   Int64 startTime_;
   Int64 endTime_;
+  Int64 queryStartTime_;
 
   char * data_;
   size_t dataLen_;

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/executor/ex_transaction.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ex_transaction.cpp 
b/core/sql/executor/ex_transaction.cpp
index 0f326db..f2b2fb0 100644
--- a/core/sql/executor/ex_transaction.cpp
+++ b/core/sql/executor/ex_transaction.cpp
@@ -433,7 +433,8 @@ short ExTransaction::suspendTransaction()
   short retcode = FEOK;
   if (transid_ != -1 && transtag_ != -1)
   {
-     retcode = RESUMETRANSACTION(0);
+    //     retcode = RESUMETRANSACTION(0);
+    retcode = SUSPENDTRANSACTION((short*)&transid_);
      if (retcode == FENOTRANSID)
         retcode = FEOK;
   }

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/exp/exp_datetime.cpp
----------------------------------------------------------------------
diff --git a/core/sql/exp/exp_datetime.cpp b/core/sql/exp/exp_datetime.cpp
index af4ec03..117495d 100644
--- a/core/sql/exp/exp_datetime.cpp
+++ b/core/sql/exp/exp_datetime.cpp
@@ -2467,11 +2467,11 @@ ExpDatetime::convAsciiToDatetime(char *srcData,
       return -1;
     }
 
-    Int64 msec = (hh*60L + mm) * 60L * 1000000L;
+    Int64 usec = (hh*60L + mm) * 60L * 1000000L;
     if (isAdd)
-      juliantimestamp += msec;
+      juliantimestamp += usec;
     else
-      juliantimestamp -= msec;
+      juliantimestamp -= usec;
 
     INTERPRETTIMESTAMP(juliantimestamp, timestamp);
     

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/generator/GenPreCode.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenPreCode.cpp 
b/core/sql/generator/GenPreCode.cpp
index b37274a..da87e8c 100644
--- a/core/sql/generator/GenPreCode.cpp
+++ b/core/sql/generator/GenPreCode.cpp
@@ -2850,6 +2850,10 @@ short DDLExpr::ddlXnsInfo(NABoolean &isDDLxn, NABoolean 
&xnCanBeStarted)
      if (purgedata() || upgradeRepos())
         // transaction will be started and commited in called methods.
         xnCanBeStarted = FALSE;
+
+     if (initHbase() && producesOutput())  // returns status
+       xnCanBeStarted = FALSE;
+
      if ((ddlNode && ddlNode->castToStmtDDLNode() &&
           ddlNode->castToStmtDDLNode()->ddlXns()) &&
             ((ddlNode->getOperatorType() == DDL_CLEANUP_OBJECTS) ||

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/generator/GenRelExeUtil.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenRelExeUtil.cpp 
b/core/sql/generator/GenRelExeUtil.cpp
index dbbbf56..f0b8200 100644
--- a/core/sql/generator/GenRelExeUtil.cpp
+++ b/core/sql/generator/GenRelExeUtil.cpp
@@ -83,6 +83,7 @@
 #include "ComSqlId.h"
 #include "MVInfo.h"
 #include "StmtDDLCreateTable.h"
+#include "CmpDDLCatErrorCodes.h"
 
 // need for authorization checks
 #include "ComUser.h"
@@ -1477,7 +1478,7 @@ short ExeUtilGetMetadataInfo::codeGen(Generator * 
generator)
   if ((CmpCommon::context()->isUninitializedSeabase()) &&
       (!Get_SqlParser_Flags(INTERNAL_QUERY_FROM_EXEUTIL)))
     {
-      if (CmpCommon::context()->uninitializedSeabaseErrNum() == -1398)
+      if (CmpCommon::context()->uninitializedSeabaseErrNum() == 
-TRAF_HBASE_ACCESS_ERROR)
         *CmpCommon::diags() << 
DgSqlCode(CmpCommon::context()->uninitializedSeabaseErrNum())
                             << DgInt0(CmpCommon::context()->hbaseErrNum())
                             << DgString0(CmpCommon::context()->hbaseErrStr());

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/generator/GenRelMisc.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenRelMisc.cpp 
b/core/sql/generator/GenRelMisc.cpp
index 737bf4e..a2529d5 100644
--- a/core/sql/generator/GenRelMisc.cpp
+++ b/core/sql/generator/GenRelMisc.cpp
@@ -470,6 +470,9 @@ short DDLExpr::codeGen(Generator * generator)
             ddl_ws_tdb->setReturnDetails(TRUE);
 
         }
+      else if (initHbase())
+        ddl_ws_tdb->setInitTraf(TRUE);
+
       ddl_tdb = ddl_ws_tdb;
     }
   else

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/nskgmake/sqlcomp/Makefile
----------------------------------------------------------------------
diff --git a/core/sql/nskgmake/sqlcomp/Makefile 
b/core/sql/nskgmake/sqlcomp/Makefile
index 0205ebd..81920f7 100755
--- a/core/sql/nskgmake/sqlcomp/Makefile
+++ b/core/sql/nskgmake/sqlcomp/Makefile
@@ -27,6 +27,7 @@ CPPSRC := CmpDescribe.cpp \
        CmpSeabaseDDLcleanup.cpp \
        CmpSeabaseDDLcommon.cpp \
        CmpSeabaseDDLindex.cpp \
+       CmpSeabaseDDLinitraf.cpp \
        CmpSeabaseDDLrepos.cpp \
        CmpSeabaseDDLroutine.cpp \
        CmpSeabaseDDLschema.cpp \

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/optimizer/QRDescGenerator.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/QRDescGenerator.cpp 
b/core/sql/optimizer/QRDescGenerator.cpp
index 42719aa..7265ae5 100644
--- a/core/sql/optimizer/QRDescGenerator.cpp
+++ b/core/sql/optimizer/QRDescGenerator.cpp
@@ -255,14 +255,14 @@ NABoolean QRDescGenerator::typeSupported(const NAType* 
type)
 
                 // If fractional precision is greater than
                 // microsecs, disable rangespec transformation.
-                if (type->getScale() > 
SQLInterval::MAX_FRACTION_PRECISION_MSEC)
+                if (type->getScale() > 
SQLInterval::MAX_FRACTION_PRECISION_USEC)
                   return FALSE;
 
                 return (SQLInterval::MAX_LEADING_PRECISION >=
                         IntervalType::getPrecision(intvType->getStartField(),
                                                    
intvType->getLeadingPrecision(),
                                                    REC_DATE_SECOND,
-                                                   
SQLInterval::MAX_FRACTION_PRECISION_MSEC));
+                                                   
SQLInterval::MAX_FRACTION_PRECISION_USEC));
             }
         }
 
@@ -277,7 +277,7 @@ NABoolean QRDescGenerator::typeSupported(const NAType* type)
         // datetime values are currently converted to Int64 microseconds value
         // for rangespec constants. If fractional precision is greater than
         // microsecs, disable rangespec transformation.
-        if (type->getScale() > DatetimeType::MAX_FRACTION_PRECISION_MSEC)
+        if (type->getScale() > DatetimeType::MAX_FRACTION_PRECISION_USEC)
           return FALSE;
 
         return TRUE;

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/optimizer/RelExeUtil.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExeUtil.cpp 
b/core/sql/optimizer/RelExeUtil.cpp
index 61707d6..88d544e 100644
--- a/core/sql/optimizer/RelExeUtil.cpp
+++ b/core/sql/optimizer/RelExeUtil.cpp
@@ -4067,7 +4067,6 @@ RelExpr * DDLExpr::bindNode(BindWA *bindWA)
   NABoolean isCommentOn = FALSE;
   NABoolean isHive = FALSE;
 
-  returnStatus_ = FALSE;
 
   NABoolean specialType = FALSE;
   if (isUstat())  // special DDLExpr node for an Update Stats statement
@@ -5445,12 +5444,6 @@ RelExpr * ExeUtilHiveTruncate::bindNode(BindWA *bindWA)
 
   // Allocate a TableDesc and attach it to this.
   //
-#ifdef __ignore
-  setUtilTableDesc(bindWA->createTableDesc(naTable, getTableName()));
-  if (bindWA->errStatus())
-    return this;
-#endif
-
   RelExpr * boundExpr = ExeUtilExpr::bindNode(bindWA);
   if (bindWA->errStatus())
     return NULL;

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/optimizer/RelExeUtil.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExeUtil.h b/core/sql/optimizer/RelExeUtil.h
index a2deeb6..4ddb8cc 100644
--- a/core/sql/optimizer/RelExeUtil.h
+++ b/core/sql/optimizer/RelExeUtil.h
@@ -257,6 +257,7 @@ public:
                                       ComTdb * tdb, 
                                       Generator *generator);
 
+  void setReturnStatus(NABoolean v) { returnStatus_ = v; }
   virtual NABoolean producesOutput() { return returnStatus_;}
   virtual const char   *getVirtualTableName();
   virtual TrafDesc     *createVirtualTableDesc();

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index b0042e7..e7d4176 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -16444,7 +16444,7 @@ optional_from_schema : /* empty */
               }
 
 /* type relx */
-exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
+exe_util_init_hbase :TOK_INITIALIZE TOK_TRAFODION 
                {
                 CharInfo::CharSet stmtCharSet = CharInfo::UnknownCharSet;
                 NAString * stmt = getSqlStmtStr ( stmtCharSet  // out - 
CharInfo::CharSet &
@@ -16459,6 +16459,7 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
 
                  de->setInitHbase(TRUE);
                  de->setCreateMDViews(TRUE);
+                 de->setReturnStatus(TRUE);
 
                 $$ = de;
               }
@@ -16479,18 +16480,18 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
                  de->setInitHbase(TRUE);
                  de->setCreateMDViews(TRUE);
                  de->setMinimal(TRUE);
+                 de->setReturnStatus(TRUE);
 
                 $$ = de;                
                }
 
-           | TOK_INITIALIZE TOK_TRAFODION ',' TOK_NO TOK_METADATA TOK_VIEWS
+          | TOK_INITIALIZE TOK_TRAFODION ',' TOK_NO TOK_RETURN TOK_STATUS
                {
                 CharInfo::CharSet stmtCharSet = CharInfo::UnknownCharSet;
                 NAString * stmt = getSqlStmtStr ( stmtCharSet  // out - 
CharInfo::CharSet &
                                                   , PARSERHEAP() 
                                               );
 
-
                  DDLExpr * de = new(PARSERHEAP()) DDLExpr
                    (NULL,
                     (char*)stmt->data(), 
@@ -16498,9 +16499,30 @@ exe_util_init_hbase : TOK_INITIALIZE TOK_TRAFODION
                     PARSERHEAP());
 
                  de->setInitHbase(TRUE);
+                 de->setCreateMDViews(TRUE);
 
                 $$ = de;
               }
+          | TOK_INITIALIZE TOK_TRAFODION ',' TOK_MINIMAL ',' TOK_NO TOK_RETURN 
TOK_STATUS
+               {
+                CharInfo::CharSet stmtCharSet = CharInfo::UnknownCharSet;
+                NAString * stmt = getSqlStmtStr ( stmtCharSet  // out - 
CharInfo::CharSet &
+                                                  , PARSERHEAP() 
+                                              );
+
+                 DDLExpr * de = new(PARSERHEAP()) DDLExpr
+                   (NULL,
+                    (char*)stmt->data(), 
+                    stmtCharSet,
+                    PARSERHEAP());
+
+                 de->setInitHbase(TRUE);
+                 de->setCreateMDViews(TRUE);
+                 de->setMinimal(TRUE);
+
+                $$ = de;                
+               }
+
 
              | TOK_INITIALIZE TOK_TRAFODION ',' TOK_DROP
                {

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/sqlcomp/CmpDDLCatErrorCodes.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpDDLCatErrorCodes.h 
b/core/sql/sqlcomp/CmpDDLCatErrorCodes.h
index 3c22d90..e372a3e 100644
--- a/core/sql/sqlcomp/CmpDDLCatErrorCodes.h
+++ b/core/sql/sqlcomp/CmpDDLCatErrorCodes.h
@@ -374,6 +374,10 @@ enum CatErrorCode { CAT_FIRST_ERROR = 1000
                   , CAT_OBJECT_DOES_NOT_EXIST_IN_TRAFODION        = 1389
                   , CAT_TRAFODION_OBJECT_EXISTS                   = 1390
 
+                  , TRAF_ALREADY_INITIALIZED                      = 1392
+                  , TRAF_NOT_INITIALIZED                          = 1393
+                  , TRAF_HBASE_ACCESS_ERROR                       = 1398
+
                   // unused                                       = 1400
                   , CAT_UNABLE_TO_CONVERT_COLUMN_DEFAULT_VALUE_TO_CHARSET = 
1401
                   , CAT_UNIQUE_INDEX_COLS_NOT_IN_DIV_EXPRS        = 1402

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/sqlcomp/CmpSeabaseDDL.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDL.h b/core/sql/sqlcomp/CmpSeabaseDDL.h
index 785e6a0..6215f7d 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDL.h
+++ b/core/sql/sqlcomp/CmpSeabaseDDL.h
@@ -1009,6 +1009,7 @@ protected:
      Int32 ownerID,
      NABoolean ignoreIfExists);
      
+  short createDefaultSystemSchema(ExeCliInterface * cliInterface);
   short createSchemaObjects(ExeCliInterface * cliInterface);
   
   void  createSeabaseSchema(
@@ -1444,13 +1445,14 @@ protected:
   void processDDLonHiveObjects(StmtDDLonHiveObjects * hddl,
                                NAString &currCatName, NAString &currSchName);
 
-  void initSeabaseMD(NABoolean ddlXns, NABoolean minimal);
   void dropSeabaseMD(NABoolean ddlXns);
   void createSeabaseMDviews();
   void dropSeabaseMDviews();
   void createSeabaseSchemaObjects();
   void updateVersion();
 
+  short initTrafMD(CmpDDLwithStatusInfo *mdti);
+  
   short createPrivMgrRepos(ExeCliInterface *cliInterface, NABoolean ddlXns);
   short initSeabaseAuthorization(ExeCliInterface *cliInterface,
                                  NABoolean ddlXns,

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp 
b/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp
index f08b642..291cfbe 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcleanup.cpp
@@ -1732,7 +1732,7 @@ void 
CmpSeabaseMDcleanup::cleanupMetadataEntries(ExeCliInterface *cliInterface,
               {
               case 0:
                 {
-                  dws->setMsg("  Start: Cleanup Orphan Objects Entries");      
        
+                  dws->setMsg("  Start: Cleanup Orphan Objects Entries");
                   dws->subStep()++;
                   dws->setEndStep(FALSE);
                   
@@ -2009,7 +2009,8 @@ void 
CmpSeabaseMDcleanup::cleanupObjects(StmtDDLCleanupObjects * stmtCleanupNode
         checkOnly_ = TRUE;
       if (dws->getReturnDetails())
         returnDetails_ = TRUE;
-      return cleanupMetadataEntries(&cliInterface, ehi, dws);
+      cleanupMetadataEntries(&cliInterface, ehi, dws);
+      return;
     }
 
   if (cleanupMetadataEntries_)

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp 
b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
index efc0fd3..7b58dbd 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
@@ -1251,7 +1251,7 @@ short 
CmpSeabaseDDL::readAndInitDefaultsFromSeabaseDefaultsTable
   ExpHbaseInterface * ehi = allocEHI(server, zkPort, FALSE);
   if (! ehi)
     {
-      retcode = -1398;
+      retcode = -TRAF_HBASE_ACCESS_ERROR;
       goto label_return;
     }
 
@@ -1417,7 +1417,7 @@ short CmpSeabaseDDL::validateVersions(NADefaults *defs,
               CmpCommon::diags()->clear();
             }
 
-          retcode = -1398;
+          retcode = -TRAF_HBASE_ACCESS_ERROR;
           goto label_return;
         }
     }
@@ -1431,7 +1431,7 @@ short CmpSeabaseDDL::validateVersions(NADefaults *defs,
       if (hbaseErrStr)
         *hbaseErrStr = (char*)GetCliGlobals()->getJniErrorStr();
 
-      retcode = -1398;
+      retcode = -TRAF_HBASE_ACCESS_ERROR;
       goto label_return;
     }
 
@@ -1456,7 +1456,7 @@ short CmpSeabaseDDL::validateVersions(NADefaults *defs,
           goto label_return;
         }
       
-      retcode = -1393;
+      retcode = -TRAF_NOT_INITIALIZED;
       goto label_return;
     }
 
@@ -1506,7 +1506,7 @@ short CmpSeabaseDDL::validateVersions(NADefaults *defs,
       if (hbaseErrStr)
         *hbaseErrStr = (char*)GetCliGlobals()->getJniErrorStr();
 
-      retcode = -1398;
+      retcode = -TRAF_HBASE_ACCESS_ERROR;
       goto label_return;
     }
   else
@@ -1895,7 +1895,7 @@ short 
CmpSeabaseDDL::isPrivMgrMetadataInitialized(NADefaults *defs,
       // generated?
       CmpCommon::diags()->clear();
       deallocEHI(ehi);
-      return -1398;
+      return -TRAF_HBASE_ACCESS_ERROR;
     }
 
   // Call existsInHbase to check for privmgr metadata tables existence
@@ -7225,296 +7225,13 @@ short CmpSeabaseDDL::updateSeabaseAuths(
   return 0;
 }
 
-void CmpSeabaseDDL::initSeabaseMD(NABoolean ddlXns, NABoolean minimal)
-{
-  int breadCrumb = -1;  // useful for debugging
-
-  // verify user is authorized
-  if (!ComUser::isRootUserID())
-    {
-       *CmpCommon::diags() << DgSqlCode(-CAT_NOT_AUTHORIZED);
-       return;
-    }
-
-  Lng32 retcode = 0;
-  Lng32 cliRC = 0;
-  NABoolean xnWasStartedHere = FALSE;
-  Int64 schemaUID = -1;  
-  Int64 objectFlags = 0;
-
-  Lng32 numTables = sizeof(allMDtablesInfo) / sizeof(MDTableInfo);
-
-  Queue * tempQueue = NULL;
-
-  // create metadata tables in hbase
-  ExpHbaseInterface * ehi = allocEHI();
-  if (ehi == NULL)
-    return;
-
-  ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
-    CmpCommon::context()->sqlSession()->getParentQid());
-
-  const char* sysCat = 
ActiveSchemaDB()->getDefaults().getValue(SEABASE_CATALOG);
-
-  ComTdbVirtTableTableInfo * tableInfo = new(STMTHEAP) 
ComTdbVirtTableTableInfo[1];
- 
-  Lng32 hbaseErrNum = 0;
-  NAString hbaseErrStr;
-  Lng32 errNum = validateVersions(&ActiveSchemaDB()->getDefaults(), ehi,
-                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL, NULL,
-                                  &hbaseErrNum, &hbaseErrStr);
-  if (errNum != 0)
-    {
-      CmpCommon::context()->setIsUninitializedSeabase(TRUE);
-      CmpCommon::context()->uninitializedSeabaseErrNum() = errNum;
-      CmpCommon::context()->hbaseErrNum() = hbaseErrNum;
-      CmpCommon::context()->hbaseErrStr() = hbaseErrStr;
-
-      if (errNum != -1393) // 1393: metadata is not initialized
-        {
-          if (errNum == -1398)
-            *CmpCommon::diags() << DgSqlCode(errNum)
-                                << DgInt0(hbaseErrNum)
-                                << DgString0(hbaseErrStr);
-          else
-            *CmpCommon::diags() << DgSqlCode(errNum);
-
-          deallocEHI(ehi); 
-          return;
-        }
-    }
-  else
-    {
-      CmpCommon::context()->setIsUninitializedSeabase(FALSE);
-
-      *CmpCommon::diags() << DgSqlCode(-1392);
-
-      deallocEHI(ehi); 
-      return;
-    }
-
-  // drop and recreate DTM table TDDL.
-  // Do not do this drop/recreate operation under a dtm transaction.
-  // See file 
core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TmDDL.java
-  // Keep the name TRAFODION._DTM_.TDDL and col fam "tddlcf" in sync with
-  // that file.
-  HbaseStr tddlTable;
-  const NAString tddlNAS("TRAFODION._DTM_.TDDL");
-  tddlTable.val = (char*)tddlNAS.data();
-  tddlTable.len = tddlNAS.length();
-  if (ehi->exists(tddlTable) == -1) // exists
-    {
-      ehi->truncate(tddlTable, TRUE, TRUE);
-    }
-
-  // create hbase physical objects
-  for (Lng32 i = 0; i < numTables; i++)
-    {
-      const MDTableInfo &mdti = allMDtablesInfo[i];
-
-      HbaseStr hbaseObject;
-      NAString hbaseObjectStr(sysCat);
-      hbaseObjectStr += ".";
-      hbaseObjectStr += SEABASE_MD_SCHEMA;
-      hbaseObjectStr += ".";
-      hbaseObjectStr += mdti.newName;
-      hbaseObject.val = (char*)hbaseObjectStr.data();
-      hbaseObject.len = hbaseObjectStr.length();
-      if (createHbaseTable(ehi, &hbaseObject, SEABASE_DEFAULT_COL_FAMILY, NULL,
-                           0, 0, NULL,
-                           FALSE, ddlXns) == -1)
-        {
-          deallocEHI(ehi); 
-          return;
-        }
-
-    } // for
- 
-  deallocEHI(ehi); 
-  ehi = NULL;
-
-  // Note that this is not an existing jar file, the class
-  // loader will attempt to load the class from the CLASSPATH if
-  // it can't find this jar
-  NAString installJar(getenv("TRAF_HOME"));
-  installJar += "/export/lib/trafodion-sql-currversion.jar";
-
-  breadCrumb = 1;
-  if (beginXnIfNotInProgress(&cliInterface, xnWasStartedHere))
-    goto label_error;
-
-  cliRC = cliInterface.holdAndSetCQD("traf_bootstrap_md_mode", "ON");
-  if (cliRC < 0)
-    {
-      breadCrumb = 2;
-      goto label_error;
-    }
-  breadCrumb = 3;
-
-  // Create Seabase system schema
-  if (updateSeabaseMDObjectsTable(&cliInterface,sysCat,SEABASE_SYSTEM_SCHEMA,
-                                  SEABASE_SCHEMA_OBJECTNAME,
-                                  COM_SHARED_SCHEMA_OBJECT,"Y",SUPER_USER,
-                                  SUPER_USER,objectFlags,schemaUID))
-  {
-    goto label_error;
-  }
-  breadCrumb = 4;
-  
-  // Create Seabase metadata schema
-  schemaUID = -1;
-  if (updateSeabaseMDObjectsTable(&cliInterface,sysCat,SEABASE_MD_SCHEMA,
-                                  SEABASE_SCHEMA_OBJECTNAME,
-                                  COM_PRIVATE_SCHEMA_OBJECT,"Y",SUPER_USER,
-                                  SUPER_USER,objectFlags, schemaUID))
-  {
-    goto label_error;
-  }
-
-  // update MD with information about metadata objects
-  for (Lng32 i = 0; i < numTables; i++)
-    {
-      const MDTableInfo &mdti = allMDtablesInfo[i];
-      MDDescsInfo &mddi = CmpCommon::context()->getTrafMDDescsInfo()[i];
-
-      if (mdti.isIndex)
-        continue;
-
-      Int64 objUID = -1;
-      if (updateSeabaseMDTable(&cliInterface, 
-                               sysCat, SEABASE_MD_SCHEMA, mdti.newName,
-                               COM_BASE_TABLE_OBJECT,
-                               "Y",
-                               mddi.tableInfo,
-                               mddi.numNewCols,
-                               mddi.newColInfo,
-                               mddi.numNewKeys,
-                               mddi.newKeyInfo,
-                               mddi.numIndexes,
-                               mddi.indexInfo,
-                               objUID))
-        {
-          breadCrumb = 5;
-          goto label_error;
-        }
-
-    } // for
-
-  // update metadata with metadata indexes information
-  for (Lng32 i = 0; i < numTables; i++)
-    {
-      const MDTableInfo &mdti = allMDtablesInfo[i];
-      MDDescsInfo &mddi = CmpCommon::context()->getTrafMDDescsInfo()[i];
-
-      if (NOT mdti.isIndex)
-        continue;
-
-      tableInfo->tableName = NULL,
-      tableInfo->createTime = 0;
-      tableInfo->redefTime = 0;
-      tableInfo->objUID = 0;
-      tableInfo->objOwnerID = SUPER_USER;
-      tableInfo->schemaOwnerID = SUPER_USER;
-      tableInfo->isAudited = 1;
-      tableInfo->validDef = 1;
-      tableInfo->hbaseCreateOptions = NULL;
-      tableInfo->numSaltPartns = 0;
-      tableInfo->rowFormat = COM_UNKNOWN_FORMAT_TYPE;
-      tableInfo->objectFlags = 0;
-
-      Int64 objUID = -1;
-      if (updateSeabaseMDTable(&cliInterface, 
-                               sysCat, SEABASE_MD_SCHEMA, mdti.newName,
-                               COM_INDEX_OBJECT,
-                               "Y",
-                               tableInfo,
-                               mddi.numNewCols,
-                               mddi.newColInfo,
-                               mddi.numNewKeys,
-                               mddi.newKeyInfo,
-                               0, NULL,
-                               objUID))
-        {
-          breadCrumb = 6;
-          goto label_error;
-        }
-    } // for
-
-  // update SPJ info
-  if (updateSeabaseMDSPJ(&cliInterface, sysCat, SEABASE_MD_SCHEMA, 
-                         SEABASE_VALIDATE_LIBRARY,
-                         installJar.data(),SUPER_USER,SUPER_USER,
-                         &seabaseMDValidateRoutineInfo,
-                         sizeof(seabaseMDValidateRoutineColInfo) / 
sizeof(ComTdbVirtTableColumnInfo),
-                         seabaseMDValidateRoutineColInfo))
-    {
-      breadCrumb = 7;
-      goto label_error;
-    }
-
-  updateSeabaseVersions(&cliInterface, sysCat);
-  updateSeabaseAuths(&cliInterface, sysCat);
-
-  if (endXnIfStartedHere(&cliInterface, xnWasStartedHere, 0) < 0)
-    return;
-
-  CmpCommon::context()->setIsUninitializedSeabase(FALSE);
-  CmpCommon::context()->uninitializedSeabaseErrNum() = 0;
-
-  if (createSchemaObjects(&cliInterface))
-    {
-      breadCrumb = 8;
-      goto label_error;
-    }
- 
- if (createMetadataViews(&cliInterface))
-    {
-      breadCrumb = 9;
-      goto label_error;
-    }
-
- // If this is a MINIMAL initialization, don't create the repository
- // or privilege manager tables. (This happens underneath an upgrade,
- // for example, because the repository and privilege manager tables
- // already exist and we will later upgrade them.)
- if (!minimal)  
-   {
-     if (createRepos(&cliInterface))
-       {
-         breadCrumb = 10;
-         goto label_error;
-       }
-
-     if (createPrivMgrRepos(&cliInterface, ddlXns))
-       {
-         breadCrumb = 11;
-         goto label_error;
-       }
-   }
-
- if (createSeabaseLibmgr (&cliInterface))
-   {   
-     breadCrumb = 12;
-     goto label_error;
-   }
-
-  cliRC = cliInterface.restoreCQD("traf_bootstrap_md_mode");
+/*
+// This method has been rewritten and moved to CmpSeabaseDDLinitraf.cpp.
+ void CmpSeabaseDDL::initSeabaseMD(NABoolean ddlXns, NABoolean minimal)
 
-  return;
-
- label_error:
+ New method is called  initTrafMD.
 
-  // When debugging, the breadCrumb variable is useful to tell you
-  // how you got here.
-
-  endXnIfStartedHere(&cliInterface, xnWasStartedHere, -1);
-
-  char msg[80];
-  str_sprintf(msg,"CmpSeabaseDDL::initSeabaseMD failed, breadCrumb = 
%d",breadCrumb);
-  SQLMXLoggingArea::logSQLMXDebugEvent(msg, -1, __LINE__);
-
-  return;
-}
+*/
 
 void CmpSeabaseDDL::createSeabaseMDviews()
 {
@@ -7531,9 +7248,9 @@ void CmpSeabaseDDL::createSeabaseMDviews()
     CmpCommon::context()->sqlSession()->getParentQid());
 
   if ((CmpCommon::context()->isUninitializedSeabase()) &&
-      (CmpCommon::context()->uninitializedSeabaseErrNum() == -1393))
+      (CmpCommon::context()->uninitializedSeabaseErrNum() == 
-TRAF_NOT_INITIALIZED))
     {
-      *CmpCommon::diags() << DgSqlCode(-1393);
+      *CmpCommon::diags() << DgSqlCode(-TRAF_NOT_INITIALIZED);
       return;
     }
 
@@ -7560,9 +7277,9 @@ void CmpSeabaseDDL::dropSeabaseMDviews()
     CmpCommon::context()->sqlSession()->getParentQid());
 
   if ((CmpCommon::context()->isUninitializedSeabase()) &&
-      (CmpCommon::context()->uninitializedSeabaseErrNum() == -1393))
+      (CmpCommon::context()->uninitializedSeabaseErrNum() == 
-TRAF_NOT_INITIALIZED))
     {
-      *CmpCommon::diags() << DgSqlCode(-1393);
+      *CmpCommon::diags() << DgSqlCode(-TRAF_NOT_INITIALIZED);
       return;
     }
 
@@ -7588,9 +7305,9 @@ void CmpSeabaseDDL::createSeabaseSchemaObjects()
     CmpCommon::context()->sqlSession()->getParentQid());
 
   if ((CmpCommon::context()->isUninitializedSeabase()) &&
-      (CmpCommon::context()->uninitializedSeabaseErrNum() == -1393))
+      (CmpCommon::context()->uninitializedSeabaseErrNum() == 
-TRAF_NOT_INITIALIZED))
     {
-      *CmpCommon::diags() << DgSqlCode(-1393);
+      *CmpCommon::diags() << DgSqlCode(-TRAF_NOT_INITIALIZED);
       return;
     }
 
@@ -7601,6 +7318,22 @@ void CmpSeabaseDDL::createSeabaseSchemaObjects()
 
 }
 
+short CmpSeabaseDDL::createDefaultSystemSchema(ExeCliInterface *cliInterface)
+{
+  Lng32 cliRC = 0;
+  char buf[4000];
+  
+  str_sprintf(buf,"create shared schema " TRAFODION_SYSCAT_LIT"." 
SEABASE_SYSTEM_SCHEMA" ");
+  
+  cliRC = cliInterface->executeImmediate(buf);
+  if (cliRC < 0)
+    {
+      cliInterface->retrieveSQLDiagnostics(CmpCommon::diags());
+      return -1;
+    }
+
+  return 0;
+}
 
 short CmpSeabaseDDL::createSchemaObjects(ExeCliInterface *cliInterface)
 
@@ -7730,14 +7463,6 @@ short CmpSeabaseDDL::createSchemaObjects(ExeCliInterface 
*cliInterface)
 short CmpSeabaseDDL::createPrivMgrRepos(ExeCliInterface *cliInterface,
                                         NABoolean ddlXns)
 {
-  // During install, the customer can choose to enable security features 
through 
-  // an installation option which sets the the environment variable 
-  // TRAFODION_ENABLE_AUTHENTICATION to YES. Check to see if security features
-  // should be enabled.
-  char * env = getenv("TRAFODION_ENABLE_AUTHENTICATION");
-  if (strcmp(env, "NO") == 0)
-    return 0;
-
   std::vector<std::string> tablesCreated;
   std::vector<std::string> tablesUpgraded;
 
@@ -8185,9 +7910,9 @@ void CmpSeabaseDDL::dropSeabaseMD(NABoolean ddlXns)
   NABoolean xnWasStartedHere = FALSE;
 
   if ((CmpCommon::context()->isUninitializedSeabase()) &&
-      (CmpCommon::context()->uninitializedSeabaseErrNum() == -1393))
+      (CmpCommon::context()->uninitializedSeabaseErrNum() == 
-TRAF_NOT_INITIALIZED))
     {
-      *CmpCommon::diags() << DgSqlCode(-1393);
+      *CmpCommon::diags() << DgSqlCode(-TRAF_NOT_INITIALIZED);
       return;
     }
 
@@ -8198,7 +7923,7 @@ void CmpSeabaseDDL::dropSeabaseMD(NABoolean ddlXns)
   dropLOBHdfsFiles();
 
   CmpCommon::context()->setIsUninitializedSeabase(TRUE);
-  CmpCommon::context()->uninitializedSeabaseErrNum() = -1393;
+  CmpCommon::context()->uninitializedSeabaseErrNum() = -TRAF_NOT_INITIALIZED;
   CmpCommon::context()->setIsAuthorizationEnabled(FALSE);
 
   // kill child arkcmp process. It would ensure that a subsequent
@@ -8331,7 +8056,7 @@ short CmpSeabaseDDL::initSeabaseAuthorization(
   }
 
   // change authorization status in compiler contexts
-  //CmpCommon::context()->setAuthorizationState (1);
+  CmpCommon::context()->setAuthorizationState (1);
   GetCliGlobals()->currContext()->setAuthStateInCmpContexts(TRUE, TRUE);
 
   // change authorization status in compiler processes
@@ -8611,9 +8336,9 @@ void CmpSeabaseDDL::updateVersion()
     CmpCommon::context()->sqlSession()->getParentQid());
 
   if ((CmpCommon::context()->isUninitializedSeabase()) &&
-      (CmpCommon::context()->uninitializedSeabaseErrNum() == -1393))
+      (CmpCommon::context()->uninitializedSeabaseErrNum() == 
-TRAF_NOT_INITIALIZED))
     {
-      *CmpCommon::diags() << DgSqlCode(-1393);
+      *CmpCommon::diags() << DgSqlCode(-TRAF_NOT_INITIALIZED);
       return;
     }
 
@@ -8936,7 +8661,7 @@ short CmpSeabaseDDL::executeSeabaseDDL(DDLExpr * ddlExpr, 
ExprNode * ddlNode,
 
   // error accessing hbase. Return.
   if ((CmpCommon::context()->isUninitializedSeabase()) &&
-      (CmpCommon::context()->uninitializedSeabaseErrNum() == -1398))
+      (CmpCommon::context()->uninitializedSeabaseErrNum() == 
-TRAF_HBASE_ACCESS_ERROR))
     {
       *CmpCommon::diags() << 
DgSqlCode(CmpCommon::context()->uninitializedSeabaseErrNum())
                           << DgInt0(CmpCommon::context()->hbaseErrNum())
@@ -8966,6 +8691,9 @@ short CmpSeabaseDDL::executeSeabaseDDL(DDLExpr * ddlExpr, 
ExprNode * ddlNode,
       ignoreUninitTrafErr = TRUE;
     }
 
+  if (dws && dws->getInitTraf())
+    ignoreUninitTrafErr = TRUE;
+
   if ((CmpCommon::context()->isUninitializedSeabase()) &&
       (NOT ignoreUninitTrafErr))
     {
@@ -8978,7 +8706,18 @@ short CmpSeabaseDDL::executeSeabaseDDL(DDLExpr * 
ddlExpr, ExprNode * ddlNode,
       CMPASSERT(0);
       return -1;
     }
+
+  NABoolean startXn = FALSE;
+  NABoolean ddlXns = FALSE;
+  if (ddlExpr && ddlExpr->ddlXnsInfo(ddlXns, startXn))
+    return -1;
   
+  if (startXn)
+    {
+      if (beginXnIfNotInProgress(&cliInterface, xnWasStartedHere))
+        goto label_return;
+    }
+
   if (dws)
     {
       if (dws->getMDcleanup())
@@ -8986,29 +8725,43 @@ short CmpSeabaseDDL::executeSeabaseDDL(DDLExpr * 
ddlExpr, ExprNode * ddlNode,
           StmtDDLCleanupObjects * co = 
             (ddlNode ? 
ddlNode->castToStmtDDLNode()->castToStmtDDLCleanupObjects()
              : NULL);
-
+          
           CmpSeabaseMDcleanup cmpSBDC(STMTHEAP);
+          
+          cmpSBDC.cleanupObjects(co, currCatName, currSchName, dws);
+          
+          return 0;
+        }
+      else if (dws->getInitTraf())
+        {
+          if (ddlExpr)
+            {
+              dws->setDDLXns(TRUE);
+              if (ddlExpr->minimal())
+                dws->setMinimalInitTraf(TRUE);
+            }
 
-           cmpSBDC.cleanupObjects(co, currCatName, currSchName, dws);
-
-           return 0;
-         }
-    }
-
-  NABoolean startXn = FALSE;
-  NABoolean ddlXns = FALSE;
-  if (ddlExpr->ddlXnsInfo(ddlXns, startXn))
-    return -1;
-  
-  if (startXn)
-    {
-      if (beginXnIfNotInProgress(&cliInterface, xnWasStartedHere))
-        goto label_return;
+          initTrafMD(dws);
+          return 0;
+        }
     }
 
   if (ddlExpr->initHbase()) 
     {
-      initSeabaseMD(ddlExpr->ddlXns(), ddlExpr->minimal());
+      // will reach here it 'init traf' is to be done without returning status.
+      // drive initTrafMD method in a loop without returning any status rows.
+      // Do this until DONE state is returned.
+      CmpDDLwithStatusInfo dws;
+      dws.setDDLXns(TRUE);
+      if (ddlExpr->minimal())
+        dws.setMinimalInitTraf(TRUE);      
+      NABoolean done = FALSE;
+      while (NOT done)
+        {
+          initTrafMD(&dws);
+          if (dws.done())
+            done = TRUE;
+        }
     }
   else if (ddlExpr->dropHbase())
     {

http://git-wip-us.apache.org/repos/asf/trafodion/blob/6f0f102a/core/sql/sqlcomp/CmpSeabaseDDLinitraf.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLinitraf.cpp 
b/core/sql/sqlcomp/CmpSeabaseDDLinitraf.cpp
new file mode 100644
index 0000000..e5491aa
--- /dev/null
+++ b/core/sql/sqlcomp/CmpSeabaseDDLinitraf.cpp
@@ -0,0 +1,844 @@
+/**********************************************************************
+// @@@ START COPYRIGHT @@@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+// @@@ END COPYRIGHT @@@
+**********************************************************************/
+
+/* -*-C++-*-
+ *****************************************************************************
+ *
+ * File:         CmpSeabaseDDLinitraf.cpp
+ * Description:  Implements initialize trafodion
+ *
+ *
+ * Created:     
+ * Language:     C++
+ *
+ *
+ *****************************************************************************
+ */
+
+#include "CmpSeabaseDDLincludes.h"
+
+enum InitTrafSteps {
+  IT_NO_CHANGE      = -1,
+  IT_START          = 0,
+  IT_VERIFY_USER,
+  IT_VERSION_CHECK,
+  IT_TDDL_TRUNCATE,
+  IT_START_XN,
+  IT_CREATE_MD_TABLES,
+  IT_UPDATE_MD_TABLES,
+  IT_CREATE_SCHEMA_OBJECTS,
+  IT_CREATE_MD_VIEWS,
+  IT_CREATE_REPOS,
+  IT_CREATE_PRIVMGR_REPOS,
+  IT_CREATE_LIBMGR,
+  IT_STEP_FAILED,
+  IT_ABORT_XN,
+  IT_FAILED,
+  IT_DONE,
+};
+
+
+static void initDWS(CmpDDLwithStatusInfo *dws)
+{
+  dws->setBlackBoxLen(0);
+  dws->setBlackBox(NULL);
+  dws->setComputeST(FALSE);
+  dws->setComputeET(FALSE);
+  dws->setReturnET(FALSE);
+}
+  
+static void setValuesInDWS(
+     CmpDDLwithStatusInfo *dws,
+     Lng32 nextStep,
+     const char * msg = NULL, 
+     Lng32 subStep = 0, NABoolean isEndStep = FALSE,
+     NABoolean computeST = FALSE, 
+     NABoolean computeET = FALSE, 
+     NABoolean returnET = FALSE,
+     NABoolean done = FALSE)
+{
+  if (msg)
+    dws->setMsg(msg);
+  if (nextStep != IT_NO_CHANGE)
+    dws->setStep(nextStep);
+  if (subStep >= 0)
+    dws->setSubstep(subStep);
+  dws->setEndStep(isEndStep);
+  
+  if (computeST)
+    dws->setComputeST(computeST);
+  if (computeET)
+    dws->setComputeET(computeET);
+  if (returnET)
+    dws->setReturnET(computeET);
+  
+  if (done)
+    dws->setDone(TRUE);
+}
+
+short CmpSeabaseDDL::initTrafMD(CmpDDLwithStatusInfo *dws)
+{
+  Lng32 cliRC = 0;
+
+  initDWS(dws);
+
+  while (1) // exit via return from within the while loop
+    {
+      switch (dws->step())
+        {
+        case IT_START:
+          {
+            setValuesInDWS(dws, IT_VERIFY_USER,
+                           "Initialize Trafodion: Started",
+                           0, TRUE);
+
+            return 0;
+          }
+          break;
+
+        case IT_VERIFY_USER:
+          {
+           switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE, 
+                                 "Verify User: Started", 1, FALSE,
+                                 TRUE);
+                  
+                  return 0;
+                }
+                break;
+
+              case 1:
+                {
+                  // verify user is authorized
+                  if (!ComUser::isRootUserID())
+                    {
+                      //*CmpCommon::diags() << DgSqlCode(CAT_NOT_AUTHORIZED);
+                      
+                      setValuesInDWS(dws, IT_NO_CHANGE,
+                                     "  Current user is not authorized to 
Initialize Trafodion. Must be Root to perform this operation.", 2, FALSE);
+
+                      return 0;
+                    }
+                  
+                  CmpCommon::diags()->clear();
+
+                  setValuesInDWS(dws, IT_VERSION_CHECK,
+                                 "Verify User: Completed", 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+                  return 0;
+                } // case 1
+                break;
+
+              case 2:
+                {
+                  setValuesInDWS(dws, IT_FAILED, 
+                                 "Verify User: Failed", 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                }
+                break;
+
+              } // switch
+          }
+          break;
+
+        case IT_VERSION_CHECK:
+          {
+            Lng32 hbaseErrNum = 0;
+            NAString hbaseErrStr;
+            
+            ExpHbaseInterface * ehi = allocEHI();
+            if (ehi == NULL)
+              {
+                setValuesInDWS(dws, IT_FAILED, NULL,
+                               0, TRUE);
+
+                break;
+              }
+
+           switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Version Check: Started", 1, FALSE,
+                                 TRUE);
+
+                  return 0;
+                }
+                break;
+
+              case 1:
+                {
+                  // check if traf is already initialized
+                  Lng32 errNum = 
validateVersions(&ActiveSchemaDB()->getDefaults(), ehi,
+                                                  NULL, NULL, NULL, NULL, 
NULL, NULL, NULL, NULL, NULL,
+                                                  &hbaseErrNum, &hbaseErrStr);
+                  deallocEHI(ehi); 
+                  if (errNum == 0)
+                    {
+                      CmpCommon::context()->setIsUninitializedSeabase(FALSE);
+                      
+                      // add warning 1392 to indicate that traf is already 
init.
+                      // This is needed as installer checks for this error 
code to
+                      // determine if traf is initialized.
+                      *CmpCommon::diags() << 
DgSqlCode(TRAF_ALREADY_INITIALIZED);
+                      
+                      // Metadata is initialized
+                      setValuesInDWS(dws, IT_NO_CHANGE,
+                                     "  Trafodion is already initialized on 
this system.",
+                                     2, FALSE);
+
+                      return 0;
+                    }
+                  
+                  CmpCommon::context()->setIsUninitializedSeabase(TRUE);
+                  CmpCommon::context()->uninitializedSeabaseErrNum() = errNum;
+                  CmpCommon::context()->hbaseErrNum() = hbaseErrNum;
+                  CmpCommon::context()->hbaseErrStr() = hbaseErrStr;
+                  
+                  // Return any other error besides uninitialized traf error.
+                  if (errNum != -TRAF_NOT_INITIALIZED)
+                    {
+                      // add returned error nums as warnings.
+                      // It will show why init traf failed.
+                      if (errNum == -TRAF_HBASE_ACCESS_ERROR)
+                        *CmpCommon::diags() << DgSqlCode(-errNum)
+                                            << DgInt0(hbaseErrNum)
+                                            << DgString0(hbaseErrStr);
+                      else
+                        *CmpCommon::diags() << DgSqlCode(-errNum);
+                      
+                      char msgBuf[1000];
+                      sprintf(msgBuf, "  Error %d returned. See error details 
for further action.", -errNum);
+                      
+                      setValuesInDWS(dws, IT_NO_CHANGE, msgBuf, 3, FALSE);
+
+                      return 0;
+                    }
+                  
+                  CmpCommon::diags()->clear();
+
+                  setValuesInDWS(dws, IT_TDDL_TRUNCATE, 
+                                 "Version Check: Completed",
+                                 0, TRUE, 
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                } // case 1
+                break;
+
+              case 2:
+                {
+                  setValuesInDWS(dws, IT_DONE,
+                                 "Version Check: Completed",
+                                 0, TRUE, 
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                }
+                break;
+
+              case 3:
+                {
+                  setValuesInDWS(dws, IT_FAILED, "Version Check: Failed",
+                                 0, TRUE, 
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                }
+                break;
+
+              } // switch
+          }
+          break;
+
+        case IT_TDDL_TRUNCATE:
+          {
+            ExpHbaseInterface * ehi = allocEHI();
+            if (ehi == NULL)
+              {
+                setValuesInDWS(dws, IT_FAILED);
+                               
+                break;
+              }
+
+            // truncate DTM table TDDL.
+            // Do not do this operation under a dtm transaction.
+            // See file 
core/sqf/src/seatrans/hbase-trx/src/main/java/org/apache/hadoop/hbase/client/transactional/TmDDL.java
+            // Keep the name TRAFODION._DTM_.TDDL and col fam "tddlcf" in sync 
with
+            // that file.
+            HbaseStr tddlTable;
+            const NAString tddlNAS("TRAFODION._DTM_.TDDL");
+            tddlTable.val = (char*)tddlNAS.data();
+            tddlTable.len = tddlNAS.length();
+            if (ehi->exists(tddlTable) == -1) // exists
+              {
+                ehi->truncate(tddlTable, TRUE, TRUE);
+              }
+
+            deallocEHI(ehi); 
+
+            setValuesInDWS(dws, IT_START_XN);
+          }
+          break;
+
+        case IT_START_XN:
+          {
+            if (dws->getDDLXns())
+              {
+                ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                             
CmpCommon::context()->sqlSession()->getParentQid());
+
+                NABoolean xnWasStartedHere = FALSE;
+                if (beginXnIfNotInProgress(&cliInterface, xnWasStartedHere))
+                  {
+                    setValuesInDWS(dws, IT_FAILED);
+                    break;
+                  }
+                dws->setXnStarted(TRUE);
+              }
+
+            setValuesInDWS(dws, IT_CREATE_MD_TABLES);
+          }
+          break;
+
+        case IT_CREATE_MD_TABLES:
+          {
+            switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Create Metadata Tables: Started", 1, FALSE,
+                                 TRUE, FALSE, FALSE);
+                  return 0;
+                }
+                break;
+
+              case 1:
+                {
+                  ExpHbaseInterface * ehi = allocEHI();
+                  if (ehi == NULL)
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Create Metadata Tables: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);
+
+                      return 0;
+                    }
+
+                  Lng32 numTables = sizeof(allMDtablesInfo) / 
sizeof(MDTableInfo);
+                  const char* sysCat = 
+                    ActiveSchemaDB()->getDefaults().getValue(SEABASE_CATALOG);
+
+                  // create hbase physical objects
+                  for (Lng32 i = 0; i < numTables; i++)
+                    {
+                      const MDTableInfo &mdti = allMDtablesInfo[i];
+                      
+                      HbaseStr hbaseObject;
+                      NAString hbaseObjectStr(sysCat);
+                      hbaseObjectStr += ".";
+                      hbaseObjectStr += SEABASE_MD_SCHEMA;
+                      hbaseObjectStr += ".";
+                      hbaseObjectStr += mdti.newName;
+                      hbaseObject.val = (char*)hbaseObjectStr.data();
+                      hbaseObject.len = hbaseObjectStr.length();
+                      if (createHbaseTable(ehi, &hbaseObject, 
SEABASE_DEFAULT_COL_FAMILY, NULL,
+                                           0, 0, NULL,
+                                           FALSE, dws->getDDLXns()) == -1)
+                        {
+                          deallocEHI(ehi); 
+
+                          setValuesInDWS(dws, IT_STEP_FAILED,
+                                         "Create Metadata Tables: Failed", 
+                                         0, TRUE,
+                                         FALSE, TRUE, TRUE);
+
+                          return 0;
+                        }
+                      
+                    } // for
+                  
+                  deallocEHI(ehi); 
+                  ehi = NULL;
+                  
+                  setValuesInDWS(dws, IT_UPDATE_MD_TABLES,
+                                 "Create Metadata Tables: Completed", 
+                                 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                }
+                break;
+
+              } // switch
+          }
+          break;
+
+        case IT_UPDATE_MD_TABLES:
+          {
+            switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Update Metadata Tables: Started", 1, FALSE,
+                                 TRUE, FALSE, FALSE);
+                  
+                  return 0;
+                }
+                break;
+
+              case 1:
+                {
+                  ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                               
CmpCommon::context()->sqlSession()->getParentQid());
+
+                  cliRC = cliInterface.holdAndSetCQD("traf_bootstrap_md_mode", 
"ON");
+                  if (cliRC < 0)
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Update Metadata Tables: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);
+                      
+                      return 0;
+                    }
+                  
+                  Int64 objectFlags = 0;
+                  Int64 schemaUID = -1;  
+
+                  const char* sysCat = 
+                    ActiveSchemaDB()->getDefaults().getValue(SEABASE_CATALOG);
+                  
+                  // Create Seabase metadata schema
+                  schemaUID = -1;
+                  if 
(updateSeabaseMDObjectsTable(&cliInterface,sysCat,SEABASE_MD_SCHEMA,
+                                                  SEABASE_SCHEMA_OBJECTNAME,
+                                                  
COM_PRIVATE_SCHEMA_OBJECT,"Y",SUPER_USER,
+                                                  SUPER_USER,objectFlags, 
schemaUID))
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Update Metadata Tables: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);
+
+                      return 0;
+                    }
+                  
+                  // update MD with information about metadata objects
+                  Lng32 numTables = sizeof(allMDtablesInfo) / 
sizeof(MDTableInfo);
+                  for (Lng32 i = 0; i < numTables; i++)
+                    {
+                      const MDTableInfo &mdti = allMDtablesInfo[i];
+                      MDDescsInfo &mddi = 
CmpCommon::context()->getTrafMDDescsInfo()[i];
+                      
+                      if (mdti.isIndex)
+                        continue;
+                      
+                      Int64 objUID = -1;
+                      if (updateSeabaseMDTable(&cliInterface, 
+                                               sysCat, SEABASE_MD_SCHEMA, 
mdti.newName,
+                                               COM_BASE_TABLE_OBJECT,
+                                               "Y",
+                                               mddi.tableInfo,
+                                               mddi.numNewCols,
+                                               mddi.newColInfo,
+                                               mddi.numNewKeys,
+                                               mddi.newKeyInfo,
+                                               mddi.numIndexes,
+                                               mddi.indexInfo,
+                                               objUID))
+                        {
+                          setValuesInDWS(dws, IT_STEP_FAILED,
+                                         "Update Metadata Tables: Failed", 0, 
TRUE,
+                                         FALSE, TRUE, TRUE);
+                          
+                          return 0;
+                        }
+                      
+                    } // for
+                  
+                  // update metadata with metadata indexes information
+                  for (Lng32 i = 0; i < numTables; i++)
+                    {
+                      const MDTableInfo &mdti = allMDtablesInfo[i];
+                      MDDescsInfo &mddi = 
CmpCommon::context()->getTrafMDDescsInfo()[i];
+                      
+                      if (NOT mdti.isIndex)
+                        continue;
+                      
+                      ComTdbVirtTableTableInfo * tableInfo = 
+                        new(STMTHEAP) ComTdbVirtTableTableInfo[1];
+                      
+                      tableInfo->tableName = NULL;
+                      tableInfo->createTime = 0;
+                      tableInfo->redefTime = 0;
+                      tableInfo->objUID = 0;
+                      tableInfo->objOwnerID = SUPER_USER;
+                      tableInfo->schemaOwnerID = SUPER_USER;
+                      tableInfo->isAudited = 1;
+                      tableInfo->validDef = 1;
+                      tableInfo->hbaseCreateOptions = NULL;
+                      tableInfo->numSaltPartns = 0;
+                      tableInfo->rowFormat = COM_UNKNOWN_FORMAT_TYPE;
+                      tableInfo->objectFlags = 0;
+                      
+                      Int64 objUID = -1;
+                      if (updateSeabaseMDTable(&cliInterface, 
+                                               sysCat, SEABASE_MD_SCHEMA, 
mdti.newName,
+                                               COM_INDEX_OBJECT,
+                                               "Y",
+                                               tableInfo,
+                                               mddi.numNewCols,
+                                               mddi.newColInfo,
+                                               mddi.numNewKeys,
+                                               mddi.newKeyInfo,
+                                               0, NULL,
+                                               objUID))
+                        {
+                          setValuesInDWS(dws, IT_STEP_FAILED,
+                                         "Update Metadata Tables: Failed", 0, 
TRUE,
+                                         FALSE, TRUE, TRUE);                   
       
+                          return 0;
+                        }
+                    } // for
+                  
+                  // update SPJ info
+                  // Note that this is not an existing jar file, the class
+                  // loader will attempt to load the class from the CLASSPATH 
if
+                  // it can't find this jar
+                  NAString installJar(getenv("TRAF_HOME"));
+                  installJar += "/export/lib/trafodion-sql-currversion.jar";
+                  if (updateSeabaseMDSPJ(&cliInterface, sysCat, 
SEABASE_MD_SCHEMA, 
+                                         SEABASE_VALIDATE_LIBRARY,
+                                         
installJar.data(),SUPER_USER,SUPER_USER,
+                                         &seabaseMDValidateRoutineInfo,
+                                         
sizeof(seabaseMDValidateRoutineColInfo) / sizeof(ComTdbVirtTableColumnInfo),
+                                         seabaseMDValidateRoutineColInfo))
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Update Metadata Tables: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);                      
+
+                      return 0;
+                    }
+                  
+                  updateSeabaseVersions(&cliInterface, sysCat);
+                  updateSeabaseAuths(&cliInterface, sysCat);
+                  
+                  CmpCommon::context()->setIsUninitializedSeabase(FALSE);
+                  CmpCommon::context()->uninitializedSeabaseErrNum() = 0;
+
+                  setValuesInDWS(dws, IT_CREATE_SCHEMA_OBJECTS,
+                                 "Update Metadata Tables: Completed", 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                } // case 1
+              } // switch
+          }
+          break;
+
+        case IT_CREATE_SCHEMA_OBJECTS:
+          {
+           switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Create Schema Objects: Started", 1, FALSE,
+                                 TRUE, FALSE, FALSE);
+
+                  return 0;
+                }
+                break;
+
+              case 1:
+                {
+                  ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                               
CmpCommon::context()->sqlSession()->getParentQid());
+
+                  if (createDefaultSystemSchema(&cliInterface))
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Create Schema Objects: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);
+
+                      return 0;
+                    }
+    
+                  if (createSchemaObjects(&cliInterface))
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Create Schema Objects: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);
+
+                      return 0;
+                    }
+                  
+                  setValuesInDWS(dws, IT_CREATE_MD_VIEWS,
+                                 "Create Schema Objects: Completed", 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+                  
+                  return 0;
+                } // case 1
+              } // switch
+          }
+          break;
+
+        case IT_CREATE_MD_VIEWS:
+          {
+            switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Create Metadata Views: Started", 1, FALSE,
+                                 TRUE, FALSE, FALSE);
+  
+                  return 0;
+                }
+                break;
+
+              case 1:
+                {
+                  ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                               
CmpCommon::context()->sqlSession()->getParentQid());
+
+                  if (createMetadataViews(&cliInterface))
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Create Metadata Views: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);
+
+                      return 0;
+                    }
+                  
+                  // If this is a MINIMAL initialization, don't create the 
+                  // repository or privilege manager tables. 
+                  // (This happens underneath an upgrade, for example, 
+                  // because the repository and privilege manager tables
+                  // already exist and we will later upgrade them.)
+                  setValuesInDWS(dws, 
+                                 (dws->getMinimalInitTraf() ? IT_CREATE_LIBMGR 
: IT_CREATE_REPOS),
+                                 "Create Metadata Views: Completed", 
+                                 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                } // case
+              } // switch
+          }
+          break;
+
+        case IT_CREATE_REPOS:
+          {
+            switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Create Repository Tables: Started", 1, FALSE,
+                                 TRUE, FALSE, FALSE);
+
+                  return 0;
+                }
+                break;
+
+              case 1:
+                {
+                  ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                               
CmpCommon::context()->sqlSession()->getParentQid());
+
+                  if (createRepos(&cliInterface))
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Create Repository Tables: Failed", 0, 
TRUE,
+                                     FALSE, TRUE, TRUE);
+                      return 0;
+                    }
+
+                  setValuesInDWS(dws, IT_CREATE_PRIVMGR_REPOS,
+                                 "Create Repository Tables: Completed", 0, 
TRUE,
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                } // case 1
+              } // switch
+          }
+          break;
+
+        case IT_CREATE_PRIVMGR_REPOS:
+          {
+            switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Create PrivMgr Tables: Started", 1, FALSE,
+                                 TRUE, FALSE, FALSE);
+                  return 0;
+                }
+                break;
+                
+              case 1:
+                {
+                  ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                               
CmpCommon::context()->sqlSession()->getParentQid());
+
+                  if (createPrivMgrRepos(&cliInterface, dws->getDDLXns()))
+                    {
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Create PrivMgr Tables: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);
+                      return 0;
+                    }
+                  
+                  setValuesInDWS(dws, IT_CREATE_LIBMGR,
+                                 "Create PrivMgr Tables: Completed", 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                } // case 1
+              } // switch
+          }
+          break;
+
+        case IT_CREATE_LIBMGR:
+          {
+            switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Create Library Manager: Started", 1, FALSE,
+                                 TRUE, FALSE, FALSE);
+
+                  return 0;
+                }
+                break;
+                
+              case 1:
+                {
+                  ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                               
CmpCommon::context()->sqlSession()->getParentQid());
+
+                  if (createSeabaseLibmgr (&cliInterface))
+                    {   
+                      setValuesInDWS(dws, IT_STEP_FAILED,
+                                     "Create Library Manager: Failed", 0, TRUE,
+                                     FALSE, TRUE, TRUE);
+ 
+                      return 0;
+                    }
+                  
+                  cliRC = cliInterface.restoreCQD("traf_bootstrap_md_mode");
+
+                  setValuesInDWS(dws, IT_DONE,
+                                 "Create Library Manager: Completed", 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                } // case 1
+              } // switch
+          }
+          break;
+
+        case IT_STEP_FAILED:
+          {
+            setValuesInDWS(dws, (dws->xnStarted() ? IT_ABORT_XN : IT_FAILED));
+
+            break;
+          }
+          break;
+
+        case IT_ABORT_XN:
+          {
+            switch (dws->subStep())
+              {
+              case 0:
+                {
+                  setValuesInDWS(dws, IT_NO_CHANGE,
+                                 "Abort Transaction: Started", 1, FALSE,
+                                 TRUE, FALSE, FALSE);
+  
+                  return 0;
+                }
+                break;
+
+              case 1:
+                {
+                  ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                               
CmpCommon::context()->sqlSession()->getParentQid());
+                  
+                  NABoolean xnWasStartedHere = dws->xnStarted();
+                  endXnIfStartedHere(&cliInterface, xnWasStartedHere, -1);
+                  dws->setXnStarted(xnWasStartedHere);
+                  
+                  setValuesInDWS(dws, IT_FAILED,
+                                 "Abort Transaction: Completed", 0, TRUE,
+                                 FALSE, TRUE, TRUE);
+
+                  return 0;
+                }
+                break;
+              } // switch
+          }
+          break;
+
+        case IT_FAILED:
+          {
+            setValuesInDWS(dws, IT_START,
+                           "Initialize Trafodion: Failed", 0, FALSE,
+                           FALSE, TRUE, TRUE, TRUE);
+            
+            return -1;
+          }
+          break;
+          
+        case IT_DONE:
+          {
+            ExeCliInterface cliInterface(STMTHEAP, 0, NULL, 
+                                         
CmpCommon::context()->sqlSession()->getParentQid());
+  
+            NABoolean xnWasStartedHere = dws->xnStarted();
+            endXnIfStartedHere(&cliInterface, xnWasStartedHere, 0);
+            dws->setXnStarted(xnWasStartedHere);
+
+            setValuesInDWS(dws, IT_START,
+                           "Initialize Trafodion: Completed", 0, FALSE,
+                           FALSE, TRUE, TRUE, TRUE);
+
+           return 0;
+          }   
+          break;
+        } // switch
+    } // while
+
+  return 0;
+}

Reply via email to