use of org.jkiss.dbeaver.model.sql.SQLQueryParameter in project dbeaver by serge-rider.
the class SQLQueryJob method prepareStatementParameters.
private boolean prepareStatementParameters(SQLQuery sqlStatement) {
// Bind parameters
List<SQLQueryParameter> parameters = sqlStatement.getParameters();
if (CommonUtils.isEmpty(parameters)) {
return true;
}
// Resolve parameters
if (!fillStatementParameters(parameters)) {
return false;
}
// Set values for all parameters
// Replace parameter tokens with parameter values
String query = sqlStatement.getQuery();
for (int i = parameters.size(); i > 0; i--) {
SQLQueryParameter parameter = parameters.get(i - 1);
query = query.substring(0, parameter.getTokenOffset()) + parameter.getValue() + query.substring(parameter.getTokenOffset() + parameter.getTokenLength());
}
sqlStatement.setQuery(query);
return true;
}
use of org.jkiss.dbeaver.model.sql.SQLQueryParameter in project dbeaver by serge-rider.
the class SQLQueryParameterBindDialog method createDialogArea.
@Override
protected Control createDialogArea(Composite parent) {
getShell().setText("Bind parameter(s)");
final Composite composite = (Composite) super.createDialogArea(parent);
Table paramTable = new Table(composite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
final GridData gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = 400;
gd.heightHint = 200;
paramTable.setLayoutData(gd);
paramTable.setHeaderVisible(true);
paramTable.setLinesVisible(true);
final TableColumn indexColumn = UIUtils.createTableColumn(paramTable, SWT.LEFT, "#");
indexColumn.setWidth(40);
final TableColumn nameColumn = UIUtils.createTableColumn(paramTable, SWT.LEFT, "Name");
nameColumn.setWidth(100);
final TableColumn valueColumn = UIUtils.createTableColumn(paramTable, SWT.LEFT, "Value");
valueColumn.setWidth(200);
for (SQLQueryParameter param : parameters) {
if (param.getPrevious() != null) {
// Skip duplicates
List<SQLQueryParameter> dups = dupParameters.get(param.getName());
if (dups == null) {
dups = new ArrayList<>();
dupParameters.put(param.getName(), dups);
}
dups.add(param);
continue;
}
TableItem item = new TableItem(paramTable, SWT.NONE);
item.setData(param);
item.setImage(DBeaverIcons.getImage(DBIcon.TREE_ATTRIBUTE));
item.setText(0, String.valueOf(param.getOrdinalPosition() + 1));
item.setText(1, param.getTitle());
item.setText(2, CommonUtils.notEmpty(param.getValue()));
}
final CustomTableEditor tableEditor = new CustomTableEditor(paramTable) {
{
firstTraverseIndex = 2;
lastTraverseIndex = 2;
editOnEnter = false;
}
@Override
protected Control createEditor(Table table, int index, TableItem item) {
if (index != 2) {
return null;
}
SQLQueryParameter param = (SQLQueryParameter) item.getData();
Text editor = new Text(table, SWT.BORDER);
editor.setText(CommonUtils.notEmpty(param.getValue()));
editor.selectAll();
return editor;
}
@Override
protected void saveEditorValue(Control control, int index, TableItem item) {
SQLQueryParameter param = (SQLQueryParameter) item.getData();
String newValue = ((Text) control).getText();
item.setText(2, newValue);
param.setValue(newValue);
if (param.isNamed()) {
final List<SQLQueryParameter> dups = dupParameters.get(param.getName());
if (dups != null) {
for (SQLQueryParameter dup : dups) {
dup.setValue(newValue);
}
}
}
savedParamValues.put(param.getName().toUpperCase(Locale.ENGLISH), new SQLQueryParameterRegistry.ParameterInfo(param.getName(), newValue));
}
};
if (!parameters.isEmpty()) {
paramTable.select(0);
tableEditor.showEditor(paramTable.getItem(0), 2);
}
updateStatus(GeneralUtils.makeInfoStatus("Use Tab to switch. String values must be quoted. You can use expressions in values"));
return composite;
}
use of org.jkiss.dbeaver.model.sql.SQLQueryParameter in project dbeaver by serge-rider.
the class SQLQueryParameterBindDialog method updateQueryPreview.
private void updateQueryPreview() {
SQLQuery queryCopy = new SQLQuery(query.getDataSource(), query.getText(), query);
List<SQLQueryParameter> setParams = new ArrayList<>(this.parameters);
setParams.removeIf(parameter -> !parameter.isVariableSet());
SQLUtils.fillQueryParameters(queryCopy, setParams);
{
UIUtils.asyncExec(() -> {
DBWorkbench.getService(UIServiceSQL.class).setSQLPanelText(queryPreviewPanel, queryCopy.getText());
});
}
}
use of org.jkiss.dbeaver.model.sql.SQLQueryParameter in project dbeaver by serge-rider.
the class SQLQueryParameterBindDialog method fillParameterList.
private void fillParameterList(boolean hideVariables) {
paramTable.removeAll();
for (SQLQueryParameter param : parameters) {
if (hideVariables && param.isVariableSet()) {
continue;
}
if (param.getPrevious() != null) {
// Skip duplicates
List<SQLQueryParameter> dups = dupParameters.computeIfAbsent(param.getName(), k -> new ArrayList<>());
dups.add(param);
continue;
}
TableItem item = new TableItem(paramTable, SWT.NONE);
item.setData(param);
item.setImage(DBeaverIcons.getImage(DBIcon.TREE_ATTRIBUTE));
item.setText(0, String.valueOf(param.getOrdinalPosition() + 1));
item.setText(1, param.getVarName());
item.setText(2, CommonUtils.notEmpty(param.getValue()));
}
}
use of org.jkiss.dbeaver.model.sql.SQLQueryParameter in project dbeaver by serge-rider.
the class SQLEditorParametersProvider method prepareStatementParameters.
@Override
public Boolean prepareStatementParameters(@NotNull SQLScriptContext scriptContext, @NotNull SQLQuery sqlStatement, @NotNull List<SQLQueryParameter> parameters, boolean useDefaults) {
for (SQLQueryParameter param : parameters) {
String paramName = param.getVarName();
Object defValue = useDefaults ? scriptContext.getParameterDefaultValue(paramName) : null;
if (defValue != null || scriptContext.hasVariable(paramName)) {
Object varValue = defValue != null ? defValue : scriptContext.getVariable(paramName);
String strValue = varValue == null ? null : varValue.toString();
param.setValue(strValue);
param.setVariableSet(true);
} else {
if (!useDefaults) {
param.setVariableSet(false);
}
}
}
boolean allSet = true;
for (SQLQueryParameter param : parameters) {
if (!param.isVariableSet()) {
allSet = false;
}
}
if (allSet) {
return true;
}
int paramsResult = UITask.run(() -> {
SQLQueryParameterBindDialog dialog = new SQLQueryParameterBindDialog(site, sqlStatement, parameters);
return dialog.open();
});
if (paramsResult == IDialogConstants.OK_ID) {
// Save values back to script context
for (SQLQueryParameter param : parameters) {
if (param.isNamed()) {
String strValue = param.getValue();
if (scriptContext.hasVariable(param.getVarName())) {
scriptContext.setVariable(param.getVarName(), strValue);
} else {
scriptContext.setParameterDefaultValue(param.getVarName(), strValue);
}
}
}
return true;
} else if (paramsResult == IDialogConstants.IGNORE_ID) {
scriptContext.setIgnoreParameters(true);
return null;
}
return false;
}
Aggregations