You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hawq.apache.org by sh...@apache.org on 2016/07/06 18:26:12 UTC
incubator-hawq git commit: HAWQ-779. support more pxf filter pushdwon
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 <sh...@gmail.com>
Authored: Wed Jul 6 11:26:07 2016 -0700
Committer: Shivram Mani <sh...@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;