Repository: incubator-hawq Updated Branches: refs/heads/master 87d37f08e -> 1a17238d3
HAWQ-779. support more pxf filter pushdwon Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/1a17238d Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/1a17238d Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/1a17238d Branch: refs/heads/master Commit: 1a17238d34cf66cdc52ea257bcdfdd0bdb497054 Parents: 87d37f0 Author: Shivram Mani <shivram.m...@gmail.com> Authored: Wed Jul 6 11:26:07 2016 -0700 Committer: Shivram Mani <shivram.m...@gmail.com> Committed: Wed Jul 6 11:26:07 2016 -0700 ---------------------------------------------------------------------- .../org/apache/hawq/pxf/api/FilterParser.java | 4 +- .../apache/hawq/pxf/api/FilterParserTest.java | 8 ++++ .../pxf/plugins/hbase/HBaseFilterBuilder.java | 2 + src/backend/access/external/pxffilters.c | 48 +++++++++++++++++++- src/backend/optimizer/plan/createplan.c | 2 +- src/include/access/pxffilters.h | 3 +- 6 files changed, 62 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1a17238d/pxf/pxf-api/src/main/java/org/apache/hawq/pxf/api/FilterParser.java ---------------------------------------------------------------------- diff --git a/pxf/pxf-api/src/main/java/org/apache/hawq/pxf/api/FilterParser.java b/pxf/pxf-api/src/main/java/org/apache/hawq/pxf/api/FilterParser.java index ae96d22..00fbf2b 100644 --- a/pxf/pxf-api/src/main/java/org/apache/hawq/pxf/api/FilterParser.java +++ b/pxf/pxf-api/src/main/java/org/apache/hawq/pxf/api/FilterParser.java @@ -61,7 +61,8 @@ public class FilterParser { HDOP_GE, HDOP_EQ, HDOP_NE, - HDOP_AND + HDOP_AND, + HDOP_LIKE } /** @@ -392,6 +393,7 @@ public class FilterParser { operatorTranslationMap.put(5, Operation.HDOP_EQ); operatorTranslationMap.put(6, Operation.HDOP_NE); operatorTranslationMap.put(7, Operation.HDOP_AND); + operatorTranslationMap.put(8, Operation.HDOP_LIKE); return operatorTranslationMap; } } http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1a17238d/pxf/pxf-api/src/test/java/org/apache/hawq/pxf/api/FilterParserTest.java ---------------------------------------------------------------------- diff --git a/pxf/pxf-api/src/test/java/org/apache/hawq/pxf/api/FilterParserTest.java b/pxf/pxf-api/src/test/java/org/apache/hawq/pxf/api/FilterParserTest.java index 0308f7f..fdde9f0 100644 --- a/pxf/pxf-api/src/test/java/org/apache/hawq/pxf/api/FilterParserTest.java +++ b/pxf/pxf-api/src/test/java/org/apache/hawq/pxf/api/FilterParserTest.java @@ -215,6 +215,10 @@ public class FilterParserTest { filter = "a1c2o7"; op = Operation.HDOP_AND; runParseOneOperation("this filter was build from HDOP_AND", filter, op); + + filter = "a1c2o8"; + op = Operation.HDOP_LIKE; + runParseOneOperation("this filter was build from HDOP_LIKE", filter, op); } @Test @@ -247,6 +251,10 @@ public class FilterParserTest { filter = "c2a1o7"; op = Operation.HDOP_AND; runParseOneOperation("this filter was build from HDOP_AND using reverse!", filter, op); + + filter = "c2a1o8"; + op = Operation.HDOP_LIKE; + runParseOneOperation("this filter was build from HDOP_LIKE using reverse!", filter, op); } @Test http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1a17238d/pxf/pxf-hbase/src/main/java/org/apache/hawq/pxf/plugins/hbase/HBaseFilterBuilder.java ---------------------------------------------------------------------- diff --git a/pxf/pxf-hbase/src/main/java/org/apache/hawq/pxf/plugins/hbase/HBaseFilterBuilder.java b/pxf/pxf-hbase/src/main/java/org/apache/hawq/pxf/plugins/hbase/HBaseFilterBuilder.java index 6dc271e..8dc932c 100644 --- a/pxf/pxf-hbase/src/main/java/org/apache/hawq/pxf/plugins/hbase/HBaseFilterBuilder.java +++ b/pxf/pxf-hbase/src/main/java/org/apache/hawq/pxf/plugins/hbase/HBaseFilterBuilder.java @@ -275,6 +275,8 @@ public class HBaseFilterBuilder implements FilterParser.FilterBuilder { startKey = Bytes.toBytes(key); endKey = Bytes.add(Bytes.toBytes(key), zeroByte); break; + default: + throw new Exception("unsupported operation for filtering " + op); } } } http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1a17238d/src/backend/access/external/pxffilters.c ---------------------------------------------------------------------- diff --git a/src/backend/access/external/pxffilters.c b/src/backend/access/external/pxffilters.c index f219738..a08c82f 100644 --- a/src/backend/access/external/pxffilters.c +++ b/src/backend/access/external/pxffilters.c @@ -78,6 +78,7 @@ dbop_pxfop_map pxf_supported_opr[] = {665 /* text_le */, PXFOP_LE}, {667 /* text_ge */, PXFOP_GE}, {531 /* textlt */, PXFOP_NE}, + {1209 /* textlike */, PXFOP_LIKE}, /* int2 to int4 */ {Int24EqualOperator /* int24eq */, PXFOP_EQ}, @@ -125,7 +126,48 @@ dbop_pxfop_map pxf_supported_opr[] = {1871 /* int82gt */, PXFOP_GT}, {1872 /* int82le */, PXFOP_LE}, {1873 /* int82ge */, PXFOP_GE}, - {1869 /* int82ne */, PXFOP_NE} + {1869 /* int82ne */, PXFOP_NE}, + + /**************FLOAT****************/ + /* float4 */ + {Float4EqualOperator /* float4eq */, PXFOP_EQ}, + {622 /* float4lt */, PXFOP_LT}, + {623 /* float4gt */, PXFOP_GT}, + {624 /* float4le */, PXFOP_LE}, + {625 /* float4ge */, PXFOP_GE}, + {621 /* float4ne */, PXFOP_NE}, + + /* float8 */ + {Float8EqualOperator /* float8eq */, PXFOP_EQ}, + {672 /* float8lt */, PXFOP_LT}, + {674 /* float8gt */, PXFOP_GT}, + {673 /* float8le */, PXFOP_LE}, + {675 /* float8ge */, PXFOP_GE}, + {671 /* float8ne */, PXFOP_NE}, + + /* float48 */ + {1120 /* float48eq */, PXFOP_EQ}, + {1122 /* float48lt */, PXFOP_LT}, + {1123 /* float48gt */, PXFOP_GT}, + {1124 /* float48le */, PXFOP_LE}, + {1125 /* float48ge */, PXFOP_GE}, + {1121 /* float48ne */, PXFOP_NE}, + + /* float84 */ + {1130 /* float84eq */, PXFOP_EQ}, + {1132 /* float84lt */, PXFOP_LT}, + {1133 /* float84gt */, PXFOP_GT}, + {1134 /* float84le */, PXFOP_LE}, + {1135 /* float84ge */, PXFOP_GE}, + {1131 /* float84ne */, PXFOP_NE}, + + /**********DATE************/ + {DateEqualOperator /* eq */, PXFOP_EQ}, + {1095 /* date_lt */, PXFOP_LT}, + {1097 /* date_gt */, PXFOP_GT}, + {1096 /* date_le */, PXFOP_LE}, + {1098 /* date_ge */, PXFOP_GE}, + {1094 /* date_ne */, PXFOP_NE} }; @@ -142,7 +184,8 @@ Oid pxf_supported_types[] = BPCHAROID, CHAROID, BYTEAOID, - BOOLOID + BOOLOID, + DATEOID }; /* @@ -513,6 +556,7 @@ const_to_str(Const *constval, StringInfo buf) case BPCHAROID: case CHAROID: case BYTEAOID: + case DATEOID: appendStringInfo(buf, "\\\"%s\\\"", extval); break; http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1a17238d/src/backend/optimizer/plan/createplan.c ---------------------------------------------------------------------- diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index b5a5cea..65359bc 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -1146,7 +1146,7 @@ static char** create_pxf_plan(char **segdb_file_map, RelOptInfo *rel, int total_ Relation relation = RelationIdGetRelation(planner_rt_fetch(scan_relid, ctx->root)->relid); segdb_work_map = map_hddata_2gp_segments(uri_str, total_segs, segs_participating, - relation, NULL); + relation, ctx->root->parse->jointree->quals); Assert(segdb_work_map != NULL); RelationClose(relation); http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/1a17238d/src/include/access/pxffilters.h ---------------------------------------------------------------------- diff --git a/src/include/access/pxffilters.h b/src/include/access/pxffilters.h index 358cd8b..31481b5 100644 --- a/src/include/access/pxffilters.h +++ b/src/include/access/pxffilters.h @@ -44,7 +44,8 @@ typedef enum PxfOperatorCode PXFOP_GE, PXFOP_EQ, PXFOP_NE, - PXFOP_AND + PXFOP_AND, + PXFOP_LIKE } PxfOperatorCode;