Repository: incubator-hawq
Updated Branches:
  refs/heads/HAWQ-997 3fdde0b31 -> 9e37ee7c2


HAWQ-997. Added type modifiers for other datatypes.


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

Branch: refs/heads/HAWQ-997
Commit: 9e37ee7c26e093d68d4d654aa9e6aa0f558d4265
Parents: 3fdde0b
Author: Oleksandr Diachenko <[email protected]>
Authored: Tue Aug 23 18:10:16 2016 -0700
Committer: Oleksandr Diachenko <[email protected]>
Committed: Tue Aug 23 18:10:16 2016 -0700

----------------------------------------------------------------------
 src/backend/access/external/pxfheaders.c | 44 ++++++++++++++++++++++-----
 1 file changed, 37 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/9e37ee7c/src/backend/access/external/pxfheaders.c
----------------------------------------------------------------------
diff --git a/src/backend/access/external/pxfheaders.c 
b/src/backend/access/external/pxfheaders.c
index 3125ea7..ed5aacc 100644
--- a/src/backend/access/external/pxfheaders.c
+++ b/src/backend/access/external/pxfheaders.c
@@ -121,12 +121,14 @@ static void add_alignment_size_httpheader(CHURL_HEADERS 
headers)
 
 /* 
  * Report tuple description to remote component 
- * Currently, number of attributes, attributes names and types 
+ * Currently, number of attributes, attributes names, types and types modifiers
  * Each attribute has a pair of key/value 
  * where X is the number of the attribute
  * X-GP-ATTR-NAMEX - attribute X's name 
  * X-GP-ATTR-TYPECODEX - attribute X's type OID (e.g, 16)
  * X-GP-ATTR-TYPENAMEX - attribute X's type name (e.g, "boolean")
+ * optional - X-GP-ATTR-TYPEMODX-COUNT - total number of modifier for 
attribute X's modifiers
+ * optional - X-GP-ATTR-TYPEMODX-Y - attribute X's modifiers Y (types which 
have precision info, like numeric(p,s))
  */
 static void add_tuple_desc_httpheader(CHURL_HEADERS headers, Relation rel)
 {      
@@ -167,16 +169,23 @@ static void add_tuple_desc_httpheader(CHURL_HEADERS 
headers, Relation rel)
                {
                        switch (tuple->attrs[i]->atttypid)
                        {
-                               case NUMERICOID: {
+                               case NUMERICOID:
+                               {
+                                       resetStringInfo(&formatter);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMODX-COUNT");
+                                       pg_ltoa(2, long_number);
+                                       churl_headers_append(headers, 
formatter.data, long_number);
+
+
                                        /* precision */
                                        resetStringInfo(&formatter);
-                                       appendStringInfo(&formatter, 
"X-GP-ATTR%u-TYPEMOD%u", i, 0);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMOD%u-%u", i, 0);
                                        pg_ltoa((tuple->attrs[i]->atttypmod >> 
16) & 0xffff, long_number);
                                        churl_headers_append(headers, 
formatter.data, long_number);
 
                                        /* scale */
                                        resetStringInfo(&formatter);
-                                       appendStringInfo(&formatter, 
"X-GP-ATTR%u-TYPEMOD%u", i, 1);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMOD%u-%u", i, 1);
                                        pg_ltoa((tuple->attrs[i]->atttypmod - 
VARHDRSZ) & 0xffff, long_number);
                                        churl_headers_append(headers, 
formatter.data, long_number);
                                        break;
@@ -184,28 +193,49 @@ static void add_tuple_desc_httpheader(CHURL_HEADERS 
headers, Relation rel)
                                case CHAROID:
                                case BPCHAROID:
                                case VARCHAROID:
+                               {
                                        resetStringInfo(&formatter);
-                                       appendStringInfo(&formatter, 
"X-GP-ATTR%u-TYPEMOD%u", i, 0);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMODX-COUNT");
+                                       pg_ltoa(1, long_number);
+                                       churl_headers_append(headers, 
formatter.data, long_number);
+
+                                       resetStringInfo(&formatter);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMOD%u-%u", i, 0);
                                        pg_ltoa((tuple->attrs[i]->atttypmod - 
VARHDRSZ), long_number);
                                        churl_headers_append(headers, 
formatter.data, long_number);
                                        break;
+                               }
                                case VARBITOID:
                                case BITOID:
                                case TIMESTAMPOID:
                                case TIMESTAMPTZOID:
                                case TIMEOID:
                                case TIMETZOID:
+                               {
                                        resetStringInfo(&formatter);
-                                       appendStringInfo(&formatter, 
"X-GP-ATTR%u-TYPEMOD%u", i, 0);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMODX-COUNT");
+                                       pg_ltoa(1, long_number);
+                                       churl_headers_append(headers, 
formatter.data, long_number);
+
+                                       resetStringInfo(&formatter);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMOD%u-%u", i, 0);
                                        pg_ltoa((tuple->attrs[i]->atttypmod), 
long_number);
                                        churl_headers_append(headers, 
formatter.data, long_number);
                                        break;
+                               }
                                case INTERVALOID:
+                               {
                                        resetStringInfo(&formatter);
-                                       appendStringInfo(&formatter, 
"X-GP-ATTR%u-TYPEMOD%u", i, 0);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMODX-COUNT");
+                                       pg_ltoa(1, long_number);
+                                       churl_headers_append(headers, 
formatter.data, long_number);
+
+                                       resetStringInfo(&formatter);
+                                       appendStringInfo(&formatter, 
"X-GP-ATTR-TYPEMOD%u-%u", i, 0);
                                        
pg_ltoa(INTERVAL_PRECISION(tuple->attrs[i]->atttypmod), long_number);
                                        churl_headers_append(headers, 
formatter.data, long_number);
                                        break;
+                               }
                                default:
                                        elog(DEBUG5, 
"add_tuple_desc_httpheader: unsupported type %d ", tuple->attrs[i]->atttypid);
                                        break;

Reply via email to