/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ambari.server.orm.helpers.dbms; import java.util.List; import org.apache.ambari.server.orm.DBAccessor; public interface DbmsHelper { /** * Check if column type can be modified directly * @return */ boolean supportsColumnTypeChange(); String quoteObjectName(String name); /** * Generate rename column statement * @param tableName * @param oldName * @param columnInfo definition of new column * @return */ String getRenameColumnStatement(String tableName, String oldName, DBAccessor.DBColumnInfo columnInfo); /** * Generate alter column statement * @param tableName * @param columnInfo * @return */ String getAlterColumnStatement(String tableName, DBAccessor.DBColumnInfo columnInfo); String getCreateTableStatement(String tableName, List<DBAccessor.DBColumnInfo> columns, List<String> primaryKeyColumns); String getTableConstraintsStatement(String databaseName, String tablename); String getCreateIndexStatement(String indexName, String tableName, String... columnNames); String getCreateIndexStatement(String indexName, String tableName, boolean isUnique, String... columnNames); /** * Gets DROP INDEX statement * * @param indexName * @param tableName * @return */ String getDropIndexStatement(String indexName, String tableName); /** * Generate alter table statement to add unique constraint * @param tableName name of the table * @param constraintName name of the constraint * @param columnNames name of the column * @return alter table statement */ String getAddUniqueConstraintStatement(String tableName, String constraintName, String... columnNames); /** * Generate alter table statement to add primary key index * @param tableName name of the table * @param constraintName name of the primary key * @param columnName name of the column * @return alter table statement */ String getAddPrimaryKeyConstraintStatement(String tableName, String constraintName, String... columnName); String getAddForeignKeyStatement(String tableName, String constraintName, List<String> keyColumns, String referenceTableName, List<String> referenceColumns, boolean shouldCascadeOnDelete); String getAddColumnStatement(String tableName, DBAccessor.DBColumnInfo columnInfo); String getDropTableColumnStatement(String tableName, String columnName); String getRenameColumnStatement(String tableName, String oldColumnName, String newColumnName); String getDropTableStatement(String tableName); String getDropFKConstraintStatement(String tableName, String constraintName); String getDropUniqueConstraintStatement(String tableName, String constraintName); String getDropSequenceStatement(String sequenceName); String getDropPrimaryKeyStatement(String tableName, String constraintName, boolean cascade); /** * Gets the {@code SET NULL} or {@code SET NOT NULL} statement. * * @param tableName * the table (not {@code null}). * @param columnInfo * the column object to get name and type of column (not {@code null}). * @param nullable * {@code true} to indicate that the column allows {@code NULL} * values, {@code false} otherwise. * @return the statement (never {@code null}). */ String getSetNullableStatement(String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable); /** * Get's the {@code UPDATE} statement for {@code sourceTable} for copy column from {@code targetTable} by matching * table keys {@code sourceIDColumnName} and {@code targetIDColumnName} * * @param sourceTable * the source table name * @param sourceColumnName * the source column name * @param sourceIDColumnName * source key id column which would be used to math right rows for {@code targetTable} * @param targetTable * the destination table name * @param targetColumnName * the destination column name * @param targetIDColumnName * destination key id column name which should math {@code sourceIDColumnName} * @return */ String getCopyColumnToAnotherTableStatement(String sourceTable, String sourceColumnName, String sourceIDColumnName, String targetTable, String targetColumnName, String targetIDColumnName); /** * Gets whether the database platform supports adding contraints after the * {@code NULL} constraint. Some database, such as Oracle, don't allow this. * Unfortunately, EclipsLink hard codes the order of constraints. * * @return {@code true} if contraints can be added after the {@code NULL} * constraint, {@code false} otherwise. */ boolean isConstraintSupportedAfterNullability(); }