yy-Eddy opened a new issue #7597:
URL: https://github.com/apache/shardingsphere/issues/7597
## Bug Report
项目是spring + mybatis, 集成ShardingSphere-JDBC后,发现有一个sql运行报错 (语句在最后面 ,请忽略sql写的烂
嘿嘿) ;
复现顺序:
当我把dataSoruce切换为ShardingSphere-JDBC时,sql会被拦截解析, 但是解析异常 [在order by解析那里抛出来的].
如果还是默认用mybatis的数据源则无问题.
sql语句中的表未进行任何分库分表,读写分离等配置
个人总结:
在未进行设置分库分表下 语句解析和mybatis出现了不兼容
### Which version of ShardingSphere did you use?
版本是: 4.1.1
### Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?
使用的: ShardingSphere-JDBC
sql是:
SELECT r2.* FROM
(
SELECT
r1.*,ncb.base_name,ncb.base_photo,
if
(newest is null,1,
if((UNIX_TIMESTAMP('2020-09-25 11:59:11') -
UNIX_TIMESTAMP(newest)) > r1.cooling_time,1,2)
) as isCooling
FROM
(
SELECT
(
SELECT
count(id)
FROM
user_tags
WHERE
user_id = 18960
AND
FIND_IN_SET(tags_id, nc.game_tags_id)
) ut_count,
(
SELECT
count(id)
FROM
npc_receive
WHERE
user_id = 18960
AND npc_card_id = nc.id
AND
str_to_date(receive_time, '%Y-%m-%d') = str_to_date('2020-09-25 11:59:11',
'%Y-%m-%d')
) AS receive_daily,
(
SELECT
count(id)
FROM
npc_receive
WHERE
user_id = 18960
AND npc_card_id
= nc.id
) AS receive_total,
(
SELECT
count(id)
FROM
npc_receive
WHERE
npc_card_id =
nc.id
) AS receive_card_total,
(
SELECT
receive_time
FROM
npc_receive
WHERE
user_id = 18960
AND npc_card_id
= nc.id
ORDER BY
receive_time
desc
LIMIT 1
) AS newest,
nc.id,
nc.npc_base_id,
nc.daily_times,
nc.total_times,
nc.card_end_time,
nc.cooling_time,
nc.total_card_num
FROM
npc_card nc
WHERE
npc_base_id IN (
3
,
4
,
5
,
6
,
9
)
AND card_start_time < '2020-09-25
11:59:11'
AND card_end_time > '2020-09-25
11:59:11'
) AS r1 left join npc_base ncb on
r1.npc_base_id = ncb.id
WHERE
r1.ut_count > 0
AND r1.receive_daily < r1.daily_times
AND r1.receive_total < r1.total_times
AND r1.receive_card_total < r1.total_card_num
) as r2
where r2.isCooling = 1
ORDER BY
r2.card_end_time DESC,
r2.id asc
LIMIT 0,10
错误的堆栈信息是:
Cause: java.lang.IllegalStateException: Can not find owner from table.
at
org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26)
at
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:111)
at
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:102)
at sun.reflect.GeneratedMethodAccessor399.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:355)
... 60 more
Caused by: java.lang.IllegalStateException: Can not find owner from table.
at
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.engine.ProjectionsContextEngine.find(ProjectionsContextEngine.java:197)
at
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.engine.ProjectionsContextEngine.findShorthandProjection(ProjectionsContextEngine.java:139)
at
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.engine.ProjectionsContextEngine.containsItemWithOwnerInShorthandProjections(ProjectionsContextEngine.java:135)
at
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.engine.ProjectionsContextEngine.containsItemInShorthandProjection(ProjectionsContextEngine.java:121)
at
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.engine.ProjectionsContextEngine.containsProjection(ProjectionsContextEngine.java:105)
at
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.engine.ProjectionsContextEngine.getDerivedOrderColumns(ProjectionsContextEngine.java:96)
at
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.engine.ProjectionsContextEngine.getDerivedOrderByColumns(ProjectionsContextEngine.java:88)
at
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.engine.ProjectionsContextEngine.createProjectionsContext(ProjectionsContextEngine.java:71)
at
org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext.<init>(SelectStatementContext.java:99)
at
org.apache.shardingsphere.sql.parser.binder.SQLStatementContextFactory.getDMLStatementContext(SQLStatementContextFactory.java:103)
at
org.apache.shardingsphere.sql.parser.binder.SQLStatementContextFactory.newInstance(SQLStatementContextFactory.java:87)
at
org.apache.shardingsphere.underlying.route.DataNodeRouter.createRouteContext(DataNodeRouter.java:99)
at
org.apache.shardingsphere.underlying.route.DataNodeRouter.executeRoute(DataNodeRouter.java:89)
at
org.apache.shardingsphere.underlying.route.DataNodeRouter.route(DataNodeRouter.java:76)
at
org.apache.shardingsphere.underlying.pluggble.prepare.PreparedQueryPrepareEngine.route(PreparedQueryPrepareEngine.java:54)
at
org.apache.shardingsphere.underlying.pluggble.prepare.BasePrepareEngine.executeRoute(BasePrepareEngine.java:96)
at
org.apache.shardingsphere.underlying.pluggble.prepare.BasePrepareEngine.prepare(BasePrepareEngine.java:83)
at
org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.prepare(ShardingPreparedStatement.java:183)
at
org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement.execute(ShardingPreparedStatement.java:143)
at
org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:59)
at
org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:73)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:60)
at
org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:267)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:137)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:96)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:77)
at
org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]