trafodion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lium...@apache.org
Subject [1/3] trafodion git commit: [TRAFODION-3175] enhance ExeCliInterface get interface to return null indicator
Date Fri, 17 Aug 2018 14:16:45 GMT
Repository: trafodion
Updated Branches:
  refs/heads/master 1ecac0ae7 -> 6bd356468


[TRAFODION-3175] enhance ExeCliInterface get interface to return null indicator


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

Branch: refs/heads/master
Commit: e2a4b805dbac396d9892fe696b1b60307f04ec1e
Parents: 5e8bfc7
Author: Liu Ming <ovis_poly@sina.com>
Authored: Sat Aug 11 13:03:47 2018 +0000
Committer: Liu Ming <ovis_poly@sina.com>
Committed: Sat Aug 11 13:03:47 2018 +0000

----------------------------------------------------------------------
 core/sql/executor/ExExeUtilCli.cpp | 58 ++++++++++++++++++++-------------
 1 file changed, 35 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafodion/blob/e2a4b805/core/sql/executor/ExExeUtilCli.cpp
----------------------------------------------------------------------
diff --git a/core/sql/executor/ExExeUtilCli.cpp b/core/sql/executor/ExExeUtilCli.cpp
index 2a0b9e1..8a47f4d 100644
--- a/core/sql/executor/ExExeUtilCli.cpp
+++ b/core/sql/executor/ExExeUtilCli.cpp
@@ -46,6 +46,8 @@ OutputInfo::OutputInfo(Lng32 numEntries)
   : numEntries_(numEntries)
 {
   
+   ex_assert( numEntries <= MAX_OUTPUT_ENTRIES, "try to fetch more than max rows allowed");
+  
    for (Int32 i = 0; i < numEntries_; i++)
     {
       data_[i] = NULL;
@@ -108,7 +110,8 @@ void OutputInfo::dealloc(CollHeap * heap)
 {
   for (Int32 i = 0; i < numEntries_; i++)
     {
-      NADELETEBASIC(data_[i], heap);
+      if(data_[i] != NULL)
+        NADELETEBASIC(data_[i], heap);
     }
 }
 
@@ -1296,33 +1299,42 @@ short ExeCliInterface::fetchAllRows(Queue * &infoList,
 	
 	for (Int32 j = 0; j < numOutputEntries; j++)
 	{
-	  char * ptr;
+	  char * ptr, *r;
 	  Lng32   len;
           Lng32   type;
+          short nulind=0;
+          short *indaddr=&nulind;
+          short **ind;
           getAttributes(j+1, FALSE, type, len, NULL, NULL);
-	  getPtrAndLen(j+1, ptr, len);
-	  NABoolean nullTerminate = 
+	  getPtrAndLen(j+1, ptr, len, ind);
+          if( ((char*)*ind)[0] == -1 ) // NULL value
+          {
+            oi->insert(j, NULL, 0, type);
+          }
+          else
+          {
+	    NABoolean nullTerminate = 
 	    DFS2REC::is8bitCharacter(outputAttrs_[j].fsDatatype_);
 
-	  char * r = new(getHeap()) char
-	    [(varcharFormat ? SQL_VARCHAR_HDR_SIZE : 0) 
-	     + len + (nullTerminate ? 1 : 0)];
-	  if (varcharFormat)
-	  {
-	    *(short*)r = (short)len;
-	    str_cpy_all(&r[SQL_VARCHAR_HDR_SIZE], ptr, len);
-
-	    if (nullTerminate)
-	      r[SQL_VARCHAR_HDR_SIZE + len] = 0;
-	  }
-	  else
-	  {
-	    str_cpy_all(r, ptr, len);
-	    
-	    if (nullTerminate)
-	      r[len] = 0;
-	  }
-	  oi->insert(j, r, len, type);
+	    r = new(getHeap()) char
+	      [(varcharFormat ? SQL_VARCHAR_HDR_SIZE : 0) 
+	       + len + (nullTerminate ? 1 : 0)];
+	    if (varcharFormat)
+	    {
+	      *(short*)r = (short)len;
+	      str_cpy_all(&r[SQL_VARCHAR_HDR_SIZE], ptr, len);
+
+	      if (nullTerminate)
+	        r[SQL_VARCHAR_HDR_SIZE + len] = 0;
+	    }
+	    else
+	    {
+	      str_cpy_all(r, ptr, len);
+	      if (nullTerminate)
+	        r[len] = 0;
+	    }
+	    oi->insert(j, r, len, type);
+           }
 	}
 	
 	infoList->insert(oi);


Mime
View raw message