1 package eu
.etaxonomy
.cdm
.database
;
3 * based on from http://code.google.com/p/java-tester/source/browse/trunk/src/main/java/org/jtester/unitils/database/H2DbSupport.java
9 import org
.unitils
.core
.dbsupport
.DbSupport
;
11 public class H2DbSupport
extends DbSupport
{
13 * Creates support for HsqlDb databases.
15 public H2DbSupport() {
20 public Set
<String
> getColumnNames(String tableName
) {
21 return getSQLHandler().getItemsAsStringSet(
22 "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '" + tableName
23 + "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
27 public Set
<String
> getTableNames() {
28 return getSQLHandler().getItemsAsStringSet(
29 "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'TABLE' AND TABLE_SCHEMA = '"
30 + getSchemaName() + "'");
34 public Set
<String
> getViewNames() {
35 return getSQLHandler().getItemsAsStringSet(
36 "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'VIEW' AND TABLE_SCHEMA = '"
37 + getSchemaName() + "'");
41 public Set
<String
> getSequenceNames() {
42 return getSQLHandler().getItemsAsStringSet(
43 "select SEQUENCE_NAME from INFORMATION_SCHEMA.SEQUENCES where SEQUENCE_SCHEMA = '"
44 + getSchemaName() + "'");
48 public Set
<String
> getTriggerNames() {
49 return getSQLHandler().getItemsAsStringSet(
50 "select TRIGGER_NAME from INFORMATION_SCHEMA.TRIGGERS where TRIGGER_SCHEMA = '" + getSchemaName()
55 public long getSequenceValue(String sequenceName
) {
56 return getSQLHandler().getItemAsLong(
57 "select CURRENT_VALUE from INFORMATION_SCHEMA.SEQUENCES where SEQUENCE_SCHEMA = '"
58 + getSchemaName() + "' and SEQUENCE_NAME = '" + sequenceName
+ "'");
62 public boolean supportsSequences() {
67 public boolean supportsTriggers() {
72 public boolean supportsIdentityColumns() {
77 public void incrementSequenceToValue(String sequenceName
, long newSequenceValue
) {
79 .executeUpdate("alter sequence " + qualified(sequenceName
) + " restart with " + newSequenceValue
);
83 public void incrementIdentityColumnToValue(String tableName
, String identityColumnName
, long identityValue
) {
84 getSQLHandler().executeUpdate(
85 "alter table " + qualified(tableName
) + " alter column " + quoted(identityColumnName
)
86 + " RESTART WITH " + identityValue
);
90 public void disableReferentialConstraints() {
91 Set
<String
> tableNames
= getTableNames();
92 for (String tableName
: tableNames
) {
93 disableReferentialConstraints(tableName
);
98 public void disableValueConstraints() {
99 Set
<String
> tableNames
= getTableNames();
100 for (String tableName
: tableNames
) {
101 disableValueConstraints(tableName
);
105 private void disableReferentialConstraints(String tableName
) {
106 Set
<String
> constraintNames
= this.getForeignKeyConstraintNames(tableName
);
107 for (String constraintName
: constraintNames
) {
108 this.removeForeignKeyConstraint(tableName
, constraintName
);
112 private void disableValueConstraints(String tableName
) {
113 Set
<String
> primaryKeyColumnNames
= this.getPrimaryKeyColumnNames(tableName
);
115 Set
<String
> notNullColumnNames
= this.getNotNullColummnNames(tableName
);
116 for (String notNullColumnName
: notNullColumnNames
) {
117 if (primaryKeyColumnNames
.contains(notNullColumnName
)) {
120 this.removeNotNullConstraint(tableName
, notNullColumnName
);
125 * Gets the names of all identity columns of the given table.
127 * todo check, at this moment the PK columns are returned
129 * @param tableName The table, not null
130 * @return The names of the identity columns of the table with the given name
133 public Set
<String
> getIdentityColumnNames(String tableName
) {
134 return getPrimaryKeyColumnNames(tableName
);
137 private Set
<String
> getPrimaryKeyColumnNames(String tableName
) {
138 return getSQLHandler().getItemsAsStringSet(
139 "select COLUMN_NAME from INFORMATION_SCHEMA.INDEXES where PRIMARY_KEY=TRUE AND TABLE_NAME = '"
140 + tableName
+ "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
143 private Set
<String
> getNotNullColummnNames(String tableName
) {
144 return getSQLHandler().getItemsAsStringSet(
145 "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE = 'NO' AND TABLE_NAME = '"
146 + tableName
+ "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
149 private Set
<String
> getForeignKeyConstraintNames(String tableName
) {
150 return getSQLHandler().getItemsAsStringSet(
151 "select CONSTRAINT_NAME from INFORMATION_SCHEMA.CONSTRAINTS "
152 + "where CONSTRAINT_TYPE = 'REFERENTIAL' AND TABLE_NAME = '" + tableName
153 + "' AND CONSTRAINT_SCHEMA = '" + getSchemaName() + "'");
156 private void removeForeignKeyConstraint(String tableName
, String constraintName
) {
157 getSQLHandler().executeUpdate(
158 "alter table " + qualified(tableName
) + " drop constraint " + quoted(constraintName
));
161 private void removeNotNullConstraint(String tableName
, String columnName
) {
162 getSQLHandler().executeUpdate(
163 "alter table " + qualified(tableName
) + " alter column " + quoted(columnName
) + " set null");