diff --git a/server/bundles/io.cloudbeaver.server/schema/service.sql.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.sql.graphqls index 667d9e42b6..2260e8c6dd 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.sql.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.sql.graphqls @@ -174,6 +174,17 @@ type SQLQueryGenerator { multiObject: Boolean! } +#################################################### +# SQL Query info +#################################################### +type SQLScriptInfo { + queries: [ SQLScriptQuery ] +} + +type SQLScriptQuery { + start: Int! + end: Int! +} #################################################### # Query and Mutation #################################################### @@ -224,6 +235,11 @@ extend type Query { options: Object!, nodePathList: [String!]! ): String! + + sqlParseScript( + connectionId: ID!, + script: String + ): SQLScriptInfo } extend type Mutation { diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/DBWServiceSQL.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/DBWServiceSQL.java index afaf6c71d6..20e96483a0 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/DBWServiceSQL.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/DBWServiceSQL.java @@ -127,4 +127,6 @@ public interface DBWServiceSQL extends DBWService { @WebAction WebSQLExecutionPlan asyncSqlExplainExecutionPlanResult(@NotNull WebSession webSession, @NotNull String taskId) throws DBWebException; + @WebAction + WebSQLScriptInfo parseSqlScript(@NotNull WebSQLProcessor processor, @NotNull String sqlScript) throws DBWebException; } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryInfo.java new file mode 100644 index 0000000000..d8525c0efe --- /dev/null +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLQueryInfo.java @@ -0,0 +1,23 @@ +package io.cloudbeaver.service.sql; + +import org.jkiss.dbeaver.model.meta.Property; + +public class WebSQLQueryInfo { + private final int start; + private final int end; + + public WebSQLQueryInfo(int start, int end) { + this.start = start; + this.end = end; + } + + @Property + public int getEnd() { + return end; + } + + @Property + public int getStart() { + return start; + } +} diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLScriptInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLScriptInfo.java new file mode 100644 index 0000000000..14b507c8ba --- /dev/null +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebSQLScriptInfo.java @@ -0,0 +1,18 @@ +package io.cloudbeaver.service.sql; + +import org.jkiss.dbeaver.model.meta.Property; + +import java.util.List; + +public class WebSQLScriptInfo { + private final List queries; + + public WebSQLScriptInfo(List queries) { + this.queries = queries; + } + + @Property + public List getQueries() { + return queries; + } +} diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebServiceBindingSQL.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebServiceBindingSQL.java index cfe3f4724e..45da056289 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebServiceBindingSQL.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/WebServiceBindingSQL.java @@ -89,6 +89,8 @@ public class WebServiceBindingSQL extends WebServiceBindingBase i env.getArgument("generatorId"), env.getArgument("options"), env.getArgument("nodePathList")) + ).dataFetcher("sqlParseScript", env -> + getService(env).parseSqlScript(getSQLProcessor(env), env.getArgument("script")) ) ; diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java index 27d75214e9..d397e7fd98 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/sql/impl/WebServiceSQL.java @@ -55,6 +55,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * Web service implementation @@ -397,4 +398,17 @@ public class WebServiceSQL implements DBWServiceSQL { } return null; } + + @Override + public WebSQLScriptInfo parseSqlScript(@NotNull WebSQLProcessor processor, @NotNull String sqlScript) throws DBWebException { + DBPDataSource dataSource = processor.getConnection().getDataSourceContainer().getDataSource(); + if (dataSource == null) { + throw new DBWebException("Data source was not found"); + } + List queries = SQLScriptParser.parseScript(dataSource, sqlScript); + List queriesInfo = queries.stream() + .map(query -> new WebSQLQueryInfo(query.getOffset(), query.getLength() + query.getOffset())) + .collect(Collectors.toList()); + return new WebSQLScriptInfo(queriesInfo); + } }