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="firebird.sourceforge.net">Firebird</a>.
035: * @author Paul Ferraro
036: */
037: @SuppressWarnings("nls")
038: public class FirebirdDialect extends StandardDialect {
039: /**
040: * @see net.sf.hajdbc.dialect.StandardDialect#dummyTable()
041: */
042: @Override
043: protected String dummyTable() {
044: return "RDB$DATABASE";
045: }
046:
047: /**
048: * Firebird 2.0 will support standard syntax. Until then...
049: * @see net.sf.hajdbc.dialect.StandardDialect#alterSequenceFormat()
050: */
051: @Override
052: protected String alterSequenceFormat() {
053: return "SET GENERATOR {0} TO {1}";
054: }
055:
056: /**
057: * @see net.sf.hajdbc.dialect.StandardDialect#getSequences(java.sql.DatabaseMetaData)
058: */
059: @Override
060: public Collection<QualifiedName> getSequences(
061: DatabaseMetaData metaData) throws SQLException {
062: List<QualifiedName> sequenceList = new LinkedList<QualifiedName>();
063:
064: Statement statement = metaData.getConnection()
065: .createStatement();
066:
067: ResultSet resultSet = statement
068: .executeQuery("SELECT RDB$GENERATOR_NAME FROM RDB$GENERATORS");
069:
070: while (resultSet.next()) {
071: sequenceList.add(new QualifiedName(resultSet.getString(1)));
072: }
073:
074: statement.close();
075:
076: return sequenceList;
077: }
078:
079: /**
080: * @see net.sf.hajdbc.dialect.StandardDialect#parseInsertTable(java.lang.String)
081: */
082: @Override
083: public String parseInsertTable(String sql) {
084: return null;
085: }
086:
087: /**
088: * Firebird 2.0 will support standard syntax. Until then...
089: * @see net.sf.hajdbc.dialect.StandardDialect#sequencePattern()
090: */
091: @Override
092: protected String sequencePattern() {
093: return "GEN_ID\\s*\\(\\s*([^\\s,]+)\\s*,\\s*\\d+\\s*\\)";
094: }
095:
096: /**
097: * @see net.sf.hajdbc.dialect.StandardDialect#selectForUpdatePattern()
098: */
099: @Override
100: protected String selectForUpdatePattern() {
101: return "SELECT\\s+.+\\s+WITH\\s+LOCK";
102: }
103:
104: /**
105: * @see net.sf.hajdbc.dialect.StandardDialect#nextSequenceValueFormat()
106: */
107: @Override
108: protected String nextSequenceValueFormat() {
109: return "GEN_ID({0}, 1)";
110: }
111: }
|