001: /*
002: * HA-JDBC: High-Availability JDBC
003: * Copyright (c) 2004-2007 Paul Ferraro
004: *
005: * This library is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU Lesser General Public License as published by the
007: * Free Software Foundation; either version 2.1 of the License, or (at your
008: * option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful, but WITHOUT
011: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
012: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
013: * for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public License
016: * along with this library; if not, write to the Free Software Foundation,
017: * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: *
019: * Contact: ferraro@users.sourceforge.net
020: */
021: package net.sf.hajdbc.dialect;
022:
023: import java.sql.DatabaseMetaData;
024: import java.sql.ResultSet;
025: import java.sql.SQLException;
026: import java.sql.Statement;
027: import java.util.Collection;
028: import java.util.LinkedList;
029: import java.util.List;
030:
031: import net.sf.hajdbc.QualifiedName;
032:
033: /**
034: * Dialect for <a href="http://www.hsqldb.org">HSQLDB</a>.
035: *
036: * @author Paul Ferraro
037: * @since 1.1
038: */
039: @SuppressWarnings("nls")
040: public class HSQLDBDialect extends StandardDialect {
041: /**
042: * @see net.sf.hajdbc.dialect.StandardDialect#executeFunctionFormat()
043: */
044: @Override
045: protected String executeFunctionFormat() {
046: return "CALL {0}";
047: }
048:
049: /**
050: * @see net.sf.hajdbc.dialect.StandardDialect#getSequences(java.sql.DatabaseMetaData)
051: */
052: @Override
053: public Collection<QualifiedName> getSequences(
054: DatabaseMetaData metaData) throws SQLException {
055: List<QualifiedName> sequenceList = new LinkedList<QualifiedName>();
056:
057: Statement statement = metaData.getConnection()
058: .createStatement();
059:
060: ResultSet resultSet = statement
061: .executeQuery("SELECT SEQUENCE_SCHEMA, SEQUENCE_NAME FROM INFORMATION_SCHEMA.SYSTEM_SEQUENCES");
062:
063: while (resultSet.next()) {
064: sequenceList.add(new QualifiedName(resultSet.getString(1),
065: resultSet.getString(2)));
066: }
067:
068: statement.close();
069:
070: return sequenceList;
071: }
072:
073: /**
074: * Deferrability clause is not supported.
075: * @see net.sf.hajdbc.dialect.StandardDialect#createForeignKeyConstraintFormat()
076: */
077: @Override
078: protected String createForeignKeyConstraintFormat() {
079: return "ALTER TABLE {1} ADD CONSTRAINT {0} FOREIGN KEY ({2}) REFERENCES {3} ({4}) ON DELETE {5,choice,0#CASCADE|1#RESTRICT|2#SET NULL|3#NO ACTION|4#SET DEFAULT} ON UPDATE {6,choice,0#CASCADE|1#RESTRICT|2#SET NULL|3#NO ACTION|4#SET DEFAULT}";
080: }
081:
082: /**
083: * @see net.sf.hajdbc.dialect.StandardDialect#currentDatePattern()
084: */
085: @Override
086: protected String currentDatePattern() {
087: return "(?<=\\W)CURRENT_DATE(?=\\W)|(?<=\\W)CURDATE\\s*\\(\\s*\\)";
088: }
089:
090: /**
091: * @see net.sf.hajdbc.dialect.StandardDialect#currentTimePattern()
092: */
093: @Override
094: protected String currentTimePattern() {
095: return "(?<=\\W)CURRENT_TIME(?=\\W)|(?<=\\W)CURTIME\\s*\\(\\s*\\)";
096: }
097:
098: /**
099: * @see net.sf.hajdbc.dialect.StandardDialect#currentTimestampPattern()
100: */
101: @Override
102: protected String currentTimestampPattern() {
103: return "(?<=\\W)CURRENT_TIMESTAMP(?=\\W)|(?<=\\W)NOW\\s*\\(\\s*\\)";
104: }
105: }
|