IDEA Data Source schema retrieving query blocked by database
已回答
When trying to connect to a production environment database using IDEA, the following error occurred.
2024-06-02 15:24:37,418 [ 85791] WARN - #c.i.d.u.ErrorHandler - [censor_dql]DQL expression must include WHERE clause;
[censor_dql]DQL expression must include WHERE clause;
The SQL statement:
select schema_name, default_collation_name
from information_schema.schemata
at com.intellij.database.remote.jdba.jdbc.BaseExceptionRecognizer.recognizeException(BaseExceptionRecognizer.java:48)
at com.intellij.database.remote.jdba.jdbc.JdbcIntermediateSession.recognizeException(JdbcIntermediateSession.java:240)
at com.intellij.database.remote.jdba.jdbc.JdbcIntermediateSeance.execute(JdbcIntermediateSeance.java:116)
at com.intellij.database.remote.jdba.impl.RemoteSeanceImpl.execute(RemoteSeanceImpl.java:37)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:304)
at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:280)
at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:165)
at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:215)
at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:160)
at jdk.proxy10/jdk.proxy10.$Proxy268.execute(Unknown Source)
at com.intellij.database.dialects.base.introspector.AuditFacade$Seance$execute$1$1.invoke(AuditFacade.kt:217)
at com.intellij.database.dialects.base.introspector.AuditFacade$Seance$execute$1$1.invoke(AuditFacade.kt:216)
at com.intellij.database.dataSource.connection.statements.SmartStatementMark$RunnableMark.run(SmartStatementMark.kt:21)
at com.intellij.database.dialects.base.introspector.AuditFacade$Seance$execute$1.invoke(AuditFacade.kt:216)
at com.intellij.database.dialects.base.introspector.AuditFacade$Seance$execute$1.invoke(AuditFacade.kt:214)
at com.intellij.database.dialects.base.introspector.AuditFacade$Companion.runReporting(AuditFacade.kt:30)
at com.intellij.database.dialects.base.introspector.AuditFacade$Companion.access$runReporting(AuditFacade.kt:27)
at com.intellij.database.dialects.base.introspector.AuditFacade$Seance.execute(AuditFacade.kt:214)
at com.intellij.database.layoutedQueries.impl.AdaptIntermediateSeance.execute(AdaptIntermediateSeance.java:35)
at com.intellij.database.layoutedQueries.BaseQueryRunner.start(BaseQueryRunner.java:78)
at com.intellij.database.layoutedQueries.BaseQueryRunner.run(BaseQueryRunner.java:68)
at com.intellij.database.layoutedQueries.DBQueryRunner.runOnce(DBQueryRunner.java:56)
at com.intellij.database.dialects.base.introspector.IntrospectionQueryContext.runQuery(IntrospectionQueryContext.kt:270)
at com.intellij.database.dialects.base.introspector.IntrospectionQueryContext.runQuery$default(IntrospectionQueryContext.kt:254)
at com.intellij.database.dialects.base.introspector.BaseIntroQueries.retrieve(BaseIntroQueries.kt:25)
at com.intellij.database.dialects.base.introspector.BaseIntroQueries.access$retrieve(BaseIntroQueries.kt:13)
at com.intellij.database.dialects.mysqlbase.introspector.MysqlBaseIntroQueries.retrieveSchemas(MysqlBaseIntroQueries.kt:665)
at com.intellij.database.dialects.mysqlbase.introspector.MysqlBaseIntrospector.introspectNamespacesInTran(MysqlBaseIntrospector.kt:174)
at com.intellij.database.dialects.base.introspector.BaseNativeIntrospector$introspectNamespaces$1.invoke(BaseNativeIntrospector.kt:287)
at com.intellij.database.dialects.base.introspector.BaseNativeIntrospector$introspectNamespaces$1.invoke(BaseNativeIntrospector.kt:287)
at com.intellij.database.dialects.base.introspector.BaseIntrospector.inTransaction$lambda$9(BaseIntrospector.kt:403)
at com.intellij.database.layoutedQueries.BaseFacade.inSession(BaseFacade.java:83)
at com.intellij.database.dialects.base.introspector.BaseIntrospector.inTransaction(BaseIntrospector.kt:403)
at com.intellij.database.dialects.base.introspector.BaseIntrospector.inTransactionUnit(BaseIntrospector.kt:399)
at com.intellij.database.dialects.base.introspector.BaseNativeIntrospector.introspectNamespaces(BaseNativeIntrospector.kt:287)
at com.intellij.database.introspection.DatabaseIntrospectionSession.performTasksInTheConnectedSession(DatabaseIntrospectionSession.java:267)
at com.intellij.database.introspection.DatabaseIntrospectionSession.lambda$introspectTasksInDatabaseSession$1(DatabaseIntrospectionSession.java:25
7)
at com.intellij.database.introspection.DatabaseIntrospectionSession.lambda$connectAndDoIntrospectOperation$6(DatabaseIntrospectionSession.java:375
)
at com.intellij.database.introspection.DatabaseIntrospectionSession.handlingException(DatabaseIntrospectionSession.java:440)
at com.intellij.database.introspection.DatabaseIntrospectionSession.lambda$connectAndDoIntrospectOperation$7(DatabaseIntrospectionSession.java:368
)
at com.intellij.database.console.session.SessionsUtil$consumer$1.invoke(SessionsUtil.kt:40)
at com.intellij.database.console.session.SessionsUtil$consumer$1.invoke(SessionsUtil.kt:40)
at com.intellij.database.dataSource.DataSourceSyncManager.lambda$executeDatabaseOperation$0(DataSourceSyncManager.java:73)
at com.intellij.database.dataSource.InterruptibleDatabaseConnectionKt.withCancelling(InterruptibleDatabaseConnection.kt:19)
at com.intellij.database.dataSource.DataSourceSyncManager.lambda$executeDatabaseOperation$1(DataSourceSyncManager.java:72)
at com.intellij.database.console.session.DatabaseSessionManager$Facade.compute(DatabaseSessionManager.kt:345)
at com.intellij.database.console.session.DatabaseSessionManager$Facade.runSync(DatabaseSessionManager.kt:280)
at com.intellij.database.dataSource.DataSourceSyncManager.executeDatabaseOperation(DataSourceSyncManager.java:68)
at com.intellij.database.dataSource.DataSourceSyncManager$DbSyncProcessor$SyncIntrospectionSession.performDbSpecificOperation(DataSourceSyncManage
r.java:353)
at com.intellij.database.introspection.DatabaseIntrospectionSession.connectAndDoIntrospectOperation(DatabaseIntrospectionSession.java:367)
at com.intellij.database.introspection.DatabaseIntrospectionSession.introspectTasksInDatabaseSession(DatabaseIntrospectionSession.java:256)
at com.intellij.database.introspection.DatabaseIntrospectionSession.introspectTasksInDefaultSession(DatabaseIntrospectionSession.java:251)
at com.intellij.database.introspection.DatabaseIntrospectionSession.introspectIt(DatabaseIntrospectionSession.java:182)
at com.intellij.database.introspection.DatabaseIntrospectionSession.introspectUnderDataSourceBatch(DatabaseIntrospectionSession.java:145)
at com.intellij.database.dataSource.LocalDataSource.performBatch(LocalDataSource.java:978)
at com.intellij.database.introspection.DatabaseIntrospectionSession.run(DatabaseIntrospectionSession.java:131)
at com.intellij.database.dataSource.DataSourceSyncManager$DbSyncProcessor.runSession(DataSourceSyncManager.java:326)
at com.intellij.database.dataSource.DataSourceSyncManager$DbSyncProcessor.performSync(DataSourceSyncManager.java:298)
at com.intellij.database.util.AsyncTask$Frame$compute$$inlined$supply$1$1.run(AsyncTask.kt:743)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:660)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:735)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:691)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:659)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:79)
at com.intellij.database.util.AsyncTask$Frame$compute$$inlined$supply$1.get(AsyncTask.kt:768)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
at com.intellij.openapi.application.impl.RwLockHolder$executeOnPooledThread$1.run(RwLockHolder.kt:154)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at com.intellij.util.concurrency.ContextCallable.call(ContextCallable.java:32)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at com.intellij.util.concurrency.ContextRunnable.run(ContextRunnable.java:27)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.sql.SQLException: [censor_dql]DQL expression must include WHERE clause;
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)
at com.intellij.database.remote.jdba.jdbc.JdbcIntermediateSeance.execute(JdbcIntermediateSeance.java:97)
at com.intellij.database.remote.jdba.impl.RemoteSeanceImpl.execute(RemoteSeanceImpl.java:37)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
... 1 more
As the error shows, the database does not allow any query without a where clause. Is it possible to alter the schema retrieving query, or use interceptors to add where clauses to queries?
Currently I'm working on an IDEA plugin. If a plugin has the ability to do so, please let me know!
Many thanks.
请先登录再写评论。
I found that setting the “Introspect using JDBC metadata” option to true solves this problem. Is there a way to set this option with a plugin?
What's your database (version) and IDEA version?