001: /* ***** BEGIN LICENSE BLOCK *****
002: * Version: MPL 1.1
003: * The contents of this file are subject to the Mozilla Public License Version
004: * 1.1 (the "License"); you may not use this file except in compliance with
005: * the License. You may obtain a copy of the License at
006: * http://www.mozilla.org/MPL/
007: *
008: * Software distributed under the License is distributed on an "AS IS" basis,
009: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
010: * for the specific language governing rights and limitations under the
011: * License.
012: *
013: * The Original Code is Riot.
014: *
015: * The Initial Developer of the Original Code is
016: * Neteye GmbH.
017: * Portions created by the Initial Developer are Copyright (C) 2006
018: * the Initial Developer. All Rights Reserved.
019: *
020: * Contributor(s):
021: * Felix Gnass [fgnass at neteye dot de]
022: *
023: * ***** END LICENSE BLOCK ***** */
024: package org.riotfamily.revolt.dialect;
025:
026: import org.riotfamily.revolt.Script;
027: import org.riotfamily.revolt.definition.Column;
028: import org.riotfamily.revolt.definition.Index;
029: import org.riotfamily.revolt.support.TypeMap;
030:
031: /**
032: * @author Felix Gnass [fgnass at neteye dot de]
033: *
034: */
035: public class HsqlDialect extends Sql92Dialect {
036:
037: protected void registerTypes() {
038: registerType(TypeMap.BIT, TypeMap.BIT);
039: registerType(TypeMap.TINYINT, TypeMap.TINYINT);
040: registerType(TypeMap.SMALLINT, TypeMap.SMALLINT);
041: registerType(TypeMap.INTEGER, TypeMap.INTEGER);
042: registerType(TypeMap.BIGINT, TypeMap.BIGINT);
043: registerType(TypeMap.FLOAT, TypeMap.FLOAT);
044: registerType(TypeMap.REAL, TypeMap.REAL);
045: registerType(TypeMap.DOUBLE, TypeMap.DOUBLE);
046: registerType(TypeMap.NUMERIC, TypeMap.NUMERIC);
047: registerType(TypeMap.DECIMAL, TypeMap.DECIMAL);
048: registerType(TypeMap.CHAR, TypeMap.CHAR);
049: registerType(TypeMap.VARCHAR, TypeMap.VARCHAR);
050: registerType(TypeMap.LONGVARCHAR, TypeMap.LONGVARCHAR);
051: registerType(TypeMap.DATE, TypeMap.DATE);
052: registerType(TypeMap.TIME, TypeMap.TIME);
053: registerType(TypeMap.TIMESTAMP, TypeMap.TIMESTAMP);
054: registerType(TypeMap.BINARY, TypeMap.BINARY);
055: registerType(TypeMap.VARBINARY, TypeMap.VARBINARY);
056: registerType(TypeMap.LONGVARBINARY, TypeMap.LONGVARBINARY);
057: registerType(TypeMap.BLOB, TypeMap.BLOB);
058: registerType(TypeMap.CLOB, TypeMap.CLOB);
059: }
060:
061: public boolean supports(String databaseProductName,
062: int majorVersion, int minorVersion) {
063:
064: return "HSQL Database Engine".equals(databaseProductName);
065: }
066:
067: protected void addColumnDefinition(Script sql, Column column) {
068: if (column.isAutoIncrement()) {
069: sql.append(quote(column)).append(getColumnType(column));
070: sql.append("GENERATED BY DEFAULT AS IDENTITY");
071: } else {
072: super .addColumnDefinition(sql, column);
073: }
074: }
075:
076: public Script createAutoIncrementSequence(String name) {
077: return null;
078: }
079:
080: public Script renameTable(String name, String renameTo) {
081: return alterTable(name).append("RENAME TO").append(
082: quote(renameTo));
083: }
084:
085: public Script createIndex(String table, Index index) {
086: Script sql = new Script("CREATE INDEX").append(index.getName())
087: .append("ON").append(quote(table));
088:
089: addColumnNames(sql, index.getColumns());
090: return sql;
091: }
092:
093: public Script dropIndex(String table, String name) {
094: return new Script("DROP INDEX").append(name);
095: }
096:
097: public Script modifyColumn(String table, Column column) {
098: Script sql = new Script();
099: sql.append("ALTER TABLE").append(quote(table)).append(
100: "ALTER COLUMN");
101: addColumnDefinition(sql, column);
102: return sql;
103: }
104:
105: public Script renameColumn(String table, String name,
106: String renameTo) {
107: return alterTable(table).append("RENAME COLUMN").append(
108: quote(name)).append("TO").append(quote(renameTo));
109: }
110:
111: }
|