[
https://issues.apache.org/jira/browse/PHOENIX-6920?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17763084#comment-17763084
]
ASF GitHub Bot commented on PHOENIX-6920:
-----------------------------------------
stoty commented on code in PR #1665:
URL: https://github.com/apache/phoenix/pull/1665#discussion_r1319836291
##########
phoenix-core/src/test/java/org/apache/phoenix/compile/QueryMetaDataTest.java:
##########
@@ -309,7 +309,7 @@ public void testBasicResultSetMetaData() throws Exception {
assertEquals("organization_id".toUpperCase(),md.getColumnName(1));
assertEquals("a_string".toUpperCase(),md.getColumnName(2));
assertEquals("b_string".toUpperCase(),md.getColumnName(3));
- assertEquals("i".toUpperCase(),md.getColumnName(4));
+ assertEquals("a_integer".toUpperCase(),md.getColumnName(4));
Review Comment:
check the alias as well.
##########
phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionProjector.java:
##########
@@ -39,14 +39,24 @@ public class ExpressionProjector implements ColumnProjector
{
private final Expression expression;
private final String tableName;
private final boolean isCaseSensitive;
-
+ private final String label;
+
+ public ExpressionProjector(String name, String tableName, Expression
expression, boolean isCaseSensitive, String label) {
+ this.name = name;
+ this.expression = expression;
+ this.tableName = tableName;
+ this.isCaseSensitive = isCaseSensitive;
+ this.label = label;
+ }
+
public ExpressionProjector(String name, String tableName, Expression
expression, boolean isCaseSensitive) {
Review Comment:
What is the resaon for keeping this ?
##########
phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionProjector.java:
##########
@@ -39,14 +39,24 @@ public class ExpressionProjector implements ColumnProjector
{
private final Expression expression;
private final String tableName;
private final boolean isCaseSensitive;
-
+ private final String label;
+
+ public ExpressionProjector(String name, String tableName, Expression
expression, boolean isCaseSensitive, String label) {
Review Comment:
nit: name and label are strongly related, I'd prefer if they were
consecutive parameters.
##########
phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionProjector.java:
##########
@@ -39,14 +39,24 @@ public class ExpressionProjector implements ColumnProjector
{
private final Expression expression;
private final String tableName;
private final boolean isCaseSensitive;
-
+ private final String label;
+
+ public ExpressionProjector(String name, String tableName, Expression
expression, boolean isCaseSensitive, String label) {
+ this.name = name;
+ this.expression = expression;
+ this.tableName = tableName;
+ this.isCaseSensitive = isCaseSensitive;
+ this.label = label;
+ }
+
public ExpressionProjector(String name, String tableName, Expression
expression, boolean isCaseSensitive) {
Review Comment:
Having a single construnctor which requires all parameters would make it
harder to introduce new bugs.
##########
phoenix-core/src/main/java/org/apache/phoenix/compile/ProjectionCompiler.java:
##########
@@ -470,10 +470,24 @@ public static RowProjector compile(StatementContext
context, SelectStatement sta
ExpressionCompiler.throwNonAggExpressionInAggException(expression.toString());
}
}
- String columnAlias = aliasedNode.getAlias() != null ?
aliasedNode.getAlias() :
SchemaUtil.normalizeIdentifier(aliasedNode.getNode().getAlias());
- boolean isCaseSensitive = aliasedNode.getAlias() != null ?
aliasedNode.isCaseSensitve() : (columnAlias != null ?
SchemaUtil.isCaseSensitive(aliasedNode.getNode().getAlias()) :
selectVisitor.isCaseSensitive);
- String name = columnAlias == null ? expression.toString() :
columnAlias;
- projectedColumns.add(new ExpressionProjector(name,
tableRef.getTableAlias() == null ? (table.getName() == null ? "" :
table.getName().getString()) : tableRef.getTableAlias(), expression,
isCaseSensitive));
+
+ String tableName = tableRef.getTableAlias() == null ?
+ (table.getName() == null ?
+ "" :
+ table.getName().getString()) :
+ tableRef.getTableAlias();
+ String colName =
SchemaUtil.normalizeIdentifier(aliasedNode.getNode().getAlias());
Review Comment:
Does this work because the the getAlias() here is not the alias set in
select command, and is only set for direct columns where we omit the column
family ?
##########
phoenix-core/src/test/java/org/apache/phoenix/jdbc/PhoenixResultSetMetadataTest.java:
##########
@@ -49,4 +51,80 @@ public void testNullTypeName() throws Exception {
assertEquals("NULL", rs.getMetaData().getColumnTypeName(1));
}
+
+ @Test
+ public void testCaseSensitiveExpression() throws Exception {
+ Connection conn = DriverManager.getConnection(getUrl());
+ conn.createStatement().execute(
+ "CREATE TABLE T (pk1 CHAR(15) not null, pk2 VARCHAR not null,
\"v1\" VARCHAR(15), v2 DATE, \"v3\" VARCHAR " +
+ "CONSTRAINT pk PRIMARY KEY (pk1, pk2)) ");
+ ResultSet rs = conn.createStatement().executeQuery("SELECT pk1 AS
testalias1, pk2 AS \"testalias2\", " +
+ "\"v1\" AS \"testalias3\", v2, \"v3\" FROM T");
+
+ assertEquals("PK1", rs.getMetaData().getColumnName(1));
+ assertEquals("TESTALIAS1", rs.getMetaData().getColumnLabel(1));
+ assertFalse(rs.getMetaData().isCaseSensitive(1));
+
+ assertEquals("PK2", rs.getMetaData().getColumnName(2));
+ assertEquals("testalias2", rs.getMetaData().getColumnLabel(2));
+ assertTrue(rs.getMetaData().isCaseSensitive(2));
+
+ assertEquals("v1", rs.getMetaData().getColumnName(3));
+ assertEquals("testalias3", rs.getMetaData().getColumnLabel(3));
+ assertTrue(rs.getMetaData().isCaseSensitive(3));
+
+ assertEquals("V2", rs.getMetaData().getColumnName(4));
+ assertEquals("V2", rs.getMetaData().getColumnLabel(4));
+ assertFalse(rs.getMetaData().isCaseSensitive(4));
+
+ assertEquals("v3", rs.getMetaData().getColumnName(5));
+ assertEquals("v3", rs.getMetaData().getColumnLabel(5));
+ assertTrue(rs.getMetaData().isCaseSensitive(5));
+ }
+
+ @Test
Review Comment:
Can you add a separate test for the VIEW case that was found by
BackwardCompatibilityIT ?
> PQS / thin client doesn't distinguish between label and column_name
> -------------------------------------------------------------------
>
> Key: PHOENIX-6920
> URL: https://issues.apache.org/jira/browse/PHOENIX-6920
> Project: Phoenix
> Issue Type: Bug
> Components: queryserver
> Reporter: Istvan Toth
> Assignee: Aron Attila Meszaros
> Priority: Major
>
> While debugging PHOENIX-6917, I found that we receive the aliased column name
> in both the _column_name_ and _label_ fields of the column metadata in
> protobuf.
> This happened with PQS head and Phoenix 5.2.0-SNAPSHOT.
> Apparently, some older version used to work correctly (and returned the
> unaliased name in {_}column_name{_})
> We need to check if this is a Phoenix or Avatica regression first, then fix
> it in the appropriate project.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)