/*
* Copyright (C) 2006 Rob Manning
* manningr@users.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package net.sourceforge.squirrel_sql.fw.dialects;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import net.sourceforge.squirrel_sql.fw.sql.DatabaseObjectType;
import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo;
import net.sourceforge.squirrel_sql.fw.sql.ITableInfo;
import net.sourceforge.squirrel_sql.fw.sql.JDBCTypeMapper;
import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo;
import org.antlr.stringtemplate.StringTemplate;
import org.hibernate.HibernateException;
/**
* A dialect delegate for the HSQL database.
*/
public class HSQLDialectExt extends CommonHibernateDialect implements HibernateDialect
{
private class HSQLDialectHelper extends org.hibernate.dialect.HSQLDialect
{
public HSQLDialectHelper()
{
registerColumnType(Types.BIGINT, "bigint");
registerColumnType(Types.BINARY, "binary");
registerColumnType(Types.BIT, "bit");
registerColumnType(Types.BLOB, "longvarbinary");
// registerColumnType(Types.BOOLEAN, "bit");
registerColumnType(Types.BOOLEAN, "boolean");
registerColumnType(Types.CHAR, "char($l)");
registerColumnType(Types.CLOB, "longvarchar");
registerColumnType(Types.DATE, "date");
registerColumnType(Types.DECIMAL, "decimal");
registerColumnType(Types.DOUBLE, "double");
registerColumnType(Types.FLOAT, "float");
registerColumnType(Types.INTEGER, "integer");
registerColumnType(Types.LONGVARBINARY, "longvarbinary");
registerColumnType(Types.LONGVARCHAR, "longvarchar");
registerColumnType(Types.NUMERIC, "numeric");
registerColumnType(Types.REAL, "real");
registerColumnType(Types.SMALLINT, "smallint");
registerColumnType(Types.TIME, "time");
registerColumnType(Types.TIMESTAMP, "timestamp");
registerColumnType(Types.TINYINT, "tinyint");
registerColumnType(Types.VARBINARY, "varbinary");
registerColumnType(Types.VARCHAR, "varchar");
}
}
/** extended hibernate dialect used in this wrapper */
private HSQLDialectHelper _dialect = new HSQLDialectHelper();
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getTypeName(int, int, int, int)
*/
@Override
public String getTypeName(int code, int length, int precision, int scale) throws HibernateException
{
return _dialect.getTypeName(code, length, precision, scale);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#canPasteTo(net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo)
*/
@Override
public boolean canPasteTo(IDatabaseObjectInfo info)
{
boolean result = true;
DatabaseObjectType type = info.getDatabaseObjectType();
if (type.getName().equalsIgnoreCase("database"))
{
result = false;
}
return result;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsSchemasInTableDefinition()
*/
@Override
public boolean supportsSchemasInTableDefinition()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDisplayName()
*/
@Override
public String getDisplayName()
{
return "HSQL";
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsProduct(java.lang.String,
* java.lang.String)
*/
@Override
public boolean supportsProduct(String databaseProductName, String databaseProductVersion)
{
if (databaseProductName == null)
{
return false;
}
if (databaseProductName.trim().startsWith("HSQL"))
{
// We don't yet have the need to discriminate by version.
return true;
}
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsColumnComment()
*/
@Override
public boolean supportsColumnComment()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getColumnDropSQL(java.lang.String,
* java.lang.String, DatabaseObjectQualifier, SqlGenerationPreferences)
*/
@Override
public String getColumnDropSQL(String tableName, String columnName, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
return DialectUtils.getColumnDropSQL(tableName, columnName, qualifier, prefs, this);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getTableDropSQL(net.sourceforge.squirrel_sql.fw.sql.ITableInfo,
* boolean, boolean, DatabaseObjectQualifier, SqlGenerationPreferences)
*/
@Override
public List<String> getTableDropSQL(ITableInfo iTableInfo, boolean cascadeConstraints,
boolean isMaterializedView, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
return DialectUtils.getTableDropSQL(iTableInfo,
true,
cascadeConstraints,
false,
DialectUtils.CASCADE_CLAUSE,
false,
qualifier,
prefs,
this);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getAddPrimaryKeySQL(java.lang.String,
* net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo[],
* net.sourceforge.squirrel_sql.fw.sql.ITableInfo, DatabaseObjectQualifier, SqlGenerationPreferences)
*/
@Override
public String[] getAddPrimaryKeySQL(String pkName, TableColumnInfo[] columns, ITableInfo ti,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
// ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>] PRIMARY KEY (<column list>);
String tableName = DialectUtils.shapeQualifiableIdentifier(ti.getSimpleName(), qualifier, prefs, this);
return getAddPrimaryKeySQL(pkName, columns, tableName, qualifier, prefs);
}
private String[] getAddPrimaryKeySQL(String pkName, TableColumnInfo[] columns, String tableName,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
// ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>] PRIMARY KEY (<column list>);
StringBuffer result = new StringBuffer();
result.append("ALTER TABLE ");
result.append(tableName);
result.append(" ADD CONSTRAINT ");
result.append(pkName);
result.append(" PRIMARY KEY (");
for (int i = 0; i < columns.length; i++)
{
String columnName = DialectUtils.shapeIdentifier(columns[i].getColumnName(), prefs, this);
result.append(columnName);
if (i + 1 < columns.length)
{
result.append(", ");
}
}
result.append(")");
return new String[] { result.toString() };
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getColumnCommentAlterSQL(net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getColumnCommentAlterSQL(TableColumnInfo info, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs) throws UnsupportedOperationException
{
throw new UnsupportedOperationException("HSQLDB doesn't support column comments");
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAlterColumnNull()
*/
@Override
public boolean supportsAlterColumnNull()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getColumnNullableAlterSQL(net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String[] getColumnNullableAlterSQL(TableColumnInfo info, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// "ALTER TABLE $tableName$ ALTER COLUMN $columnName$ SET $nullable$";
StringTemplate st = new StringTemplate(ST_ALTER_COLUMN_NULL_STYLE_ONE);
HashMap<String, String> valuesMap =
DialectUtils.getValuesMap(ST_TABLE_NAME_KEY,
info.getTableName(),
ST_COLUMN_NAME_KEY,
info.getColumnName());
if (info.isNullable().equalsIgnoreCase("YES"))
{
valuesMap.put(ST_NULLABLE_KEY, "NULL");
} else
{
valuesMap.put(ST_NULLABLE_KEY, "NOT NULL");
}
return new String[] { DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs) };
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsRenameColumn()
*/
@Override
public boolean supportsRenameColumn()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getColumnNameAlterSQL(net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo,
* net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo, DatabaseObjectQualifier,
* SqlGenerationPreferences)
*/
@Override
public String getColumnNameAlterSQL(TableColumnInfo from, TableColumnInfo to,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
String alterClause = DialectUtils.ALTER_COLUMN_CLAUSE;
String renameToClause = DialectUtils.RENAME_TO_CLAUSE;
return DialectUtils.getColumnNameAlterSQL(from, to, alterClause, renameToClause, qualifier, prefs, this);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getColumnTypeAlterSQL(net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo,
* net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public List<String> getColumnTypeAlterSQL(TableColumnInfo from, TableColumnInfo to,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs) throws UnsupportedOperationException
{
String alterClause = DialectUtils.ALTER_COLUMN_CLAUSE;
String setClause = "";
return DialectUtils.getColumnTypeAlterSQL(this, alterClause, setClause, false, from, to, qualifier, prefs);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAlterColumnType()
*/
@Override
public boolean supportsAlterColumnType()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAlterColumnDefault()
*/
@Override
public boolean supportsAlterColumnDefault()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getColumnDefaultAlterSQL(net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo,
* DatabaseObjectQualifier, SqlGenerationPreferences)
*/
@Override
public String getColumnDefaultAlterSQL(TableColumnInfo info, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
String alterClause = DialectUtils.ALTER_COLUMN_CLAUSE;
String defaultClause = DialectUtils.SET_DEFAULT_CLAUSE;
return DialectUtils.getColumnDefaultAlterSQL(this,
info,
alterClause,
false,
defaultClause,
qualifier,
prefs);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDropPrimaryKeySQL(java.lang.String,
* java.lang.String, DatabaseObjectQualifier, SqlGenerationPreferences)
*/
@Override
public String getDropPrimaryKeySQL(String pkName, String tableName, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
return DialectUtils.getDropPrimaryKeySQL(pkName, tableName, false, false, qualifier, prefs, this);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDialectType()
*/
@Override
public DialectType getDialectType()
{
return DialectType.HSQLDB;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getIndexAccessMethodsTypes()
*/
@Override
public String[] getIndexAccessMethodsTypes()
{
throw new UnsupportedOperationException("Not yet implemented");
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getIndexStorageOptions()
*/
@Override
public String[] getIndexStorageOptions()
{
throw new UnsupportedOperationException("Not yet implemented");
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getAddAutoIncrementSQL(net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String[] getAddAutoIncrementSQL(TableColumnInfo column, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// Pre-requisites are that column needs to be primary key and it must be integer type.
// alter table IDENTITYTEST2 alter column myid identity
// "ALTER TABLE $tableName$ ALTER COLUMN $columnName$ IDENTITY";
StringTemplate st = new StringTemplate(ST_ADD_AUTO_INCREMENT_STYLE_TWO);
HashMap<String, String> valuesMap =
DialectUtils.getValuesMap(ST_TABLE_NAME_KEY,
column.getTableName(),
ST_COLUMN_NAME_KEY,
column.getColumnName());
String[] pkSQL =
getAddPrimaryKeySQL("PK_" + column.getTableName() + "_" + column.getColumnName(),
new TableColumnInfo[] { column },
column.getTableName(), qualifier, prefs);
ArrayList<String> result = new ArrayList<String>();
result.add("-- Column must be a primary key and an integer type");
result.addAll(Arrays.asList(pkSQL));
result.add(DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs));
return result.toArray(new String[result.size()]);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getAddColumnSQL(net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String[] getAddColumnSQL(TableColumnInfo column, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
ArrayList<String> result = new ArrayList<String>();
boolean addDefaultClause = false;
boolean supportsNullQualifier = true;
boolean addNullClause = true;
String sql =
DialectUtils.getAddColumSQL(column,
this,
addDefaultClause,
supportsNullQualifier,
addNullClause,
qualifier,
prefs);
result.add(sql);
if (column.getDefaultValue() != null && !"".equals(column.getDefaultValue()))
{
StringBuilder defaultSQL = new StringBuilder();
defaultSQL.append("ALTER TABLE ");
defaultSQL.append(column.getTableName());
defaultSQL.append(" ALTER COLUMN ");
defaultSQL.append(column.getColumnName());
defaultSQL.append(" SET DEFAULT ");
if (JDBCTypeMapper.isNumberType(column.getDataType()))
{
defaultSQL.append(column.getDefaultValue());
} else
{
defaultSQL.append("'");
defaultSQL.append(column.getDefaultValue());
defaultSQL.append("'");
}
}
return result.toArray(new String[result.size()]);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getAddForeignKeyConstraintSQL(java.lang.String,
* java.lang.String, java.lang.String, java.lang.Boolean, java.lang.Boolean, java.lang.Boolean,
* boolean, java.lang.String, java.util.Collection, java.lang.String, java.lang.String,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String[] getAddForeignKeyConstraintSQL(String localTableName, String refTableName,
String constraintName, Boolean deferrable, Boolean initiallyDeferred, Boolean matchFull,
boolean autoFKIndex, String fkIndexName, Collection<String[]> localRefColumns, String onUpdateAction,
String onDeleteAction, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
// ALTER TABLE <tablename>
// ADD [CONSTRAINT <constraintname>] FOREIGN KEY (<column list>)
// REFERENCES <exptablename> (<column list>)
// [ON {DELETE | UPDATE} {CASCADE | SET DEFAULT | SET NULL}];
// "ALTER TABLE $childTableName$ " +
// "ADD $constraint$ $constraintName$ FOREIGN KEY ( $childColumn; separator=\",\"$ ) " +
// "REFERENCES $parentTableName$ ( $parentColumn; separator=\",\"$ )";
StringTemplate fkST = new StringTemplate(ST_ADD_FOREIGN_KEY_CONSTRAINT_STYLE_ONE);
HashMap<String, String> fkValuesMap = DialectUtils.getValuesMap(ST_CHILD_TABLE_KEY, localTableName);
fkValuesMap.put(ST_CONSTRAINT_KEY, "CONSTRAINT");
fkValuesMap.put(ST_CONSTRAINT_NAME_KEY, constraintName);
fkValuesMap.put(ST_PARENT_TABLE_KEY, refTableName);
StringTemplate childIndexST = null;
HashMap<String, String> ckIndexValuesMap = null;
if (autoFKIndex)
{
// "CREATE $unique$ $storageOption$ INDEX $indexName$ " +
// "ON $tableName$ ( $columnName; separator=\",\"$ )";
childIndexST = new StringTemplate(ST_CREATE_INDEX_STYLE_TWO);
ckIndexValuesMap = new HashMap<String, String>();
ckIndexValuesMap.put(ST_INDEX_NAME_KEY, "fk_child_idx");
}
return DialectUtils.getAddForeignKeyConstraintSQL(fkST,
fkValuesMap,
childIndexST,
ckIndexValuesMap,
localRefColumns,
qualifier,
prefs,
this);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getAddUniqueConstraintSQL(java.lang.String,
* java.lang.String, net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo[],
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String[] getAddUniqueConstraintSQL(String tableName, String constraintName,
TableColumnInfo[] columns, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
// ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>] UNIQUE (<column list>);
// "ALTER TABLE $tableName$ " +
// "ADD CONSTRAINT $constraintName$ UNIQUE ($columnName; separator=\",\"$)";
StringTemplate st = new StringTemplate(ST_ADD_UNIQUE_CONSTRAINT_STYLE_TWO);
HashMap<String, String> valuesMap =
DialectUtils.getValuesMap(ST_TABLE_NAME_KEY, tableName, ST_CONSTRAINT_NAME_KEY, constraintName);
return new String[] { DialectUtils.getAddUniqueConstraintSQL(st,
valuesMap,
columns,
qualifier,
prefs,
this) };
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getAlterSequenceSQL(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String[] getAlterSequenceSQL(String sequenceName, String increment, String minimum, String maximum,
String restart, String cache, boolean cycle, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// ALTER SEQUENCE <sequencename> RESTART WITH <value>;
// "ALTER SEQUENCE $sequenceName$ " +
// "$restartWith$ $startValue$ " +
// "$incrementBy$ $incrementValue$ ";
StringTemplate st = new StringTemplate(ST_ALTER_SEQUENCE_STYLE_ONE);
st.setAttribute(ST_SEQUENCE_NAME_KEY, sequenceName);
st.setAttribute(ST_RESTART_WITH_KEY, "RESTART WITH");
st.setAttribute(ST_START_VALUE_KEY, restart);
return new String[] { st.toString() };
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getCreateIndexSQL(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String[], boolean, java.lang.String,
* java.lang.String, net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getCreateIndexSQL(String indexName, String tableName, String accessMethod, String[] columns,
boolean unique, String tablespace, String constraints, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// CREATE [UNIQUE] INDEX <index> ON <table> (<column> [DESC] [, ...]) [DESC];
// "CREATE $unique$ $storageOption$ INDEX $indexName$ " +
// "ON $tableName$ ( $columnName; separator=\",\"$ )";
StringTemplate st = new StringTemplate(ST_CREATE_INDEX_STYLE_TWO);
HashMap<String, String> valuesMap =
DialectUtils.getValuesMap(ST_INDEX_NAME_KEY, indexName, ST_TABLE_NAME_KEY, tableName);
if (unique)
{
valuesMap.put(ST_UNIQUE_KEY, "UNIQUE");
}
return DialectUtils.bindTemplateAttributes(this, st, valuesMap, columns, qualifier, prefs);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getCreateSequenceSQL(java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getCreateSequenceSQL(String sequenceName, String increment, String minimum, String maximum,
String start, String cache, boolean cycle, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// CREATE SEQUENCE <sequencename> [AS {INTEGER | BIGINT}]
// [START WITH <startvalue>] [INCREMENT BY <incrementvalue>];
// "CREATE SEQUENCE $sequenceName$ $startWith$ " +
// "$increment$ $minimum$ $maximum$ $cache$ $cycle$";
StringTemplate st = new StringTemplate(ST_CREATE_SEQUENCE_STYLE_TWO);
HashMap<String, String> valuesMap = DialectUtils.getValuesMap(ST_SEQUENCE_NAME_KEY, sequenceName);
OptionalSqlClause startWithClause = new OptionalSqlClause("START WITH", start);
OptionalSqlClause incrementByClause = new OptionalSqlClause("INCREMENT BY", increment);
valuesMap.put(ST_START_WITH_KEY, startWithClause.toString());
valuesMap.put(ST_INCREMENT_KEY, incrementByClause.toString());
return DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getCreateViewSQL(java.lang.String,
* java.lang.String, java.lang.String,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getCreateViewSQL(String viewName, String definition, String checkOption,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
// CREATE VIEW <viewname>[(<viewcolumn>,..) AS SELECT ... FROM ... [WHERE Expression]
// [ORDER BY orderExpression [, ...]]
// [LIMIT <limit> [OFFSET <offset>]];
// "CREATE VIEW $viewName$ " +
// "AS $selectStatement$ $with$ $checkOptionType$ $checkOption$";
StringTemplate st = new StringTemplate(ST_CREATE_VIEW_STYLE_ONE);
HashMap<String, String> valuesMap = new HashMap<String, String>();
valuesMap.put("viewName", viewName);
valuesMap.put("selectStatement", definition);
return DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDropConstraintSQL(java.lang.String,
* java.lang.String, net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getDropConstraintSQL(String tableName, String constraintName,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
// ALTER TABLE $tableName$ DROP CONSTRAINT $constraintName$
StringTemplate st = new StringTemplate(ST_DROP_CONSTRAINT_STYLE_ONE);
HashMap<String, String> valuesMap =
DialectUtils.getValuesMap(ST_TABLE_NAME_KEY, tableName, ST_CONSTRAINT_NAME_KEY, constraintName);
return DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDropIndexSQL(java.lang.String,
* java.lang.String, boolean, net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getDropIndexSQL(String tableName, String indexName, boolean cascade,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
// DROP INDEX index [IF EXISTS];
// "DROP INDEX $indexName$";
StringTemplate st = new StringTemplate(ST_DROP_INDEX_STYLE_THREE);
st.setAttribute(ST_INDEX_NAME_KEY, indexName);
return st.toString();
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDropSequenceSQL(java.lang.String,
* boolean, net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getDropSequenceSQL(String sequenceName, boolean cascade, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// "DROP SEQUENCE $sequenceName$ $cascade$";
StringTemplate st = new StringTemplate(ST_DROP_SEQUENCE_STYLE_ONE);
HashMap<String, String> valuesMap = DialectUtils.getValuesMap(ST_SEQUENCE_NAME_KEY, sequenceName);
return DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDropViewSQL(java.lang.String,
* boolean, net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getDropViewSQL(String viewName, boolean cascade, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// "DROP VIEW $viewName$";
StringTemplate st = new StringTemplate(ST_DROP_VIEW_STYLE_ONE);
HashMap<String, String> valuesMap = DialectUtils.getValuesMap(ST_VIEW_NAME_KEY, viewName);
return DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getRenameTableSQL(java.lang.String,
* java.lang.String, net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getRenameTableSQL(String oldTableName, String newTableName,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
final int featureId = DialectUtils.RENAME_TABLE_TYPE;
final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
throw new UnsupportedOperationException(msg);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getRenameViewSQL(java.lang.String,
* java.lang.String, net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String[] getRenameViewSQL(String oldViewName, String newViewName,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
throw new UnsupportedOperationException("Not yet implemented");
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getSequenceInformationSQL(java.lang.String,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getSequenceInformationSQL(String sequenceName, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// String last_value = rs.getString(1); // last_value
// String max_value = rs.getString(2); // max_value
// String min_value = rs.getString(3); // min_value
// String cache_value = rs.getString(4); // cache_value
// String increment_by = rs.getString(5); // increment_by
// int cycleInt = rs.getInt(6); // is_cycled
String templateStr =
"select start_with as last_value, MAXIMUM_VALUE, MINIMUM_VALUE, 0 as CACHE_VALUE, INCREMENT, "
+ "case INCREMENT " + "when 'NO' then 0 " + "else 1 " + "end as INCREMENT_BY "
+ "from INFORMATION_SCHEMA.SYSTEM_SEQUENCES " + "where SEQUENCE_SCHEMA = '$sequenceSchema$' "
+ "and SEQUENCE_NAME = '$sequenceName$' ";
StringTemplate st = new StringTemplate(templateStr);
st.setAttribute(ST_SEQUENCE_NAME_KEY, sequenceName);
st.setAttribute(ST_SCHEMA_NAME_KEY, qualifier.getSchema());
return st.toString();
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAccessMethods()
*/
@Override
public boolean supportsAccessMethods()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAddForeignKeyConstraint()
*/
@Override
public boolean supportsAddForeignKeyConstraint()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAddUniqueConstraint()
*/
@Override
public boolean supportsAddUniqueConstraint()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAlterSequence()
*/
@Override
public boolean supportsAlterSequence()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAutoIncrement()
*/
@Override
public boolean supportsAutoIncrement()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsCheckOptionsForViews()
*/
@Override
public boolean supportsCheckOptionsForViews()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsCreateIndex()
*/
@Override
public boolean supportsCreateIndex()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsCreateSequence()
*/
@Override
public boolean supportsCreateSequence()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsCreateView()
*/
@Override
public boolean supportsCreateView()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsDropConstraint()
*/
@Override
public boolean supportsDropConstraint()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsDropIndex()
*/
@Override
public boolean supportsDropIndex()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsDropSequence()
*/
@Override
public boolean supportsDropSequence()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsDropView()
*/
@Override
public boolean supportsDropView()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsEmptyTables()
*/
@Override
public boolean supportsEmptyTables()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsIndexes()
*/
public boolean supportsIndexes()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsMultipleRowInserts()
*/
public boolean supportsMultipleRowInserts()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsRenameTable()
*/
public boolean supportsRenameTable()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsRenameView()
*/
public boolean supportsRenameView()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsSequence()
*/
public boolean supportsSequence()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsSequenceInformation()
*/
public boolean supportsSequenceInformation()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsTablespace()
*/
public boolean supportsTablespace()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsUpdate()
*/
public boolean supportsUpdate()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAddColumn()
*/
public boolean supportsAddColumn()
{
// TODO verify this is correct
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsViewDefinition()
*/
public boolean supportsViewDefinition()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getViewDefinitionSQL(java.lang.String,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
public String getViewDefinitionSQL(String viewName, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
String templateStr =
"SELECT VIEW_DEFINITION " + "FROM INFORMATION_SCHEMA.SYSTEM_VIEWS "
+ "WHERE TABLE_NAME = '$viewName$' " + "and TABLE_SCHEMA = '$schemaName$' ";
StringTemplate st = new StringTemplate(templateStr);
st.setAttribute(ST_VIEW_NAME_KEY, viewName);
st.setAttribute(ST_SCHEMA_NAME_KEY, qualifier.getSchema());
return st.toString();
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getQualifiedIdentifier(java.lang.String,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
public String getQualifiedIdentifier(String identifier, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
return identifier;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsCorrelatedSubQuery()
*/
public boolean supportsCorrelatedSubQuery()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getSequencePropertyMutability()
*/
@Override
public SequencePropertyMutability getSequencePropertyMutability()
{
SequencePropertyMutability result = new SequencePropertyMutability();
result.setCache(false);
result.setCycle(false);
result.setMaxValue(false);
result.setMinValue(false);
result.setRestart(true);
result.setStartWith(true);
return result;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getTimestampMaximumFractionalDigits()
*/
@Override
public int getTimestampMaximumFractionalDigits()
{
return 9;
}
}