提交 a86630a6 编写于 作者: S Serge Rider

NPE fixes

上级 730f93eb
......@@ -19,12 +19,16 @@ package org.jkiss.dbeaver.model.sql.parser;
import org.eclipse.jface.text.IDocument;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPContextProvider;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.model.sql.SQLDialect;
import org.jkiss.dbeaver.model.sql.SQLSyntaxManager;
import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.model.text.parser.TPRuleBasedScanner;
import org.jkiss.dbeaver.runtime.DBWorkbench;
/**
* Parser context
......@@ -32,7 +36,7 @@ import org.jkiss.dbeaver.model.text.parser.TPRuleBasedScanner;
public class SQLParserContext {
@NotNull
private final DBPDataSource dataSource;
private final DBPContextProvider contextProvider;
@NotNull
private final SQLSyntaxManager syntaxManager;
@NotNull
......@@ -41,16 +45,17 @@ public class SQLParserContext {
private final IDocument document;
private TPRuleBasedScanner scanner;
public SQLParserContext(@NotNull DBPDataSource dataSource, @NotNull SQLSyntaxManager syntaxManager, @NotNull SQLRuleManager ruleManager, @NotNull IDocument document) {
this.dataSource = dataSource;
public SQLParserContext(@NotNull DBPContextProvider contextProvider, @NotNull SQLSyntaxManager syntaxManager, @NotNull SQLRuleManager ruleManager, @NotNull IDocument document) {
this.contextProvider = contextProvider;
this.syntaxManager = syntaxManager;
this.ruleManager = ruleManager;
this.document = document;
}
@NotNull
@Nullable
public DBPDataSource getDataSource() {
return dataSource;
DBCExecutionContext executionContext = contextProvider.getExecutionContext();
return executionContext == null ? null : executionContext.getDataSource();
}
@NotNull
......@@ -69,7 +74,7 @@ public class SQLParserContext {
}
public SQLDialect getDialect() {
return SQLUtils.getDialectFromDataSource(dataSource);
return SQLUtils.getDialectFromDataSource(getDataSource());
}
public TPRuleBasedScanner getScanner() {
......@@ -81,7 +86,10 @@ public class SQLParserContext {
}
public DBPPreferenceStore getPreferenceStore() {
return dataSource.getContainer().getPreferenceStore();
DBPDataSource dataSource = getDataSource();
return dataSource == null ?
DBWorkbench.getPlatform().getPreferenceStore() :
dataSource.getContainer().getPreferenceStore();
}
void startScriptEvaluation() {
......
......@@ -410,8 +410,8 @@ public final class SQLUtils {
}
@NotNull
public static SQLDialect getDialectFromDataSource(@NotNull DBPDataSource dataSource) {
return dataSource.getSQLDialect();
public static SQLDialect getDialectFromDataSource(@Nullable DBPDataSource dataSource) {
return dataSource == null ? BasicSQLDialect.INSTANCE : dataSource.getSQLDialect();
}
public static void appendConditionString(
......
......@@ -98,6 +98,7 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
private final SQLSyntaxManager syntaxManager;
@NotNull
private final SQLRuleScanner ruleScanner;
@Nullable
private SQLParserContext parserContext;
private ProjectionSupport projectionSupport;
......@@ -555,7 +556,7 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
ruleManager.loadRules(getDataSource(), SQLEditorBase.isBigScript(getEditorInput()));
ruleScanner.refreshRules(getDataSource(), ruleManager);
parserContext = new SQLParserContext(getDataSource(), syntaxManager, ruleManager, document != null ? document : new Document());
parserContext = new SQLParserContext(SQLEditorBase.this, syntaxManager, ruleManager, document != null ? document : new Document());
if (document instanceof IDocumentExtension3) {
IDocumentPartitioner partitioner = new FastPartitioner(
......@@ -631,21 +632,30 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
@Nullable
public SQLScriptElement extractActiveQuery() {
if (parserContext == null) {
return null;
}
ITextSelection selection = (ITextSelection) getSelectionProvider().getSelection();
return SQLScriptParser.extractActiveQuery(parserContext, selection.getOffset(), selection.getLength());
}
public SQLScriptElement extractQueryAtPos(int currentPos) {
return SQLScriptParser.extractQueryAtPos(parserContext, currentPos);
return parserContext == null ? null : SQLScriptParser.extractQueryAtPos(parserContext, currentPos);
}
public SQLScriptElement extractNextQuery(boolean next) {
if (parserContext == null) {
return null;
}
ITextSelection selection = (ITextSelection) getSelectionProvider().getSelection();
int offset = selection.getOffset();
return SQLScriptParser.extractNextQuery(parserContext, offset, next);
}
public List<SQLScriptElement> extractScriptQueries(int startOffset, int length, boolean scriptMode, boolean keepDelimiters, boolean parseParameters) {
if (parserContext == null) {
return null;
}
return SQLScriptParser.extractScriptQueries(parserContext, startOffset, length, scriptMode, keepDelimiters, parseParameters);
}
......@@ -654,7 +664,10 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext
}
List<SQLQueryParameter> parseQueryParameters(SQLQuery query) {
SQLParserContext context = new SQLParserContext(getDataSource(), parserContext.getSyntaxManager(), parserContext.getRuleManager(), new Document(query.getText()));
if (parserContext == null) {
return null;
}
SQLParserContext context = new SQLParserContext(SQLEditorBase.this, parserContext.getSyntaxManager(), parserContext.getRuleManager(), new Document(query.getText()));
return SQLScriptParser.parseParameters(context, 0, query.getLength());
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册