apache / shardingsphere

Distributed SQL transaction & query engine for data sharding, scaling, encryption, and more - on any database.
Apache License 2.0
19.8k stars 6.7k forks source link

when I use two oracle datasource, Calcite upper case table name ,then cannot find table in logicTables #11946

Closed wanyian closed 3 years ago

wanyian commented 3 years ago

Bug Report

Which version of ShardingSphere did you use?

master branch

Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?

ShardingSphere-JDBC

Expected behavior

Executing SQL normally

Actual behavior

calcite will upper case sql whitout quoted, but shardingSphere lower case logicTable , then it can't find the table.

Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc.

configuration: `spring.shardingsphere.datasource.names=db2,db3

spring.shardingsphere.datasource.db2.type=org.apache.commons.dbcp2.BasicDataSource spring.shardingsphere.datasource.db2.driver-class-name=oracle.jdbc.driver.OracleDriver spring.shardingsphere.datasource.db2.url=jdbc:oracle:thin:@127.0.0.1:1521/db spring.shardingsphere.datasource.db2.username=test1 spring.shardingsphere.datasource.db2.password=test1

spring.shardingsphere.datasource.db3.type=org.apache.commons.dbcp2.BasicDataSource spring.shardingsphere.datasource.db3.driver-class-name=oracle.jdbc.driver.OracleDriver spring.shardingsphere.datasource.db3.url=jdbc:oracle:thin:@127.0.0.1:1521/db spring.shardingsphere.datasource.db3.username=test2 spring.shardingsphere.datasource.db3.password=test2

spring.shardingsphere.rules.sharding.tables.t_order.logic-table=t_order spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=db$->{2..3}.torder$->{0..1} spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-column=order_id spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-algorithm-name=t_order_sharding spring.shardingsphere.rules.sharding.tables.t_order.database-strategy.standard.sharding-column=order_id spring.shardingsphere.rules.sharding.tables.t_order.database-strategy.standard.sharding-algorithm-name=db_sharding

spring.shardingsphere.rules.sharding.tables.t_orderdetail.logic-table=t_orderdetail spring.shardingsphere.rules.sharding.tables.t_orderdetail.actual-data-nodes=db$->{2..3}.t_orderdetail$->{0..1} spring.shardingsphere.rules.sharding.tables.t_orderdetail.table-strategy.standard.sharding-column=order_id spring.shardingsphere.rules.sharding.tables.t_orderdetail.database-strategy.standard.sharding-column=order_id spring.shardingsphere.rules.sharding.tables.t_orderdetail.table-strategy.standard.sharding-algorithm-name=t_order_sharding spring.shardingsphere.rules.sharding.tables.t_orderdetail.database-strategy.standard.sharding-algorithm-name=db_sharding`

sql: SELECT row_.*, rownum rownum_ FROM ( SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM t_order t JOIN t_order_detail_ i ON t.order_id = i.order_id order by order_id) row_ WHERE rownum <= 10 and rownum > 0 order by order_id

tristaZero commented 3 years ago

@wanyian Thanks for this issue, could you provide the error log for us to debug?

wanyian commented 3 years ago

@wanyian Thanks for this issue, could you provide the error log for us to debug?

Of course, all error log like this:

Error querying database. Cause: java.sql.SQLException: Error while preparing statement [SELECT row.*, rownum rownum FROM

    (
    SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM
     t_order t JOIN t_order_detail_ i
    ON t.order_id = i.order_id order by order_id) row_
    WHERE rownum <= ? and rownum > ? order by order_id]

The error may exist in file [H:\javaProtect\202107\demodb\demoshardingsphere\target\classes\mybatis\oracle\OrderDemoMapper.xml]

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: SELECT row.*, rownum rownum FROM ( SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM t_order t JOIN t_orderdetail i ON t.order_id = i.order_id order by orderid) row WHERE rownum <= ? and rownum > ? order by order_id

Cause: java.sql.SQLException: Error while preparing statement [SELECT row.*, rownum rownum FROM

    (
    SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM
     t_order t JOIN t_order_detail_ i
    ON t.order_id = i.order_id order by order_id) row_
    WHERE rownum <= ? and rownum > ? order by order_id]

; uncategorized SQLException; SQL state [null]; error code [0]; Error while preparing statement [SELECT row.*, rownum rownum FROM ( SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM t_order t JOIN t_orderdetail i ON t.order_id = i.order_id order by orderid) row WHERE rownum <= ? and rownum > ? order by orderid]; nested exception is java.sql.SQLException: Error while preparing statement [SELECT row.*, rownum rownum_ FROM ( SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM t_order t JOIN t_orderdetail i ON t.order_id = i.order_id order by orderid) row WHERE rownum <= ? and rownum > ? order by order_id]

org.springframework.jdbc.UncategorizedSQLException:

Error querying database. Cause: java.sql.SQLException: Error while preparing statement [SELECT row.*, rownum rownum FROM

    (
    SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM
     t_order t JOIN t_order_detail_ i
    ON t.order_id = i.order_id order by order_id) row_
    WHERE rownum <= ? and rownum > ? order by order_id]

The error may exist in file [H:\javaProtect\202107\demodb\demoshardingsphere\target\classes\mybatis\oracle\OrderDemoMapper.xml]

The error may involve defaultParameterMap

The error occurred while setting parameters

SQL: SELECT row.*, rownum rownum FROM ( SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM t_order t JOIN t_orderdetail i ON t.order_id = i.order_id order by orderid) row WHERE rownum <= ? and rownum > ? order by order_id

Cause: java.sql.SQLException: Error while preparing statement [SELECT row.*, rownum rownum FROM

    (
    SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM
     t_order t JOIN t_order_detail_ i
    ON t.order_id = i.order_id order by order_id) row_
    WHERE rownum <= ? and rownum > ? order by order_id]

; uncategorized SQLException; SQL state [null]; error code [0]; Error while preparing statement [SELECT row.*, rownum rownum FROM ( SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM t_order t JOIN t_orderdetail i ON t.order_id = i.order_id order by orderid) row WHERE rownum <= ? and rownum > ? order by orderid]; nested exception is java.sql.SQLException: Error while preparing statement [SELECT row.*, rownum rownum_ FROM ( SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM t_order t JOIN t_orderdetail i ON t.order_id = i.order_id order by orderid) row WHERE rownum <= ? and rownum > ? order by order_id] at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89) ~[spring-jdbc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74) ~[mybatis-spring-2.0.2.jar:2.0.2] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440) ~[mybatis-spring-2.0.2.jar:2.0.2] at com.sun.proxy.$Proxy179.selectList(Unknown Source) ~[na:na] at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:223) ~[mybatis-spring-2.0.2.jar:2.0.2] at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147) ~[mybatis-3.5.2.jar:3.5.2] at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80) ~[mybatis-3.5.2.jar:3.5.2] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:57) ~[mybatis-3.5.2.jar:3.5.2] at com.sun.proxy.$Proxy184.selectOrderListPage(Unknown Source) ~[na:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE] at com.szkingdom.koca.support.mybatis.aop.PageAdvice.invoke(PageAdvice.java:43) ~[koca-support-2.4.0-RELEASE.jar:na] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.9.RELEASE.jar:5.2.9.RELEASE] at com.sun.proxy.$Proxy185.selectOrderListPage(Unknown Source) ~[na:na] at com.szkingdom.demoshardingsphere.controller.OrderController.selectOrderList(OrderController.java:73) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) [tomcat-embed-core-9.0.38.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.2.9.RELEASE.jar:5.2.9.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) [tomcat-embed-core-9.0.38.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.38.jar:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) [tomcat-embed-core-9.0.38.jar:9.0.38] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.38.jar:9.0.38] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_221] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_221] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.38.jar:9.0.38] at java.lang.Thread.run(Thread.java:748) [na:1.8.0221] Caused by: java.sql.SQLException: Error while preparing statement [SELECT row.*, rownum rownum_ FROM ( SELECT t.order_id, order_type, order_price, oper,order_time, order_detail_1, order_detail_2 FROM t_order t JOIN t_orderdetail i ON t.order_id = i.order_id order by orderid) row WHERE rownum <= ? and rownum > ? order by orderid] at org.apache.calcite.avatica.Helper.createException(Helper.java:56) ~[avatica-core-1.17.0.jar:1.17.0] at org.apache.calcite.avatica.Helper.createException(Helper.java:41) ~[avatica-core-1.17.0.jar:1.17.0] at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:220) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:202) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:93) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.avatica.AvaticaConnection.prepareStatement(AvaticaConnection.java:175) ~[avatica-core-1.17.0.jar:1.17.0] at org.apache.shardingsphere.infra.executor.sql.federate.execute.FederateJDBCExecutor.execute(FederateJDBCExecutor.java:105) ~[shardingsphere-infra-executor-5.0.0-RC1-SNAPSHOT.jar:5.0.0-RC1-SNAPSHOT] at org.apache.shardingsphere.infra.executor.sql.federate.execute.FederateJDBCExecutor.executeQuery(FederateJDBCExecutor.java:84) ~[shardingsphere-infra-executor-5.0.0-RC1-SNAPSHOT.jar:5.0.0-RC1-SNAPSHOT] at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.executeFederatedQuery(ShardingSpherePreparedStatement.java:214) ~[shardingsphere-jdbc-core-5.0.0-RC1-SNAPSHOT.jar:5.0.0-RC1-SNAPSHOT] at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.execute(ShardingSpherePreparedStatement.java:276) ~[shardingsphere-jdbc-core-5.0.0-RC1-SNAPSHOT.jar:5.0.0-RC1-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221] at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59) ~[mybatis-3.5.2.jar:3.5.2] at com.sun.proxy.$Proxy207.execute(Unknown Source) ~[na:na] at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64) ~[mybatis-3.5.2.jar:3.5.2] at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~[mybatis-3.5.2.jar:3.5.2] at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~[mybatis-3.5.2.jar:3.5.2] at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324) ~[mybatis-3.5.2.jar:3.5.2] at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.5.2.jar:3.5.2] at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~[mybatis-3.5.2.jar:3.5.2] at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:108) ~[pagehelper-5.1.9.jar:na] at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.2.jar:3.5.2] at com.sun.proxy.$Proxy205.query(Unknown Source) ~[na:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221] at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.2.jar:3.5.2] at com.szkingdom.koca.support.mybatis.interceptor.LanguageInterceptor.intercept(LanguageInterceptor.java:61) ~[koca-support-2.4.0-RELEASE.jar:na] at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.2.jar:3.5.2] at com.sun.proxy.$Proxy205.query(Unknown Source) ~[na:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221] at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49) ~[mybatis-3.5.2.jar:3.5.2] at com.szkingdom.koca.support.mybatis.interceptor.MssqlFunctionInterceptor.intercept(MssqlFunctionInterceptor.java:46) ~[koca-support-2.4.0-RELEASE.jar:na] at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.2.jar:3.5.2] at com.sun.proxy.$Proxy205.query(Unknown Source) ~[na:na] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147) ~[mybatis-3.5.2.jar:3.5.2] at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) ~[mybatis-3.5.2.jar:3.5.2] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221] at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426) ~[mybatis-spring-2.0.2.jar:2.0.2] ... 70 common frames omitted Caused by: org.apache.calcite.runtime.CalciteContextException: From line 4, column 10 to line 4, column 16: Object 'T_ORDER' not found within 'logic_db'; did you mean 't_order'? at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_221] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_221] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_221] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0221] at org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:467) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:883) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:868) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:5043) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.IdentifierNamespace.resolveImpl(IdentifierNamespace.java:168) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.IdentifierNamespace.validateImpl(IdentifierNamespace.java:184) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1067) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1041) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3205) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3187) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateJoin(SqlValidatorImpl.java:3251) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3196) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3461) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1067) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1041) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3205) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3187) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3461) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1067) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:1041) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:232) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:1016) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:724) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:567) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:242) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:208) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2(CalcitePrepareImpl.java:642) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.prepare.CalcitePrepareImpl.prepare(CalcitePrepareImpl.java:508) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:478) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:231) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:213) ~[calcite-core-1.26.0.jar:1.26.0] ... 115 common frames omitted Caused by: org.apache.calcite.sql.validate.SqlValidatorException: Object 'T_ORDER' not found within 'logic_db'; did you mean 't_order'? at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_221] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_221] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_221] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_221] at org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:467) ~[calcite-core-1.26.0.jar:1.26.0] at org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:560) ~[calcite-core-1.26.0.jar:1.26.0] ... 150 common frames omitted

I guess, the sql in sqlNode be upper case when calcite creat sqlNode in CalcitePrepareImpl. prepare2_( ... ).When execute IdentifierNamespace.resolveImpl( ... ) ,table name has been upper case.So it can't resolve table.

tristaZero commented 3 years ago

@strongduanmu Could you have a look ?

strongduanmu commented 3 years ago

@strongduanmu Could you have a look ?

@tristaZero I will investigate this issue.

strongduanmu commented 3 years ago

@wanyian After this PR merge, can you help test this problem? By the way, actualDataNodes need to be configured according to the actual table name, including case.

tristaZero commented 3 years ago

Cool, look forward.

wanyian commented 3 years ago

@wanyian After this PR merge, can you help test this problem? By the way, actualDataNodes need to be configured according to the actual table name, including case.

Of course I will test it, thanks for your help!

wanyian commented 3 years ago

@strongduanmu I test it and succeed!

tristaZero commented 3 years ago

@wanyian Hey, cool!

strongduanmu commented 3 years ago

@wanyian Thank you for your test.👍