[
https://issues.apache.org/jira/browse/PHOENIX-1938?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14553242#comment-14553242
]
ASF GitHub Bot commented on PHOENIX-1938:
-----------------------------------------
Github user JamesRTaylor commented on the pull request:
https://github.com/apache/phoenix/pull/81#issuecomment-104059599
Actually, change it to rhs.getDataType().isCoercibleTo(PVarChar.INSTANCE).
That's more or less as you've described, but done in a way that doesn't hard
code type checks. Our PDataType does not necessarily map 1:1 with SQL types, so
down the road we might add a PUTF16EncodedType which would still map to a
VARCHAR is SQL. This type of check makes a change like this more manageable.
> Like operator should throw proper exception when it is used with data type
> other then Varcahr and Char
> ------------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-1938
> URL: https://issues.apache.org/jira/browse/PHOENIX-1938
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.4.0
> Reporter: Aakash Pradeep
> Assignee: Aakash Pradeep
> Priority: Minor
>
> Currently when "Like" operator is used with Integer it throws
> ClassCastException instead of Saying that it is not supported.
> select * from <Table_Name> where 1 like 1;
> java.lang.ClassCastException: java.lang.Integer cannot be cast to
> java.lang.String
> at
> org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:471)
> at
> org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:134)
> at
> org.apache.phoenix.parse.LikeParseNode.accept(LikeParseNode.java:62)
> at
> org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:130)
> at
> org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:100)
> at
> org.apache.phoenix.compile.QueryCompiler.compileSingleFlatQuery(QueryCompiler.java:496)
> at
> org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:449)
> at
> org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:161)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:344)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:327)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:237)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:232)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:231)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1097)
> at sqlline.Commands.execute(Commands.java:822)
> at sqlline.Commands.sql(Commands.java:732)
> at sqlline.SqlLine.dispatch(SqlLine.java:808)
> at sqlline.SqlLine.begin(SqlLine.java:681)
> at sqlline.SqlLine.start(SqlLine.java:398)
> at sqlline.SqlLine.main(SqlLine.java:292)
> select * from JSON_PK where '1' like 1;
> Error: ERROR 203 (22005): Type mismatch. VARCHAR and INTEGER for '1' LIKE 1
> (state=22005,code=203)
> org.apache.phoenix.schema.TypeMismatchException: ERROR 203 (22005): Type
> mismatch. VARCHAR and INTEGER for '1' LIKE 1
> at
> org.apache.phoenix.schema.TypeMismatchException.newException(TypeMismatchException.java:53)
> at
> org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:462)
> at
> org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:134)
> at
> org.apache.phoenix.parse.LikeParseNode.accept(LikeParseNode.java:62)
> at
> org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:130)
> at
> org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:100)
> at
> org.apache.phoenix.compile.QueryCompiler.compileSingleFlatQuery(QueryCompiler.java:496)
> at
> org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:449)
> at
> org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:161)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:344)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:327)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:237)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:232)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:231)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1097)
> at sqlline.Commands.execute(Commands.java:822)
> at sqlline.Commands.sql(Commands.java:732)
> at sqlline.SqlLine.dispatch(SqlLine.java:808)
> at sqlline.SqlLine.begin(SqlLine.java:681)
> at sqlline.SqlLine.start(SqlLine.java:398)
> at sqlline.SqlLine.main(SqlLine.java:292)
> 0: jdbc:phoenix:localhost:2181:/hbase> select * from JSON_PK where 1 like '1';
> Error: ERROR 203 (22005): Type mismatch. INTEGER and VARCHAR for 1 LIKE '1'
> (state=22005,code=203)
> org.apache.phoenix.schema.TypeMismatchException: ERROR 203 (22005): Type
> mismatch. INTEGER and VARCHAR for 1 LIKE '1'
> at
> org.apache.phoenix.schema.TypeMismatchException.newException(TypeMismatchException.java:53)
> at
> org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:462)
> at
> org.apache.phoenix.compile.ExpressionCompiler.visitLeave(ExpressionCompiler.java:134)
> at
> org.apache.phoenix.parse.LikeParseNode.accept(LikeParseNode.java:62)
> at
> org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:130)
> at
> org.apache.phoenix.compile.WhereCompiler.compile(WhereCompiler.java:100)
> at
> org.apache.phoenix.compile.QueryCompiler.compileSingleFlatQuery(QueryCompiler.java:496)
> at
> org.apache.phoenix.compile.QueryCompiler.compileSingleQuery(QueryCompiler.java:449)
> at
> org.apache.phoenix.compile.QueryCompiler.compile(QueryCompiler.java:161)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:344)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$ExecutableSelectStatement.compilePlan(PhoenixStatement.java:327)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:237)
> at
> org.apache.phoenix.jdbc.PhoenixStatement$1.call(PhoenixStatement.java:232)
> at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.executeQuery(PhoenixStatement.java:231)
> at
> org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1097)
> at sqlline.Commands.execute(Commands.java:822)
> at sqlline.Commands.sql(Commands.java:732)
> at sqlline.SqlLine.dispatch(SqlLine.java:808)
> at sqlline.SqlLine.begin(SqlLine.java:681)
> at sqlline.SqlLine.start(SqlLine.java:398)
> at sqlline.SqlLine.main(SqlLine.java:292)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)