Package net.sourceforge.squirrel_sql.fw.dialects

Source Code of net.sourceforge.squirrel_sql.fw.dialects.ProgressDialectExt$ProgressDialectHelper

/*
* 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.Collection;
import java.util.HashMap;
import java.util.List;

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.JDBCTypeMapper;
import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo;

import org.antlr.stringtemplate.StringTemplate;
import org.hibernate.HibernateException;
import org.hibernate.dialect.Dialect;

/**
* A dialect delegate for the Progress database. TODO: Progress specification says that the sum of all column
* lengths of a table row may not exceed 31960. Need to add an interface method to the HibernateDialect
* interface that takes an array of lengths and and checks the sum of columns for a row. This maximum number
* may be different across databases so this check method needs to be implemented by each dialect.
*
* @author manningr
*/
public class ProgressDialectExt extends CommonHibernateDialect implements HibernateDialect
{

  private class ProgressDialectHelper extends Dialect
  {
    public ProgressDialectHelper()
    {
      super();
      registerColumnType(Types.BIGINT, "integer");
      registerColumnType(Types.BINARY, 2000, "binary($l)");
      registerColumnType(Types.BINARY, 31982, "varbinary($l)");
      registerColumnType(Types.BINARY, "lvarbinary($l)");
      registerColumnType(Types.BIT, "bit");
      registerColumnType(Types.BLOB, "lvarbinary($l)");
      registerColumnType(Types.BOOLEAN, "bit");
      registerColumnType(Types.CHAR, 2000, "char($l)");
      registerColumnType(Types.CHAR, "char(2000)");
      // registerColumnType(Types.CLOB, 31982, "varchar($l)");
      registerColumnType(Types.CLOB, "varchar($l)");
      registerColumnType(Types.DATE, "date");
      registerColumnType(Types.DECIMAL, "numeric($p,2)");
      registerColumnType(Types.DOUBLE, "double precision");
      registerColumnType(Types.FLOAT, "float($p)");
      registerColumnType(Types.INTEGER, "integer");
      registerColumnType(Types.LONGVARBINARY, 999999999, "lvarbinary($l)");
      registerColumnType(Types.LONGVARBINARY, "lvarbinary(999999999)");
      // registerColumnType(Types.LONGVARCHAR, 31982, "varchar($l)");
      registerColumnType(Types.LONGVARCHAR, "varchar($l)");
      registerColumnType(Types.NUMERIC, "numeric($p,2)");
      registerColumnType(Types.REAL, "real");
      registerColumnType(Types.SMALLINT, "smallint");
      registerColumnType(Types.TIME, "date");
      registerColumnType(Types.TIMESTAMP, "timestamp");
      registerColumnType(Types.TINYINT, "tinyint");
      registerColumnType(Types.VARBINARY, 31982, "varbinary($l)");
      registerColumnType(Types.VARBINARY, "varbinary(31982)");
      registerColumnType(Types.VARCHAR, 31982, "varchar($l)");
      registerColumnType(Types.VARCHAR, "varchar(31982)");
    }
  }

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

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

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

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getLengthFunction(int)
   */
  @Override
  public String getLengthFunction(final int dataType)
  {
    return "length";
  }

  @Override
  public String getMaxFunction()
  {
    return "max";
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getMaxPrecision(int)
   */
  @Override
  public int getMaxPrecision(final int dataType)
  {
    if (dataType == Types.FLOAT)
    {
      return 15;
    }
    else
    {
      return 32;
    }
  }

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

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

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

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

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsProduct(java.lang.String,
   *      java.lang.String)
   */
  @Override
  public boolean supportsProduct(final String databaseProductName, final String databaseProductVersion)
  {
    if (databaseProductName == null) { return false; }
    if (databaseProductName.trim().toLowerCase().startsWith("progress")
      || databaseProductName.trim().toLowerCase().startsWith("openedge"))
    {
      // We don't yet have the need to discriminate by version.
      return true;
    }
    return false;
  }

  /**
   * @param info
   * @return
   * @throws UnsupportedOperationException
   */
  public String[] getColumnAddSQL(final TableColumnInfo info) throws UnsupportedOperationException
  {
    return new String[] { "Column add not yet supported" };
  }

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

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

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getColumnDropSQL(java.lang.String,
   *      java.lang.String, DatabaseObjectQualifier, SqlGenerationPreferences)
   */
  @Override
  public String getColumnDropSQL(final String tableName, final 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(final ITableInfo iTableInfo, final boolean cascadeConstraints,
    final boolean isMaterializedView, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
  {
    return DialectUtils.getTableDropSQL(iTableInfo, false, 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(final String pkName, final TableColumnInfo[] columns,
    final ITableInfo ti, DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
  {
    return new String[] { DialectUtils.getAddPrimaryKeySQL(ti, pkName, columns, false, qualifier, prefs,
      this) };
  }

  /**
   * @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(final TableColumnInfo info,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
    throws UnsupportedOperationException
  {
    final int featureId = DialectUtils.COLUMN_COMMENT_ALTER_TYPE;
    final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
    throw new UnsupportedOperationException(msg);
  }

  /**
   * @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(final TableColumnInfo info,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // "ALTER TABLE $tableName$ ALTER COLUMN $columnName$ SET $nullable$";
    final StringTemplate st = new StringTemplate(ST_ALTER_COLUMN_NULL_STYLE_ONE);
    final 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(final TableColumnInfo from, final TableColumnInfo to,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // "ALTER TABLE $tableName$ RENAME COLUMN $oldColumnName$ to $newColumnName$";
    final StringTemplate st = new StringTemplate(ST_ALTER_COLUMN_NAME_STYLE_ONE);

    final HashMap<String, String> valuesMap =
      DialectUtils.getValuesMap(ST_TABLE_NAME_KEY, from.getTableName(), ST_OLD_COLUMN_NAME_KEY,
        from.getColumnName(), ST_NEW_COLUMN_NAME_KEY, to.getColumnName());

    return DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs);
  }

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

  /**
   * @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(final TableColumnInfo from, final TableColumnInfo to,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
    throws UnsupportedOperationException
  {
    final int featureId = DialectUtils.COLUMN_COMMENT_ALTER_TYPE;
    final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
    throw new UnsupportedOperationException(msg);
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsAlterColumnNull()
   */
  @Override
  public boolean supportsAlterColumnNull()
  {
    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(final TableColumnInfo info,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // alter table TEST ALTER MYCHAR SET DEFAULT 'FOO'
    // alter table TEST ALTER MYCHAR DROP DEFAULT

    StringTemplate st = null;
    final HashMap<String, String> valuesMap =
      DialectUtils.getValuesMap(ST_TABLE_NAME_KEY, info.getTableName(), ST_COLUMN_NAME_KEY,
        info.getColumnName());

    if (info.getDefaultValue() != null)
    {
      // add a default value
      // "ALTER TABLE $tableName$ " +
      // "ALTER $columnName$ SET DEFAULT $defaultValue$";
      st = new StringTemplate(ST_ALTER_COLUMN_SET_DEFAULT_STYLE_ONE);
      if (JDBCTypeMapper.isNumberType(info.getDataType()))
      {
        valuesMap.put(ST_DEFAULT_VALUE_KEY, info.getDefaultValue());
      }
      else
      {
        valuesMap.put(ST_DEFAULT_VALUE_KEY, "'" + info.getDefaultValue() + "'");
      }
    }
    else
    {
      // drop the existing default value.
      // "ALTER TABLE $tableName$ " +
      // "ALTER $columnName$ DROP DEFAULT";
      st = new StringTemplate(ST_ALTER_COLUMN_DROP_DEFAULT_STYLE_ONE);

    }
    return DialectUtils.bindTemplateAttributes(this, st, valuesMap, qualifier, prefs);
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDropPrimaryKeySQL(java.lang.String,
   *      java.lang.String, DatabaseObjectQualifier, SqlGenerationPreferences)
   */
  @Override
  public String getDropPrimaryKeySQL(final String pkName, final String tableName,
    DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
  {
    final int featureId = DialectUtils.DROP_PRIMARY_KEY_TYPE;
    final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
    throw new UnsupportedOperationException(msg);
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getDropForeignKeySQL(java.lang.String,
   *      java.lang.String, DatabaseObjectQualifier, SqlGenerationPreferences)
   */
  @Override
  public String getDropForeignKeySQL(final String fkName, final String tableName,
    DatabaseObjectQualifier qualifier, SqlGenerationPreferences prefs)
  {
    return DialectUtils.getDropForeignKeySQL(fkName, tableName, qualifier, prefs, this);
  }

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#getCreateTableSQL(java.util.List,
   *      net.sourceforge.squirrel_sql.fw.sql.ISQLDatabaseMetaData,
   *      net.sourceforge.squirrel_sql.fw.dialects.CreateScriptPreferences, boolean)
   */
  @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.PROGRESS;
  }

  /**
   * @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.HibernateDialect#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(final TableColumnInfo column,
    final DatabaseObjectQualifier qualifier, final 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#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 boolean addDefaultClause = true;
    final boolean supportsNullQualifier = false;
    final boolean addNullClause = true;

    return new String[] { DialectUtils.getAddColumSQL(column, this, addDefaultClause,
      supportsNullQualifier, addNullClause, qualifier, prefs) };
  }

  /**
   * @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)
  {
    final Boolean deferrableNotSupported = null;
    final Boolean initiallyDeferredNotSupported = null;
    final Boolean matchFullNotSupported = null;

    return DialectUtils.getAddForeignKeyConstraintSQL(localTableName, refTableName, constraintName,
      deferrableNotSupported, initiallyDeferredNotSupported, matchFullNotSupported, autoFKIndex,
      fkIndexName, localRefColumns, onUpdateAction, onDeleteAction, 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)
  {
    // alter table FKTESTCHILDTABLE add CONSTRAINT foo_const UNIQUE (MYID)

    // "ALTER TABLE $tableName$ " +
    // "ADD CONSTRAINT $constraintName$ UNIQUE ($columnName; separator=\",\"$)";

    final String templateStr = ST_ADD_UNIQUE_CONSTRAINT_STYLE_TWO;

    final StringTemplate st = new StringTemplate(templateStr);

    final 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(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)
  {
    final StringBuilder result = new StringBuilder();
    result.append("CREATE ");

    if (unique)
    {
      result.append("UNIQUE ");
    }
    result.append(" INDEX ");
    result.append(DialectUtils.shapeQualifiableIdentifier(indexName, qualifier, prefs, this));
    result.append(" ON ");
    result.append(DialectUtils.shapeQualifiableIdentifier(tableName, qualifier, prefs, this));
    result.append("(");
    for (final String column : columns)
    {
      result.append(column);
      result.append(",");
    }
    result.setLength(result.length() - 1);
    result.append(")");
    return result.toString();
  }

  /**
   * @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)
  {
    // This is what the spec says:
    //
    // CREATE SEQUENCE
    // [schema_name.]sequence_name
    // [INCREMENT BY value],
    // [START WITH value],
    // [MAXVALUE value | NOMAXVALUE],
    // [MINVALUE value | NOMINVALUE],
    // [CYLCE | NOCYLCE]

    // Currently, OpenEdge only supports the PUB schema for sequences.

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

    final String templateStr = ST_CREATE_SEQUENCE_STYLE_TWO;

    final StringTemplate startClauseTemplate = new StringTemplate("START WITH $startWith$ ,");
    final OptionalSqlClause startClause =
      new OptionalSqlClause(startClauseTemplate, ST_START_WITH_KEY, start);

    final StringTemplate incrementByClauseTemplate = new StringTemplate("INCREMENT BY $incrementBy$ ,");
    final OptionalSqlClause incrementClause =
      new OptionalSqlClause(incrementByClauseTemplate, ST_INCREMENT_BY_KEY, increment);

    final StringTemplate maxClauseTemplate = new StringTemplate("MAXVALUE $maximum$ ,");
    final OptionalSqlClause maxClause = new OptionalSqlClause(maxClauseTemplate, ST_MAXIMUM_KEY, maximum);

    final StringTemplate minClauseTemplate = new StringTemplate("MINVALUE $minimum$ ,");
    final OptionalSqlClause minClause = new OptionalSqlClause(minClauseTemplate, ST_MINIMUM_KEY, minimum);

    final StringTemplate st = new StringTemplate(templateStr);

    st.setAttribute(ST_SEQUENCE_NAME_KEY, "PUB." + sequenceName);
    st.setAttribute(ST_START_WITH_KEY, startClause.toString());
    st.setAttribute(ST_INCREMENT_KEY, incrementClause.toString());
    st.setAttribute(ST_MAXIMUM_KEY, maxClause.toString());
    st.setAttribute(ST_MINIMUM_KEY, minClause.toString());

    if (cycle)
    {
      st.setAttribute(ST_CYCLE_KEY, "CYCLE");
    }
    else
    {
      st.setAttribute(ST_CYCLE_KEY, "NOCYCLE");
    }

    return st.toString();
  }

  /**
   * @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 name [(view_col [, view_col …])]
    // AS <select> [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)
    {
      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)
  {
    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(final String tableName, final String indexName, final boolean cascade,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    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)
  {
    // Currently, OpenEdge only supports the PUB schema for sequences.

    final DatabaseObjectQualifier pubQualifier = new DatabaseObjectQualifier(qualifier.getCatalog(), "PUB");
    final SqlGenerationPreferences pubPrefs = new SqlGenerationPreferences();
    pubPrefs.setQualifyTableNames(true);

    return DialectUtils.getDropSequenceSQL(sequenceName, null, pubQualifier, pubPrefs, this);
  }

  /**
   * @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)
  {
    final Boolean cascadeNotSupported = null;

    return DialectUtils.getDropViewSQL(viewName, cascadeNotSupported, 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(final String oldTableName, final String newTableName,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    // "ALTER TABLE $oldObjectName$ RENAME TO $newObjectName$";
    final StringTemplate st = new StringTemplate(ST_RENAME_OBJECT_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)
  {
    return new String[] { "blah" };
  }

  /**
   * @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 PUB." + sequenceName + ".CURRVAL, \"SEQ-MAX\", \"SEQ-MIN\", \"USER-MISC\", "
      + "\"SEQ-INCR\", " + "case \"CYCLE-OK\" " + "when 0 then 0 " + "else 1 " + "end as CYCLE_FLAG "
      + "FROM SYSPROGRESS.SYSSEQUENCES " + "where \"SEQ-NAME\" = '" + sequenceName + "' ";

  }

  /**
   * @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(final String tableName, final String[] setColumns, final String[] setValues,
    final String[] fromTables, final String[] whereColumns, final String[] whereValues,
    final DatabaseObjectQualifier qualifier, final SqlGenerationPreferences prefs)
  {
    final int featureId = DialectUtils.UPDATE_TYPE;
    final String msg = DialectUtils.getUnsupportedMessage(this, featureId);
    throw new UnsupportedOperationException(msg);
  }

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

  /**
   * @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.CommonHibernateDialect#supportsUpdate()
   */
  @Override
  public boolean supportsUpdate()
  {
    return false;
  }

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

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.HibernateDialect#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)
  {
    // SELECT 'CREATE VIEW FOOVIEW AS ' || VIEWTEXT
    // FROM SYSPROGRESS.SYSVIEWS
    // where VIEWNAME = 'FOOVIEW' and OWNER = 'MANNINGR'

    final String templateStr =
      "SELECT 'CREATE VIEW $viewName$ AS ' || VIEWTEXT " + "FROM SYSPROGRESS.SYSVIEWS "
        + "where VIEWNAME = '$viewName$' and OWNER = '$schemaName$' ";

    final 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.HibernateDialect#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 qualifier.getSchema() + "." + identifier;
  }

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

  /**
   * @see net.sourceforge.squirrel_sql.fw.dialects.CommonHibernateDialect#supportsDropPrimaryKey()
   */
  @Override
  public boolean supportsDropPrimaryKey()
  {
    // Oddly enough, progress will let you add pks to existing tables, but not drop them.
    return false;
  }

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

}
TOP

Related Classes of net.sourceforge.squirrel_sql.fw.dialects.ProgressDialectExt$ProgressDialectHelper

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.