/*
* 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.SQLException;
import java.sql.Types;
import java.util.ArrayList;
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.ForeignKeyInfo;
import net.sourceforge.squirrel_sql.fw.sql.IDatabaseObjectInfo;
import net.sourceforge.squirrel_sql.fw.sql.ISQLDatabaseMetaData;
import net.sourceforge.squirrel_sql.fw.sql.ITableInfo;
import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo;
import org.antlr.stringtemplate.StringTemplate;
import org.hibernate.HibernateException;
/**
* A dialect delegate for the Sybase database.
*/
public class SybaseDialectExt extends CommonHibernateDialect implements HibernateDialect
{
private class SybaseDialectHelper extends org.hibernate.dialect.SybaseDialect {
public SybaseDialectHelper() {
super();
registerColumnType(Types.BIGINT, "numeric($p)");
registerColumnType(Types.BINARY, "image");
registerColumnType(Types.BIT, "tinyint");
registerColumnType(Types.BLOB, "image");
registerColumnType(Types.BOOLEAN, "tinyint");
registerColumnType(Types.CHAR, 255, "char($l)");
registerColumnType(Types.CHAR, "text");
registerColumnType(Types.CLOB, "text");
registerColumnType(Types.DATE, "date");
registerColumnType(Types.DECIMAL, "decimal($p,$s)");
registerColumnType(Types.DOUBLE, "float($p)");
registerColumnType(Types.FLOAT, "float($p)");
registerColumnType(Types.INTEGER, "int");
registerColumnType(Types.LONGVARBINARY, "image");
registerColumnType(Types.LONGVARCHAR, "text");
registerColumnType(Types.NUMERIC, "numeric($p,$s)");
registerColumnType(Types.REAL, "real");
registerColumnType(Types.SMALLINT, "smallint");
registerColumnType(Types.TIME, "time");
registerColumnType(Types.TIMESTAMP, "datetime");
registerColumnType(Types.TINYINT, "tinyint");
registerColumnType(Types.VARBINARY, "image");
registerColumnType(Types.VARCHAR, 255, "varchar($l)");
registerColumnType(Types.VARCHAR, "text");
}
}
/** extended hibernate dialect used in this wrapper */
private SybaseDialectHelper _dialect = new SybaseDialectHelper();
/**
* @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") || type.getName().equalsIgnoreCase("catalog"))
{
result = false;
}
return result;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getLengthFunction(int)
*/
@Override
public String getLengthFunction(int dataType)
{
return "datalength";
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getMaxPrecision(int)
*/
@Override
public int getMaxPrecision(int dataType)
{
if (dataType == Types.DOUBLE || dataType == Types.FLOAT)
{
return 48;
} else
{
return 38;
}
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDisplayName()
*/
@Override
public String getDisplayName()
{
return "Sybase";
}
/**
* Returns boolean value indicating whether or not this dialect supports the specified database
* product/version.
*
* @param databaseProductName
* the name of the database as reported by DatabaseMetaData.getDatabaseProductName()
* @param databaseProductVersion
* the version of the database as reported by DatabaseMetaData.getDatabaseProductVersion()
* @return true if this dialect can be used for the specified product name and version; false otherwise.
*/
@Override
public boolean supportsProduct(String databaseProductName, String databaseProductVersion)
{
if (databaseProductName == null)
{
return false;
}
String lname = databaseProductName.trim().toLowerCase();
if (lname.startsWith("sybase") || lname.startsWith("adaptive") || lname.startsWith("sql server"))
{
// We don't yet have the need to discriminate by version.
return true;
}
return false;
}
/**
* Returns a boolean value indicating whether or not this database dialect supports dropping columns from
* tables.
*
* @return true if the database supports dropping columns; false otherwise.
*/
@Override
public boolean supportsDropColumn()
{
return true;
}
/**
* Returns the SQL that forms the command to drop the specified colum in the specified table.
*
* @param tableName
* the name of the table that has the column
* @param columnName
* the name of the column to drop.
* @return
* @throws UnsupportedOperationException
* if the database doesn't support dropping columns.
*/
@Override
public String getColumnDropSQL(String tableName, String columnName, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
return DialectUtils.getColumnDropSQL(tableName, columnName, qualifier, prefs, this);
}
/**
* Returns the SQL that forms the command to drop the specified table. If cascade contraints is supported
* by the dialect and cascadeConstraints is true, then a drop statement with cascade constraints clause
* will be formed.
*
* @param iTableInfo
* the table to drop
* @param cascadeConstraints
* whether or not to drop any FKs that may reference the specified table.
* @return the drop SQL command.
*/
@Override
public List<String> getTableDropSQL(ITableInfo iTableInfo, boolean cascadeConstraints,
boolean isMaterializedView, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
// SQL-Server doesn't support a cascade clause.
List<String> dropTableSQL =
DialectUtils.getTableDropSQL(iTableInfo,
false,
cascadeConstraints,
false,
DialectUtils.CASCADE_CLAUSE,
false, qualifier, prefs, this);
if (cascadeConstraints)
{
ArrayList<String> result = new ArrayList<String>();
ForeignKeyInfo[] fks = iTableInfo.getExportedKeys();
if (fks != null && fks.length > 0)
{
for (int i = 0; i < fks.length; i++)
{
ForeignKeyInfo info = fks[i];
String fkName = info.getForeignKeyName();
String fkTable = info.getForeignKeyTableName();
StringBuilder tmp = new StringBuilder();
tmp.append("ALTER TABLE ");
tmp.append(fkTable);
tmp.append(" DROP CONSTRAINT ");
tmp.append(fkName);
result.add(tmp.toString());
}
}
result.addAll(dropTableSQL);
return result;
} else
{
return dropTableSQL;
}
}
/**
* Returns the SQL that forms the command to add a primary key to the specified table composed of the given
* column names. alter table test add primary key (mychar)
*
* @param pkName
* the name of the constraint
* @param columnNames
* the columns that form the key
* @return
*/
@Override
public String[] getAddPrimaryKeySQL(String pkName, TableColumnInfo[] columns, ITableInfo ti, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
return new String[] { DialectUtils.getAddPrimaryKeySQL(ti, pkName, columns, false, qualifier, prefs, this) };
}
/**
* Returns a boolean value indicating whether or not this dialect supports adding comments to columns.
*
* @return true if column comments are supported; false otherwise.
*/
@Override
public boolean supportsColumnComment()
{
return false;
}
/**
* Returns the SQL statement to use to add a comment to the specified column of the specified table.
*
* @param info
* information about the column such as type, name, etc.
* @return
* @throws UnsupportedOperationException
* if the database doesn't support annotating columns with a comment.
*/
@Override
public String getColumnCommentAlterSQL(TableColumnInfo info, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs) throws UnsupportedOperationException
{
int featureId = DialectUtils.COLUMN_COMMENT_ALTER_TYPE;
String msg = DialectUtils.getUnsupportedMessage(this, featureId);
throw new UnsupportedOperationException(msg);
}
/**
* Returns a boolean value indicating whether or not this database dialect supports changing a column from
* null to not-null and vice versa.
*
* @return true if the database supports dropping columns; false otherwise.
*/
@Override
public boolean supportsAlterColumnNull()
{
return true;
}
/**
* Returns the SQL used to alter the specified column to not allow null values alter table table_name
* modify column_name not null
*
* @param info
* the column to modify
* @return the SQL to execute
*/
@Override
public String[] getColumnNullableAlterSQL(TableColumnInfo info, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
String alterClause = DialectUtils.MODIFY_CLAUSE;
return new String[] { DialectUtils.getColumnNullableAlterSQL(info, this, alterClause, false, qualifier, prefs) };
}
/**
* Returns a boolean value indicating whether or not this database dialect supports renaming columns.
*
* @return true if the database supports changing the name of columns; false otherwise.
*/
@Override
public boolean supportsRenameColumn()
{
return true;
}
/**
* Returns the SQL that is used to change the column name. exec sp_rename 'test.renameCol', newNameCol
*
* @param from
* the TableColumnInfo as it is
* @param to
* the TableColumnInfo as it wants to be
* @return the SQL to make the change
*/
@Override
public String getColumnNameAlterSQL(TableColumnInfo from, TableColumnInfo to, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
StringBuffer result = new StringBuffer();
result.append("exec sp_rename ");
result.append("'");
result.append(from.getTableName());
result.append(".");
result.append(from.getColumnName());
result.append("'");
result.append(", ");
result.append(to.getColumnName());
return result.toString();
}
/**
* Returns a boolean value indicating whether or not this dialect supports modifying a columns type.
*
* @return true if supported; false otherwise
*/
@Override
public boolean supportsAlterColumnType()
{
return true;
}
/**
* Returns the SQL that is used to change the column type. alter table table_name modify column_name
* datatype
*
* @param from
* the TableColumnInfo as it is
* @param to
* the TableColumnInfo as it wants to be
* @return the SQL to make the change
* @throw UnsupportedOperationException if the database doesn't support modifying column types.
*/
@Override
public List<String> getColumnTypeAlterSQL(TableColumnInfo from, TableColumnInfo to,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs) throws UnsupportedOperationException
{
String alterClause = DialectUtils.MODIFY_CLAUSE;
String setClause = "";
return DialectUtils.getColumnTypeAlterSQL(this, alterClause, setClause, false, from, to, qualifier, prefs);
}
/**
* Returns a boolean value indicating whether or not this database dialect supports changing a column's
* default value.
*
* @return true if the database supports modifying column defaults; false otherwise
*/
@Override
public boolean supportsAlterColumnDefault()
{
return false;
}
/**
* Returns the SQL command to change the specified column's default value
*
* @param info
* the column to modify and it's default value.
* @return SQL to make the change
*/
@Override
public String getColumnDefaultAlterSQL(TableColumnInfo info, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
int featureId = DialectUtils.COLUMN_DEFAULT_ALTER_TYPE;
String msg = DialectUtils.getUnsupportedMessage(this, featureId);
throw new UnsupportedOperationException(msg);
}
/**
* Returns the SQL command to drop the specified table's primary key.
*
* @param pkName
* the name of the primary key that should be dropped
* @param tableName
* the name of the table whose primary key should be dropped
* @return
*/
@Override
public String getDropPrimaryKeySQL(String pkName, String tableName, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
return DialectUtils.getDropPrimaryKeySQL(pkName, tableName, true, false, qualifier, prefs, this);
}
/**
* Returns the SQL command to drop the specified table's foreign key constraint.
*
* @param fkName
* the name of the foreign key that should be dropped
* @param tableName
* the name of the table whose foreign key should be dropped
* @return
*/
@Override
public String getDropForeignKeySQL(String fkName, String tableName, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
return DialectUtils.getDropForeignKeySQL(fkName, tableName, qualifier, prefs, this);
}
/**
* Returns the SQL command to create the specified table.
*
* @param tables
* the tables to get create statements for
* @param md
* the metadata from the ISession
* @param prefs
* preferences about how the resultant SQL commands should be formed.
* @param isJdbcOdbc
* whether or not the connection is via JDBC-ODBC bridge.
* @return the SQL that is used to create the specified table
*/
@Override
public List<String> getCreateTableSQL(List<ITableInfo> tables, ISQLDatabaseMetaData md,
CreateScriptPreferences prefs, boolean isJdbcOdbc) throws SQLException
{
return DialectUtils.getCreateTableSQL(tables, md, this, prefs, isJdbcOdbc);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDialectType()
*/
@Override
public DialectType getDialectType()
{
return DialectType.SYBASEASE;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getIndexAccessMethodsTypes()
*/
@Override
public String[] getIndexAccessMethodsTypes()
{
return new String[] { "UNIQUE", "NON-UNIQUE" };
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getIndexStorageOptions()
*/
@Override
public String[] getIndexStorageOptions()
{
return new String[] { "NONCLUSTERED", "CLUSTERED" };
}
/**
* @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)
{
final int featureId = DialectUtils.ADD_AUTO_INCREMENT_TYPE;
final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
throw new UnsupportedOperationException(msg);
}
/**
* @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 = true;
boolean supportsNullQualifier = true;
boolean addNullClause = true;
String sql =
DialectUtils.getAddColumSQL(column,
this,
addDefaultClause,
supportsNullQualifier,
addNullClause,
qualifier,
prefs);
result.add(sql);
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)
{
StringTemplate st = new StringTemplate(ST_ADD_FOREIGN_KEY_CONSTRAINT_STYLE_ONE);
HashMap<String, String> fkValuesMap = new HashMap<String, String>();
fkValuesMap.put("childTableName", localTableName);
fkValuesMap.put("constraint", "CONSTRAINT");
fkValuesMap.put("constraintName", constraintName);
fkValuesMap.put("parentTableName", refTableName);
// TODO: create the child index ST
StringTemplate childIndexST = null;
HashMap<String, String> ckIndexValuesMap = null;
return DialectUtils.getAddForeignKeyConstraintSQL(st,
fkValuesMap,
childIndexST,
ckIndexValuesMap,
localRefColumns,
qualifier,
prefs,
this);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.HibernateDialect#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)
{
StringTemplate st = new StringTemplate(ST_ADD_UNIQUE_CONSTRAINT_STYLE_TWO);
HashMap<String, String> valuesMap = new HashMap<String, String>();
valuesMap.put(ST_TABLE_NAME_KEY, tableName);
valuesMap.put(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)
{
final int featureId = DialectUtils.ALTER_SEQUENCE_TYPE;
final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
throw new UnsupportedOperationException(msg);
}
/**
* @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)
{
StringTemplate st = new StringTemplate(ST_CREATE_INDEX_STYLE_TWO);
HashMap<String, String> valuesMap = new HashMap<String, String>();
if (unique)
{
valuesMap.put(ST_UNIQUE_KEY, "UNIQUE");
}
// TODO: Need to add storageOptions to the add index dialog
// valuesMap.put(ST_STORAGE_OPTION_KEY, );
valuesMap.put(ST_INDEX_NAME_KEY, indexName);
valuesMap.put(ST_TABLE_NAME_KEY, tableName);
return DialectUtils.getAddIndexSQL(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)
{
final int featureId = DialectUtils.CREATE_SEQUENCE_TYPE;
final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
throw new UnsupportedOperationException(msg);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getCreateTableSQL(java.lang.String,
* java.util.List, java.util.List, net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences,
* net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier)
*/
@Override
public String getCreateTableSQL(String tableName, List<TableColumnInfo> columns,
List<TableColumnInfo> primaryKeys, SqlGenerationPreferences prefs, DatabaseObjectQualifier qualifier)
{
return DialectUtils.getCreateTableSQL(tableName, columns, primaryKeys, prefs, qualifier, this);
}
/**
* @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)
{
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);
if (checkOption != null && !"".equals(checkOption))
{
valuesMap.put("with", "WITH");
valuesMap.put("checkOption", "CHECK OPTION");
}
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)
{
return DialectUtils.getDropConstraintSQL(tableName, constraintName, qualifier, prefs, this);
}
/**
* @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)
{
StringTemplate st = new StringTemplate(ST_DROP_INDEX_STYLE_TWO);
st.setAttribute(ST_INDEX_NAME_KEY, indexName);
st.setAttribute(ST_TABLE_NAME_KEY, tableName);
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)
{
final int featureId = DialectUtils.DROP_SEQUENCE_TYPE;
final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
throw new UnsupportedOperationException(msg);
}
/**
* @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)
{
Boolean cascadeNotSupported = null;
return DialectUtils.getDropViewSQL(viewName, cascadeNotSupported, qualifier, prefs, this);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getInsertIntoSQL(java.lang.String,
* java.util.List, java.lang.String, net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
* net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
*/
@Override
public String getInsertIntoSQL(String tableName, List<String> columns, String valuesPart,
DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
{
return DialectUtils.getInsertIntoSQL(tableName, columns, valuesPart, qualifier, prefs, this);
}
/**
* @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)
{
StringTemplate st = new StringTemplate(ST_SP_RENAME_STYLE_ONE);
HashMap<String, String> valuesMap = new HashMap<String, String>();
valuesMap.put(ST_OLD_OBJECT_NAME_KEY, oldTableName);
valuesMap.put(ST_NEW_OBJECT_NAME_KEY, newTableName);
return DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs);
}
/**
* @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)
{
StringTemplate st = new StringTemplate(ST_SP_RENAME_STYLE_ONE);
HashMap<String, String> valuesMap = new HashMap<String, String>();
valuesMap.put(ST_OLD_OBJECT_NAME_KEY, oldViewName);
valuesMap.put(ST_NEW_OBJECT_NAME_KEY, newViewName);
return new String[] { DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs) };
}
/**
* @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)
{
final int featureId = DialectUtils.SEQUENCE_INFORMATION_TYPE;
final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
throw new UnsupportedOperationException(msg);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getUpdateSQL(java.lang.String,
* java.lang.String[], java.lang.String[], 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[] getUpdateSQL(String tableName, String[] setColumns, String[] setValues, String[] fromTables,
String[] whereColumns, String[] whereValues, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
String templateStr = "";
if (fromTables != null) {
templateStr = ST_UPDATE_CORRELATED_QUERY_STYLE_TWO;
} else {
templateStr = ST_UPDATE_STYLE_ONE;
}
StringTemplate st = new StringTemplate(templateStr);
return DialectUtils.getUpdateSQL(st,
tableName,
setColumns,
setValues,
fromTables,
whereColumns,
whereValues,
qualifier,
prefs,
this);
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAccessMethods()
*/
@Override
public boolean supportsAccessMethods()
{
return true;
}
/**
* @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 false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAutoIncrement()
*/
@Override
public boolean supportsAutoIncrement()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsCheckOptionsForViews()
*/
@Override
public boolean supportsCheckOptionsForViews()
{
return true;
}
/**
* @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 false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsCreateTable()
*/
@Override
public boolean supportsCreateTable()
{
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 false;
}
/**
* @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()
*/
@Override
public boolean supportsIndexes()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsInsertInto()
*/
@Override
public boolean supportsInsertInto()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsMultipleRowInserts()
*/
@Override
public boolean supportsMultipleRowInserts()
{
/*
* Can be done as follows in MS SQLServer INSERT INTO mytable(id,name) SELECT 1, 'pizza' UNION SELECT 2,
* 'donuts' UNION SELECT 3, 'milk';
*/
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsRenameTable()
*/
@Override
public boolean supportsRenameTable()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsRenameView()
*/
@Override
public boolean supportsRenameView()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsSequence()
*/
@Override
public boolean supportsSequence()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsSequenceInformation()
*/
@Override
public boolean supportsSequenceInformation()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsTablespace()
*/
@Override
public boolean supportsTablespace()
{
return false;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsUpdate()
*/
@Override
public boolean supportsUpdate()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAddColumn()
*/
@Override
public boolean supportsAddColumn()
{
return true;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsViewDefinition()
*/
@Override
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)
*/
@Override
public String getViewDefinitionSQL(String viewName, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
// Discovered that the loginame field can be null - in that case, how to know we have the correct view?
String sql =
"select text from sysobjects inner join syscomments on syscomments.id = sysobjects.id "
+ "where (loginame = '$catalogName$' or loginame is null) " +
"and name = '$viewName$' and text not like '%--%'";
StringTemplate st = new StringTemplate(sql);
st.setAttribute(ST_CATALOG_NAME_KEY, qualifier.getCatalog());
st.setAttribute(ST_VIEW_NAME_KEY, viewName);
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)
*/
@Override
public String getQualifiedIdentifier(String identifier, DatabaseObjectQualifier qualifier,
SqlGenerationPreferences prefs)
{
return identifier;
}
/**
* @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsCorrelatedSubQuery()
*/
@Override
public boolean supportsCorrelatedSubQuery()
{
return true;
}
}