[ 
https://issues.apache.org/jira/browse/PHOENIX-514?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14294782#comment-14294782
 ] 

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_r23668462
  
    --- 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());
    +            // ignore regular columns
    +            if (expressionParseNode instanceof ColumnParseNode) {
    --- End diff --
    
    Remove if not needed


> 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)

Reply via email to