[ https://issues.apache.org/jira/browse/PHOENIX-514?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14294806#comment-14294806 ]
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_r23669302 --- Diff: phoenix-core/src/main/java/org/apache/phoenix/schema/TableRef.java --- @@ -69,31 +68,29 @@ public String getTableAlias() { return alias; } - public String getColumnDisplayName(ColumnRef ref) { + public String getColumnDisplayName(ColumnRef ref, boolean cfCaseSensitive, boolean cqCaseSensitive) { + String cf = null; + String cq = null; PColumn column = ref.getColumn(); + String name = column.getName().getString(); + boolean isIndex = table.getType() == PTableType.INDEX; if (table.getType() == PTableType.JOIN || table.getType() == PTableType.SUBQUERY) { - return column.getName().getString(); + cq = column.getName().getString(); } - boolean isIndex = table.getType() == PTableType.INDEX; - if (SchemaUtil.isPKColumn(column)) { - String name = column.getName().getString(); - if (isIndex) { - return IndexUtil.getDataColumnName(name); - } - return name; + else if (SchemaUtil.isPKColumn(column)) { + cq = isIndex ? IndexUtil.getDataColumnName(name) : name; } - - if (isIndex) { - // Translate to the data table column name - String indexColumnName = column.getName().getString(); - String dataFamilyName = IndexUtil.getDataColumnFamilyName(indexColumnName); - String dataColumnName = IndexUtil.getDataColumnName(indexColumnName); + else { String defaultFamilyName = table.getDefaultFamilyName() == null ? QueryConstants.DEFAULT_COLUMN_FAMILY : table.getDefaultFamilyName().getString(); - return SchemaUtil.getColumnDisplayName(defaultFamilyName.equals(dataFamilyName) ? null : dataFamilyName, dataColumnName); + // Translate to the data table column name + String dataFamilyName = isIndex ? IndexUtil.getDataColumnFamilyName(name) : column.getFamilyName().getString() ; + cf = defaultFamilyName.equals(dataFamilyName) ? null : dataFamilyName; + cq = isIndex ? IndexUtil.getDataColumnName(name) : name; } - byte[] defaultFamily = table.getDefaultFamilyName() == null ? QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES : table.getDefaultFamilyName().getBytes(); - String displayName = SchemaUtil.getColumnDisplayName(Bytes.compareTo(defaultFamily, column.getFamilyName().getBytes()) == 0 ? null : column.getFamilyName().getBytes(), column.getName().getBytes()); - return displayName; + + cf = (cf!=null && cfCaseSensitive) ? "\"" + cf + "\"" : cf; + cq = cqCaseSensitive ? "\"" + cq + "\"" : cq; + return SchemaUtil.getColumnDisplayName(cf, cq); --- End diff -- I think you can likely do this by adding a boolean to the ParseNodeFactory constructor (or deriving your own) that determines if column, table, schema references are case sensitive. You'll use this option/subclass for your SQLParser when you parse the expressionStr. Just specialize the following methods: public ColumnParseNode column(TableName tableName, String name, String alias) { return new ColumnParseNode(tableName,name,alias); } public TableName table(String schemaName, String tableName) { return TableName.createNormalized(schemaName,tableName); } > 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)