1 package eu
.etaxonomy
.cdm
.database
;
4 * based on from http://code.google.com/p/java-tester/source/browse/trunk/src/main/java/org/jtester/unitils/database/H2DbSupport.java
10 import org
.unitils
.core
.dbsupport
.DbSupport
;
12 public class H2DbSupport
extends DbSupport
{
14 * Creates support for HsqlDb databases.
16 public H2DbSupport() {
21 public Set
<String
> getColumnNames(String tableName
) {
22 return getSQLHandler().getItemsAsStringSet(
23 "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '" + tableName
24 + "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
28 public Set
<String
> getTableNames() {
29 return getSQLHandler().getItemsAsStringSet(
30 "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'TABLE' AND TABLE_SCHEMA = '"
31 + getSchemaName() + "'");
35 public Set
<String
> getViewNames() {
36 return getSQLHandler().getItemsAsStringSet(
37 "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'VIEW' AND TABLE_SCHEMA = '"
38 + getSchemaName() + "'");
42 public Set
<String
> getSequenceNames() {
43 return getSQLHandler().getItemsAsStringSet(
44 "select SEQUENCE_NAME from INFORMATION_SCHEMA.SEQUENCES where SEQUENCE_SCHEMA = '"
45 + getSchemaName() + "'");
49 public Set
<String
> getTriggerNames() {
50 return getSQLHandler().getItemsAsStringSet(
51 "select TRIGGER_NAME from INFORMATION_SCHEMA.TRIGGERS where TRIGGER_SCHEMA = '" + getSchemaName()
56 public long getSequenceValue(String sequenceName
) {
57 return getSQLHandler().getItemAsLong(
58 "select CURRENT_VALUE from INFORMATION_SCHEMA.SEQUENCES where SEQUENCE_SCHEMA = '"
59 + getSchemaName() + "' and SEQUENCE_NAME = '" + sequenceName
+ "'");
63 public boolean supportsSequences() {
68 public boolean supportsTriggers() {
73 public boolean supportsIdentityColumns() {
78 public void incrementSequenceToValue(String sequenceName
, long newSequenceValue
) {
79 getSQLHandler().executeUpdate(
80 "alter sequence " + qualified(sequenceName
) + " restart with " + newSequenceValue
);
84 public void incrementIdentityColumnToValue(String tableName
, String identityColumnName
, long identityValue
) {
85 getSQLHandler().executeUpdate(
86 "alter table " + qualified(tableName
) + " alter column " + quoted(identityColumnName
)
87 + " RESTART WITH " + identityValue
);
91 public void disableReferentialConstraints() {
92 Set
<String
> tableNames
= getTableNames();
93 for (String tableName
: tableNames
) {
94 disableReferentialConstraints(tableName
);
99 public void disableValueConstraints() {
100 Set
<String
> tableNames
= getTableNames();
101 for (String tableName
: tableNames
) {
102 disableValueConstraints(tableName
);
106 private void disableReferentialConstraints(String tableName
) {
107 Set
<String
> constraintNames
= this.getForeignKeyConstraintNames(tableName
);
108 for (String constraintName
: constraintNames
) {
109 this.removeForeignKeyConstraint(tableName
, constraintName
);
113 private void disableValueConstraints(String tableName
) {
114 Set
<String
> primaryKeyColumnNames
= this.getPrimaryKeyColumnNames(tableName
);
116 Set
<String
> notNullColumnNames
= this.getNotNullColummnNames(tableName
);
117 for (String notNullColumnName
: notNullColumnNames
) {
118 if (primaryKeyColumnNames
.contains(notNullColumnName
)) {
121 this.removeNotNullConstraint(tableName
, notNullColumnName
);
126 * Gets the names of all identity columns of the given table.
128 * todo check, at this moment the PK columns are returned
130 * @param tableName The table, not null
131 * @return The names of the identity columns of the table with the given name
134 public Set
<String
> getIdentityColumnNames(String tableName
) {
135 return getPrimaryKeyColumnNames(tableName
);
138 private Set
<String
> getPrimaryKeyColumnNames(String tableName
) {
139 return getSQLHandler().getItemsAsStringSet(
140 "select COLUMN_NAME from INFORMATION_SCHEMA.INDEXES where PRIMARY_KEY=TRUE AND TABLE_NAME = '"
141 + tableName
+ "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
144 private Set
<String
> getNotNullColummnNames(String tableName
) {
145 return getSQLHandler().getItemsAsStringSet(
146 "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE = 'NO' AND TABLE_NAME = '"
147 + tableName
+ "' AND TABLE_SCHEMA = '" + getSchemaName() + "'");
150 private Set
<String
> getForeignKeyConstraintNames(String tableName
) {
151 return getSQLHandler().getItemsAsStringSet(
152 "select CONSTRAINT_NAME from INFORMATION_SCHEMA.CONSTRAINTS "
153 + "where CONSTRAINT_TYPE = 'REFERENTIAL' AND TABLE_NAME = '" + tableName
154 + "' AND CONSTRAINT_SCHEMA = '" + getSchemaName() + "'");
157 private void removeForeignKeyConstraint(String tableName
, String constraintName
) {
158 getSQLHandler().executeUpdate(
159 "alter table " + qualified(tableName
) + " drop constraint " + quoted(constraintName
));
162 private void removeNotNullConstraint(String tableName
, String columnName
) {
163 getSQLHandler().executeUpdate(
164 "alter table " + qualified(tableName
) + " alter column " + quoted(columnName
) + " set null");