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

ASF GitHub Bot commented on PHOENIX-1938:
-----------------------------------------

Github user AakashPradeep commented on the pull request:

    https://github.com/apache/phoenix/pull/81#issuecomment-104047363
  
    As per the SQL specification, LIKE only works with String data type 
(http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt search for "Like 
predicate") . 
    If it has been set to PVarchar.isCoercible() that means anything which can 
be coerced to Varchar but is not varchar for example VarBinary and JSON, can 
also be used with "Like". 
    
    IMHO Like should only work with Varhcar and char datatype and throw illegal 
data type error with other datatype arguments.


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

Reply via email to