提交 30cf88af 编写于 作者: S Serge Rider

Merge remote-tracking branch 'origin/devel' into devel


Former-commit-id: 5d7cb220
......@@ -115,6 +115,7 @@ public class ArrayUtils {
return false;
}
@SafeVarargs
public static <OBJECT_TYPE> boolean contains(OBJECT_TYPE[] array, OBJECT_TYPE... values)
{
if (isEmpty(array))
......@@ -164,6 +165,7 @@ public class ArrayUtils {
return -1;
}
@SuppressWarnings("unchecked")
public static <T> T[] deleteArea(Class<T> type, T[] elements, int from, int to) {
int delCount = to - from + 1;
T[] newArray = (T[]) Array.newInstance(type, elements.length - delCount);
......@@ -175,6 +177,7 @@ public class ArrayUtils {
return newArray;
}
@SuppressWarnings("unchecked")
public static <T> T[] insertArea(Class<T> type, Object[] elements, int pos, Object[] add) {
T[] newArray = (T[]) Array.newInstance(type, elements.length + add.length);
System.arraycopy(elements, 0, newArray, 0, pos);
......@@ -183,6 +186,7 @@ public class ArrayUtils {
return newArray;
}
@SuppressWarnings("unchecked")
public static <T> T[] add(Class<T> type, T[] elements, T add) {
T[] newArray = (T[]) Array.newInstance(type, elements.length + 1);
System.arraycopy(elements, 0, newArray, 0, elements.length);
......@@ -190,6 +194,7 @@ public class ArrayUtils {
return newArray;
}
@SuppressWarnings("unchecked")
public static <T> T[] remove(Class<T> type, T[] elements, int index) {
T[] newArray = (T[]) Array.newInstance(type, elements.length - 1);
System.arraycopy(elements, 0, newArray, 0, index);
......@@ -221,6 +226,7 @@ public class ArrayUtils {
System.out.println(Arrays.toString(arr));
}
@SuppressWarnings("unchecked")
public static <T> T[] toArray(Class<T> type, Collection<? extends T> list) {
return list.toArray((T[]) Array.newInstance(type, list.size()));
}
......
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
# DBeaver - Universal Database Manager
# Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
# Copyright (C) 2017 Karl Griesser (fullref@gmail.com)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (version 2)
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
command.org.jkiss.dbeaver.core.object.find.description = Datenbankobjekte suchen
command.org.jkiss.dbeaver.core.object.find.name = Datenkbank suchen
menu.edit = Bearbeiten
menu.navigate = Navigation
pref.page.name.binary.editor = Bin\u00E4reditor
pref.page.name.colors.and.fonts = Farben und Schriftart
pref.page.name.confirmations = Best\u00E4tigungen
pref.page.name.connectionTypes = Verbindungstypen
pref.page.name.data.editor = Daten-Editor
pref.page.name.data.formats = Datumsformate
pref.page.name.db.configuration = Datenbank
pref.page.name.db.editors = Editoren
pref.page.name.drivers = Treiber
pref.page.name.meta = Metadaten
pref.page.name.navigator = Navigation
pref.page.name.query.manager = Arbfragemanager
pref.page.name.resources = Ressourcen
pref.page.name.resultset = Ergebnismenge
pref.page.name.resultset.binaries = Bin\u00E4rdaten
pref.page.name.resultset.presentation = Darstellung
pref.page.name.sql.completion = SQL Autovervollst\u00E4ndigen
pref.page.name.sql.editor = SQL-Editor
pref.page.name.sql.execute = SQL Ausf\u00FChrung
pref.page.name.sql.format = SQL Formatierung
productName = DBeaver
productSubTitle = Universeller Datenbankmanager
productTitle = DBeaver - Universeller Datenbankmanager
view.progress.title = Hintergrundprozesse
view.search.title = Suchen
view.templates.title = Vorlagen
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
# DBeaver - Universal Database Manager
# Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
# Copyright (C) 2017 Karl Griesser (fullref@gmail.com)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (version 2)
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
menu.edit = Bearbeiten
menu.navigate = Navigation
pref.page.name.binary.editor = Bin\u00E4reditor
pref.page.name.confirmations = Best\u00E4tigungen
pref.page.name.connectionTypes = Verbindungstypen
pref.page.name.data.editor = Dateneditor
pref.page.name.data.formats = Datenformate
pref.page.name.db.configuration = DBeaver
pref.page.name.db.editors = Editoren
pref.page.name.db.ui = Interface
pref.page.name.drivers = Treiber
pref.page.name.meta = Metadaten
pref.page.name.navigator = Navigation
pref.page.name.query.manager = Abfragemanager
pref.page.name.resources = Ressourcen
pref.page.name.resultset = Ergebnismenge
pref.page.name.resultset.binaries = Bin\u00E4rdaten
pref.page.name.resultset.presentation = Darstellung
pref.page.name.sql.completion = SQL-Autovervollst\u00E4ndigen
pref.page.name.sql.editor = SQL-Editor
pref.page.name.sql.execute = SQL Ausf\u00FChrung
pref.page.name.sql.format = SQL Formatieren
pref.page.name.sql.templates = Vorlagen
此差异已折叠。
......@@ -108,6 +108,15 @@ public abstract class PropertySourceAbstract implements DBPPropertyManager, IPro
return props.toArray(new DBPPropertyDescriptor[props.size()]);
}
public DBPPropertyDescriptor getProperty(String id) {
for (DBPPropertyDescriptor prop : props) {
if (prop.getId().equals(id)) {
return prop;
}
}
return null;
}
@Override
public boolean isDirty(Object id) {
return false;
......
......@@ -114,7 +114,7 @@ public abstract class NavigatorHandlerObjectCreateBase extends NavigatorHandlerO
private OBJECT_TYPE newObject;
public CreateJob(CommandTarget commandTarget, DBEObjectMaker<OBJECT_TYPE, CONTAINER_TYPE> objectMaker, CONTAINER_TYPE parentObject, DBSObject sourceObject) {
super("Create new database object with " + objectMaker);
super("Create new database object with " + objectMaker.getClass().getSimpleName());
this.commandTarget = commandTarget;
this.objectMaker = objectMaker;
this.parentObject = parentObject;
......
......@@ -33,6 +33,8 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.edit.DBECommandContext;
import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSDataType;
import org.jkiss.dbeaver.model.struct.DBSEntityAttribute;
import org.jkiss.dbeaver.runtime.properties.ObjectPropertyDescriptor;
import org.jkiss.dbeaver.runtime.properties.PropertySourceAbstract;
......@@ -71,7 +73,7 @@ public class AttributeEditPage extends BaseObjectEditPage {
});
UIUtils.createControlLabel(propsGroup, "Properties").setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
PropertyTreeViewer propertyViewer = new PropertyTreeViewer(propsGroup, SWT.BORDER);
final PropertyTreeViewer propertyViewer = new PropertyTreeViewer(propsGroup, SWT.BORDER);
gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = 400;
propertyViewer.getControl().setLayoutData(gd);
......@@ -82,7 +84,30 @@ public class AttributeEditPage extends BaseObjectEditPage {
}
});
PropertySourceAbstract pc = new PropertySourceEditable(commandContext, attribute, attribute);
PropertySourceAbstract pc = new PropertySourceEditable(commandContext, attribute, attribute) {
@Override
public void setPropertyValue(@Nullable DBRProgressMonitor monitor, Object editableValue, ObjectPropertyDescriptor prop, Object newValue) throws IllegalArgumentException {
super.setPropertyValue(monitor, editableValue, prop, newValue);
/*
if (prop.getId().equals("dataType")) {
newValue = getPropertyValue(monitor, editableValue, prop);
if (newValue instanceof DBSDataType) {
DBPPropertyDescriptor lengthProp = getProperty("maxLength");
if (lengthProp instanceof ObjectPropertyDescriptor) {
DBPDataKind dataKind = ((DBSDataType) newValue).getDataKind();
if (dataKind == DBPDataKind.STRING) {
setPropertyValue(monitor, editableValue, (ObjectPropertyDescriptor) lengthProp, 100);
} else {
setPropertyValue(monitor, editableValue, (ObjectPropertyDescriptor) lengthProp, null);
}
propertyViewer.update(lengthProp, null);
}
}
}
*/
}
};
pc.collectProperties();
for (DBPPropertyDescriptor prop : pc.getProperties()) {
if (prop instanceof ObjectPropertyDescriptor) {
......
......@@ -232,9 +232,17 @@ public class SQLRuleManager extends RuleBasedScanner {
final String blockToggleString = dialect.getBlockToggleString();
if (!CommonUtils.isEmpty(blockToggleString)) {
WordRule blockToggleRule = new WordRule(getWordOrSymbolDetector(blockToggleString), Token.UNDEFINED, true);
blockToggleRule.addWord(blockToggleString, blockToggleToken);
rules.add(blockToggleRule);
int divPos = blockToggleString.indexOf(SQLConstants.KEYWORD_PATTERN_CHARS);
if (divPos != -1) {
String prefix = blockToggleString.substring(0, divPos);
String postfix = blockToggleString.substring(divPos + SQLConstants.KEYWORD_PATTERN_CHARS.length());
WordPatternRule blockToggleRule = new WordPatternRule(new SQLWordDetector(), prefix, postfix, blockToggleToken);
rules.add(blockToggleRule);
} else {
WordRule blockToggleRule = new WordRule(getWordOrSymbolDetector(blockToggleString), Token.UNDEFINED, true);
blockToggleRule.addWord(blockToggleString, blockToggleToken);
rules.add(blockToggleRule);
}
}
// Parameter rule
......
......@@ -766,14 +766,19 @@ public class PropertyTreeViewer extends TreeViewer {
public String getToolTipText(Object obj)
{
if (!(obj instanceof TreeNode)) {
return ""; //$NON-NLS-1$
return null; //$NON-NLS-1$
}
TreeNode node = (TreeNode) obj;
String toolTip;
if (node.category != null) {
return node.category;
toolTip = node.category;
} else {
return isName ? node.property.getDescription() : getText(obj, 1);
toolTip = isName ? node.property.getDescription() : getText(obj, 1);
}
if (CommonUtils.isEmpty(toolTip)) {
return null;
}
return toolTip;
}
@Override
......
......@@ -329,7 +329,6 @@
<replace provider="generic" driver="exasol"/>
<property name="querytimeout" value="600"/>
<property name="clientname" value="DBeaver"/>
<property name="connecttimeout" value="40"/>
<property name="@dbeaver-default-dataformat.type.timestamp.pattern"
value="yyyy-MM-dd-HH.mm.ss.ffffff"/>
......
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
# DBeaver - Universal Database Manager
# Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
# Copyright (C) 2017 Karl Griesser (fullref@gmail.com)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (version 2)
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
category.exasol.name = Exasol
dialog.connection.header = Exasol Verbindungseinstellungen
editor.source.ddl.description = DDL
editor.source.ddl.name = DDL
editor.source.declaration.description = Quellcode
editor.source.declaration.name = Quellcode
menu.tables.manage = Verwalten
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolConnectionGrant.connection.name = Verbindungsname
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolConnectionGrant.description.name = Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolRole.created.name = Angelegt am
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolRole.description.name = Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolRole.name.name = Rolenname
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolRole.priority.name = Priorit\u00E4t
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolRoleGrant.role.name = Rolenname
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolScriptGrant.procedure.name = Skript
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolSystemGrant.systemPrivilege.name = Name des Rechtes
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolTableGrant.table.name = Tabelle
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolUser.created.name = Angelegt am
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolUser.description.name = Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolUser.name.name = Benutzername
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolUser.password.name = Passwort-Hash
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolUser.priority.name = Priorit\u00E4t
meta.org.jkiss.dbeaver.ext.exasol.manager.security.ExasolViewGrant.view.name = View
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolConnection.created.name = Angelegt am
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolConnection.description.name = Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolConnection.name.name = Verbindungsname
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolConnection.userName.name = Benutzername
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolSchema.createTime.name = Angelegt am
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolSchema.description.name = Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolSchema.name.name = Schemaname
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolSchema.owner.name = Besitzer
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolSchema.sql.name = Definition
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolScript.createTime.name = Angelegt am
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolScript.creationTime.name = Angelegt am
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolScript.description.name = Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolScript.language.name = Programmiersprache
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolScript.name.name = Skriptname
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolScript.owner.name = Besitzer
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolScript.resultType.name = Ergebnistyp des Skripts
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolScript.type.name = Skripttyp (Scalar, Set, Null)
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTable.compressedsize.name = komprimierte Gr\u00F6\u00DFe
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTable.createTime.name = Angelegt am
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTable.deletePercentage.name = Prozent gel\u00F6schte S\u00E4tze
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTable.description.name = Tabellenbeschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTable.lastCommit.name = Letzte Transaktion
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTable.rawsize.name = Unkomprimierte Gr\u00F6\u00DFe
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase.compressedsize.name = Komprimierte Gr\u00F6\u00DFe
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase.createTime.name = Angelegt am
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase.deletePercentage.name = Prozent gel\u00F6schte S\u00E4tze
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase.description.name = Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase.name.name = Name
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase.owner.name = Besitzer
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase.rawsize.name = Unkomprimierte Gr\u00F6\u00DFe
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableBase.schema.name = Schema
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.dataType.name = Typ
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.description.name = Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.distKey.name = Teil des Verteilungsschl\u00FCssels
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.identity.name = Identity Value
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.identityValue.name = Aktueller Wert der Auto-Increment Spalte
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.inUniqueKey.name = Schl\u00FCssel
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.isDistKey.name = Teil des Verteilungsschl\u00FCssels
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.keySeq.name = Key Seq
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.owner.name = Tabelle
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.status.name = Status
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableColumn.stringLength.name = Zeichenl\u00E4nge
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableForeignKey.enabled.name = Eingeschaltet
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableForeignKey.referencedConstraint.name = Referenced Constraint
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableForeignKey.referencedTable.name = referenzierte Tabelle
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableUniqueKey.constraintType.name = Constraint Type
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableUniqueKey.description.name = PK Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableUniqueKey.enabled.name = Eingeschaltet
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolTableUniqueKey.owner.name = PK Besitzer
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolUser.description.name = Benutzerbeschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolUser.name.name = Benutzername
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolView.description.name = View Beschreibung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolView.owner.name = Besitzer
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolView.text.name = SQL Definition
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolVirtualSchema.adapterNotes.name = Adapter-Anmerkungen
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolVirtualSchema.adapterScriptName.name = Adapterskript Name
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolVirtualSchema.adapterScriptSchema.name = Adapterskript Schema
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolVirtualSchema.lastRefresh.name = Letzer Aktualisierung
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolVirtualSchema.refreshBy.name = Aktualisiert durch
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolVirtualSchemaParameter.name.name = Property Name
meta.org.jkiss.dbeaver.ext.exasol.model.ExasolVirtualSchemaParameter.value.name = Property Wert
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.activity.name = Aktivit\u00E4t
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.client.name = Client Name
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.commandName.name = Befehl
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.driver.name = Treiber
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.duration.name = Dauer
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.encrypted.name = Verschl\u00FCsselt
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.host.name = Hostname
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.loginTime.name = Loginzeitpunkt
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.nice.name = Nice Wert
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.osName.name = Betriebsystemname
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.osUser.name = Betriebsystem-Benutzer
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.priority.name = Priorit\u00E4t
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.resources.name = Ress %
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.scopeSchema.name = Schema
meta.org.jkiss.dbeaver.ext.exasol.model.app.ExasolServerSession.userName.name = Benutzername
meta.org.jkiss.dbeaver.ext.exasol.model.plan.ExasolPlanNode.commandClass.name = Befehlsklasse
meta.org.jkiss.dbeaver.ext.exasol.model.plan.ExasolPlanNode.commandName.name = Befehl
meta.org.jkiss.dbeaver.ext.exasol.model.plan.ExasolPlanNode.duration.name = Dauer in S
meta.org.jkiss.dbeaver.ext.exasol.model.plan.ExasolPlanNode.objectName.name = Objektname
meta.org.jkiss.dbeaver.ext.exasol.model.plan.ExasolPlanNode.objectRows.name = Objektzeilen
meta.org.jkiss.dbeaver.ext.exasol.model.plan.ExasolPlanNode.objectSchema.name = Objektschema
meta.org.jkiss.dbeaver.ext.exasol.model.plan.ExasolPlanNode.outRows.name = Ausgabezeilen
tool.org.jkiss.dbeaver.ext.exasol.database.reorg.name = Datenbank Reorganisieren
tool.org.jkiss.dbeaver.ext.exasol.table.export.name = Tabelle(n) exportieren
tool.org.jkiss.dbeaver.ext.exasol.table.import.name = Tabelle(n) importieren
tool.org.jkiss.dbeaver.ext.exasol.table.reorg.name = Tabellenreorg ...
tool.org.jkiss.dbeaver.ext.exasol.table.truncate.name = Leeren ...
tree.administer.node.name = Administrieren
tree.check_constraint_columns.node.name = Spalten
tree.column.node.name = Spalte
tree.columns.node.name = Spalten
tree.connection.node.name = Verbindung
tree.connections.node.name = Verbindungen
tree.constraint.node.name = Prim\u00E4rschl\u00FCssel
tree.constraint_columns.node.name = Spalten
tree.constraints.node.name = Prim\u00E4rschl\u00FCssel
tree.container.node.name = Kontainer
tree.containers.node.name = Kontainer
tree.databaseauth.node.name = Datenbankberechtigungen
tree.foreign_key.node.name = Fremdschl\u00FCssel
tree.foreign_key_columns.node.name = Fremdschl\u00FCsselspalten
tree.foreign_keys.node.name = Fremdschl\u00FCssel
tree.function.node.name = Funktion
tree.functions.node.name = Funktionen
tree.functionsauths.node.name = Funktionsberechtigungen
tree.global_metadata.node.name = Globale Metadaten
tree.procedure.node.name = Prozedur
tree.procedures.node.name = Prozeduren
tree.proceduresauths.node.name = Prozedurberechtigungen
tree.reference_key.node.name = Referenz
tree.references.node.name = Referenzen
tree.remoteserver.node.name = Remote Server
tree.remoteservers.node.name = Remote Servers
tree.role.node.name = Rolle
tree.roleauth.node.name = Berechtigung
tree.roleauths.node.name = Berechtigungen
tree.roles.node.name = Rollen
tree.schema.node.name = Schema
tree.schemas.node.name = Schemata
tree.schemasauths.node.name = Schema Berechtigungen
tree.script.node.name = Skript
tree.scripts.node.name = Skripte
tree.security.node.name = Sicherheit
tree.sessions.node.name = Sessions
tree.sysgrant.node.name = Systemberechtigungen
tree.system_info.node.name = Systeminformationen
tree.table.node.name = Tabelle
tree.tables.node.name = Tabellen
tree.user.node.name = Benutzer
tree.userauth.node.name = Berechtigung
tree.userauths.node.name = Berechtigungen
tree.users.node.name = Benutzer
tree.view.node.name = View
tree.viewdep.node.name = Abh\u00E4ngigkeit
tree.viewdeps.node.name = Abh\u00E4ngigkeiten
tree.views.node.name = Views
tree.viewsauths.node.name = View Berechtigungen
tree.virtualschema.node.name = Virtuelles Schema
tree.virtualschemaparameters.node.name = Virtuelles Schema - Parameter
tree.virtualschemas.node.name = Virtuelle Schemata
......@@ -18,17 +18,22 @@
*/
package org.jkiss.dbeaver.ext.exasol;
import org.eclipse.core.runtime.Platform;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.ext.exasol.model.ExasolDataSource;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSourceProvider;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;
......@@ -61,6 +66,7 @@ public class ExasolDataSourceProvider extends JDBCDataSourceProvider {
return FEATURE_SCHEMAS;
}
@Override
public String getConnectionURL(DBPDriver driver, DBPConnectionConfiguration connectionInfo) {
//Default Port
......@@ -76,17 +82,27 @@ public class ExasolDataSourceProvider extends JDBCDataSourceProvider {
//check if we got an backup host list
String backupHostList = connectionInfo.getProviderProperty(ExasolConstants.DRV_BACKUP_HOST_LIST);
if (backupHostList != null)
if (backupHostList != null && backupHostList != "")
url.append(",").append(backupHostList).append(port);
if (!url.toString().toUpperCase().contains("CLIENTNAME")) {
String clientName = "DBeaver";
// Client info can only be provided in the url with the exasol driver
String clientName = Platform.getProduct().getName();
Object propClientName = properties.get(ExasolConstants.DRV_CLIENT_NAME);
if (propClientName != null)
clientName = propClientName.toString();
url.append(";clientname=").append(clientName);
}
if (!url.toString().toUpperCase().contains("CLIENTVERSION"))
{
String clientVersion=Platform.getProduct().getDefiningBundle().getVersion().toString();
Object propClientName = properties.get(ExasolConstants.DRV_CLIENT_VERSION);
if (propClientName != null)
clientVersion = propClientName.toString();
url.append(";clientversion=").append(clientVersion);
}
Object querytimeout = properties.get(ExasolConstants.DRV_QUERYTIMEOUT);
if (querytimeout != null)
url.append(";").append(ExasolConstants.DRV_QUERYTIMEOUT).append("=").append(querytimeout);
......
#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
# DBeaver - Universal Database Manager
# Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
# Copyright (C) 2017 Karl Griesser (fullref@gmail.com)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (version 2)
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
dialog_connection_password = Passwort
dialog_connection_port = Port
dialog_connection_user_name = Benutzername
dialog_table_open_output_directory = Ausgabeverzeichnis
dialog_table_tools_column_heading = Spalten\u00FCberschriften?
dialog_table_tools_column_sep = Spaltentrennzeichen
dialog_table_tools_encoding = Zeichenkodierung
dialog_table_tools_export_compress = Dateien komprimieren?
dialog_table_tools_export_title = Export auf CSV-Datei
dialog_table_tools_file_template = Dateinamen-Vorlage
dialog_table_tools_import_title = Aus CSV-Datei importieren
dialog_table_tools_options = Optionen
dialog_table_tools_progress = Fortschritt
dialog_table_tools_result = Ergebnis
dialog_table_tools_row_sep = Zeilentrennzeichen
dialog_table_tools_string_sep = Zeichentrenneichen
dialog_table_tools_string_sep_mode = Zeichentrennzeichen Verwendungsart
dialog_table_tools_success_title = Erfolg
editors_exasol_session_editor_action_kill = Verbindung terminieren
editors_exasol_session_editor_confirm_action = {0} "{1}". Sind Sie sicher?
editors_exasol_session_editor_title_kill_session = Verbindung terminieren
editors_exasol_session_editor_title_kill_session_statement = Befehl terminieren
......@@ -98,7 +98,7 @@ public class ExasolConnection
}
@Override
public DBPDataSource getDataSource()
public ExasolDataSource getDataSource()
{
return this.dataSource;
}
......
......@@ -19,11 +19,12 @@
package org.jkiss.dbeaver.ext.exasol.model;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.Platform;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ext.exasol.ExasolConstants;
import org.jkiss.dbeaver.ext.exasol.ExasolDataSourceProvider;
import org.jkiss.dbeaver.ext.exasol.ExasolSQLDialect;
import org.jkiss.dbeaver.ext.exasol.manager.security.ExasolBaseObjectGrant;
......@@ -38,6 +39,7 @@ import org.jkiss.dbeaver.model.DBPDataSourceInfo;
import org.jkiss.dbeaver.model.DBPErrorAssistant;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose;
import org.jkiss.dbeaver.model.exec.DBCSession;
......@@ -100,6 +102,8 @@ public class ExasolDataSource extends JDBCDataSource
private DBSObjectCache<ExasolDataSource, ExasolConnectionGrant> connectionGrantCache = null;
private DBSObjectCache<ExasolDataSource, ExasolBaseObjectGrant> baseTableGrantCache = null;
private int driverMajorVersion = 5;
private String activeSchemaName;
......@@ -137,6 +141,8 @@ public class ExasolDataSource extends JDBCDataSource
this.activeSchemaName = determineActiveSchema(session);
this.exasolCurrentUserPrivileges = new ExasolCurrentUserPrivileges(
monitor, session, this);
this.driverMajorVersion = session.getMetaData().getDriverMajorVersion();
} catch (SQLException e) {
LOG.warn("Error reading active schema", e);
......@@ -253,6 +259,11 @@ public class ExasolDataSource extends JDBCDataSource
private Pattern ERROR_POSITION_PATTERN = Pattern.compile("(.+)\\[line ([0-9]+), column ([0-9]+)\\]");
public int getDriverMajorVersion()
{
return this.driverMajorVersion;
}
@Nullable
@Override
public ErrorPosition[] getErrorPosition(@NotNull DBCSession session, @NotNull String query, @NotNull Throwable error) {
......@@ -726,6 +737,54 @@ public class ExasolDataSource extends JDBCDataSource
return null;
}
}
@Override
public String getConnectionURL(DBPConnectionConfiguration connectionInfo) {
//Default Port
String port = ":8563";
if (!CommonUtils.isEmpty(connectionInfo.getHostPort())) {
port = ":" + connectionInfo.getHostPort();
}
Map<String, String> properties = connectionInfo.getProperties();
StringBuilder url = new StringBuilder(128);
url.append("jdbc:exa:").append(connectionInfo.getHostName()).append(port);
//check if we got an backup host list
String backupHostList = connectionInfo.getProviderProperty(ExasolConstants.DRV_BACKUP_HOST_LIST);
if (backupHostList != null && backupHostList != "")
url.append(",").append(backupHostList).append(port);
if (!url.toString().toUpperCase().contains("CLIENTNAME")) {
// Client info can only be provided in the url with the exasol driver
String clientName = Platform.getProduct().getName();
Object propClientName = properties.get(ExasolConstants.DRV_CLIENT_NAME);
if (propClientName != null)
clientName = propClientName.toString();
url.append(";clientname=").append(clientName);
}
if (!url.toString().toUpperCase().contains("CLIENTVERSION"))
{
String clientVersion=Platform.getProduct().getDefiningBundle().getVersion().toString();
Object propClientName = properties.get(ExasolConstants.DRV_CLIENT_VERSION);
if (propClientName != null)
clientVersion = propClientName.toString();
url.append(";clientversion=").append(clientVersion);
}
Object querytimeout = properties.get(ExasolConstants.DRV_QUERYTIMEOUT);
if (querytimeout != null)
url.append(";").append(ExasolConstants.DRV_QUERYTIMEOUT).append("=").append(querytimeout);
Object connecttimeout = properties.get(ExasolConstants.DRV_CONNECT_TIMEOUT);
if (connecttimeout != null)
url.append(";").append(ExasolConstants.DRV_CONNECT_TIMEOUT).append("=").append(connecttimeout);
return url.toString();
}
@Override
public DBSDataType getLocalDataType(String typeName)
......@@ -747,7 +806,7 @@ public class ExasolDataSource extends JDBCDataSource
plan.explain(session);
return plan;
}
public DBSObjectCache<ExasolDataSource, ExasolDataType> getDataTypeCache()
{
return dataTypeCache;
......
......@@ -60,14 +60,16 @@ public class ExasolTableColumn extends JDBCTableColumn<ExasolTableBase>
public ExasolTableColumn(DBRProgressMonitor monitor, ExasolTableBase tableBase, ResultSet dbResult)
throws DBException {
super(tableBase, true);
this.formatType = JDBCUtils.safeGetString(dbResult, "COLUMN_TYPE");
setName(JDBCUtils.safeGetString(dbResult, "COLUMN_NAME"));
setOrdinalPosition(JDBCUtils.safeGetInt(dbResult, "ORDINAL_POSITION"));
setRequired(JDBCUtils.safeGetBoolean(dbResult, "COLUMN_IS_NULLABLE"));
setRequired(! JDBCUtils.safeGetBoolean(dbResult, "COLUMN_IS_NULLABLE"));
setDefaultValue(JDBCUtils.safeGetString(dbResult, "COLUMN_DEF"));
setMaxLength(JDBCUtils.safeGetInt(dbResult, "COLUMN_SIZE"));
setScale(JDBCUtils.safeGetInt(dbResult, "DECIMAL_DIGITS"));
this.isInDistKey = JDBCUtils.safeGetBoolean(dbResult, "COLUMN_IS_DISTRIBUTION_KEY");
this.identity = JDBCUtils.safeGetInteger(dbResult, "COLUMN_IDENTITY") == null ? false : true;
......@@ -75,6 +77,20 @@ public class ExasolTableColumn extends JDBCTableColumn<ExasolTableBase>
this.identityValue = JDBCUtils.safeGetBigDecimal(dbResult, "COLUMN_IDENTITY");
this.remarks = JDBCUtils.safeGetString(dbResult, "COLUMN_COMMENT");
this.dataType = tableBase.getDataSource().getDataType(monitor, JDBCUtils.safeGetString(dbResult, "TYPE_NAME"));
// drivers > 5 have the issue that an cast from decimal without scale is made to matching integer in sql
// so meta data queries have to handle this case
if (tableBase.getDataSource().getDriverMajorVersion() > 5 && this.dataType.getName().equals("DECIMAL") && super.getScale() == 0)
{
if (super.getMaxLength() <= 4) {
this.dataType = tableBase.getDataSource().getDataType(monitor,"SMALLINT");
} else if (super.getMaxLength() > 4 && super.getMaxLength() <= 9 ) {
this.dataType = tableBase.getDataSource().getDataType(monitor,"INTEGER");
} else if (super.getMaxLength() > 9 && super.getMaxLength() <= 18 ) {
this.dataType = tableBase.getDataSource().getDataType(monitor,"BIGINT");
}
}
this.changed = true;
......
......@@ -33,6 +33,8 @@ import org.jkiss.dbeaver.model.impl.sql.edit.struct.SQLTableColumnManager;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSDataType;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.ui.UITask;
import org.jkiss.dbeaver.ui.editors.object.struct.AttributeEditPage;
import org.jkiss.utils.CommonUtils;
import java.sql.Types;
......@@ -112,17 +114,28 @@ public class PostgreTableColumnManager extends SQLTableColumnManager<PostgreTabl
}
@Override
protected PostgreTableColumn createDatabaseObject(DBRProgressMonitor monitor, DBECommandContext context, PostgreTableBase parent, Object copyFrom)
protected PostgreTableColumn createDatabaseObject(final DBRProgressMonitor monitor, final DBECommandContext context, final PostgreTableBase parent, Object copyFrom)
{
DBSDataType columnType = findBestDataType(parent.getDataSource(), "varchar"); //$NON-NLS-1$
final PostgreTableColumn column = new PostgreTableColumn(parent);
column.setName(getNewColumnName(monitor, context, parent));
final PostgreDataType dataType = parent.getDatabase().getDataType(PostgreOid.VARCHAR);
column.setDataType(dataType); //$NON-NLS-1$
column.setMaxLength(columnType != null && columnType.getDataKind() == DBPDataKind.STRING ? 100 : 0);
column.setOrdinalPosition(-1);
return column;
return new UITask<PostgreTableColumn>() {
@Override
protected PostgreTableColumn runTask() {
final PostgreTableColumn column = new PostgreTableColumn(parent);
column.setName(getNewColumnName(monitor, context, parent));
final PostgreDataType dataType = parent.getDatabase().getDataType(PostgreOid.VARCHAR);
column.setDataType(dataType); //$NON-NLS-1$
column.setOrdinalPosition(-1);
AttributeEditPage page = new AttributeEditPage(null, column);
if (!page.edit()) {
return null;
}
if (column.getDataKind() == DBPDataKind.STRING && !column.getTypeName().contains("text") && column.getMaxLength() <= 0) {
column.setMaxLength(100);
}
return column;
}
}.execute();
}
@Override
......
......@@ -26,6 +26,7 @@ import org.jkiss.dbeaver.model.data.DBDBinaryFormatter;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCDatabaseMetaData;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource;
import org.jkiss.dbeaver.model.impl.jdbc.JDBCSQLDialect;
import org.jkiss.dbeaver.model.sql.SQLConstants;
import java.util.Arrays;
import java.util.Collections;
......@@ -61,7 +62,12 @@ class PostgreDialect extends JDBCSQLDialect {
@Nullable
@Override
public String getBlockToggleString() {
return "$$";
return "$" + SQLConstants.KEYWORD_PATTERN_CHARS + "$";
}
@Override
public String[][] getBlockBoundStrings() {
return null;
}
@Override
......
......@@ -3,5 +3,6 @@
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="C:/temp/org.eclipse.jface.text_3.5.0.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
......@@ -624,4 +624,5 @@ public class SQLConstants {
public static final char DEFAULT_PARAMETER_MARK = '?';
public static final char DEFAULT_PARAMETER_PREFIX = ':';
public static final String DEFAULT_IDENTIFIER_QUOTE = "\"";
public static final String KEYWORD_PATTERN_CHARS = "\\*\\";
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册