HAWQ-918. Fix memtuple forming bug when null-saved size is larger than 32763 
bytes


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

Branch: refs/heads/master
Commit: 4ad3a6d1b452514c7159f776b173b4b727ce73a4
Parents: 5f67ae0
Author: Wen Lin <[email protected]>
Authored: Wed Jul 13 09:39:49 2016 +0800
Committer: Wen Lin <[email protected]>
Committed: Wed Jul 13 09:39:49 2016 +0800

----------------------------------------------------------------------
 src/backend/access/common/memtuple.c          |  6 ++---
 src/test/regress/expected/aggregates_null.out | 27 ++++++++++++++++++++++
 src/test/regress/known_good_schedule          |  1 +
 src/test/regress/sql/aggregates_null.sql      | 24 +++++++++++++++++++
 4 files changed, 55 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/4ad3a6d1/src/backend/access/common/memtuple.c
----------------------------------------------------------------------
diff --git a/src/backend/access/common/memtuple.c 
b/src/backend/access/common/memtuple.c
index 6d63f5b..be9de54 100644
--- a/src/backend/access/common/memtuple.c
+++ b/src/backend/access/common/memtuple.c
@@ -159,9 +159,9 @@ static inline short compute_null_save_b(short *null_saves, 
unsigned char b)
 /* compute the null saved bytes by the whole null bit map, by the attribute
  * physically precedes the one.
  */
-static inline short compute_null_save(short *null_saves, unsigned char 
*nullbitmaps, int nbyte, unsigned char nbit)
+static inline int compute_null_save(short *null_saves, unsigned char 
*nullbitmaps, int nbyte, unsigned char nbit)
 {
-       short ret = 0;
+       int ret = 0;
        int curr_byte = 0;
        while(curr_byte < nbyte) 
        {
@@ -535,7 +535,7 @@ uint32 compute_memtuple_size(MemTupleBinding *pbind, Datum 
*values, bool *isnull
 
 static inline char* memtuple_get_attr_ptr(char *start, MemTupleAttrBinding 
*bind, short *null_saves, unsigned char *nullp)
 {
-       short ns = 0;
+       int ns = 0;
 
        if(nullp)
                ns = compute_null_save(null_saves, nullp, bind->null_byte, 
bind->null_mask);

Reply via email to