[
https://issues.apache.org/jira/browse/PHOENIX-514?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14294908#comment-14294908
]
ASF GitHub Bot commented on PHOENIX-514:
----------------------------------------
Github user JamesRTaylor commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/34#discussion_r23673808
--- Diff:
phoenix-core/src/main/java/org/apache/phoenix/parse/ExpressionIndexParseNodeRewriter.java
---
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE
+ * file distributed with this work for additional information regarding
copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ * applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.apache.phoenix.parse;
+
+import java.sql.SQLException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.phoenix.compile.ColumnResolver;
+import org.apache.phoenix.compile.ExpressionCompiler;
+import org.apache.phoenix.compile.FromCompiler;
+import org.apache.phoenix.compile.IndexStatementRewriter;
+import org.apache.phoenix.compile.StatementContext;
+import org.apache.phoenix.expression.Expression;
+import org.apache.phoenix.jdbc.PhoenixConnection;
+import org.apache.phoenix.jdbc.PhoenixStatement;
+import org.apache.phoenix.schema.PColumn;
+import org.apache.phoenix.schema.PTable;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.util.IndexUtil;
+
+import com.google.common.collect.Maps;
+
+/**
+ * Used to replace parse nodes in a SelectStatement that match expressions
that are present in an indexed with the
+ * corresponding {@link ColumnParseNode}
+ */
+public class ExpressionIndexParseNodeRewriter extends ParseNodeRewriter {
+
+ private final Map<ParseNode, ParseNode>
indexedParseNodeToColumnParseNodeMap;
+
+ public ExpressionIndexParseNodeRewriter(PTable index,
PhoenixConnection connection) throws SQLException {
+ indexedParseNodeToColumnParseNodeMap =
Maps.newHashMapWithExpectedSize(index.getColumns().size());
+ NamedTableNode tableNode = NamedTableNode.create(null,
+ TableName.create(index.getParentSchemaName().getString(),
index.getParentTableName().getString()),
+ Collections.<ColumnDef> emptyList());
+ ColumnResolver dataResolver = FromCompiler.getResolver(tableNode,
connection);
+ StatementContext context = new StatementContext(new
PhoenixStatement(connection), dataResolver);
+ IndexStatementRewriter rewriter = new
IndexStatementRewriter(dataResolver, null);
+ ExpressionCompiler expressionCompiler = new
ExpressionCompiler(context);
+ for (PColumn column : index.getPKColumns()) {
+ if (column.getExpressionStr()==null) {
+ continue;
+ }
+ ParseNode expressionParseNode =
SQLParser.parseCondition(column.getExpressionStr());
--- End diff --
Here too, create/use SQLParser.parseCaseSensitiveExpression()
> Support functional indexes
> --------------------------
>
> Key: PHOENIX-514
> URL: https://issues.apache.org/jira/browse/PHOENIX-514
> Project: Phoenix
> Issue Type: Task
> Reporter: James Taylor
> Assignee: Thomas D'Silva
> Labels: enhancement
>
> Instead of only defining the set of columns from the data table that make up
> an index, you should be able to use expressions. For example:
> CREATE INDEX upper_last_name_idx ON person (UPPER(last_name))
> Then in queries that use UPPER(last_name), we can replace them with column
> references to the index table.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)