Shardingsphere: SQL解析报错 -- Not supported token 'OR'

Created on 2 Aug 2017  ·  5Comments  ·  Source: apache/shardingsphere

Which version of Sharding-Jdbc do you using?

1.5.0

Expected behavior

对较复杂sql能正确解析

Actual behavior

### Error querying database.  Cause: com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException: Not supported token 'OR'.
### The error may exist in file [D:\Develop\Git\fcs2\fcs2-inv\fcs2-inv\fcs2-inv-public\target\classes\com\vip\fcs\app\item\job\dao\custom\mybatis\InvCstIntercompanyTrnSumTempMapperCustom.xml]
### The error may involve com.vip.fcs.app.item.job.dao.custom.mybatis.InvCstIntercompanyTrnSumTempMapper.queryInvCstSumQTY-Inline
### The error occurred while setting parameters
### SQL: select  id, db_no, gid, item_no, s_qty, forg_id, sorg_id,  f_c, s_c  from inv_sum_temp  where        is_deleted = 0   AND period_name = ?   AND item_no in     (  ?    ,  ?  )         AND ( forg_id in  (  ? ,  ? )           OR sorg_id in    ( ?  ,  ?   )  )        AND ( f_c in    (  ?  ,   ?  )    OR s_c in   (  ?   ,   ? )  )
### Cause: com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException: Not supported token 'OR'.
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
    at sun.reflect.GeneratedMethodAccessor155.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
    ... 48 more
Caused by: com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException: Not supported token 'OR'.
    at com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser.parseConditions(SQLParser.java:261)
    at com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser.parseWhere(SQLParser.java:252)
    at com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.select.AbstractSelectParser.parseWhere(AbstractSelectParser.java:205)
    at com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.mysql.MySQLSelectParser.query(MySQLSelectParser.java:52)
    at com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.select.AbstractSelectParser.parse(AbstractSelectParser.java:78)
    at com.dangdang.ddframe.rdb.sharding.parsing.SQLParsingEngine.parse(SQLParsingEngine.java:63)
    at com.dangdang.ddframe.rdb.sharding.routing.router.ParsingSQLRouter.parse(ParsingSQLRouter.java:74)
    at com.dangdang.ddframe.rdb.sharding.routing.PreparedStatementRoutingEngine.route(PreparedStatementRoutingEngine.java:54)
    at com.dangdang.ddframe.rdb.sharding.jdbc.core.statement.ShardingPreparedStatement.route(ShardingPreparedStatement.java:120)
    at com.dangdang.ddframe.rdb.sharding.jdbc.core.statement.ShardingPreparedStatement.execute(ShardingPreparedStatement.java:110)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
    at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
    ... 53 more

Steps to reproduce the behavior

通过mybatis配置的查询sql,执行后即报错

duplicate

Most helpful comment

不需要分库分表的表为何也不支持OR,能不能对默认的数据源支持OR,这样我就不用单独实现动态数据源

All 5 comments

SQL语句限制

不支持DDL语句
有限支持子查询
不支持HAVING
不支持OR,UNION 和 UNION ALL
不支持特殊INSERT

http://dangdangdotcom.github.io/sharding-jdbc/01-start/limitations/

不需要分库分表的表为何也不支持OR,能不能对默认的数据源支持OR,这样我就不用单独实现动态数据源

Is it still unsupported for Sharding-JDBC 3.x?

fixed at 3.x

duplicated with #501

Was this page helpful?
0 / 5 - 0 ratings