You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by se...@apache.org on 2016/11/28 22:32:18 UTC

[2/6] incubator-trafodion git commit: [TRAFODION 2231] fix feedback comments

[TRAFODION 2231] fix feedback comments


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

Branch: refs/heads/master
Commit: a17b2a30011803a6572ee31abc90eeba5dbc4d29
Parents: c4e4596
Author: Prashant Vasudev <pr...@esgyn.com>
Authored: Mon Nov 21 20:23:57 2016 +0000
Committer: Prashant Vasudev <pr...@esgyn.com>
Committed: Mon Nov 21 20:23:57 2016 +0000

----------------------------------------------------------------------
 core/sqf/export/include/dtm/tm.h            |  14 +-
 core/sqf/export/include/dtm/tmtransaction.h |  13 +-
 core/sqf/src/tm/tmddlrequests.cpp           | 240 +++++++++++++----------
 core/sqf/src/tm/tmlib.cpp                   |  26 ++-
 core/sqf/src/tm/tmtransaction.cpp           |  53 ++---
 5 files changed, 207 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/export/include/dtm/tm.h
----------------------------------------------------------------------
diff --git a/core/sqf/export/include/dtm/tm.h b/core/sqf/export/include/dtm/tm.h
index d558567..885d6b1 100644
--- a/core/sqf/export/include/dtm/tm.h
+++ b/core/sqf/export/include/dtm/tm.h
@@ -277,10 +277,16 @@ typedef struct TM_HBASEREGIONINFO {
 #define TM_MAX_ERROR_STRING 2048
 extern "C" short REGISTERREGION(long transid, long startid, int port, char *hostname, int hostname_length, long startcode, char *regionInfo, int regionInfo_Length);
 extern "C" short CREATETABLE(char *pa_tbldesc, int pv_tbldesc_length, char *pv_tblname, char** pv_keys, int pv_numsplits, int pv_keylen, long transid,
-				char* pv_err_str);
-extern "C" short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid, char* pv_err_str);
-extern "C" short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid, char* pv_err_str);
-extern "C" short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions, int pv_tbloptslen, int pv_tbloptscnt, long pv_transid, char* pv_err_str);
+				char *&pv_err_str, int &pv_err_len);
+extern "C" short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len,
+                                    long pv_transid, char* &pv_err_str, 
+                                    int &pv_err_len);
+extern "C" short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid, 
+                          char* &pv_err_str, int &pv_err_len);
+extern "C" short ALTERTABLE(char *pv_tblname, int pv_tblname_len, 
+                            char ** pv_tbloptions, int pv_tbloptslen, 
+                            int pv_tbloptscnt, long pv_transid, 
+                            char* &pv_err_str, int &pv_err_len);
 extern "C" short HBASETM_REQUESTREGIONINFO(TM_HBASEREGIONINFO pa_trans[], short *pp_count);
 extern "C" short DTM_GETNEXTSEQNUMBLOCK(unsigned int &pp_seqNum_start, unsigned int &pp_seqNum_count);
 extern "C" bool DTM_LOCALTRANSACTION(int32 *pp_node, int32 *pp_seqnum);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/export/include/dtm/tmtransaction.h
----------------------------------------------------------------------
diff --git a/core/sqf/export/include/dtm/tmtransaction.h b/core/sqf/export/include/dtm/tmtransaction.h
index 4467842..4533997 100755
--- a/core/sqf/export/include/dtm/tmtransaction.h
+++ b/core/sqf/export/include/dtm/tmtransaction.h
@@ -52,10 +52,15 @@ public:
     short suspend(TM_Transid *transid, bool coordinator_role=true);
     short resume();
     short register_region(long startid, int port, char *hostname, int hostname_length, long startcode, char *regionInfo, int regionInfoLength); //TOPL
-    short create_table(char* pa_tbldesc, int pv_tbldesc_len, char* pa_tblname, char** pv_keys, int pv_numsplits, int pv_keylen, char* pv_err_str);
-    short reg_truncateonabort(char* pa_tblname, int pv_tblname_len, char* pv_err_str);
-    short drop_table(char* pa_tblname, int pv_tblname_len, char* pv_err_str);
-    short alter_table(char * pa_tblname, int pv_tblname_len, char ** pv_tbloptions, int pv_tbloptslen, int pv_tbloptscnt, char* pv_err_str);
+    short create_table(char* pa_tbldesc, int pv_tbldesc_len, char* pa_tblname, char** pv_keys, int pv_numsplits, int pv_keylen,
+                      char* &pv_err_str, int &pv_err_len);
+    short reg_truncateonabort(char* pa_tblname, int pv_tblname_len, 
+                              char* &pv_err_str, int &pv_err_len);
+    short drop_table(char* pa_tblname, int pv_tblname_len, char* &pv_err_str,
+                      int &pv_err_len);
+    short alter_table(char * pa_tblname, int pv_tblname_len, char ** pv_tbloptions,
+                      int pv_tbloptslen, int pv_tbloptscnt, char* &pv_err_str,
+                      int &pv_err_len);
     TM_Transaction *release();
     short status(short *status);
     TM_Transid * getTransid();

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/src/tm/tmddlrequests.cpp
----------------------------------------------------------------------
diff --git a/core/sqf/src/tm/tmddlrequests.cpp b/core/sqf/src/tm/tmddlrequests.cpp
index d854e69..3427a20 100644
--- a/core/sqf/src/tm/tmddlrequests.cpp
+++ b/core/sqf/src/tm/tmddlrequests.cpp
@@ -38,61 +38,71 @@ JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMIn
   (JNIEnv *pp_env, jobject pv_object, jbyteArray pv_tableDescriptor, jobjectArray pv_keys, jint pv_numSplits, jint pv_keyLength, jlong pv_transid, jbyteArray pv_tblname)
 {
 
-   char la_tbldesc[TM_MAX_DDLREQUEST_STRING];
-   char la_tblname[TM_MAX_DDLREQUEST_STRING];
-   char la_err_str[TM_MAX_ERROR_STRING];
-   char* str_key;
+   char *la_err_str = 0;
+   int la_err_len = 0;
+   char* str_key = 0;
    str_key = new char[TM_MAX_DDLREQUEST_STRING];
    char** la_keys;
    la_keys = new char *[TM_MAX_DDLREQUEST_STRING];
    int lv_error = FEOK;
 
    int lv_tblname_len = pp_env->GetArrayLength(pv_tblname);
-   if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING) {
-      cout << "Table name length is larger than max allowed" << endl;
+   if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING)
+   {
+     jstring lv_err_str = pp_env->NewStringUTF("Table name length is larger than max allowed");
+     return lv_err_str;
    }
-   else {
-      int lv_tbldesc_length = pp_env->GetArrayLength(pv_tableDescriptor);
-      memset(la_tbldesc, 0, lv_tbldesc_length);
-      jbyte *lp_tbldesc = pp_env->GetByteArrayElements(pv_tableDescriptor, 0);
-      memcpy(la_tbldesc, lp_tbldesc, lv_tbldesc_length);
-
-      memset(la_tblname, 0, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING);
-      jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
-      memcpy(la_tblname, lp_tblname, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING -1 );
 
-      long lv_transid = (long) pv_transid;
+   int lv_tbldesc_length = pp_env->GetArrayLength(pv_tableDescriptor);
+   jbyte *lp_tbldesc = pp_env->GetByteArrayElements(pv_tableDescriptor, 0);
+   jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
+  
+   long lv_transid = (long) pv_transid;
 
-      // Keys for Salted Tables
-      int lv_numSplits = (int) pv_numSplits;
-      int lv_keyLength = (int) pv_keyLength;
+   // Keys for Salted Tables
+   int lv_numSplits = (int) pv_numSplits;
+   int lv_keyLength = (int) pv_keyLength;
 
-      for(int i=0; i<lv_numSplits; i++)
-      {
-         jbyteArray jba_keyarray = (jbyteArray)(pp_env->GetObjectArrayElement((jobjectArray)pv_keys, i));
-         int lv_key_len = pp_env->GetArrayLength(jba_keyarray);
-         pp_env->GetByteArrayRegion(jba_keyarray, 0, lv_key_len, (jbyte*)str_key);
+   for(int i=0; i<lv_numSplits; i++)
+   {
+     jbyteArray jba_keyarray = (jbyteArray)(pp_env->GetObjectArrayElement((jobjectArray)pv_keys, i));
+     int lv_key_len = pp_env->GetArrayLength(jba_keyarray);
+     pp_env->GetByteArrayRegion(jba_keyarray, 0, lv_key_len, (jbyte*)str_key);
 
-         la_keys[i] = new char[lv_key_len];
-         memcpy(la_keys[i], str_key, lv_key_len);
+     la_keys[i] = new char[lv_key_len];
+     memcpy(la_keys[i], str_key, lv_key_len);
 
-         pp_env->DeleteLocalRef(jba_keyarray);
-      }
+     pp_env->DeleteLocalRef(jba_keyarray);
+   }
 
-      lv_error  = CREATETABLE(la_tbldesc, lv_tbldesc_length, la_tblname, la_keys, lv_numSplits, lv_keyLength, lv_transid, la_err_str);
+   lv_error  = CREATETABLE((char*) lp_tbldesc, lv_tbldesc_length,
+                           (char *)lp_tblname, la_keys, lv_numSplits,
+                           lv_keyLength, lv_transid, la_err_str, la_err_len);
 
-      pp_env->ReleaseByteArrayElements(pv_tableDescriptor, lp_tbldesc, 0);
-      pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
-   }
+   pp_env->ReleaseByteArrayElements(pv_tableDescriptor, lp_tbldesc, 0);
+   pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
    
+   delete str_key;
+   delete [] la_keys;
    if(lv_error)
    {
-	   jstring lv_err_str = pp_env->NewStringUTF(la_err_str);
-	   return lv_err_str;
+     jstring lv_err_str;
+     if(la_err_len && la_err_str)
+     {
+       lv_err_str = pp_env->NewStringUTF(la_err_str);
+       
+       //la_err_str is allocated in lower layers.
+       delete la_err_str;
+     }
+     else
+     {
+       lv_err_str = pp_env->NewStringUTF("Create Table failed. Error is Unknown");
+     }
+     return lv_err_str;
    }
    else
    {
-	 return 0;
+     return 0;
    }
 }
 
@@ -105,29 +115,37 @@ JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMIn
 JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMInterface_dropTableReq
   (JNIEnv *pp_env, jobject pv_object, jbyteArray pv_tblname, jlong pv_transid) {
 
-   char la_tblname[TM_MAX_DDLREQUEST_STRING];
-   char la_err_str[TM_MAX_ERROR_STRING];
+   char *la_err_str = 0;
+   int la_err_len = 0;
    int lv_error = FEOK;
 
    int lv_tblname_len = pp_env->GetArrayLength(pv_tblname);
-   if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING) {
-      cout << "Table name length is larger than max allowed" << endl;
-   }
-   else {
-      memset(la_tblname, 0, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING);
-      jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
-      memcpy(la_tblname, lp_tblname, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING -1 );
-
-      long lv_transid = (long) pv_transid;
-
-      lv_error = DROPTABLE(la_tblname, lv_tblname_len, lv_transid, la_err_str);
-      pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
+   if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING)
+   {
+     jstring lv_err_str = pp_env->NewStringUTF("Table name length is larger than max allowed");
+     return lv_err_str;
    }
+   jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
+   long lv_transid = (long) pv_transid;
+   lv_error = DROPTABLE((char*)lp_tblname, lv_tblname_len, lv_transid, la_err_str,
+                         la_err_len);
+   pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
    
    if(lv_error)
    {
-	   jstring lv_err_str = pp_env->NewStringUTF(la_err_str);
-	   return lv_err_str;
+     jstring lv_err_str;
+     if(la_err_len && la_err_str)
+     {
+       lv_err_str = pp_env->NewStringUTF(la_err_str);
+       
+       //la_err_str is allocated in lower layers.
+       delete la_err_str;
+     }
+     else
+     {
+       lv_err_str = pp_env->NewStringUTF("Drop Table failed. Error is Unknown");
+     }
+     return lv_err_str;	   
    }
    else
    {
@@ -143,33 +161,43 @@ JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMIn
 JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMInterface_truncateOnAbortReq
   (JNIEnv *pp_env, jobject pv_object, jbyteArray pv_tblname, jlong pv_transid) {
 
-   char la_tblname[TM_MAX_DDLREQUEST_STRING];
-   char la_err_str[TM_MAX_ERROR_STRING];
+   char *la_err_str = 0;
+   int la_err_len = 0;
    int lv_error = FEOK;
 
    int lv_tblname_len = pp_env->GetArrayLength(pv_tblname);
-   if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING) {
-      cout << "Table name length is larger than max allowed" << endl;
+   if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING)
+   {
+     jstring lv_err_str = pp_env->NewStringUTF("Table name length is larger than max allowed");
+     return lv_err_str;
    }
-   else {
-      memset(la_tblname, 0, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING);
-      jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
-      memcpy(la_tblname, lp_tblname, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING -1 );
-
-      long lv_transid = (long) pv_transid;
+   
+   jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblname, 0);
+   long lv_transid = (long) pv_transid;
 
-      lv_error = REGTRUNCATEONABORT(la_tblname, lv_tblname_len, lv_transid, la_err_str);
-      pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
-   }
+   lv_error = REGTRUNCATEONABORT((char*)lp_tblname, lv_tblname_len, lv_transid, la_err_str,
+                                 la_err_len);
+   pp_env->ReleaseByteArrayElements(pv_tblname, lp_tblname, 0);
    
    if(lv_error)
    {
-	   jstring lv_err_str = pp_env->NewStringUTF(la_err_str);
-	   return lv_err_str;
+     jstring lv_err_str;
+     if(la_err_len && la_err_str)
+     {
+       lv_err_str = pp_env->NewStringUTF(la_err_str);
+       
+       //la_err_str is allocated in lower layers.
+       delete la_err_str;
+     }
+     else
+     {
+       lv_err_str = pp_env->NewStringUTF("RegTruncateonAbort failed. Error is Unknown");
+     }
+     return lv_err_str;    
    }
    else
    {
-	 return 0;
+     return 0;
    }
 }
 
@@ -183,56 +211,68 @@ JNIEXPORT jstring JNICALL Java_org_apache_hadoop_hbase_client_transactional_RMIn
 
    int lv_error = FEOK;
    int tblopts_len =0;
-   char la_tblname[TM_MAX_DDLREQUEST_STRING];
-   char la_err_str[TM_MAX_ERROR_STRING];
+   char *la_err_str = 0;
+   int la_err_len = 0;
 
    char** tbl_options;
    tbl_options = new char *[TM_MAX_DDLREQUEST_STRING];
 
    int lv_tblname_len = pp_env->GetArrayLength(pv_tblName);
-   if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING) {
-      cout << "Table name length is larger than max allowed" << endl;
+   if(lv_tblname_len > TM_MAX_DDLREQUEST_STRING)
+   {
+     jstring lv_err_str = pp_env->NewStringUTF("Table name length is larger than max allowed");
+     return lv_err_str;
    }
-   else {
-      memset(la_tblname, 0, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING);
-      jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblName, 0);
-      memcpy(la_tblname, lp_tblname, lv_tblname_len < TM_MAX_DDLREQUEST_STRING ? lv_tblname_len : TM_MAX_DDLREQUEST_STRING -1 );
-
-      int tbloptions_cnt = pp_env->GetArrayLength(pv_tableOptions);
-
-      for (int i=0; i<tbloptions_cnt; i++) {
+   jbyte *lp_tblname = pp_env->GetByteArrayElements(pv_tblName, 0);
+   
+   int tbloptions_cnt = pp_env->GetArrayLength(pv_tableOptions);
 
-         cout << " TableOptions loop " << i << endl;
-         jstring jstr_options = (jstring) pp_env->GetObjectArrayElement(pv_tableOptions, i);
-         const char *str_options = pp_env->GetStringUTFChars(jstr_options, 0);
-         // Don't forget to call `ReleaseStringUTFChars` when you're done.
-         
-         //int str_opts_len = length(jstr_options);
-         //int str_opts_len = pp_env->GetStringUTFLength(jstr_options);
-         int str_opts_len = sizeof(str_options)/sizeof(*str_options);
-         cout << "str_opts_len: " << str_opts_len <<  " or " << sizeof(str_options)/sizeof(*str_options) << endl;
+   for (int i=0; i<tbloptions_cnt; i++) {
 
-         tbl_options[i] = new char[tbloptions_cnt];
-         memcpy(tbl_options[i], str_options, str_opts_len);
+       //cout << " TableOptions loop " << i << endl;
+       jstring jstr_options = (jstring) pp_env->GetObjectArrayElement(pv_tableOptions, i);
+       const char *str_options = pp_env->GetStringUTFChars(jstr_options, 0);
+       // Don't forget to call `ReleaseStringUTFChars` when you're done.
+       
+       //int str_opts_len = length(jstr_options);
+       //int str_opts_len = pp_env->GetStringUTFLength(jstr_options);
+       int str_opts_len = sizeof(str_options)/sizeof(*str_options);
+       //cout << "str_opts_len: " << str_opts_len <<  " or " << sizeof(str_options)/sizeof(*str_options) << endl;
 
-         pp_env->ReleaseStringUTFChars(jstr_options, str_options);
+       tbl_options[i] = new char[tbloptions_cnt];
+       memcpy(tbl_options[i], str_options, str_opts_len);
 
-         if(tblopts_len == 0)
-            tblopts_len = str_opts_len;
-      }
+       pp_env->ReleaseStringUTFChars(jstr_options, str_options);
 
-      long lv_transid = (long) pv_transID;
-      lv_error = ALTERTABLE(la_tblname, lv_tblname_len, tbl_options, tblopts_len, tbloptions_cnt, lv_transid, la_err_str);
-      pp_env->ReleaseByteArrayElements(pv_tblName, lp_tblname, 0);
+       if(tblopts_len == 0)
+          tblopts_len = str_opts_len;
    }
+
+   long lv_transid = (long) pv_transID;
+   lv_error = ALTERTABLE((char*)lp_tblname, lv_tblname_len, tbl_options, 
+                          tblopts_len, tbloptions_cnt, lv_transid,
+                          la_err_str, la_err_len);
+   pp_env->ReleaseByteArrayElements(pv_tblName, lp_tblname, 0);
+   
    if(lv_error)
    {
-	   jstring lv_err_str = pp_env->NewStringUTF(la_err_str);
-	   return lv_err_str;
+     jstring lv_err_str;
+     if(la_err_len && la_err_str)
+     {
+       lv_err_str = pp_env->NewStringUTF(la_err_str);
+       
+       //la_err_str is allocated in lower layers.
+       delete la_err_str;
+     }
+     else
+     {
+       lv_err_str = pp_env->NewStringUTF("Alter Table failed. Error is Unknown");
+     }
+     return lv_err_str;    
    }
    else
    {
-	 return 0;
+     return 0;
    }
 }
  

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/src/tm/tmlib.cpp
----------------------------------------------------------------------
diff --git a/core/sqf/src/tm/tmlib.cpp b/core/sqf/src/tm/tmlib.cpp
index 665404d..43dcabe 100644
--- a/core/sqf/src/tm/tmlib.cpp
+++ b/core/sqf/src/tm/tmlib.cpp
@@ -702,7 +702,7 @@ short REGISTERREGION(long transid, long startid, int pv_port, char *pa_hostname,
 // Params: pa_tabledesc, pv_tabledesc_length, pv_tblname, transid
 // -------------------------------------------------------------------
 short CREATETABLE(char *pa_tbldesc, int pv_tbldesc_length, char *pv_tblname, char** pv_keys, int pv_numsplits, int pv_keylen, long transid ,
-		char* pv_err_str)
+		char* &pv_err_str, int &pv_err_len)
 {
     TM_Transid lv_transid((TM_Native_Type) transid);
     short lv_error = FEOK;
@@ -713,7 +713,9 @@ short CREATETABLE(char *pa_tbldesc, int pv_tbldesc_length, char *pv_tblname, cha
     if (gp_trans_thr == NULL)
        gp_trans_thr = new TMLIB_ThreadTxn_Object();
     TM_Transaction *lp_trans = gp_trans_thr->get_current();
-    lv_error =  lp_trans->create_table(pa_tbldesc, pv_tbldesc_length, pv_tblname, pv_keys, pv_numsplits, pv_keylen, pv_err_str);
+    lv_error =  lp_trans->create_table(pa_tbldesc, pv_tbldesc_length, 
+                pv_tblname, pv_keys, pv_numsplits, pv_keylen,
+                pv_err_str, pv_err_len);
 
     TMlibTrace(("TMLIB_TRACE : CREATETABLE EXIT: txid: (%d,%d), returning %d\n",
        lv_transid.get_node(), lv_transid.get_seq_num(), lv_error), 2);
@@ -727,7 +729,8 @@ short CREATETABLE(char *pa_tbldesc, int pv_tbldesc_length, char *pv_tblname, cha
 // Purpose: send REGTRUNCATEONABORT message to the TM
 // Params: pa_tabledesc, pv_tabledesc_length, pv_tblname, transid
 // -------------------------------------------------------------------
-short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid, char* pv_err_str)
+short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid,
+                        char* &pv_err_str, int &pv_err_len)
 {
     short lv_error = FEOK;
     TM_Transid lv_transid((TM_Native_Type) pv_transid);
@@ -737,7 +740,8 @@ short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid,
     if (gp_trans_thr == NULL)
        gp_trans_thr = new TMLIB_ThreadTxn_Object();
     TM_Transaction *lp_trans = gp_trans_thr->get_current();
-    lv_error = lp_trans->reg_truncateonabort(pv_tblname, pv_tblname_len, pv_err_str);
+    lv_error = lp_trans->reg_truncateonabort(pv_tblname, pv_tblname_len,
+               pv_err_str, pv_err_len);
 
     TMlibTrace(("TMLIB_TRACE : REGTRUNCATEONABORT EXIT: txid: (%d,%d), tablename: %s, returning %d\n",
        lv_transid.get_node(), lv_transid.get_seq_num(), pv_tblname, lv_error), 2);
@@ -746,8 +750,9 @@ short REGTRUNCATEONABORT(char *pv_tblname, int pv_tblname_len, long pv_transid,
 }
 
 
-short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions, int pv_tbloptslen, int pv_tbloptscnt, long pv_transid,
-                 char* pv_err_str)
+short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions,
+                 int pv_tbloptslen, int pv_tbloptscnt, long pv_transid,
+                 char* &pv_err_str, int &pv_err_len)
 {
     short lv_error = FEOK;
     TM_Transid lv_transid((TM_Native_Type) pv_transid);
@@ -757,7 +762,8 @@ short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions, in
     if (gp_trans_thr == NULL)
        gp_trans_thr = new TMLIB_ThreadTxn_Object();
     TM_Transaction *lp_trans = gp_trans_thr->get_current();
-    lv_error = lp_trans->alter_table(pv_tblname, pv_tblname_len, pv_tbloptions, pv_tbloptslen, pv_tbloptscnt, pv_err_str);
+    lv_error = lp_trans->alter_table(pv_tblname, pv_tblname_len, pv_tbloptions,
+                pv_tbloptslen, pv_tbloptscnt, pv_err_str, pv_err_len);
 
     TMlibTrace(("TMLIB_TRACE : ALTERTABLE EXIT: txid: (%d,%d), tablename: %s, returning %d\n",
        lv_transid.get_node(), lv_transid.get_seq_num(), pv_tblname, lv_error), 2);
@@ -772,7 +778,8 @@ short ALTERTABLE(char *pv_tblname, int pv_tblname_len, char ** pv_tbloptions, in
 // Purpose: send DROPTABLE message to TM
 // Params: pv_tablename, transid
 // -------------------------------------------------------------------
-short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid, char* pv_err_str)
+short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid,
+                char* &pv_err_str, int &pv_err_len)
 {
     short lv_error = FEOK;
     TM_Transid lv_transid((TM_Native_Type) transid);
@@ -782,7 +789,8 @@ short DROPTABLE(char *pv_tblname, int pv_tblname_len, long transid, char* pv_err
     if (gp_trans_thr == NULL)
        gp_trans_thr = new TMLIB_ThreadTxn_Object();
     TM_Transaction *lp_trans = gp_trans_thr->get_current();
-    lv_error = lp_trans->drop_table(pv_tblname, pv_tblname_len, pv_err_str);
+    lv_error = lp_trans->drop_table(pv_tblname, pv_tblname_len, pv_err_str,
+                                    pv_err_len);
 
     TMlibTrace(("TMLIB_TRACE : DROPTABLE EXIT: txid: (%d,%d), tablename: %s, returning %d\n",
        lv_transid.get_node(), lv_transid.get_seq_num(), pv_tblname, lv_error), 2);

http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/a17b2a30/core/sqf/src/tm/tmtransaction.cpp
----------------------------------------------------------------------
diff --git a/core/sqf/src/tm/tmtransaction.cpp b/core/sqf/src/tm/tmtransaction.cpp
index dfbd838..445945f 100644
--- a/core/sqf/src/tm/tmtransaction.cpp
+++ b/core/sqf/src/tm/tmtransaction.cpp
@@ -134,12 +134,14 @@ short  TM_Transaction::register_region(long startid, int port, char *hostName, i
 
 }
 
-short TM_Transaction::create_table(char* pa_tbldesc, int pv_tbldesc_len, char* pa_tblname, char** pa_keys, int pv_numsplits, int pv_keylen, char* pv_err_str)
+short TM_Transaction::create_table(char* pa_tbldesc, int pv_tbldesc_len,
+                                   char* pa_tblname, char** pa_keys,
+                                   int pv_numsplits, int pv_keylen,
+                                   char* &pv_err_str, int &pv_err_len)
 {
     Tm_Req_Msg_Type lv_req;
     Tm_Rsp_Msg_Type lv_rsp;
-    int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
-
+    
     int len = sizeof(Tm_Req_Msg_Type);
     int len_aligned = 8*(((len + 7)/8));
     int buffer_size = pv_numsplits*pv_keylen;
@@ -178,18 +180,21 @@ short TM_Transaction::create_table(char* pa_tbldesc, int pv_tbldesc_len, char* p
     iv_last_error = lv_rsp.iv_msg_hdr.miv_err.error;
     if(iv_last_error)
     {
-    	int len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
-    	memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, len); 
+        int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
+        pv_err_len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
+    	pv_err_str = new char[pv_err_len];
+    	memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, pv_err_len); 
     }
     
     return iv_last_error;
 }
 
-short TM_Transaction::alter_table(char * pa_tblname, int pv_tblname_len,  char ** pv_tbloptions,  int pv_tbloptslen, int pv_tbloptscnt, char* pv_err_str)
+short TM_Transaction::alter_table(char * pa_tblname, int pv_tblname_len,
+    char ** pv_tbloptions,  int pv_tbloptslen, int pv_tbloptscnt,
+    char* &pv_err_str, int &pv_err_len)
 {    
     Tm_Req_Msg_Type lv_req;
     Tm_Rsp_Msg_Type lv_rsp;
-    int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
  
     TMlibTrace(("TMLIB_TRACE : TM_Transaction::alter_table ENTRY tablename: %s\n", pa_tblname), 1);
 
@@ -222,25 +227,27 @@ short TM_Transaction::alter_table(char * pa_tblname, int pv_tblname_len,  char *
     delete buffer;
     if(lv_last_error)
     {
-        TMlibTrace(("TMLIB_TRACE : TM_Transaction::create_table returning error %d\n", iv_last_error), 1);
+        TMlibTrace(("TMLIB_TRACE : TM_Transaction::alter_table returning error %d\n", iv_last_error), 1);
         return lv_last_error;
     }
 
     iv_last_error = lv_rsp.iv_msg_hdr.miv_err.error;
     if(iv_last_error)
     {
-    	int len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
-    	memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, len); 
+        int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
+        pv_err_len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
+        pv_err_str = new char[pv_err_len];
+        memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, pv_err_len); 
     }
     
     return iv_last_error;
 }
 
-short TM_Transaction::reg_truncateonabort(char* pa_tblname, int pv_tblname_len, char* pv_err_str)
+short TM_Transaction::reg_truncateonabort(char* pa_tblname, int pv_tblname_len,
+                                          char* &pv_err_str, int &pv_err_len)
 {
     Tm_Req_Msg_Type lv_req;
     Tm_Rsp_Msg_Type lv_rsp;
-    int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
 
     TMlibTrace(("TMLIB_TRACE : TM_Transaction::reg_truncateonabort ENTRY tablename: %s\n", pa_tblname), 1);
 
@@ -262,18 +269,19 @@ short TM_Transaction::reg_truncateonabort(char* pa_tblname, int pv_tblname_len,
     iv_last_error = lv_rsp.iv_msg_hdr.miv_err.error;
     if(iv_last_error)
     {
-    	int len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
-    	memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, len); 
-    }
-    
+        int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
+        pv_err_len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
+        pv_err_str = new char[pv_err_len];
+        memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, pv_err_len); 
+    }    
     return iv_last_error;
 }
 
-short TM_Transaction::drop_table(char* pa_tblname, int pv_tblname_len, char* pv_err_str)
+short TM_Transaction::drop_table(char* pa_tblname, int pv_tblname_len,
+                                 char* &pv_err_str, int &pv_err_len)
 {
     Tm_Req_Msg_Type lv_req;
     Tm_Rsp_Msg_Type lv_rsp;
-    int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
 
     TMlibTrace(("TMLIB_TRACE : TM_Transaction::drop_table ENTRY tablename: %s\n", pa_tblname), 1);
 
@@ -295,10 +303,11 @@ short TM_Transaction::drop_table(char* pa_tblname, int pv_tblname_len, char* pv_
     iv_last_error = lv_rsp.iv_msg_hdr.miv_err.error;
     if(iv_last_error)
     {
-    	int len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
-    	memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, len); 
-    }
-    
+        int maxErrStrBufLen = sizeof(lv_rsp.u.iv_ddl_response.iv_err_str);
+        pv_err_len = lv_rsp.u.iv_ddl_response.iv_err_str_len < maxErrStrBufLen ? lv_rsp.u.iv_ddl_response.iv_err_str_len : maxErrStrBufLen;
+        pv_err_str = new char[pv_err_len];
+        memcpy(pv_err_str, lv_rsp.u.iv_ddl_response.iv_err_str, pv_err_len); 
+    }    
     return iv_last_error;
 }