You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by "lcj-jarvis (via GitHub)" <gi...@apache.org> on 2024/08/19 15:31:03 UTC
[I] ORDER BY Column DESC Throw NullPointerException [shardingsphere]
lcj-jarvis opened a new issue, #32598:
URL: https://github.com/apache/shardingsphere/issues/32598
## Bug Report
This is my Log:
2024-08-19 23:04:49.805 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Logic SQL: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC
2024-08-19 23:04:49.805 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : SQLStatement: MySQLSelectStatement(super=SelectStatement(super=AbstractSQLStatement(parameterCount=4, parameterMarkerSegments=[ParameterMarkerExpressionSegment(startIndex=99, stopIndex=99, parameterMarkerIndex=0, parameterMarkerType=QUESTION, alias=Optional.empty), ParameterMarkerExpressionSegment(startIndex=112, stopIndex=112, parameterMarkerIndex=1, parameterMarkerType=QUESTION, alias=Optional.empty), ParameterMarkerExpressionSegment(startIndex=134, stopIndex=134, parameterMarkerIndex=2, parameterMarkerType=QUESTION, alias=Optional.empty), ParameterMarkerExpressionSegment(startIndex=156, stopIndex=156, parameterMarkerIndex=3, parameterMarkerType=QUESTION, alias=Optional.empty)], commentSegments=[]), projections=ProjectionsSegment(startIndex=8, stopIndex=53, projections=[ColumnProjectionSegment(column=ColumnSegment(startIndex=8, stopIndex=9, identifier=IdentifierValue(value=id, qu
oteCharacter=NONE), owner=Optional.empty), alias=Optional.empty), ColumnProjectionSegment(column=ColumnSegment(startIndex=11, stopIndex=14, identifier=IdentifierValue(value=type, quoteCharacter=NONE), owner=Optional.empty), alias=Optional.empty), ColumnProjectionSegment(column=ColumnSegment(startIndex=16, stopIndex=19, identifier=IdentifierValue(value=name, quoteCharacter=NONE), owner=Optional.empty), alias=Optional.empty), ColumnProjectionSegment(column=ColumnSegment(startIndex=21, stopIndex=24, identifier=IdentifierValue(value=code, quoteCharacter=NONE), owner=Optional.empty), alias=Optional.empty), ColumnProjectionSegment(column=ColumnSegment(startIndex=26, stopIndex=30, identifier=IdentifierValue(value=value, quoteCharacter=NONE), owner=Optional.empty), alias=Optional.empty), ColumnProjectionSegment(column=ColumnSegment(startIndex=32, stopIndex=43, identifier=IdentifierValue(value=collect_time, quoteCharacter=NONE), owner=Optional.empty), alias=Optional.empty), ColumnProjectionS
egment(column=ColumnSegment(startIndex=45, stopIndex=53, identifier=IdentifierValue(value=backup_id, quoteCharacter=NONE), owner=Optional.empty), alias=Optional.empty)], distinctRow=false), from=SimpleTableSegment(tableName=TableNameSegment(startIndex=61, stopIndex=79, identifier=IdentifierValue(value=t_side_monitor_data, quoteCharacter=NONE)), owner=Optional.empty, alias=Optional.empty), where=Optional[WhereSegment(startIndex=85, stopIndex=157, expr=BinaryOperationExpression(startIndex=92, stopIndex=156, left=BinaryOperationExpression(startIndex=92, stopIndex=134, left=BinaryOperationExpression(startIndex=92, stopIndex=112, left=BinaryOperationExpression(startIndex=92, stopIndex=99, left=ColumnSegment(startIndex=92, stopIndex=95, identifier=IdentifierValue(value=type, quoteCharacter=NONE), owner=Optional.empty), right=ParameterMarkerExpressionSegment(startIndex=99, stopIndex=99, parameterMarkerIndex=0, parameterMarkerType=QUESTION, alias=Optional.empty), operator==, text=type = ?),
right=BinaryOperationExpression(startIndex=105, stopIndex=112, left=ColumnSegment(startIndex=105, stopIndex=108, identifier=IdentifierValue(value=name, quoteCharacter=NONE), owner=Optional.empty), right=ParameterMarkerExpressionSegment(startIndex=112, stopIndex=112, parameterMarkerIndex=1, parameterMarkerType=QUESTION, alias=Optional.empty), operator==, text=name = ?), operator=AND, text=type = ? AND name = ?), right=BinaryOperationExpression(startIndex=118, stopIndex=134, left=ColumnSegment(startIndex=118, stopIndex=129, identifier=IdentifierValue(value=collect_time, quoteCharacter=NONE), owner=Optional.empty), right=ParameterMarkerExpressionSegment(startIndex=134, stopIndex=134, parameterMarkerIndex=2, parameterMarkerType=QUESTION, alias=Optional.empty), operator=>=, text=collect_time >= ?), operator=AND, text=type = ? AND name = ? AND collect_time >= ?), right=BinaryOperationExpression(startIndex=140, stopIndex=156, left=ColumnSegment(startIndex=140, stopIndex=151, identifier=Id
entifierValue(value=collect_time, quoteCharacter=NONE), owner=Optional.empty), right=ParameterMarkerExpressionSegment(startIndex=156, stopIndex=156, parameterMarkerIndex=3, parameterMarkerType=QUESTION, alias=Optional.empty), operator=<=, text=collect_time <= ?), operator=AND, text=type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?))], groupBy=Optional.empty, having=Optional.empty, orderBy=Optional[OrderBySegment(startIndex=159, stopIndex=184, orderByItems=[ColumnOrderByItemSegment(super=TextOrderByItemSegment(), column=ColumnSegment(startIndex=168, stopIndex=179, identifier=IdentifierValue(value=collect_time, quoteCharacter=NONE), owner=Optional.empty))])], combines=[]), table=Optional.empty, limit=Optional.empty, lock=Optional.empty, window=Optional.empty)
2024-08-19 23:04:49.805 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_01
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_02
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_03
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_04
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_05
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_06
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_07
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_08
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_09
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_10
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_11
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.809 INFO 36416 --- [nio-8080-exec-1] ShardingSphere-SQL : Actual SQL: ds0 ::: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data_12
WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC ::: [String01, String, 2023-08-20 06:21:35.0, 2024-08-20 06:21:35.0]
2024-08-19 23:04:49.859 ERROR 36416 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.NullPointerException
### The error may exist in com/mrlu/sharding/mapper/SideMonitorDataMapper.java (best guess)
### The error may involve com.mrlu.sharding.mapper.SideMonitorDataMapper.selectList
### The error occurred while handling results
### SQL: SELECT id,type,name,code,value,collect_time,backup_id FROM t_side_monitor_data WHERE (type = ? AND name = ? AND collect_time >= ? AND collect_time <= ?) ORDER BY collect_time DESC
### Cause: java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at org.apache.shardingsphere.sharding.merge.dql.orderby.OrderByValue.getOrderValuesCaseSensitiveFromTables(OrderByValue.java:74) ~[shardingsphere-sharding-core-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.sharding.merge.dql.orderby.OrderByValue.getOrderValuesCaseSensitive(OrderByValue.java:64) ~[shardingsphere-sharding-core-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.sharding.merge.dql.orderby.OrderByValue.<init>(OrderByValue.java:58) ~[shardingsphere-sharding-core-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.sharding.merge.dql.orderby.OrderByStreamMergedResult.orderResultSetsToQueue(OrderByStreamMergedResult.java:56) ~[shardingsphere-sharding-core-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.sharding.merge.dql.orderby.OrderByStreamMergedResult.<init>(OrderByStreamMergedResult.java:50) ~[shardingsphere-sharding-core-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.sharding.merge.dql.ShardingDQLResultMerger.build(ShardingDQLResultMerger.java:95) ~[shardingsphere-sharding-core-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.sharding.merge.dql.ShardingDQLResultMerger.merge(ShardingDQLResultMerger.java:66) ~[shardingsphere-sharding-core-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.infra.merge.MergeEngine.executeMerge(MergeEngine.java:82) ~[shardingsphere-infra-merge-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.infra.merge.MergeEngine.merge(MergeEngine.java:71) ~[shardingsphere-infra-merge-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.mergeQuery(ShardingSpherePreparedStatement.java:520) ~[shardingsphere-jdbc-core-5.2.0.jar:5.2.0]
at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.getResultSet(ShardingSpherePreparedStatement.java:462) ~[shardingsphere-jdbc-core-5.2.0.jar:5.2.0]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getFirstResultSet(DefaultResultSetHandler.java:244) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:194) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) ~[mybatis-3.5.10.jar:3.5.10]
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) ~[mybatis-3.5.10.jar:3.5.10]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_402]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_402]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_402]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_402]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ~[mybatis-spring-2.0.7.jar:2.0.7]
at com.sun.proxy.$Proxy75.selectList(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224) ~[mybatis-spring-2.0.7.jar:2.0.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166) ~[mybatis-plus-core-3.5.3.1.jar:3.5.3.1]
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77) ~[mybatis-plus-core-3.5.3.1.jar:3.5.3.1]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148) ~[mybatis-plus-core-3.5.3.1.jar:3.5.3.1]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.3.1.jar:3.5.3.1]
at com.sun.proxy.$Proxy78.selectList(Unknown Source) ~[na:na]
at com.baomidou.mybatisplus.extension.service.IService.list(IService.java:370) ~[mybatis-plus-extension-3.5.3.1.jar:3.5.3.1]
at com.mrlu.sharding.service.impl.SideMonitorDataServiceImpl.getMonitorDataList(SideMonitorDataServiceImpl.java:41) ~[classes/:na]
at com.mrlu.sharding.service.impl.SideMonitorDataServiceImpl$$FastClassBySpringCGLIB$$2b3c2a06.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.12.jar:5.3.12]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689) ~[spring-aop-5.3.12.jar:5.3.12]
at com.mrlu.sharding.service.impl.SideMonitorDataServiceImpl$$EnhancerBySpringCGLIB$$c1cf4864.getMonitorDataList(<generated>) ~[classes/:na]
at com.mrlu.sharding.controller.SideMonitorDataController.getMonitorDataList(SideMonitorDataController.java:46) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_402]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_402]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_402]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_402]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.12.jar:5.3.12]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.12.jar:5.3.12]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.12.jar:5.3.12]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.12.jar:5.3.12]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.12.jar:5.3.12]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.12.jar:5.3.12]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.12.jar:5.3.12]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.12.jar:5.3.12]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.54.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.12.jar:5.3.12]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.54.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.54.jar:9.0.54]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.12.jar:5.3.12]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.54.jar:9.0.54]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.54.jar:9.0.54]
at java.lang.Thread.run(Thread.java:750) [na:1.8.0_402]
### Which version of ShardingSphere did you use?
shardingsphere-jdbc-core-spring-boot-starter 5.2.0 version
### Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy?
use ShardingSphere-JDBC
### Expected behavior
### Actual behavior
### Reason analyze (If you can)
### Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc.
1、schema SQL
### Example codes for reproduce this issue (such as a github link).
--
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.
To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] ORDER BY Column DESC Throw NullPointerException [shardingsphere]
Posted by "terrymanu (via GitHub)" <gi...@apache.org>.
terrymanu commented on issue #32598:
URL: https://github.com/apache/shardingsphere/issues/32598#issuecomment-2298225955
**For English only**, other languages will not accept.
--
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.
To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] ORDER BY Column DESC Throw NullPointerException [shardingsphere]
Posted by "terrymanu (via GitHub)" <gi...@apache.org>.
terrymanu closed issue #32598: ORDER BY Column DESC Throw NullPointerException
URL: https://github.com/apache/shardingsphere/issues/32598
--
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.
To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] ORDER BY Column DESC Throw NullPointerException [shardingsphere]
Posted by "lcj-jarvis (via GitHub)" <gi...@apache.org>.
lcj-jarvis commented on issue #32598:
URL: https://github.com/apache/shardingsphere/issues/32598#issuecomment-2296871296
1、schema SQL
CREATE TABLE t_side_monitor_data_1
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
type VARCHAR(100),
name VARCHAR(100),
code VARCHAR(100),
value DOUBLE,
collect_time datetime,
backup_id BIGINT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2、application.yml (tip: hidden my database info, such as url)
server:
port: 8080
# 数据库配置
spring:
shardingsphere:
# 开启sql日志
props:
sql-show: true
datasource:
names: ds0
ds0:
type: com.alibaba.druid.pool.DruidDataSource
url: xxxxxxxxxx
username: xxxxxxxxxx
password: xxxxxxxxxx
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
rules:
sharding:
tables:
t_side_monitor_data:
actual-data-nodes: ds0.t_side_monitor_data_${1..24}
# 等同于上面
# actual-data-nodes: ds0.t_side_monitor_data_${01..24}
table-strategy:
complex:
sharding-columns: collect_time, type
sharding-algorithm-name: customShardingAlgorithm
key-generator:
column: id
type: SNOWFLAKE
sharding-algorithms:
customShardingAlgorithm:
type: COMPLEX
props:
strategyClass: com.mrlu.sharding.route.CustomShardingAlgorithm
allow-range-query-with-inline-sharding: true
# MyBatis-Plus 配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
3、custom rule
package com.mrlu.sharding.route;
import com.google.common.collect.Range;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingAlgorithm;
import org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingValue;
import java.util.*;
/**
* 自定义分片策略
* 先根据类型hash范围,再根据日期确定月份,最终确定所属的表
*/
@Slf4j
public class CustomShardingAlgorithm implements ComplexKeysShardingAlgorithm<String> {
private static final String COLLECT_TIME = "collect_time";
private static final String TYPE = "type";
@Override
public Collection<String> doSharding(Collection<String> availableTargetNames,
ComplexKeysShardingValue<String> shardingValue) {
Collection<String> tables = new HashSet<>();
// 根据类型的hashCode取模
int typeHashMod = getTypeHashMod(shardingValue);
// 计算月份
List<Integer> months = getMonths(shardingValue);
for (Integer month : months) {
// 保留两位数
tables.add("t_side_monitor_data_" + String.format("%02d", typeHashMod * 12 + month));
}
log.info("tables={}", tables);
return tables;
}
private int getTypeHashMod(ComplexKeysShardingValue shardingValue) {
// 精确查询的字段
Map<String, Collection<String>> columnNameAndShardingValuesMap = shardingValue.getColumnNameAndShardingValuesMap();
// 获取分片列的值
int typeHashMod = Math.abs(columnNameAndShardingValuesMap.get(TYPE).iterator().next().hashCode() % 2);
return typeHashMod;
}
private List<Integer> getMonths(ComplexKeysShardingValue shardingValue) {
// 精确查询的字段
Map<String, Collection<Date>> columnNameAndShardingValuesMap = shardingValue.getColumnNameAndShardingValuesMap();
if (columnNameAndShardingValuesMap.containsKey(COLLECT_TIME)) {
// Check type and convert to Date
Date collectTime = columnNameAndShardingValuesMap.get(COLLECT_TIME).iterator().next();
// 使用 Calendar 获取月份
Calendar calendar = Calendar.getInstance();
calendar.setTime(collectTime);
// Calendar 的月份从 0 开始,所以要 +1
int month = calendar.get(Calendar.MONTH) + 1;
return Collections.singletonList(month);
}
// 范围查询的月份
return computeMonths(shardingValue);
}
private List<Integer> computeMonths(ComplexKeysShardingValue shardingValue) {
// 范围查询的字段
Map<String, Range> columnNameAndRangeValuesMap = shardingValue.getColumnNameAndRangeValuesMap();
Range<Date> valueRange = columnNameAndRangeValuesMap.get(COLLECT_TIME);
// 范围查询时候要查询哪些表
Collection<Integer> result = new LinkedHashSet<>();
Calendar calendar = Calendar.getInstance();
// 获取起始日期的年份和月份
calendar.setTime(valueRange.lowerEndpoint());
int startYear = calendar.get(Calendar.YEAR);
int startMonth = calendar.get(Calendar.MONTH) + 1;
// 获取结束日期的年份和月份
calendar.setTime(valueRange.upperEndpoint());
int endYear = calendar.get(Calendar.YEAR);
int endMonth = calendar.get(Calendar.MONTH) + 1;
// 处理跨年情况
for (int year = startYear; year <= endYear; year++) {
int start = (year == startYear) ? startMonth : 1;
int end = (year == endYear) ? endMonth : 12;
for (int month = start; month <= end; month++) {
result.add(month);
}
}
return new ArrayList<>(result);
}
@Override
public String getType() {
return "COMPLEX";
}
@Override
public Properties getProps() {
return null;
}
@Override
public void init(Properties properties) {
}
}
--
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.
To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] ORDER BY Column DESC Throw NullPointerException [shardingsphere]
Posted by "lcj-jarvis (via GitHub)" <gi...@apache.org>.
lcj-jarvis closed issue #32598: ORDER BY Column DESC Throw NullPointerException
URL: https://github.com/apache/shardingsphere/issues/32598
--
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.
To unsubscribe, e-mail: notifications-unsubscribe@shardingsphere.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org