mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-1708 add parseQuery function
This commit is contained in:
@@ -240,6 +240,12 @@ extend type Query {
|
||||
connectionId: ID!,
|
||||
script: String!
|
||||
): SQLScriptInfo!
|
||||
|
||||
sqlParseQuery(
|
||||
connectionId: ID!,
|
||||
script: String!
|
||||
position: Int!
|
||||
): SQLScriptQuery!
|
||||
}
|
||||
|
||||
extend type Mutation {
|
||||
|
||||
@@ -130,4 +130,7 @@ public interface DBWServiceSQL extends DBWService {
|
||||
|
||||
@WebAction
|
||||
WebSQLScriptInfo parseSqlScript(@NotNull WebConnectionInfo connectionInfo, @NotNull String sqlScript) throws DBWebException;
|
||||
|
||||
@WebAction
|
||||
WebSQLQueryInfo parseSqlQuery(@NotNull WebConnectionInfo connectionInfo, @NotNull String sqlScript, int currentPosition) throws DBWebException;
|
||||
}
|
||||
|
||||
+5
@@ -91,6 +91,11 @@ public class WebServiceBindingSQL extends WebServiceBindingBase<DBWServiceSQL> i
|
||||
env.getArgument("nodePathList"))
|
||||
).dataFetcher("sqlParseScript", env ->
|
||||
getService(env).parseSqlScript(getWebConnection(env), env.getArgument("script"))
|
||||
).dataFetcher("sqlParseQuery", env ->
|
||||
getService(env).parseSqlQuery(
|
||||
getWebConnection(env),
|
||||
env.getArgument("script"),
|
||||
env.getArgument("position"))
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
+20
-4
@@ -38,16 +38,14 @@ import org.jkiss.dbeaver.model.exec.DBExecUtils;
|
||||
import org.jkiss.dbeaver.model.impl.sql.BasicSQLDialect;
|
||||
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.SQLRuleManager;
|
||||
import org.jkiss.dbeaver.model.sql.parser.SQLScriptParser;
|
||||
import org.jkiss.dbeaver.model.sql.registry.SQLGeneratorConfigurationRegistry;
|
||||
import org.jkiss.dbeaver.model.sql.registry.SQLGeneratorDescriptor;
|
||||
@@ -440,4 +438,22 @@ public class WebServiceSQL implements DBWServiceSQL {
|
||||
.collect(Collectors.toList());
|
||||
return new WebSQLScriptInfo(queriesInfo);
|
||||
}
|
||||
@Override
|
||||
public WebSQLQueryInfo parseSqlQuery(@NotNull WebConnectionInfo connectionInfo, @NotNull String sqlScript, int cursorPosition) throws DBWebException {
|
||||
SQLDialect dialect = getSqlDialectFromConnection(connectionInfo.getDataSourceContainer());
|
||||
SQLSyntaxManager syntaxManager = new SQLSyntaxManager();
|
||||
syntaxManager.init(dialect, connectionInfo.getDataSourceContainer().getPreferenceStore());
|
||||
SQLRuleManager ruleManager = new SQLRuleManager(syntaxManager);
|
||||
ruleManager.loadRules();
|
||||
|
||||
Document sqlDocument = new Document(sqlScript);
|
||||
|
||||
SQLParserContext parserContext = new SQLParserContext(null, syntaxManager, ruleManager, sqlDocument);
|
||||
|
||||
SQLScriptElement query = SQLScriptParser.extractQueryAtPos(parserContext, cursorPosition);
|
||||
if (query == null) {
|
||||
return new WebSQLQueryInfo(0, 0);
|
||||
}
|
||||
return new WebSQLQueryInfo(query.getOffset(), query.getOffset() + query.getText().length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
fragment SQLQueryInfo on SQLScriptQuery {
|
||||
start
|
||||
end
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
query parseSQLQuery(
|
||||
$connectionId: ID!
|
||||
$script: String!
|
||||
$position: Int!
|
||||
) {
|
||||
scriptInfo: sqlParseQuery(
|
||||
connectionId: $connectionId
|
||||
script: $script
|
||||
position: $position
|
||||
) {
|
||||
...SQLQueryInfo
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user