[ https://issues.apache.org/jira/browse/PHOENIX-514?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14294836#comment-14294836 ]
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_r23670061 --- Diff: phoenix-core/src/main/java/org/apache/phoenix/schema/MetaDataClient.java --- @@ -945,20 +960,40 @@ public MutationState createIndex(CreateIndexStatement statement, byte[][] splits PDataType dataType = MetaDataUtil.getViewIndexIdDataType(); ColumnName colName = ColumnName.caseSensitiveColumnName(MetaDataUtil.getViewIndexIdColumnName()); allPkColumns.add(new Pair<ColumnName, SortOrder>(colName, SortOrder.getDefault())); - columnDefs.add(FACTORY.columnDef(colName, dataType.getSqlTypeName(), false, null, null, false, SortOrder.getDefault())); + columnDefs.add(FACTORY.columnDef(colName, dataType.getSqlTypeName(), false, null, null, false, SortOrder.getDefault(), null)); } // First columns are the indexed ones - for (Pair<ColumnName, SortOrder> pair : indexedPkColumns) { - ColumnName colName = pair.getFirst(); - PColumn col = resolver.resolveColumn(null, colName.getFamilyName(), colName.getColumnName()).getColumn(); - unusedPkColumns.remove(col); - // Ignore view constants for updatable views as we don't need these in the index - if (col.getViewConstant() == null) { - PDataType dataType = IndexUtil.getIndexColumnDataType(col); - colName = ColumnName.caseSensitiveColumnName(IndexUtil.getIndexColumnName(col)); - allPkColumns.add(new Pair<ColumnName, SortOrder>(colName, pair.getSecond())); - columnDefs.add(FACTORY.columnDef(colName, dataType.getSqlTypeName(), col.isNullable(), col.getMaxLength(), col.getScale(), false, SortOrder.getDefault())); - } + for (Pair<ParseNode, SortOrder> pair : indexParseNodeAndSortOrderList) { + ParseNode parseNode = pair.getFirst(); + ColumnName colName = null; + // if it is a column + if (parseNode instanceof ColumnParseNode) { --- End diff -- It'd be nice to get rid of this special logic (you know how I love instanceof checks :-) ). One way would be to have your own ExpressionCompiler below where you specialize the resolveColumn call. You know you've got only a single column reference if visitor.isTopLevel() is true in the resolveColumn call. > 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)