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.h2database.com">H2 Database Engine</a>.
035: * @author Paul Ferraro
036: */
037: @SuppressWarnings("nls")
038: public class H2Dialect extends StandardDialect {
039: /**
040: * @see net.sf.hajdbc.dialect.StandardDialect#executeFunctionFormat()
041: */
042: @Override
043: protected String executeFunctionFormat() {
044: return "CALL {0}";
045: }
046:
047: /**
048: * @see net.sf.hajdbc.dialect.StandardDialect#getSequences(java.sql.DatabaseMetaData)
049: */
050: @Override
051: public Collection<QualifiedName> getSequences(
052: DatabaseMetaData metaData) throws SQLException {
053: List<QualifiedName> sequenceList = new LinkedList<QualifiedName>();
054:
055: Statement statement = metaData.getConnection()
056: .createStatement();
057:
058: ResultSet resultSet = statement
059: .executeQuery("SELECT SEQUENCE_SCHEMA, SEQUENCE_NAME FROM INFORMATION_SCHEMA.SYSTEM_SEQUENCES");
060:
061: while (resultSet.next()) {
062: sequenceList.add(new QualifiedName(resultSet.getString(1),
063: resultSet.getString(2)));
064: }
065:
066: statement.close();
067:
068: return sequenceList;
069: }
070:
071: /**
072: * Deferrability clause is not supported.
073: * @see net.sf.hajdbc.dialect.StandardDialect#createForeignKeyConstraintFormat()
074: */
075: @Override
076: protected String createForeignKeyConstraintFormat() {
077: 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}";
078: }
079:
080: /**
081: * @see net.sf.hajdbc.dialect.StandardDialect#currentDatePattern()
082: */
083: @Override
084: protected String currentDatePattern() {
085: return "(?<=\\W)CURRENT_DATE(?:\\s*\\(\\s*\\))?(?=\\W)|(?<=\\W)CURDATE\\s*\\(\\s*\\)|(?<=\\W)SYSDATE(?=\\W)|(?<=\\W)TODAY(?=\\W)";
086: }
087:
088: /**
089: * @see net.sf.hajdbc.dialect.StandardDialect#currentTimePattern()
090: */
091: @Override
092: protected String currentTimePattern() {
093: return "(?<=\\W)CURRENT_TIME(?:\\s*\\(\\s*\\))?(?=\\W)|(?<=\\W)CURTIME\\s*\\(\\s*\\)";
094: }
095:
096: /**
097: * @see net.sf.hajdbc.dialect.StandardDialect#currentTimestampPattern()
098: */
099: @Override
100: protected String currentTimestampPattern() {
101: return "(?<=\\W)CURRENT_TIMESTAMP(?:\\s*\\(\\s*\\d*\\s*\\))?(?=\\W)|(?<=\\W)NOW\\s*\\(\\s*\\d*\\s*\\)";
102: }
103:
104: /**
105: * @see net.sf.hajdbc.dialect.StandardDialect#randomPattern()
106: */
107: @Override
108: protected String randomPattern() {
109: return "(?<=\\W)RAND\\s*\\(\\s*\\d*\\s*\\)";
110: }
111: }
|