Package net.sourceforge.squirrel_sql.fw.dialects

Source Code of net.sourceforge.squirrel_sql.fw.dialects.MAXDBDialectExt$MAXDBDialectHelper

/*
* 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.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;
import org.hibernate.dialect.SAPDBDialect;

public class MAXDBDialectExt extends CommonHibernateDialect implements HibernateDialect
{
  private class MAXDBDialectHelper extends SAPDBDialect
  {
    public MAXDBDialectHelper()
    {
      registerColumnType(Types.BIGINT, "fixed(19,0)");
      registerColumnType(Types.BINARY, 8000, "char($l) byte");
      registerColumnType(Types.BINARY, "long varchar byte");
      registerColumnType(Types.BIT, "boolean");
      registerColumnType(Types.BLOB, "long byte");
      registerColumnType(Types.BOOLEAN, "boolean");
      registerColumnType(Types.CLOB, "long varchar");
      registerColumnType(Types.CHAR, 8000, "char($l) ascii");
      registerColumnType(Types.CHAR, "long varchar ascii");
      registerColumnType(Types.DECIMAL, "decimal($p,$s)");
      registerColumnType(Types.DOUBLE, "double precision");
      registerColumnType(Types.DATE, "date");
      registerColumnType(Types.FLOAT, "float($p)");
      registerColumnType(Types.INTEGER, "int");
      registerColumnType(Types.LONGVARBINARY, 8000, "varchar($l) byte");
      registerColumnType(Types.LONGVARBINARY, "long byte");
      registerColumnType(Types.LONGVARCHAR, "long ascii");
      registerColumnType(Types.NUMERIC, "fixed($p,$s)");
      registerColumnType(Types.REAL, "float($p)");
      registerColumnType(Types.SMALLINT, "smallint");
      registerColumnType(Types.TIME, "time");
      registerColumnType(Types.TIMESTAMP, "timestamp");
      registerColumnType(Types.TINYINT, "fixed(3,0)");
      registerColumnType(Types.VARBINARY, "long byte");
      registerColumnType(Types.VARCHAR, 8000, "varchar($l)");
      registerColumnType(Types.VARCHAR, "long ascii");
    }
  }

  /** extended hibernate dialect used in this wrapper */
  private final MAXDBDialectHelper _dialect = new MAXDBDialectHelper();

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getTypeName(int, int, int, int)
   */
  @Override
  public String getTypeName(final int code, final int length, final int precision, final 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(final IDatabaseObjectInfo info)
  {
    boolean result = true;
    final DatabaseObjectType type = info.getDatabaseObjectType();
    if (type.getName().equalsIgnoreCase("database"))
    {
      result = false;
    }
    return result;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getMaxPrecision(int)
   */
  @Override
  public int getMaxPrecision(final int dataType)
  {
    return 38;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getPrecisionDigits(int, int)
   */
  @Override
  public int getPrecisionDigits(final int columnSize, final int dataType)
  {
    return columnSize * 2;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getColumnLength(int, int)
   */
  @Override
  public int getColumnLength(final int columnSize, final int dataType)
  {
    // driver returns 8 for "long byte", yet it can store 2GB of data.
    if (dataType == Types.LONGVARBINARY) { return Integer.MAX_VALUE; }
    return columnSize;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDisplayName()
   */
  @Override
  public String getDisplayName()
  {
    return "MaxDB";
  }

  /**
   * 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(final String databaseProductName, final String databaseProductVersion)
  {
    if (databaseProductName == null) { return false; }
    final String lname = databaseProductName.trim().toLowerCase();
    if (lname.startsWith("sap") || lname.startsWith("maxdb"))
    {
      // 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(final String tableName, final 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(final ITableInfo iTableInfo, final boolean cascadeConstraints,
    final boolean isMaterializedView, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
  {
    return DialectUtils.getTableDropSQL(iTableInfo, true, cascadeConstraints, false,
      DialectUtils.CASCADE_CLAUSE, false, qualifier, prefs, this);
  }

  /**
   * 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 constraint test_pk PRIMARY KEY (notnullint)
   *
   * @param pkName
   *           the name of the constraint
   * @param columnNames
   *           the columns that form the key
   * @return
   */
  @Override
  public String[] getAddPrimaryKeySQL(final String pkName, final TableColumnInfo[] columns,
    final ITableInfo ti, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
  {
    final ArrayList<String> result = new ArrayList<String>();
    for (final TableColumnInfo info : columns)
    {
      result.add(getColumnNullableAlterSQL(info, false));
    }
    result.add(DialectUtils.getAddPrimaryKeySQL(ti, pkName, columns, false, qualifier, prefs, this));
    return result.toArray(new String[result.size()]);
  }

  /**
   * 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 true;
  }

  /**
   * 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(final TableColumnInfo info,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
    throws UnsupportedOperationException
  {
    return DialectUtils.getColumnCommentAlterSQL(info, qualifier, prefs, this);
  }

  /**
   * 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
   * COLUMN column_name DEFAULT NULL ALTER TABLE table_name COLUMN column_name NOT NULL
   *
   * @param info
   *           the column to modify
   * @return the SQL to execute
   */
  @Override
  public String[] getColumnNullableAlterSQL(final TableColumnInfo info,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    final boolean nullable = info.isNullable().equalsIgnoreCase("YES");
    return new String[] { getColumnNullableAlterSQL(info, nullable) };
  }

  /**
   * Returns the SQL used to alter the specified column to not allow null values ALTER TABLE table_name
   * COLUMN column_name DEFAULT NULL ALTER TABLE table_name COLUMN column_name NOT NULL
   *
   * @param info
   *           the column to modify
   * @param nullable
   *           whether or not the column should allow nulls
   * @return the SQL to execute
   */
  public String getColumnNullableAlterSQL(final TableColumnInfo info, final boolean nullable)
  {
    final StringBuffer result = new StringBuffer();
    result.append("ALTER TABLE ");
    result.append(info.getTableName());
    result.append(" COLUMN ");
    result.append(info.getColumnName());
    if (nullable)
    {
      result.append(" DEFAULT NULL");
    }
    else
    {
      result.append(" NOT NULL");
    }
    return result.toString();
  }

  /**
   * 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. RENAME COLUMN table_name.column_name TO
   * new_column_name
   *
   * @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(final TableColumnInfo from, final TableColumnInfo to,
    DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
  {
    return DialectUtils.getColumnRenameSQL(from, to, qualifier, prefs, this);
  }

  /**
   * 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.
   *
   * @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(final TableColumnInfo from, final TableColumnInfo to,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
    throws UnsupportedOperationException
  {
    final String alterClause = DialectUtils.MODIFY_CLAUSE;
    return DialectUtils.getColumnTypeAlterSQL(this, alterClause, "", 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 true;
  }

  /**
   * Returns the SQL command to change the specified column's default value alter table test column mychar
   * drop default alter table test column mychar add default 'a default'
   *
   * @param info
   *           the column to modify and it's default value.
   * @return SQL to make the change
   */
  @Override
  public String getColumnDefaultAlterSQL(final TableColumnInfo info, DatabaseObjectQualifier qualifier,
    SqlGenerationPreferences prefs)
  {
    final String alterClause = DialectUtils.COLUMN_CLAUSE;
    final String newDefault = info.getDefaultValue();
    String defaultClause = null;
    if (newDefault != null && !"".equals(newDefault))
    {
      defaultClause = DialectUtils.ADD_DEFAULT_CLAUSE;
    }
    else
    {
      defaultClause = DialectUtils.DROP_DEFAULT_CLAUSE;
    }
    return DialectUtils.getColumnDefaultAlterSQL(this, info, alterClause, false, defaultClause, qualifier,
      prefs);
  }

  /**
   * 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(final String pkName, final String tableName,
    DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
  {
    return DialectUtils.getDropPrimaryKeySQL(pkName, tableName, false, 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(final String fkName, final 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(final List<ITableInfo> tables, final ISQLDatabaseMetaData md,
    final CreateScriptPreferences prefs, final boolean isJdbcOdbc) throws SQLException
  {
    return DialectUtils.getCreateTableSQL(tables, md, this, prefs, isJdbcOdbc);
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.HibernateDialect#getDialectType()
   */
  @Override
  public DialectType getDialectType()
  {
    return DialectType.MAXDB;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getIndexAccessMethodsTypes()
   */
  @Override
  public String[] getIndexAccessMethodsTypes()
  {
    return null;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getIndexStorageOptions()
   */
  @Override
  public String[] getIndexStorageOptions()
  {
    return null;
  }

  /**
   * @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(final TableColumnInfo column,
    final DatabaseObjectQualifier qualifier, final 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(final TableColumnInfo column, final DatabaseObjectQualifier qualifier,
    final SqlGenerationPreferences prefs)
  {
    final ArrayList<String> result = new ArrayList<String>();

    final boolean addDefaultClause = true;
    final boolean supportsNullQualifier = false;
    final boolean addNullClause = true;

    final String sql =
      DialectUtils.getAddColumSQL(column, this, addDefaultClause, supportsNullQualifier, addNullClause,
        qualifier, prefs);

    result.add(sql);

    if (column.getRemarks() != null && !"".equals(column.getRemarks()))
    {
      result.add(getColumnCommentAlterSQL(column, qualifier, prefs));
    }

    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(final String localTableName, final String refTableName,
    final String constraintName, final Boolean deferrable, final Boolean initiallyDeferred,
    final Boolean matchFull, final boolean autoFKIndex, final String fkIndexName,
    final Collection<String[]> localRefColumns, final String onUpdateAction, final String onDeleteAction,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // ALTER TABLE <table_name> ADD
    // FOREIGN KEY [<referential_constraint_name>] (<referencing_column>,...)
    // REFERENCES <referenced_table> [(<referenced_column>,...)] [<delete_rule>]

    // "ALTER TABLE $childTableName$ " +
    // "ADD $constraint$ $constraintName$ FOREIGN KEY ( $childColumn; separator=\",\"$ ) " +
    // "REFERENCES $parentTableName$ ( $parentColumn; separator=\",\"$ )";

    final StringTemplate fkST = new StringTemplate(ST_ADD_FOREIGN_KEY_CONSTRAINT_STYLE_ONE);
    final 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(final String tableName, final String constraintName,
    final TableColumnInfo[] columns, final DatabaseObjectQualifier qualifier,
    final SqlGenerationPreferences prefs)
  {
    final int featureId = DialectUtils.ADD_UNIQUE_TYPE;
    final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
    throw new UnsupportedOperationException(msg);
  }

  /**
   * @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(final String sequenceName, final String increment,
    final String minimum, final String maximum, final String restart, final String cache,
    final boolean cycle, final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    return DialectUtils.getSimulatedAlterSequenceSQL(sequenceName, increment, minimum, maximum, minimum,
      cache, cycle, qualifier, prefs, this);
  }

  /**
   * @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(final String indexName, final String tableName, final String accessMethod,
    final String[] columns, final boolean unique, final String tablespace, final String constraints,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {

    // <create_index_statement> ::=
    // CREATE [UNIQUE] INDEX <index_name> ON <table_name> (<index_spec>)
    //
    // <index_spec> ::=
    // <index_column_name>,...
    // | <dbfunction_name> (<column_name>,...) [ASC|DESC]
    //
    // <index_column_name> ::=
    // <column_name> [ASC|DESC]

    // String ST_CREATE_INDEX_STYLE_TWO =
    // "CREATE $unique$ $storageOption$ INDEX $indexName$ " +
    // "ON $tableName$ ( $columnName; separator=\",\"$ )";

    final StringTemplate st = new StringTemplate(ST_CREATE_INDEX_STYLE_TWO);
    final HashMap<String, String> valuesMap = new HashMap<String, String>();

    if (unique)
    {
      valuesMap.put(ST_UNIQUE_KEY, "UNIQUE");
      if (accessMethod != null && "HASH".equalsIgnoreCase(accessMethod))
      {
        valuesMap.put(ST_STORAGE_OPTION_KEY, "HASH");
      }
    }
    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(final String sequenceName, final String increment,
    final String minimum, final String maximum, final String start, final String cache,
    final boolean cycle, final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // <create_sequence_statement> ::= CREATE SEQUENCE [<schema_name>.]<sequence_name>
    // [INCREMENT BY <integer>] [START WITH <integer>]
    // [MAXVALUE <integer> | NOMAXVALUE] [MINVALUE <integer> | NOMINVALUE]
    // [CYCLE | NOCYCLE]
    // [CACHE <unsigned_integer> | NOCACHE]
    // [ORDER | NOORDER]

    // "CREATE SEQUENCE $sequenceName$ $startWith$ $increment$ $minimum$ $maximum$ $cache$ $cycle$";

    final StringTemplate st = new StringTemplate(ST_CREATE_SEQUENCE_STYLE_TWO);

    final OptionalSqlClause incClause = new OptionalSqlClause(DialectUtils.INCREMENT_BY_CLAUSE, increment);
    final OptionalSqlClause minClause = new OptionalSqlClause(DialectUtils.MINVALUE_CLAUSE, minimum);
    final OptionalSqlClause maxClause = new OptionalSqlClause(DialectUtils.MAXVALUE_CLAUSE, maximum);
    final OptionalSqlClause cacheClause = new OptionalSqlClause(DialectUtils.CACHE_CLAUSE, cache);

    final HashMap<String, String> valuesMap =
      DialectUtils.getValuesMap(ST_SEQUENCE_NAME_KEY, sequenceName, ST_INCREMENT_KEY, incClause,
        ST_MINIMUM_KEY, minClause, ST_MAXIMUM_KEY, maxClause, ST_CACHE_KEY, cacheClause);
    if (cycle)
    {
      valuesMap.put(ST_CYCLE_KEY, "CYCLE");
    }

    return DialectUtils.getCreateSequenceSQL(st, valuesMap, qualifier, prefs, 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(final String viewName, final String definition, final String checkOption,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // <create_view_statement> ::=
    // CREATE [OR REPLACE] VIEW <table_name> [(<alias_name>,...)] AS <query_expression> [WITH CHECK OPTION]

    // "CREATE VIEW $viewName$ " +
    // "AS $selectStatement$ $withCheckOption$";
    final StringTemplate st = new StringTemplate(ST_CREATE_VIEW_STYLE_TWO);

    final HashMap<String, String> valuesMap =
      DialectUtils.getValuesMap(ST_VIEW_NAME_KEY, viewName, ST_SELECT_STATEMENT_KEY, definition);

    if (checkOption != null && !"".equals(checkOption))
    {
      valuesMap.put(ST_WITH_CHECK_OPTION_KEY, "WITH 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(final String tableName, final String constraintName,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    final int featureId = DialectUtils.DROP_CONSTRAINT_TYPE;
    final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
    throw new UnsupportedOperationException(msg);
  }

  /**
   * @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(final String tableName, final String indexName, final boolean cascade,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // <drop_index_statement> ::=
    // DROP INDEX <index_name> [ON <table_name>]

    final StringTemplate st = new StringTemplate(ST_DROP_INDEX_STYLE_ONE);
    final HashMap<String, String> valuesMap = new HashMap<String, String>();
    valuesMap.put(ST_INDEX_NAME_KEY, indexName);
    valuesMap.put(ST_TABLE_NAME_KEY, tableName);
    return DialectUtils.bindAttributes(this, st, valuesMap, qualifier, prefs);
  }

  /**
   * @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(final String sequenceName, final boolean cascade,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // "DROP SEQUENCE $sequenceName$ $cascade$";
    final StringTemplate st = new StringTemplate(ST_DROP_SEQUENCE_STYLE_ONE);

    final 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(final String viewName, final boolean cascade,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // "DROP VIEW $viewName$";
    final StringTemplate st = new StringTemplate(ST_DROP_VIEW_STYLE_ONE);

    final 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(final String oldTableName, final String newTableName,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // "RENAME TABLE $oldObjectName$ TO $newObjectName$";
    final StringTemplate st = new StringTemplate(ST_RENAME_TABLE_STYLE_ONE);

    final HashMap<String, String> valuesMap =
      DialectUtils.getValuesMap(ST_OLD_OBJECT_NAME_KEY, oldTableName, 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(final String oldViewName, final String newViewName,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // <rename_view_statement> ::= RENAME VIEW <old_table_name> TO <new_table_name>
    // <old_table_name> ::= <table_name>
    // <new_table_name> ::= <table_name

    // "RENAME VIEW $oldObjectName$ TO $newObjectName$";
    final StringTemplate st = new StringTemplate(ST_RENAME_VIEW_STYLE_ONE);

    final HashMap<String, String> valuesMap =
      DialectUtils.getValuesMap(ST_OLD_OBJECT_NAME_KEY, oldViewName, 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(final String sequenceName,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    return "SELECT LAST_NUMBER as last_value, MAX_VALUE, MIN_VALUE, CACHE_SIZE as cache_value, "
      + "INCREMENT_BY, CYCLE_FLAG as is_cycled " + "FROM DOMAIN.SEQUENCES";
  }

  /**
   * @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 false;
  }

  /**
   * @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 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 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 false;
  }

  /**
   * @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()
   */
  @Override
  public boolean supportsIndexes()
  {
    return true;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsMultipleRowInserts()
   */
  @Override
  public boolean supportsMultipleRowInserts()
  {
    return false;
  }

  /**
   * @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 true;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsSequenceInformation()
   */
  @Override
  public boolean supportsSequenceInformation()
  {
    return true;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsTablespace()
   */
  @Override
  public boolean supportsTablespace()
  {
    return false;
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.HibernateDialect#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.HibernateDialect#getViewDefinitionSQL(java.lang.String,
   *      net.sourceforge.squirrel_sql.fw.dialects.DatabaseObjectQualifier,
   *      net.sourceforge.squirrel_sql.fw.dialects.SqlGenerationPreferences)
   */
  @Override
  public String getViewDefinitionSQL(final String viewName, final DatabaseObjectQualifier qualifier,
    final SqlGenerationPreferences prefs)
  {
    return null;
  }

  /**
   * @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(final String identifier, final DatabaseObjectQualifier qualifier,
    final SqlGenerationPreferences prefs)
  {
    return identifier;
  }

}
TOP

Related Classes of net.sourceforge.squirrel_sql.fw.dialects.MAXDBDialectExt$MAXDBDialectHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.