diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java index b0cbe0168c..45b89e0ebf 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java @@ -23,7 +23,6 @@ import static org.apache.commons.lang.StringUtils.repeat; import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME; -import java.net.URL; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; @@ -1173,6 +1172,7 @@ public void visit(LeafNode node) throws MetaException { // Build the filter and add parameters linearly; we are traversing leaf nodes LTR. String tableValue = "\"FILTER" + partColIndex + "\".\"PART_KEY_VAL\""; + String nodeValue0 = "?"; if (node.isReverseOrder) { params.add(nodeValue); } @@ -1206,14 +1206,23 @@ public void visit(LeafNode node) throws MetaException { params.add(table.getCatName().toLowerCase()); } tableValue += " then " + tableValue0 + " else null end)"; + + if (valType == FilterType.Date) { + if (dbType == DatabaseProduct.ORACLE) { + // Oracle requires special treatment... as usual. + nodeValue0 = "TO_DATE(" + nodeValue0 + ", 'YYYY-MM-DD')"; + } else { + nodeValue0 = "cast(" + nodeValue0 + " as date)"; + } + } } if (!node.isReverseOrder) { params.add(nodeValue); } filterBuffer.append(node.isReverseOrder - ? "(? " + node.operator.getSqlOp() + " " + tableValue + ")" - : "(" + tableValue + " " + node.operator.getSqlOp() + " ?)"); + ? "(" + nodeValue0 + " " + node.operator.getSqlOp() + " " + tableValue + ")" + : "(" + tableValue + " " + node.operator.getSqlOp() + " " + nodeValue0 + ")"); } }