You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by od...@apache.org on 2016/09/21 00:24:39 UTC

incubator-hawq git commit: HAWQ-1052. Fixed extraction logic for boolean datatype.

Repository: incubator-hawq
Updated Branches:
  refs/heads/master e6c7fda07 -> 281014e5c


HAWQ-1052. Fixed extraction logic for boolean datatype.


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

Branch: refs/heads/master
Commit: 281014e5c77c5e35fb7919902a7d9bea8f3dab1c
Parents: e6c7fda
Author: Oleksandr Diachenko <od...@pivotal.io>
Authored: Tue Sep 20 17:24:29 2016 -0700
Committer: Oleksandr Diachenko <od...@pivotal.io>
Committed: Tue Sep 20 17:24:29 2016 -0700

----------------------------------------------------------------------
 src/backend/access/external/pxffilters.c | 13 +++++++++++--
 src/backend/access/external/pxfheaders.c |  9 +++++++--
 2 files changed, 18 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/281014e5/src/backend/access/external/pxffilters.c
----------------------------------------------------------------------
diff --git a/src/backend/access/external/pxffilters.c b/src/backend/access/external/pxffilters.c
index 6767735..354c719 100644
--- a/src/backend/access/external/pxffilters.c
+++ b/src/backend/access/external/pxffilters.c
@@ -639,6 +639,7 @@ char *serializePxfFilterQuals(List *quals)
 
 /*
  * Returns a list of attributes, extracted from quals.
+ * Returns NIL if any error occurred.
  * Supports AND, OR, NOT operations.
  * Supports =, <, <=, >, >=, IS NULL, IS NOT NULL, BETWEEN, IN operators.
  * List might contain duplicates.
@@ -681,15 +682,23 @@ List* extractPxfAttributes(List* quals)
 				attributes = append_attr_from_var((Var *) expr->arg, attributes);
 				break;
 			}
+			case T_BooleanTest:
+			{
+				BooleanTest* expr = (BooleanTest *) node;
+				attributes = append_attr_from_var((Var *) expr->arg, attributes);
+				break;
+			}
 			default:
+			{
 				/*
 				 * tag is not supported, it's risk of having:
 				 * 1) false-positive tuples
 				 * 2) unable to join tables
 				 * 3) etc
 				 */
-				elog(ERROR, "extractPxfAttributes: unsupported node tag %d, unable to extract attribute from qualifier", tag);
-				break;
+				elog(INFO, "extractPxfAttributes: unsupported node tag %d, unable to extract attribute from qualifier", tag);
+				return NIL;
+			}
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/281014e5/src/backend/access/external/pxfheaders.c
----------------------------------------------------------------------
diff --git a/src/backend/access/external/pxfheaders.c b/src/backend/access/external/pxfheaders.c
index 07c41c1..2016c64 100644
--- a/src/backend/access/external/pxfheaders.c
+++ b/src/backend/access/external/pxfheaders.c
@@ -66,8 +66,13 @@ void build_http_header(PxfInputData *input)
 	if (proj_info != NULL && proj_info->pi_isVarList)
 	{
 		List* qualsAttributes = extractPxfAttributes(input->quals);
-
-		add_projection_desc_httpheader(headers, proj_info, qualsAttributes);
+		/* projection information is incomplete if columns from WHERE clause wasn't extracted */
+		if (qualsAttributes !=  NIL || list_length(input->quals) == 0)
+		{
+			add_projection_desc_httpheader(headers, proj_info, qualsAttributes);
+		}
+		else
+			elog(INFO, "Query will not be optimized to use projection information");
 	}
 
 	/* GP cluster configuration */