From 76df7f4e9f8dc113400dfa2da51b2fd275f77871 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Wed, 8 Mar 2017 11:58:23 +0300 Subject: [PATCH] #1394 HSQLDB initial stub --- .../feature.xml | 1 + .../org.jkiss.dbeaver.ext.hsqldb/.classpath | 7 + plugins/org.jkiss.dbeaver.ext.hsqldb/.project | 28 ++++ .../.settings/org.eclipse.jdt.core.prefs | 12 ++ .../META-INF/MANIFEST.MF | 19 +++ .../build.properties | 6 + .../plugin.properties | 0 .../org.jkiss.dbeaver.ext.hsqldb/plugin.xml | 10 ++ plugins/org.jkiss.dbeaver.ext.hsqldb/pom.xml | 14 ++ .../ext/hsqldb/model/HSQLMetaModel.java | 129 ++++++++++++++++++ 10 files changed, 226 insertions(+) create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/.classpath create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/.project create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/.settings/org.eclipse.jdt.core.prefs create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/META-INF/MANIFEST.MF create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/build.properties create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/plugin.properties create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/plugin.xml create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/pom.xml create mode 100644 plugins/org.jkiss.dbeaver.ext.hsqldb/src/org/jkiss/dbeaver/ext/hsqldb/model/HSQLMetaModel.java diff --git a/features/org.jkiss.dbeaver.ext.generic.feature/feature.xml b/features/org.jkiss.dbeaver.ext.generic.feature/feature.xml index 9d998fb6d5..1ab248c1d2 100644 --- a/features/org.jkiss.dbeaver.ext.generic.feature/feature.xml +++ b/features/org.jkiss.dbeaver.ext.generic.feature/feature.xml @@ -26,6 +26,7 @@ + diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/.classpath b/plugins/org.jkiss.dbeaver.ext.hsqldb/.classpath new file mode 100644 index 0000000000..098194ca4b --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.hsqldb/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/.project b/plugins/org.jkiss.dbeaver.ext.hsqldb/.project new file mode 100644 index 0000000000..f425c0acaa --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.hsqldb/.project @@ -0,0 +1,28 @@ + + + org.jkiss.dbeaver.ext.hsqldb + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/.settings/org.eclipse.jdt.core.prefs b/plugins/org.jkiss.dbeaver.ext.hsqldb/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..7f50476aca --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.hsqldb/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +#Thu Dec 30 16:00:50 MSK 2010 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/META-INF/MANIFEST.MF b/plugins/org.jkiss.dbeaver.ext.hsqldb/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..5be453511f --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.hsqldb/META-INF/MANIFEST.MF @@ -0,0 +1,19 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: HSQLDB Plug-in +Bundle-SymbolicName: org.jkiss.dbeaver.ext.hsqldb;singleton:=true +Bundle-Version: 1.0.0 +Bundle-Release-Date: 20170301 +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.ui.views, + org.eclipse.jface, + org.eclipse.jface.text, + org.jkiss.dbeaver.core, + org.eclipse.ui.workbench.texteditor, + org.jkiss.dbeaver.ext.generic +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-Vendor: JKISS +Bundle-ClassPath: . +Bundle-Localization: plugin diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/build.properties b/plugins/org.jkiss.dbeaver.ext.hsqldb/build.properties new file mode 100644 index 0000000000..7b17480348 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.hsqldb/build.properties @@ -0,0 +1,6 @@ +source.. = src/ +output.. = bin/ +bin.includes = plugin.xml,\ + META-INF/,\ + .,\ + plugin.properties diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/plugin.properties b/plugins/org.jkiss.dbeaver.ext.hsqldb/plugin.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/plugin.xml b/plugins/org.jkiss.dbeaver.ext.hsqldb/plugin.xml new file mode 100644 index 0000000000..20b09f121b --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.hsqldb/plugin.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/pom.xml b/plugins/org.jkiss.dbeaver.ext.hsqldb/pom.xml new file mode 100644 index 0000000000..c6dd4c5442 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.hsqldb/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + + org.jkiss.dbeaver + dbeaver + 1.0.0 + ../../ + + org.jkiss.dbeaver.ext.hsqldb + 1.0.0 + eclipse-plugin + diff --git a/plugins/org.jkiss.dbeaver.ext.hsqldb/src/org/jkiss/dbeaver/ext/hsqldb/model/HSQLMetaModel.java b/plugins/org.jkiss.dbeaver.ext.hsqldb/src/org/jkiss/dbeaver/ext/hsqldb/model/HSQLMetaModel.java new file mode 100644 index 0000000000..f8f21a70fd --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ext.hsqldb/src/org/jkiss/dbeaver/ext/hsqldb/model/HSQLMetaModel.java @@ -0,0 +1,129 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) + * + * 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.ext.hsqldb.model; + +import org.jkiss.code.NotNull; +import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.ext.generic.model.*; +import org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel; +import org.jkiss.dbeaver.model.DBUtils; +import org.jkiss.dbeaver.model.exec.jdbc.JDBCPreparedStatement; +import org.jkiss.dbeaver.model.exec.jdbc.JDBCResultSet; +import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession; +import org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils; +import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * HSQLMetaModel + */ +public class HSQLMetaModel extends GenericMetaModel +{ + public HSQLMetaModel() { + super(); + } + + @Override + public String getViewDDL(DBRProgressMonitor monitor, GenericTable sourceObject) throws DBException { + GenericDataSource dataSource = sourceObject.getDataSource(); + try (JDBCSession session = DBUtils.openMetaSession(monitor, dataSource, "Read HSQLDB view source")) { + try (JDBCPreparedStatement dbStat = session.prepareStatement( + "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS " + + "WHERE TABLE_SCHEMA=? AND TABLE_NAME=?")) + { + dbStat.setString(1, sourceObject.getContainer().getName()); + dbStat.setString(2, sourceObject.getName()); + try (JDBCResultSet dbResult = dbStat.executeQuery()) { + if (dbResult.nextRow()) { + return dbResult.getString(1); + } + return "-- HSQLDB view definition not found"; + } + } + } catch (SQLException e) { + throw new DBException(e, dataSource); + } + } + + @Override + public String getProcedureDDL(DBRProgressMonitor monitor, GenericProcedure sourceObject) throws DBException { + GenericDataSource dataSource = sourceObject.getDataSource(); + try (JDBCSession session = DBUtils.openMetaSession(monitor, dataSource, "Read HSQLDB procedure source")) { + try (JDBCPreparedStatement dbStat = session.prepareStatement( + "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES " + + "WHERE ROUTINE_SCHEMA=? AND ROUTINE_NAME=?")) + { + dbStat.setString(1, sourceObject.getContainer().getName()); + dbStat.setString(2, sourceObject.getName()); + try (JDBCResultSet dbResult = dbStat.executeQuery()) { + if (dbResult.nextRow()) { + return dbResult.getString(1); + } + return "-- HSQLDB procedure definition not found"; + } + } + } catch (SQLException e) { + throw new DBException(e, dataSource); + } + } + + @Override + public boolean supportsSequences(@NotNull GenericDataSource dataSource) { + return true; + } + + @Override + public List loadSequences(@NotNull DBRProgressMonitor monitor, @NotNull GenericStructContainer container) throws DBException { + try (JDBCSession session = DBUtils.openMetaSession(monitor, container.getDataSource(), "Read sequences")) { + try (JDBCPreparedStatement dbStat = session.prepareStatement("SELECT * FROM INFORMATION_SCHEMA.SEQUENCES WHERE SEQUENCE_SCHEMA=?")) { + dbStat.setString(1, container.getName()); + List result = new ArrayList<>(); + + try (JDBCResultSet dbResult = dbStat.executeQuery()) { + while (dbResult.next()) { + String name = JDBCUtils.safeGetString(dbResult, "SEQUENCE_NAME"); + if (name == null) { + continue; + } + GenericSequence sequence = new GenericSequence( + container, + name, + null, + JDBCUtils.safeGetLong(dbResult, "NEXT_VALUE"), + JDBCUtils.safeGetLong(dbResult, "MINIMUM_VALUE"), + JDBCUtils.safeGetLong(dbResult, "MAXIMUM_VALUE"), + JDBCUtils.safeGetLong(dbResult, "INCREMENT") + ); + result.add(sequence); + } + } + return result; + } + } catch (SQLException e) { + throw new DBException(e, container.getDataSource()); + } + } + + @Override + public String getAutoIncrementClause(GenericTableColumn column) { + return "IDENTITY"; + } + +} -- GitLab