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 DB2 (commercial).
035: * @author Paul Ferraro
036: * @since 1.1
037: */
038: @SuppressWarnings("nls")
039: public class DB2Dialect extends StandardDialect {
040: /**
041: * @see net.sf.hajdbc.dialect.StandardDialect#executeFunctionFormat()
042: */
043: @Override
044: protected String executeFunctionFormat() {
045: return "VALUES {0}";
046: }
047:
048: /**
049: * @see net.sf.hajdbc.dialect.StandardDialect#getSequences(java.sql.DatabaseMetaData)
050: */
051: @Override
052: public Collection<QualifiedName> getSequences(
053: DatabaseMetaData metaData) throws SQLException {
054: List<QualifiedName> sequenceList = new LinkedList<QualifiedName>();
055:
056: Statement statement = metaData.getConnection()
057: .createStatement();
058:
059: ResultSet resultSet = statement
060: .executeQuery("SELECT SEQSCHEMA, SEQNAME FROM SYSCAT.SEQUENCES");
061:
062: while (resultSet.next()) {
063: sequenceList.add(new QualifiedName(resultSet.getString(1),
064: resultSet.getString(2)));
065: }
066:
067: statement.close();
068:
069: return sequenceList;
070: }
071:
072: /**
073: * @see net.sf.hajdbc.dialect.StandardDialect#sequencePattern()
074: */
075: @Override
076: protected String sequencePattern() {
077: return "(?:NEXT|PREV)VAL\\s+FOR\\s+'?([^',\\s\\(\\)]+)";
078: }
079:
080: /**
081: * @see net.sf.hajdbc.dialect.StandardDialect#nextSequenceValueFormat()
082: */
083: @Override
084: protected String nextSequenceValueFormat() {
085: return "NEXTVAL FOR {0}";
086: }
087:
088: /**
089: * @see net.sf.hajdbc.dialect.StandardDialect#dateLiteralFormat()
090: */
091: @Override
092: protected String dateLiteralFormat() {
093: return this .timestampLiteralFormat();
094: }
095:
096: /**
097: * @see net.sf.hajdbc.dialect.StandardDialect#timeLiteralFormat()
098: */
099: @Override
100: protected String timeLiteralFormat() {
101: return this .timestampLiteralFormat();
102: }
103:
104: /**
105: * @see net.sf.hajdbc.dialect.StandardDialect#timestampLiteralFormat()
106: */
107: @Override
108: protected String timestampLiteralFormat() {
109: return "''{0}''";
110: }
111: }
|