2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.taxeditor
.util
;
12 * based on from http://code.google.com/p/java-tester/source/browse/trunk/src/main/java/org/jtester/unitils/database/H2DbSupport.java
16 import org
.unitils
.core
.dbsupport
.DbSupport
;
18 public class H2DbSupport
extends DbSupport
{
20 * Creates support for H2 databases.
22 public H2DbSupport() {
27 public Set
<String
> getColumnNames(String tableName
) {
28 return getSQLHandler().getItemsAsStringSet(
29 "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '" + tableName
30 + "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
34 public Set
<String
> getTableNames() {
35 return getSQLHandler().getItemsAsStringSet(
36 "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'TABLE' AND TABLE_SCHEMA = '"
37 + getSchemaName() + "'");
41 public Set
<String
> getViewNames() {
42 return getSQLHandler().getItemsAsStringSet(
43 "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'VIEW' AND TABLE_SCHEMA = '"
44 + getSchemaName() + "'");
48 public Set
<String
> getSequenceNames() {
49 return getSQLHandler().getItemsAsStringSet(
50 "select SEQUENCE_NAME from INFORMATION_SCHEMA.SEQUENCES where SEQUENCE_SCHEMA = '"
51 + getSchemaName() + "'");
55 public Set
<String
> getTriggerNames() {
56 return getSQLHandler().getItemsAsStringSet(
57 "select TRIGGER_NAME from INFORMATION_SCHEMA.TRIGGERS where TRIGGER_SCHEMA = '" + getSchemaName()
62 public long getSequenceValue(String sequenceName
) {
63 return getSQLHandler().getItemAsLong(
64 "select CURRENT_VALUE from INFORMATION_SCHEMA.SEQUENCES where SEQUENCE_SCHEMA = '"
65 + getSchemaName() + "' and SEQUENCE_NAME = '" + sequenceName
+ "'");
69 public boolean supportsSequences() {
74 public boolean supportsTriggers() {
79 public boolean supportsIdentityColumns() {
84 public void incrementSequenceToValue(String sequenceName
, long newSequenceValue
) {
85 getSQLHandler().executeUpdate(
86 "alter sequence " + qualified(sequenceName
) + " restart with " + newSequenceValue
);
90 public void incrementIdentityColumnToValue(String tableName
, String identityColumnName
, long identityValue
) {
91 getSQLHandler().executeUpdate(
92 "alter table " + qualified(tableName
) + " alter column " + quoted(identityColumnName
)
93 + " RESTART WITH " + identityValue
);
97 public void disableReferentialConstraints() {
98 Set
<String
> tableNames
= getTableNames();
99 for (String tableName
: tableNames
) {
100 disableReferentialConstraints(tableName
);
105 public void disableValueConstraints() {
106 Set
<String
> tableNames
= getTableNames();
107 for (String tableName
: tableNames
) {
108 disableValueConstraints(tableName
);
112 private void disableReferentialConstraints(String tableName
) {
113 Set
<String
> constraintNames
= this.getForeignKeyConstraintNames(tableName
);
114 for (String constraintName
: constraintNames
) {
115 this.removeForeignKeyConstraint(tableName
, constraintName
);
119 private void disableValueConstraints(String tableName
) {
120 Set
<String
> primaryKeyColumnNames
= this.getPrimaryKeyColumnNames(tableName
);
122 Set
<String
> notNullColumnNames
= this.getNotNullColummnNames(tableName
);
123 for (String notNullColumnName
: notNullColumnNames
) {
124 if (primaryKeyColumnNames
.contains(notNullColumnName
)) {
127 this.removeNotNullConstraint(tableName
, notNullColumnName
);
132 * Gets the names of all identity columns of the given table.
134 * todo check, at this moment the PK columns are returned
136 * @param tableName The table, not null
137 * @return The names of the identity columns of the table with the given name
140 public Set
<String
> getIdentityColumnNames(String tableName
) {
141 return getPrimaryKeyColumnNames(tableName
);
144 private Set
<String
> getPrimaryKeyColumnNames(String tableName
) {
145 return getSQLHandler().getItemsAsStringSet(
146 "select COLUMN_NAME from INFORMATION_SCHEMA.INDEXES where PRIMARY_KEY=TRUE AND TABLE_NAME = '"
147 + tableName
+ "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
150 private Set
<String
> getNotNullColummnNames(String tableName
) {
151 return getSQLHandler().getItemsAsStringSet(
152 "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE = 'NO' AND TABLE_NAME = '"
153 + tableName
+ "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
156 private Set
<String
> getForeignKeyConstraintNames(String tableName
) {
157 return getSQLHandler().getItemsAsStringSet(
158 "select CONSTRAINT_NAME from INFORMATION_SCHEMA.CONSTRAINTS "
159 + "where CONSTRAINT_TYPE = 'REFERENTIAL' AND TABLE_NAME = '" + tableName
160 + "' AND CONSTRAINT_SCHEMA = '" + getSchemaName() + "'");
163 private void removeForeignKeyConstraint(String tableName
, String constraintName
) {
164 getSQLHandler().executeUpdate(
165 "alter table " + qualified(tableName
) + " drop constraint " + quoted(constraintName
));
168 private void removeNotNullConstraint(String tableName
, String columnName
) {
169 getSQLHandler().executeUpdate(
170 "alter table " + qualified(tableName
) + " alter column " + quoted(columnName
) + " set null");