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. 

1

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?

0
Hi,

What's your database (version) and IDEA version?
0

请先登录再写评论。