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

#11533 Query variables: variables panel + model

上级 de83933f
......@@ -30,17 +30,14 @@ import org.jkiss.utils.CommonUtils;
import java.io.File;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* SQL script execution context
*/
public class SQLScriptContext implements DBCScriptContext {
private final Map<String, Object> variables = new HashMap<>();
private final Map<String, VariableInfo> variables = new LinkedHashMap<>();
private final Map<String, Object> defaultParameters = new HashMap<>();
private final Map<String, Object> pragmas = new HashMap<>();
private Map<String, Object> statementPragmas;
......@@ -93,16 +90,16 @@ public class SQLScriptContext implements DBCScriptContext {
@Override
public Object getVariable(String name) {
Object value = variables.get(name);
if (value == null && parentContext != null) {
value = parentContext.getVariable(name);
VariableInfo variableInfo = variables.get(name);
if (variableInfo == null && parentContext != null) {
return parentContext.getVariable(name);
}
return value;
return variableInfo == null ? null : variableInfo.value;
}
@Override
public void setVariable(String name, Object value) {
variables.put(name, value);
variables.put(name, new VariableInfo(name, value, VariableType.VARIABLE));
if (parentContext != null) {
parentContext.setVariable(name, value);
}
......@@ -116,9 +113,18 @@ public class SQLScriptContext implements DBCScriptContext {
}
}
@Override
public List<VariableInfo> getVariables() {
return new ArrayList<>(variables.values());
}
public void setVariables(Map<String, Object> variables) {
this.variables.clear();
this.variables.putAll(variables);
for (Map.Entry<String, Object> v : variables.entrySet()) {
this.variables.put(
v.getKey(),
new VariableInfo(v.getKey(), v.getValue(), VariableType.VARIABLE));
}
}
public Object getParameterDefaultValue(String name) {
......@@ -220,6 +226,8 @@ public class SQLScriptContext implements DBCScriptContext {
Object varValue = variables.get(parameter.getVarName());
if (varValue == null) {
varValue = defaultParameters.get(parameter.getVarName());
} else {
varValue = ((VariableInfo)varValue).value;
}
if (varValue != null) {
parameter.setValue(CommonUtils.toString(varValue));
......@@ -233,9 +241,11 @@ public class SQLScriptContext implements DBCScriptContext {
}
public Map<String, Object> getAllParameters() {
Map<String, Object> params = new LinkedHashMap<>();
Map<String, Object> params = new LinkedHashMap<>(defaultParameters.size() + variables.size());
params.putAll(defaultParameters);
params.putAll(variables);
for (Map.Entry<String, VariableInfo> v : variables.entrySet()) {
params.put(v.getKey(), v.getValue().value);
}
return params;
}
......
......@@ -28,9 +28,7 @@ import org.jkiss.utils.xml.XMLException;
import org.xml.sax.Attributes;
import java.io.*;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import java.util.*;
public class SQLQueryParameterRegistry
{
......@@ -65,6 +63,10 @@ public class SQLQueryParameterRegistry
return registry;
}
public List<ParameterInfo> getAllParameters() {
return new ArrayList<>(parameterMap.values());
}
public ParameterInfo getParameter(String name)
{
return parameterMap.get(name.toUpperCase(Locale.ENGLISH));
......
......@@ -17,6 +17,7 @@
package org.jkiss.dbeaver.model.exec;
import java.io.PrintWriter;
import java.util.List;
/**
* Script context.
......@@ -24,6 +25,34 @@ import java.io.PrintWriter;
*/
public interface DBCScriptContext {
enum VariableType {
PARAMETER("Parameter"),
VARIABLE("Variable"),
QUERY("Query");
private final String title;
VariableType(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
class VariableInfo {
public String name;
public Object value;
public VariableType type;
public VariableInfo(String name, Object value, VariableType type) {
this.name = name;
this.value = value;
this.type = type;
}
}
boolean hasVariable(String name);
Object getVariable(String name);
......@@ -32,6 +61,8 @@ public interface DBCScriptContext {
void removeVariable(String name);
List<VariableInfo> getVariables();
<T> T getData(String key);
void setData(String key, Object value);
......
......@@ -93,6 +93,8 @@ command.org.jkiss.dbeaver.ui.editors.sql.show.output.name=Show server output
command.org.jkiss.dbeaver.ui.editors.sql.show.output.description=Show server output console
command.org.jkiss.dbeaver.ui.editors.sql.show.log.name=Show execution log
command.org.jkiss.dbeaver.ui.editors.sql.show.log.description=Show SQL execution log
command.org.jkiss.dbeaver.ui.editors.sql.show.variables.name=Show SQL variables
command.org.jkiss.dbeaver.ui.editors.sql.show.variables.description=Show active SQL variables
command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.name=Toggle results panel
command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.description=Show/hide results panel
......
......@@ -236,6 +236,7 @@
<command id="org.jkiss.dbeaver.ui.editors.sql.query.prev" name="%command.org.jkiss.dbeaver.ui.editors.sql.query.prev.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.query.prev.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.show.output" name="%command.org.jkiss.dbeaver.ui.editors.sql.show.output.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.show.output.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.show.log" name="%command.org.jkiss.dbeaver.ui.editors.sql.show.log.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.show.log.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.show.variables" name="%command.org.jkiss.dbeaver.ui.editors.sql.show.variables.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.show.variables.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel" name="%command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.maximize.result.panel" name="%command.org.jkiss.dbeaver.ui.editors.sql.maximize.result.panel.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.maximize.result.panel.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.switch.panel" name="%command.org.jkiss.dbeaver.ui.editors.sql.switch.panel.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.switch.panel.description" categoryId="org.jkiss.dbeaver.core.sql"/>
......@@ -282,6 +283,7 @@
<image commandId="org.jkiss.dbeaver.ui.editors.sql.show.output" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/sql/page_output.png"/>
<image commandId="org.jkiss.dbeaver.ui.editors.sql.show.log" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/sql/page_error.png"/>
<image commandId="org.jkiss.dbeaver.ui.editors.sql.show.variables" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/sql/variables.png"/>
<image commandId="org.jkiss.dbeaver.ui.editors.sql.toggleLayout" icon="platform:/plugin/org.jkiss.dbeaver.ui/icons/misc/rotate.png"/>
</extension>
......@@ -457,6 +459,9 @@
<handler commandId="org.jkiss.dbeaver.ui.editors.sql.show.log" class="org.jkiss.dbeaver.ui.editors.sql.handlers.SQLEditorHandlerSwitchPanel">
<enabledWhen><reference definitionId="org.jkiss.dbeaver.core.ui.sql.editor"/></enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.ui.editors.sql.show.variables" class="org.jkiss.dbeaver.ui.editors.sql.handlers.SQLEditorHandlerSwitchPanel">
<enabledWhen><reference definitionId="org.jkiss.dbeaver.core.ui.sql.editor"/></enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel" class="org.jkiss.dbeaver.ui.editors.sql.handlers.SQLEditorHandlerToggleResultsPanel">
<enabledWhen><reference definitionId="org.jkiss.dbeaver.core.ui.sql.editor"/></enabledWhen>
</handler>
......
......@@ -101,6 +101,7 @@ import org.jkiss.dbeaver.ui.editors.sql.plan.ExplainPlanViewer;
import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationDescriptor;
import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationPanelDescriptor;
import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationRegistry;
import org.jkiss.dbeaver.ui.editors.sql.variables.SQLVariablesPanel;
import org.jkiss.dbeaver.ui.editors.text.ScriptPositionColumn;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
import org.jkiss.dbeaver.utils.GeneralUtils;
......@@ -140,12 +141,13 @@ public class SQLEditor extends SQLEditorBase implements
private static final String EMBEDDED_BINDING_PREFIX = "-- CONNECTION: ";
private static final Pattern EMBEDDED_BINDING_PREFIX_PATTERN = Pattern.compile("--\\s*CONNECTION:\\s*(.+)", Pattern.CASE_INSENSITIVE);
private static Image IMG_DATA_GRID = DBeaverIcons.getImage(UIIcon.SQL_PAGE_DATA_GRID);
private static Image IMG_DATA_GRID_LOCKED = DBeaverIcons.getImage(UIIcon.SQL_PAGE_DATA_GRID_LOCKED);
private static Image IMG_EXPLAIN_PLAN = DBeaverIcons.getImage(UIIcon.SQL_PAGE_EXPLAIN_PLAN);
private static Image IMG_LOG = DBeaverIcons.getImage(UIIcon.SQL_PAGE_LOG);
private static Image IMG_OUTPUT = DBeaverIcons.getImage(UIIcon.SQL_PAGE_OUTPUT);
private static Image IMG_OUTPUT_ALERT = DBeaverIcons.getImage(UIIcon.SQL_PAGE_OUTPUT_ALERT);
private static final Image IMG_DATA_GRID = DBeaverIcons.getImage(UIIcon.SQL_PAGE_DATA_GRID);
private static final Image IMG_DATA_GRID_LOCKED = DBeaverIcons.getImage(UIIcon.SQL_PAGE_DATA_GRID_LOCKED);
private static final Image IMG_EXPLAIN_PLAN = DBeaverIcons.getImage(UIIcon.SQL_PAGE_EXPLAIN_PLAN);
private static final Image IMG_LOG = DBeaverIcons.getImage(UIIcon.SQL_PAGE_LOG);
private static final Image IMG_VARIABLES = DBeaverIcons.getImage(UIIcon.SQL_VARIABLES);
private static final Image IMG_OUTPUT = DBeaverIcons.getImage(UIIcon.SQL_PAGE_OUTPUT);
private static final Image IMG_OUTPUT_ALERT = DBeaverIcons.getImage(UIIcon.SQL_PAGE_OUTPUT_ALERT);
// private static final String TOOLBAR_CONTRIBUTION_ID = "toolbar:org.jkiss.dbeaver.ui.editors.sql.toolbar.side";
// private static final String TOOLBAR_GROUP_TOP = "top";
......@@ -176,6 +178,7 @@ public class SQLEditor extends SQLEditorBase implements
private SQLLogPanel logViewer;
private SQLEditorOutputConsoleViewer outputViewer;
private SQLVariablesPanel variablesViewer;
private volatile QueryProcessor curQueryProcessor;
private final List<QueryProcessor> queryProcessors = new ArrayList<>();
......@@ -270,6 +273,10 @@ public class SQLEditor extends SQLEditorBase implements
return null;
}
public SQLScriptContext getGlobalScriptContext() {
return globalScriptContext;
}
@Nullable
public DBPProject getProject()
{
......@@ -911,15 +918,19 @@ public class SQLEditor extends SQLEditorBase implements
SWT.LEFT | SWT.CHECK,
getSite(),
SQLEditorCommands.CMD_SQL_SHOW_OUTPUT,
true)
.setText("Out");
false);
VerticalButton.create(
sideToolBar,
SWT.LEFT | SWT.CHECK,
getSite(),
SQLEditorCommands.CMD_SQL_SHOW_LOG,
true)
.setText("Log");
false);
VerticalButton.create(
sideToolBar,
SWT.LEFT | SWT.CHECK,
getSite(),
SQLEditorCommands.CMD_SQL_SHOW_VARIABLES,
false);
/*
sideToolBar.add(new GroupMarker(TOOLBAR_GROUP_PANELS));
......@@ -1075,6 +1086,7 @@ public class SQLEditor extends SQLEditorBase implements
// Extra views
//planView = new ExplainPlanViewer(this, resultTabs);
logViewer = new SQLLogPanel(sqlExtraPanelFolder, this);
variablesViewer = new SQLVariablesPanel(sqlExtraPanelFolder, this);
outputViewer = new SQLEditorOutputConsoleViewer(getSite(), sqlExtraPanelFolder, SWT.NONE);
// Create results tab
......@@ -1365,6 +1377,19 @@ public class SQLEditor extends SQLEditorBase implements
null);
}
public void showVariablesPanel() {
showExtraView(
SQLEditorCommands.CMD_SQL_SHOW_VARIABLES,
SQLEditorMessages.editors_sql_variables,
SQLEditorMessages.editors_sql_variables_tip,
IMG_VARIABLES,
variablesViewer,
null);
UIUtils.asyncExec(() -> {
variablesViewer.refreshVariables();
});
}
public <T> T getExtraPresentationPanel(Class<T> panelClass) {
for (CTabItem tabItem : resultTabs.getItems()) {
if (tabItem.getData() instanceof SQLEditorPresentationPanel && tabItem.getData().getClass() == panelClass) {
......
......@@ -41,6 +41,7 @@ public interface SQLEditorCommands
String CMD_SQL_SWITCH_PANEL = "org.jkiss.dbeaver.ui.editors.sql.switch.panel";
String CMD_SQL_SHOW_OUTPUT = "org.jkiss.dbeaver.ui.editors.sql.show.output";
String CMD_SQL_SHOW_LOG = "org.jkiss.dbeaver.ui.editors.sql.show.log";
String CMD_SQL_SHOW_VARIABLES = "org.jkiss.dbeaver.ui.editors.sql.show.variables";
String CMD_SQL_EDITOR_MAXIMIZE_PANEL = "org.jkiss.dbeaver.ui.editors.sql.maximize.result.panel";
String CMD_SQL_EDITOR_CLOSE_TAB = "org.jkiss.dbeaver.ui.editors.sql.close.tab";
String CMD_SQL_ASSIST_TEMPLATES = "org.jkiss.dbeaver.ui.editors.sql.assist.templates"; //$NON-NLS-1$
......
......@@ -48,6 +48,9 @@ public class SQLEditorHandlerSwitchPanel extends AbstractHandler {
case SQLEditorCommands.CMD_SQL_SHOW_LOG:
editor.showExecutionLogPanel();
break;
case SQLEditorCommands.CMD_SQL_SHOW_VARIABLES:
editor.showVariablesPanel();
break;
}
return null;
}
......
......@@ -65,6 +65,8 @@ public class SQLEditorMessages extends NLS {
public static String editors_sql_error_execution_plan_title;
public static String editors_sql_execution_log;
public static String editors_sql_execution_log_tip;
public static String editors_sql_variables;
public static String editors_sql_variables_tip;
public static String editors_sql_explain_plan;
public static String editors_sql_output;
public static String editors_sql_output_tip;
......
......@@ -41,6 +41,8 @@ editors_sql_error_execution_plan_message = Can not explain execution plan
editors_sql_error_execution_plan_title = Execution plan
editors_sql_execution_log = Execution Log
editors_sql_execution_log_tip = SQL query execution log
editors_sql_variables = Variables
editors_sql_variables_tip = Active SQL variables
editors_sql_explain_plan = Explain Plan
editors_sql_job_execute_query = Execute query
editors_sql_job_execute_script = Execute script
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2021 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.ui.editors.sql.variables;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.exec.DBCScriptContext;
import org.jkiss.dbeaver.model.sql.SQLScriptContext;
import org.jkiss.dbeaver.model.sql.registry.SQLQueryParameterRegistry;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.StringEditorInput;
import org.jkiss.dbeaver.ui.editors.SubEditorSite;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditor;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import java.util.List;
/**
* SQLVariablesPanel
*/
public class SQLVariablesPanel extends Composite {
static protected final Log log = Log.getLog(SQLVariablesPanel.class);
private final SQLEditor mainEditor;
private SQLEditorBase valueEditor;
private Table varsTable;
private Button showParametersCheck;
public SQLVariablesPanel(Composite parent, SQLEditor editor)
{
super(parent, SWT.NONE);
this.mainEditor = editor;
setLayout(new FillLayout());
}
private void createControls() {
SashForm sash = new SashForm(this, SWT.VERTICAL);
// Variables table
{
Composite varsGroup = UIUtils.createPlaceholder(sash, 1);
varsTable = new Table(varsGroup, SWT.SINGLE | SWT.FULL_SELECTION);
varsTable.setHeaderVisible(true);
varsTable.setLinesVisible(true);
varsTable.setLayoutData(new GridData(GridData.FILL_BOTH));
UIUtils.createTableColumn(varsTable, SWT.LEFT, "Variable");
UIUtils.createTableColumn(varsTable, SWT.LEFT, "Value");
UIUtils.createTableColumn(varsTable, SWT.LEFT, "Type");
Composite controlPanel = UIUtils.createComposite(varsGroup, 2);
controlPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
ToolBar buttonsBar = new ToolBar(controlPanel, SWT.HORIZONTAL);
buttonsBar.setLayoutData(new GridData(GridData.FILL_VERTICAL));
ToolItem addButton = UIUtils.createToolItem(buttonsBar, "Add variable", UIIcon.ADD, new SelectionAdapter() {
});
ToolItem removeButton = UIUtils.createToolItem(buttonsBar, "Delete variable", UIIcon.DELETE, new SelectionAdapter() {
});
showParametersCheck = UIUtils.createCheckbox(controlPanel, "Show parameters", "Show query parameters", false, 1);
showParametersCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
refreshVariables();
}
});
varsTable.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
editCurrentVariable();
}
});
//sash.addListener(SWT.Resize, event -> UIUtils.packColumns(varsTable, true));
}
// Editor
{
Composite editorGroup = UIUtils.createPlaceholder(sash, 1);
UIUtils.createControlLabel(editorGroup, "Value");
Composite editorPH = new Composite(editorGroup, SWT.NONE);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.verticalIndent = 3;
gd.horizontalSpan = 1;
gd.minimumHeight = 100;
gd.minimumWidth = 100;
editorPH.setLayoutData(gd);
editorPH.setLayout(new FillLayout());
valueEditor = new SQLEditorBase() {
@Nullable
@Override
public DBCExecutionContext getExecutionContext() {
return mainEditor.getExecutionContext();
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
getAction(ITextEditorActionConstants.CONTEXT_PREFERENCES).setEnabled(false);
}
@Override
public boolean isFoldingEnabled() {
return false;
}
};
try {
valueEditor.init(new SubEditorSite(mainEditor.getSite()),
new StringEditorInput("Variable value", "", true, GeneralUtils.getDefaultFileEncoding()));
} catch (PartInitException e) {
log.error(e);
}
valueEditor.createPartControl(editorPH);
valueEditor.reloadSyntaxRules();
//valueEditor.getEditorControl().setEnabled(false);
valueEditor.getEditorControlWrapper().setLayoutData(new GridData(GridData.FILL_BOTH));
}
}
private void editCurrentVariable() {
int selectionIndex = varsTable.getSelectionIndex();
StyledText editorControl = valueEditor.getEditorControl();
if (editorControl == null) {
return;
}
if (selectionIndex >= 0) {
TableItem item = varsTable.getItem(selectionIndex);
DBCScriptContext.VariableInfo variable = (DBCScriptContext.VariableInfo) item.getData();
StringEditorInput sqlInput = new StringEditorInput(
"Variable " + variable.name,
CommonUtils.toString(variable.value),
false,
GeneralUtils.DEFAULT_ENCODING
);
valueEditor.setInput(sqlInput);
valueEditor.reloadSyntaxRules();
}
}
public void refreshVariables() {
if (varsTable == null) {
createControls();
}
SQLScriptContext context = mainEditor.getGlobalScriptContext();
varsTable.removeAll();
List<DBCScriptContext.VariableInfo> variables = context.getVariables();
if (showParametersCheck.getSelection()) {
for (SQLQueryParameterRegistry.ParameterInfo param : SQLQueryParameterRegistry.getInstance().getAllParameters()) {
if (context.hasVariable(param.name)) {
continue;
}
Object parameterValue = context.getParameterDefaultValue(param.name);
if (parameterValue == null) {
parameterValue = param.value;
}
variables.add(new DBCScriptContext.VariableInfo(
param.name,
parameterValue,
DBCScriptContext.VariableType.PARAMETER));
}
}
for (DBCScriptContext.VariableInfo variable : variables) {
TableItem ti = new TableItem(varsTable, SWT.NONE);
ti.setText(0, variable.name);
ti.setText(1, CommonUtils.toString(variable.value));
ti.setText(2, variable.type.getTitle());
ti.setData(variable);
}
UIUtils.packColumns(varsTable, true);
valueEditor.setInput(new StringEditorInput(
"Variable",
"",
true,
GeneralUtils.DEFAULT_ENCODING
));
valueEditor.reloadSyntaxRules();
}
}
\ No newline at end of file
......@@ -190,6 +190,7 @@ public class UIIcon {
public static final DBIcon SQL_VALIDATE = new DBIcon("sql_validate", "sql/sql_validate.png"); //$NON-NLS-1$ //$NON-NLS-2$
public static final DBIcon SQL_PREVIEW = new DBIcon("sql_preview", "sql/sql_preview.png"); //$NON-NLS-1$ //$NON-NLS-2$
public static final DBIcon SQL_TEXT = new DBIcon("sql_text", "sql/sql_text.png"); //$NON-NLS-1$ //$NON-NLS-2$
public static final DBIcon SQL_VARIABLES = new DBIcon("sql_variables", "sql/variables.png"); //$NON-NLS-1$ //$NON-NLS-2$
public static final DBIcon SQL_PAGE_DATA_GRID = new DBIcon("sql/page_data_grid.png"); //$NON-NLS-1$
public static final DBIcon SQL_PAGE_DATA_GRID_LOCKED = new DBIcon("sql/page_data_grid_locked.png"); //$NON-NLS-1$
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册