Tencent/APIJSON

两张表进行内链查询时,第二张表查询生成的库为默认sys

Opened this issue · 7 comments

Description

查询条件:

{
    "[]": {
        "join": "&/Tbl_audit_data/pk_uid@",
        "Tbl_order_query": {
            //通行车牌
            "pass_vehicle_plate": "宁E55369",
            //通行车牌颜色
            "pass_vehicle_color": "黄色",
            //实际车牌
            "actual_veicle_plate": "宁E55369",
            //实际车牌颜色
            "actual_vehicle_color": "黄色",
            //逃费类型
            "ensure_fee_type{}": [
                ""
            ],
            //发起时间
            "start_time%": "2022-09-25 21:23:31,2022-09-25 21:23:31",
            //工单编号
            "@column": "pk_uid;order_id,pass_vehicle_plate;pass_vehicle_color;pass_vehicle_info;actual_veicle_plate;actual_vehicle_color;actual_vehicle_info;ensure_fee_type;order_desc;date_format(start_time,'%Y-%m-%d %H:%i:%s'):start_time"
        },
        "Tbl_audit_data": {
            "pk_uid@": "/Tbl_order_query/pk_uid",
            //数字编号
            "pk_data_id": "202209252121140001",
            //更新时间
            "last_update_time%": "2023-02-12 11:08:18,2023-02-12 11:08:18",
            "@column": "last_update_time"
        },
        // 页码
        "page": 0,
        //每页数量
        "count": 5,
        "query": 2
    },
    //总数量
    "total@": "/[]/total"
}

响应:

{
    "msg": "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"sys\".\"Tbl_audit_data\" AS \"Tbl_audit_data\" ON `Tbl_audit_data`.`pk_uid` = `Tbl_o' at line 2",
    "trace:stack": [
        {
            "fileName": "SQLError.java",
            "nativeMethod": false,
            "methodName": "createSQLException",
            "className": "com.mysql.cj.jdbc.exceptions.SQLError",
            "lineNumber": 120
        },
        {
            "fileName": "SQLError.java",
            "nativeMethod": false,
            "methodName": "createSQLException",
            "className": "com.mysql.cj.jdbc.exceptions.SQLError",
            "lineNumber": 97
        },
        {
            "fileName": "SQLExceptionsMapping.java",
            "nativeMethod": false,
            "methodName": "translateException",
            "className": "com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping",
            "lineNumber": 122
        },
        {
            "fileName": "ClientPreparedStatement.java",
            "nativeMethod": false,
            "methodName": "executeInternal",
            "className": "com.mysql.cj.jdbc.ClientPreparedStatement",
            "lineNumber": 953
        },
        {
            "fileName": "ClientPreparedStatement.java",
            "nativeMethod": false,
            "methodName": "executeQuery",
            "className": "com.mysql.cj.jdbc.ClientPreparedStatement",
            "lineNumber": 1003
        },
        {
            "fileName": "AbstractSQLExecutor.java",
            "nativeMethod": false,
            "methodName": "executeQuery",
            "className": "apijson.orm.AbstractSQLExecutor",
            "lineNumber": 1363
        },
        {
            "fileName": "SQLExecutor.java",
            "nativeMethod": false,
            "methodName": "executeQuery",
            "className": "apijson.orm.SQLExecutor",
            "lineNumber": 70
        },
        {
            "fileName": "AbstractSQLExecutor.java",
            "nativeMethod": false,
            "methodName": "execute",
            "className": "apijson.orm.AbstractSQLExecutor",
            "lineNumber": 294
        },
        {
            "fileName": "AbstractParser.java",
            "nativeMethod": false,
            "methodName": "executeSQL",
            "className": "apijson.orm.AbstractParser",
            "lineNumber": 2032
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "onSQLExecute",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 1095
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "executeSQL",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 933
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "executeSQL",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 38
        },
        {
            "fileName": "AbstractParser.java",
            "nativeMethod": false,
            "methodName": "onObjectParse",
            "className": "apijson.orm.AbstractParser",
            "lineNumber": 1165
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "onChildParse",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 578
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "parse",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 282
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "parse",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 38
        },
        {
            "fileName": "AbstractParser.java",
            "nativeMethod": false,
            "methodName": "onObjectParse",
            "className": "apijson.orm.AbstractParser",
            "lineNumber": 1125
        },
        {
            "fileName": "AbstractParser.java",
            "nativeMethod": false,
            "methodName": "onArrayParse",
            "className": "apijson.orm.AbstractParser",
            "lineNumber": 1354
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "onChildParse",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 558
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "parse",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 282
        },
        {
            "fileName": "AbstractObjectParser.java",
            "nativeMethod": false,
            "methodName": "parse",
            "className": "apijson.orm.AbstractObjectParser",
            "lineNumber": 38
        },
        {
            "fileName": "AbstractParser.java",
            "nativeMethod": false,
            "methodName": "onObjectParse",
            "className": "apijson.orm.AbstractParser",
            "lineNumber": 1125
        },
        {
            "fileName": "AbstractParser.java",
            "nativeMethod": false,
            "methodName": "parseResponse",
            "className": "apijson.orm.AbstractParser",
            "lineNumber": 527
        },
        {
            "fileName": "APIJSONParser.java",
            "nativeMethod": false,
            "methodName": "parseResponse",
            "className": "apijson.framework.APIJSONParser",
            "lineNumber": 117
        },
        {
            "fileName": "EagleParser.java",
            "nativeMethod": false,
            "methodName": "parseResponse",
            "className": "com.eagle.tpd.order.crud.framework.config.EagleParser",
            "lineNumber": 25
        },
        {
            "fileName": "AbstractParser.java",
            "nativeMethod": false,
            "methodName": "parseResponse",
            "className": "apijson.orm.AbstractParser",
            "lineNumber": 442
        },
        {
            "fileName": "AbstractParser.java",
            "nativeMethod": false,
            "methodName": "parse",
            "className": "apijson.orm.AbstractParser",
            "lineNumber": 414
        },
        {
            "fileName": "APIJSONController.java",
            "nativeMethod": false,
            "methodName": "parse",
            "className": "apijson.framework.APIJSONController",
            "lineNumber": 93
        },
        {
            "fileName": "APIJSONController.java",
            "nativeMethod": false,
            "methodName": "crud",
            "className": "apijson.framework.APIJSONController",
            "lineNumber": 121
        },
        {
            "fileName": "CrudController.java",
            "nativeMethod": false,
            "methodName": "crud",
            "className": "com.eagle.tpd.order.crud.controller.CrudController",
            "lineNumber": 39
        },
        {
            "fileName": "NativeMethodAccessorImpl.java",
            "nativeMethod": true,
            "methodName": "invoke0",
            "className": "sun.reflect.NativeMethodAccessorImpl",
            "lineNumber": -2
        },
        {
            "fileName": "NativeMethodAccessorImpl.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "sun.reflect.NativeMethodAccessorImpl",
            "lineNumber": 62
        },
        {
            "fileName": "DelegatingMethodAccessorImpl.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "sun.reflect.DelegatingMethodAccessorImpl",
            "lineNumber": 43
        },
        {
            "fileName": "Method.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "java.lang.reflect.Method",
            "lineNumber": 498
        },
        {
            "fileName": "InvocableHandlerMethod.java",
            "nativeMethod": false,
            "methodName": "doInvoke",
            "className": "org.springframework.web.method.support.InvocableHandlerMethod",
            "lineNumber": 190
        },
        {
            "fileName": "InvocableHandlerMethod.java",
            "nativeMethod": false,
            "methodName": "invokeForRequest",
            "className": "org.springframework.web.method.support.InvocableHandlerMethod",
            "lineNumber": 138
        },
        {
            "fileName": "ServletInvocableHandlerMethod.java",
            "nativeMethod": false,
            "methodName": "invokeAndHandle",
            "className": "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod",
            "lineNumber": 104
        },
        {
            "fileName": "RequestMappingHandlerAdapter.java",
            "nativeMethod": false,
            "methodName": "invokeHandlerMethod",
            "className": "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter",
            "lineNumber": 892
        },
        {
            "fileName": "RequestMappingHandlerAdapter.java",
            "nativeMethod": false,
            "methodName": "handleInternal",
            "className": "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter",
            "lineNumber": 797
        },
        {
            "fileName": "AbstractHandlerMethodAdapter.java",
            "nativeMethod": false,
            "methodName": "handle",
            "className": "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter",
            "lineNumber": 87
        },
        {
            "fileName": "DispatcherServlet.java",
            "nativeMethod": false,
            "methodName": "doDispatch",
            "className": "org.springframework.web.servlet.DispatcherServlet",
            "lineNumber": 1039
        },
        {
            "fileName": "DispatcherServlet.java",
            "nativeMethod": false,
            "methodName": "doService",
            "className": "org.springframework.web.servlet.DispatcherServlet",
            "lineNumber": 942
        },
        {
            "fileName": "FrameworkServlet.java",
            "nativeMethod": false,
            "methodName": "processRequest",
            "className": "org.springframework.web.servlet.FrameworkServlet",
            "lineNumber": 1005
        },
        {
            "fileName": "FrameworkServlet.java",
            "nativeMethod": false,
            "methodName": "doPost",
            "className": "org.springframework.web.servlet.FrameworkServlet",
            "lineNumber": 908
        },
        {
            "fileName": "HttpServlet.java",
            "nativeMethod": false,
            "methodName": "service",
            "className": "javax.servlet.http.HttpServlet",
            "lineNumber": 665
        },
        {
            "fileName": "FrameworkServlet.java",
            "nativeMethod": false,
            "methodName": "service",
            "className": "org.springframework.web.servlet.FrameworkServlet",
            "lineNumber": 882
        },
        {
            "fileName": "HttpServlet.java",
            "nativeMethod": false,
            "methodName": "service",
            "className": "javax.servlet.http.HttpServlet",
            "lineNumber": 750
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 231
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "WsFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.tomcat.websocket.server.WsFilter",
            "lineNumber": 53
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "AdviceFilter.java",
            "nativeMethod": false,
            "methodName": "executeChain",
            "className": "org.apache.shiro.web.servlet.AdviceFilter",
            "lineNumber": 108
        },
        {
            "fileName": "AdviceFilter.java",
            "nativeMethod": false,
            "methodName": "doFilterInternal",
            "className": "org.apache.shiro.web.servlet.AdviceFilter",
            "lineNumber": 137
        },
        {
            "fileName": "OncePerRequestFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.shiro.web.servlet.OncePerRequestFilter",
            "lineNumber": 125
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "AbstractShiroFilter.java",
            "nativeMethod": false,
            "methodName": "executeChain",
            "className": "org.apache.shiro.web.servlet.AbstractShiroFilter",
            "lineNumber": 449
        },
        {
            "fileName": "AbstractShiroFilter.java",
            "nativeMethod": false,
            "methodName": "call",
            "className": "org.apache.shiro.web.servlet.AbstractShiroFilter$1",
            "lineNumber": 365
        },
        {
            "fileName": "SubjectCallable.java",
            "nativeMethod": false,
            "methodName": "doCall",
            "className": "org.apache.shiro.subject.support.SubjectCallable",
            "lineNumber": 90
        },
        {
            "fileName": "SubjectCallable.java",
            "nativeMethod": false,
            "methodName": "call",
            "className": "org.apache.shiro.subject.support.SubjectCallable",
            "lineNumber": 83
        },
        {
            "fileName": "DelegatingSubject.java",
            "nativeMethod": false,
            "methodName": "execute",
            "className": "org.apache.shiro.subject.support.DelegatingSubject",
            "lineNumber": 387
        },
        {
            "fileName": "AbstractShiroFilter.java",
            "nativeMethod": false,
            "methodName": "doFilterInternal",
            "className": "org.apache.shiro.web.servlet.AbstractShiroFilter",
            "lineNumber": 362
        },
        {
            "fileName": "OncePerRequestFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.shiro.web.servlet.OncePerRequestFilter",
            "lineNumber": 125
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "SimpleCORSFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "com.eagle.tpd.comm.filter.SimpleCORSFilter",
            "lineNumber": 23
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "ReqLogFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "com.eagle.tpd.order.filter.ReqLogFilter",
            "lineNumber": 68
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "TokenFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "com.eagle.tpd.user.filter.TokenFilter",
            "lineNumber": 99
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "SimpleCORSFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "com.eagle.tpd.comm.filter.SimpleCORSFilter",
            "lineNumber": 23
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "ExceptionFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "com.eagle.tpd.comm.exception.ExceptionFilter",
            "lineNumber": 14
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "RequestContextFilter.java",
            "nativeMethod": false,
            "methodName": "doFilterInternal",
            "className": "org.springframework.web.filter.RequestContextFilter",
            "lineNumber": 99
        },
        {
            "fileName": "OncePerRequestFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.springframework.web.filter.OncePerRequestFilter",
            "lineNumber": 118
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "FormContentFilter.java",
            "nativeMethod": false,
            "methodName": "doFilterInternal",
            "className": "org.springframework.web.filter.FormContentFilter",
            "lineNumber": 92
        },
        {
            "fileName": "OncePerRequestFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.springframework.web.filter.OncePerRequestFilter",
            "lineNumber": 118
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "HiddenHttpMethodFilter.java",
            "nativeMethod": false,
            "methodName": "doFilterInternal",
            "className": "org.springframework.web.filter.HiddenHttpMethodFilter",
            "lineNumber": 93
        },
        {
            "fileName": "OncePerRequestFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.springframework.web.filter.OncePerRequestFilter",
            "lineNumber": 118
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "CharacterEncodingFilter.java",
            "nativeMethod": false,
            "methodName": "doFilterInternal",
            "className": "org.springframework.web.filter.CharacterEncodingFilter",
            "lineNumber": 200
        },
        {
            "fileName": "OncePerRequestFilter.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.springframework.web.filter.OncePerRequestFilter",
            "lineNumber": 118
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "internalDoFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 193
        },
        {
            "fileName": "ApplicationFilterChain.java",
            "nativeMethod": false,
            "methodName": "doFilter",
            "className": "org.apache.catalina.core.ApplicationFilterChain",
            "lineNumber": 166
        },
        {
            "fileName": "StandardWrapperValve.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "org.apache.catalina.core.StandardWrapperValve",
            "lineNumber": 202
        },
        {
            "fileName": "StandardContextValve.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "org.apache.catalina.core.StandardContextValve",
            "lineNumber": 96
        },
        {
            "fileName": "AuthenticatorBase.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "org.apache.catalina.authenticator.AuthenticatorBase",
            "lineNumber": 490
        },
        {
            "fileName": "StandardHostValve.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "org.apache.catalina.core.StandardHostValve",
            "lineNumber": 139
        },
        {
            "fileName": "ErrorReportValve.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "org.apache.catalina.valves.ErrorReportValve",
            "lineNumber": 92
        },
        {
            "fileName": "StandardEngineValve.java",
            "nativeMethod": false,
            "methodName": "invoke",
            "className": "org.apache.catalina.core.StandardEngineValve",
            "lineNumber": 74
        },
        {
            "fileName": "CoyoteAdapter.java",
            "nativeMethod": false,
            "methodName": "service",
            "className": "org.apache.catalina.connector.CoyoteAdapter",
            "lineNumber": 343
        },
        {
            "fileName": "Http11Processor.java",
            "nativeMethod": false,
            "methodName": "service",
            "className": "org.apache.coyote.http11.Http11Processor",
            "lineNumber": 408
        },
        {
            "fileName": "AbstractProcessorLight.java",
            "nativeMethod": false,
            "methodName": "process",
            "className": "org.apache.coyote.AbstractProcessorLight",
            "lineNumber": 66
        },
        {
            "fileName": "AbstractProtocol.java",
            "nativeMethod": false,
            "methodName": "process",
            "className": "org.apache.coyote.AbstractProtocol$ConnectionHandler",
            "lineNumber": 853
        },
        {
            "fileName": "NioEndpoint.java",
            "nativeMethod": false,
            "methodName": "doRun",
            "className": "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor",
            "lineNumber": 1587
        },
        {
            "fileName": "SocketProcessorBase.java",
            "nativeMethod": false,
            "methodName": "run",
            "className": "org.apache.tomcat.util.net.SocketProcessorBase",
            "lineNumber": 49
        },
        {
            "fileName": "ThreadPoolExecutor.java",
            "nativeMethod": false,
            "methodName": "runWorker",
            "className": "java.util.concurrent.ThreadPoolExecutor",
            "lineNumber": 1149
        },
        {
            "fileName": "ThreadPoolExecutor.java",
            "nativeMethod": false,
            "methodName": "run",
            "className": "java.util.concurrent.ThreadPoolExecutor$Worker",
            "lineNumber": 624
        },
        {
            "fileName": "TaskThread.java",
            "nativeMethod": false,
            "methodName": "run",
            "className": "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable",
            "lineNumber": 61
        },
        {
            "fileName": "Thread.java",
            "nativeMethod": false,
            "methodName": "run",
            "className": "java.lang.Thread",
            "lineNumber": 748
        }
    ],
    "code": 500,
    "data": {
        "Tbl_audit_data": {
            "last_update_time%": "2023-02-12 11:08:18,2023-02-12 11:08:18",
            "pk_uid@": "/Tbl_order_query/pk_uid",
            "@column": "last_update_time",
            "pk_data_id": "202209252121140001"
        },
        "query": "2",
        "count": 5,
        "page": 0,
        "join": "&/Tbl_audit_data/pk_uid@",
        "Tbl_order_query": {
            "ensure_fee_type{}": [
                ""
            ],
            "start_time%": "2022-09-25 21:23:31,2022-09-25 21:23:31",
            "pass_vehicle_color": "黄色",
            "actual_vehicle_color": "黄色",
            "pass_vehicle_plate": "宁E55369",
            "actual_veicle_plate": "宁E55369",
            "@column": "pk_uid;order_id,pass_vehicle_plate;pass_vehicle_color;pass_vehicle_info;actual_veicle_plate;actual_vehicle_color;actual_vehicle_info;ensure_fee_type;order_desc;date_format(start_time,'%Y-%m-%d %H:%i:%s'):start_time"
        }
    },
    "trace:throw": "java.sql.SQLSyntaxErrorException",
    "total@": "/[]/total",
    "depth:count|max": "3|5",
    "time:start|duration|end|parse|sql": "1706856326715|251|1706856326966|251|0",
    "debug:info|help": "浏览器打开以下链接查看解答        \n\n【Google】:\n https://www.google.com/search?q=You+have+an+error+in+your+SQL+syntax%3B+check+the+manual+that+corresponds+to+your+MySQL+server+version+for+the+right+syntax+to+use+near+%27%22sys%22.%22Tbl_audit_data%22+AS+%22Tbl_audit_data%22+ON+%60Tbl_audit_data%60.%60pk_uid%60+%3D+%60Tbl_o%27+at+line+2        \n\n【百度】:\n https://www.baidu.com/s?ie=UTF-8&wd=You+have+an+error+in+your+SQL+syntax%3B+check+the+manual+that+corresponds+to+your+MySQL+server+version+for+the+right+syntax+to+use+near+%27%22sys%22.%22Tbl_audit_data%22+AS+%22Tbl_audit_data%22+ON+%60Tbl_audit_data%60.%60pk_uid%60+%3D+%60Tbl_o%27+at+line+2\n\n【APIAuto】: \n http://apijson.cn/api?type=JSON&url=http%3A%2F%2F169.254.20.157%3A8086%2Fget&json=%7B%22%5B%5D%22%3A%7B%22Tbl_order_query%22%3A%7B%22pass_vehicle_plate%22%3A%22%E5%AE%81E55369%22%2C%22pass_vehicle_color%22%3A%22%E9%BB%84%E8%89%B2%22%2C%22actual_veicle_plate%22%3A%22%E5%AE%81E55369%22%2C%22actual_vehicle_color%22%3A%22%E9%BB%84%E8%89%B2%22%2C%22ensure_fee_type%7B%7D%22%3A%5B%22%22%5D%2C%22start_time%25%22%3A%222022-09-25+21%3A23%3A31%2C2022-09-25+21%3A23%3A31%22%2C%22%40column%22%3A%22pk_uid%3Border_id%2Cpass_vehicle_plate%3Bpass_vehicle_color%3Bpass_vehicle_info%3Bactual_veicle_plate%3Bactual_vehicle_color%3Bactual_vehicle_info%3Bensure_fee_type%3Border_desc%3Bdate_format%28start_time%2C%27%25Y-%25m-%25d+%25H%3A%25i%3A%25s%27%29%3Astart_time%22%7D%2C%22Tbl_audit_data%22%3A%7B%22pk_uid%40%22%3A%22%2FTbl_order_query%2Fpk_uid%22%2C%22pk_data_id%22%3A%22202209252121140001%22%2C%22last_update_time%25%22%3A%222023-02-12+11%3A08%3A18%2C2023-02-12+11%3A08%3A18%22%2C%22%40column%22%3A%22last_update_time%22%7D%2C%22query%22%3A%222%22%2C%22count%22%3A5%2C%22page%22%3A0%2C%22join%22%3A%22%26%2FTbl_audit_data%2Fpk_uid%40%22%7D%2C%22total%40%22%3A%22%2F%5B%5D%2Ftotal%22%7D        \n\n【GitHub】: \n https://www.google.com/search?q=site%3Agithub.com%2FTencent%2FAPIJSON+++You+have+an+error+in+your+SQL+syntax%3B+check+the+manual+that+corresponds+to+your+MySQL+server+version+for+the+right+syntax+to+use+near+%27%22sys%22.%22Tbl_audit_data%22+AS+%22Tbl_audit_data%22+ON+%60Tbl_audit_data%60.%60pk_uid%60+%3D+%60Tbl_o%27+at+line+2        \n\n都没找到答案?打开这个链接 \n https://github.com/Tencent/APIJSON/issues/new?assignees=&labels=&template=--bug.md   \n然后提交问题,推荐用以下模板修改,注意要换行保持清晰可读。 \n【标题】:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"sys\".\"Tbl_audit_data\" AS \"Tbl_audit_data\" ON `Tbl_audit_data`.`pk_uid` = `Tbl_o' at line 2 \n【内容】: **环境信息**  \n 系统: Windows 10 10.0 \n 数据库: MYSQL 5.7.22 \n JDK: 1.8.0_291 amd64 \n APIJSON: 6.3.0\n\n**问题描述**\nYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"sys\".\"Tbl_audit_data\" AS \"Tbl_audit_data\" ON `Tbl_audit_data`.`pk_uid` = `Tbl_o' at line 2 \n\n<!-- 尽量完整截屏(至少包含请求和回包结果,还可以加上控制台报错日志),然后复制粘贴到这里 --> \n\nPOST http://169.254.20.157:8086/get \n发送请求 Request JSON:\n ```js \n 请填写,例如 { \"Users\":{} } \n``` \n\n返回结果 Response JSON:\n ```js \n 请填写,例如 { \"Users\": {}, \"code\": 401, \"msg\": \"Users 不允许 UNKNOWN 用户的 GET 请求!\" } \n```",
    "time": 1706856326966,
    "ok": false,
    "sql:generate|cache|execute|maxExecute": "1|0|1|1000000"
}

生成的sql:

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
已生成 1 条 SQL
execute startTime = 1706856326717
database = ; schema = db_wh_portal_xl; sql =

SELECT  count(*)  AS count  FROM `db_wh_portal_xl`.`Tbl_order_query` AS `Tbl_order_query`  
   INNER JOIN "sys"."Tbl_audit_data" AS "Tbl_audit_data" ON `Tbl_audit_data`.`pk_uid` = `Tbl_order_query`.`pk_uid`  
 WHERE  (  (  (`Tbl_order_query`.`pass_vehicle_plate` = '宁E55369') AND (`Tbl_order_query`.`pass_vehicle_color` = '黄色') AND (`Tbl_order_query`.`actual_veicle_plate` = '宁E55369') AND (`Tbl_order_query`.`actual_vehicle_color` = '黄色') AND (`Tbl_order_query`.`ensure_fee_type` IN ('')) AND ((`Tbl_order_query`.`start_time` BETWEEN '2022-09-25 21:23:31' AND '2022-09-25 21:23:31'))  )  AND  (  (  ("Tbl_audit_data"."pk_data_id" = '202209252121140001') AND (("Tbl_audit_data"."last_update_time" BETWEEN '2023-02-12 11:08:18' AND '2023-02-12 11:08:18'))  )  )  ) 

"sys"."Tbl_audit_data" 这里应该为db_wh_portal_xl.Tbl_audit_data才对。

请问是哪里写错了?

发下 DemoSQLConfig 的配置,数据库的 dbUri, dbAccount, dbPassword 等敏感信息可以改为 *** 或截屏打马赛克。
目前看 Tbl_audit_data 对应配置的默认 schema 是 sys,数据库不是 MySQL, TDengine 等以 `反引号` 包裹表名、字段名的类型

重写的 APIJSONObjectParser newSQLConfig方法,以下是关键信息:

   //数据源未成功设置,则使用默认
    if (!isConfig) {

        logger.debug("使用默认数据源!!!!!!!");
        //默认使用master数据源
        DruidDataSource druidDataSource = getDruidDataSource("master");
        if(druidDataSource != null){
            dsUrl = druidDataSource.getUrl();
            dsUserName = druidDataSource.getUsername();
            dsPassword = druidDataSource.getPassword();

            logger.info("url:{},用户名:{},密码:{}",dsUrl,dsUserName,dsPassword);
            isConfig = true;
        }
    }

    if(!isConfig){
        logger.error(">>>>>>>>>>>>>>>>>>>>>>>>>>>> 未匹配到正确数数据源,请检查!!!!!!!!!!!!!!!");
        return eagleSqlConfig;
    }

    int i = dsUrl.lastIndexOf("/");
    int j = dsUrl.lastIndexOf("?");
    String start = dsUrl.substring(0, i);
    String end = dsUrl.substring(j);
    String schema = dsUrl.substring(i + 1, j);

    System.out.println("数据库名称:" + schema);
    System.out.println("数据库地址:" + dsUrl);

    eagleSqlConfig.setDb(start + end, dsUserName, dsPassword, schema,DATABASE_MYSQL);

    System.out.println(eagleSqlConfig.getSchema());
    return eagleSqlConfig;

获取数据源信息后,对APIJSONSQLConfig进行赋值操作。打印是正确的。如果是配置的数据源不对,主表却是正确的。交换主副表后,依旧是主表正常,生成的sql副标的确不是反引号包括的。

另外,这是config配置:

public class EagleSQLConfig extends APIJSONSQLConfig {

private String database;
private String url;
private String username;
private String password;
private String schema;

public EagleSQLConfig() {
    super();
}
public EagleSQLConfig(RequestMethod method, String table) {
    super(method, table);
}


@Override
public String getSchema() {
    return schema;
}

public void setDb(String url, String username, String password, String schema,String database) {
    this.url = url;
    this.username = username;
    this.password = password;
    this.schema = schema;
    this.database = database;
}

@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBUri() {
    return url;
}

@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBAccount() {
    return username;
}

@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
@Override
public String getDBPassword() {
    return password;
}

@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
@Override
public String getSQLDatabase() {
    return database;
}

设置DEFAULT_SCHEMA 默认为 db_wh_portal_xl 后,生成的sql中副表的确对了,但是别名和参数中都没有用反引号包括,查询依旧错误。

DEFAULT_SCHEMA = DATABASE_MYSQL 试试。
另外所有自定义 SQLConfig 都需要注册才能保证各处都使用同一个 class:

    APIJSONApplication.DEFAULT_APIJSON_CREATOR = new APIJSONCreator<Long>() {
      @Override
      public SQLConfig createSQLConfig() {
        return new EagleSQLConfig();
      }
    };

https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/DemoApplication.java#L77C1-L82C7

相关 issue:
#363

debug 了一下源码发现是重写getSQLDatabase方法的问题,在生成sql时调用了该方法,但是该方法返回了null。删除该方法即可

getSQLDatabase 的返回值是最终使用执行 SQL 的数据库类型