提交 c492c76c 编写于 作者: S serge-rider

#6523 SQL parameters ignore support

上级 be7a12a3
...@@ -1582,7 +1582,7 @@ public class SQLEditor extends SQLEditorBase implements ...@@ -1582,7 +1582,7 @@ public class SQLEditor extends SQLEditorBase implements
} }
// Transform query parameters // Transform query parameters
if (sqlQuery != null) { if (sqlQuery != null) {
new SQLQueryJob( SQLQueryJob queryJob = new SQLQueryJob(
getSite(), getSite(),
"Plan query", "Plan query",
getExecutionContext(), getExecutionContext(),
...@@ -1590,8 +1590,10 @@ public class SQLEditor extends SQLEditorBase implements ...@@ -1590,8 +1590,10 @@ public class SQLEditor extends SQLEditorBase implements
Collections.emptyList(), Collections.emptyList(),
this.globalScriptContext, this.globalScriptContext,
null, null,
null) null);
.transformQueryWithParameters(sqlQuery); if (!queryJob.transformQueryWithParameters(sqlQuery)) {
return null;
}
} }
ExplainPlanViewer planView = null; ExplainPlanViewer planView = null;
......
...@@ -16,11 +16,13 @@ ...@@ -16,11 +16,13 @@
*/ */
package org.jkiss.dbeaver.ui.editors.sql.dialogs; package org.jkiss.dbeaver.ui.editors.sql.dialogs;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.StatusDialog; import org.eclipse.jface.dialogs.StatusDialog;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*; import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*; import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.model.sql.SQLQueryParameter; import org.jkiss.dbeaver.model.sql.SQLQueryParameter;
...@@ -198,6 +200,21 @@ public class SQLQueryParameterBindDialog extends StatusDialog { ...@@ -198,6 +200,21 @@ public class SQLQueryParameterBindDialog extends StatusDialog {
} }
} }
@Override
protected void createButtonsForButtonBar(Composite parent) {
Button skipButton = UIUtils.createDialogButton(parent, IDialogConstants.IGNORE_LABEL, new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setReturnCode(IDialogConstants.IGNORE_ID);
close();
}
});
skipButton.setToolTipText("Ignore parameters and execute query/script as is");
((GridLayout) parent.getLayout()).numColumns++;
super.createButtonsForButtonBar(parent);
}
@Override @Override
protected void okPressed() protected void okPressed()
{ {
......
...@@ -111,6 +111,7 @@ public class SQLQueryJob extends DataSourceJob ...@@ -111,6 +111,7 @@ public class SQLQueryJob extends DataSourceJob
private boolean skipConfirmation; private boolean skipConfirmation;
private int fetchSize; private int fetchSize;
private long readFlags; private long readFlags;
private boolean ignoreParameters;
public SQLQueryJob( public SQLQueryJob(
@NotNull IWorkbenchPartSite partSite, @NotNull IWorkbenchPartSite partSite,
...@@ -619,6 +620,10 @@ public class SQLQueryJob extends DataSourceJob ...@@ -619,6 +620,10 @@ public class SQLQueryJob extends DataSourceJob
} }
public boolean prepareStatementParameters(SQLQuery sqlStatement) { public boolean prepareStatementParameters(SQLQuery sqlStatement) {
if (ignoreParameters) {
return true;
}
// Bind parameters // Bind parameters
List<SQLQueryParameter> parameters = sqlStatement.getParameters(); List<SQLQueryParameter> parameters = sqlStatement.getParameters();
if (CommonUtils.isEmpty(parameters)) { if (CommonUtils.isEmpty(parameters)) {
...@@ -632,6 +637,9 @@ public class SQLQueryJob extends DataSourceJob ...@@ -632,6 +637,9 @@ public class SQLQueryJob extends DataSourceJob
} }
} }
if (ignoreParameters) {
return true;
}
// Set values for all parameters // Set values for all parameters
// Replace parameter tokens with parameter values // Replace parameter tokens with parameter values
String query = sqlStatement.getText(); String query = sqlStatement.getText();
...@@ -670,17 +678,14 @@ public class SQLQueryJob extends DataSourceJob ...@@ -670,17 +678,14 @@ public class SQLQueryJob extends DataSourceJob
return true; return true;
} }
boolean okPressed = new UIConfirmation() { int paramsResult = UITask.run(() -> {
@Override SQLQueryParameterBindDialog dialog = new SQLQueryParameterBindDialog(
public Boolean runTask() { partSite.getShell(),
SQLQueryParameterBindDialog dialog = new SQLQueryParameterBindDialog( parameters);
partSite.getShell(), return dialog.open();
parameters); });
return (dialog.open() == IDialogConstants.OK_ID);
}
}.execute();
if (okPressed) { if (paramsResult == IDialogConstants.OK_ID) {
// Save values back to script context // Save values back to script context
for (SQLQueryParameter param : parameters) { for (SQLQueryParameter param : parameters) {
if (param.isNamed() && scriptContext.hasVariable(param.getVarName())) { if (param.isNamed() && scriptContext.hasVariable(param.getVarName())) {
...@@ -688,8 +693,12 @@ public class SQLQueryJob extends DataSourceJob ...@@ -688,8 +693,12 @@ public class SQLQueryJob extends DataSourceJob
scriptContext.setVariable(param.getVarName(), strValue); scriptContext.setVariable(param.getVarName(), strValue);
} }
} }
return true;
} else if (paramsResult == IDialogConstants.IGNORE_ID) {
ignoreParameters = true;
return true;
} }
return okPressed; return false;
} }
private boolean fetchQueryData(DBCSession session, DBCResultSet resultSet, SQLQueryResult result, SQLQueryResult.ExecuteResult executeResult, DBDDataReceiver dataReceiver, boolean updateStatistics) private boolean fetchQueryData(DBCSession session, DBCResultSet resultSet, SQLQueryResult result, SQLQueryResult.ExecuteResult executeResult, DBDDataReceiver dataReceiver, boolean updateStatistics)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册