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 594b967589..ac9c326f93 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 @@ -49,6 +49,9 @@ public interface DBWServiceSQL extends DBWService { Integer maxResults, Boolean simpleMode) throws DBWebException; + @WebAction + String formatQuery(@NotNull WebSQLContextInfo sqlContext, @NotNull String query) throws DBWebException; + @WebAction DBCLogicalOperator[] getSupportedOperations( @NotNull WebSQLContextInfo contextInfo, 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 ca74cb8adf..af1b31c0d7 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 @@ -66,6 +66,12 @@ public class WebServiceBindingSQL extends WebServiceBindingBase i env.getArgument("simpleMode") ) ) + .dataFetcher("sqlFormatQuery", env -> + getService(env).formatQuery( + getSQLContext(env), + env.getArgument("query") + ) + ) .dataFetcher("sqlSupportedOperations", env -> getService(env).getSupportedOperations( getSQLContext(env), @@ -97,7 +103,7 @@ public class WebServiceBindingSQL extends WebServiceBindingBase i getSQLContext(env), env.getArgument("defaultCatalog"), env.getArgument("defaultSchema")); - return true; + return true; }) .dataFetcher("sqlResultClose", env -> 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 e204b5803f..254446a4b3 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 @@ -35,13 +35,11 @@ import org.jkiss.dbeaver.model.exec.DBCLogicalOperator; import org.jkiss.dbeaver.model.exec.DBExecUtils; import org.jkiss.dbeaver.model.navigator.DBNNode; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; -import org.jkiss.dbeaver.model.sql.SQLDialect; -import org.jkiss.dbeaver.model.sql.SQLQuery; -import org.jkiss.dbeaver.model.sql.SQLScriptElement; -import org.jkiss.dbeaver.model.sql.SQLUtils; +import org.jkiss.dbeaver.model.sql.*; import org.jkiss.dbeaver.model.sql.completion.SQLCompletionAnalyzer; import org.jkiss.dbeaver.model.sql.completion.SQLCompletionProposalBase; import org.jkiss.dbeaver.model.sql.completion.SQLCompletionRequest; +import org.jkiss.dbeaver.model.sql.format.SQLFormatUtils; import org.jkiss.dbeaver.model.sql.generator.SQLGenerator; import org.jkiss.dbeaver.model.sql.parser.SQLParserContext; import org.jkiss.dbeaver.model.sql.parser.SQLScriptParser; @@ -151,6 +149,15 @@ public class WebServiceSQL implements DBWServiceSQL { } } + @NotNull + public String formatQuery(@NotNull WebSQLContextInfo sqlContext, @NotNull String query) throws DBWebException { + DBPDataSource dataSource = sqlContext.getProcessor().getConnection().getDataSourceContainer().getDataSource(); + if (dataSource == null) { + throw new DBWebException("DataSource is null: can't format SQL query"); + } + return SQLFormatUtils.formatSQL(dataSource, query); + } + @Override public DBCLogicalOperator[] getSupportedOperations(@NotNull WebSQLContextInfo contextInfo, @NotNull String resultsId, int attributeIndex) throws DBWebException { WebSQLResultsInfo results = contextInfo.getResults(resultsId);