소스 검색

AMBARI-7488. setNullable action for MySQL needs to be refactored.(vbrodetskyi)

Vitaly Brodetskyi 10 년 전
부모
커밋
0833a91d03

+ 3 - 3
ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java

@@ -310,14 +310,14 @@ public interface DBAccessor {
    * 
    * @param tableName
    *          the name of the table (not {@code null}).
-   * @param columnName
-   *          the name of the column to alter (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.
    * @throws SQLException
    */
-  public void setNullable(String tableName, String columnName, boolean nullable)
+  public void setNullable(String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable)
       throws SQLException;
 
   /**

+ 2 - 3
ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessorImpl.java

@@ -587,10 +587,9 @@ public class DBAccessorImpl implements DBAccessor {
   }
 
   @Override
-  public void setNullable(String tableName, String columnName, boolean nullable)
+  public void setNullable(String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable)
       throws SQLException {
-    String statement = dbmsHelper.getSetNullableStatement(tableName,
-        columnName, nullable);
+    String statement = dbmsHelper.getSetNullableStatement(tableName, columnInfo, nullable);
 
     executeQuery(statement);
   }

+ 3 - 4
ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/DbmsHelper.java

@@ -77,13 +77,12 @@ public interface DbmsHelper {
    * 
    * @param tableName
    *          the table (not {@code null}).
-   * @param columnName
-   *          the column to alert the nullable state of (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, String columnName,
-      boolean nullable);
+  String getSetNullableStatement(String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable);
 }

+ 2 - 2
ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/DerbyHelper.java

@@ -52,8 +52,8 @@ public class DerbyHelper extends GenericDbmsHelper {
 
   @Override
   public StringBuilder writeSetNullableString(StringBuilder builder,
-      String tableName, String columnName, boolean nullable) {
-    builder.append(" ALTER COLUMN ").append(columnName);
+      String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable) {
+    builder.append(" ALTER COLUMN ").append(columnInfo.getName());
     String nullStatement = nullable ? " NULL" : " NOT NULL";
     builder.append(nullStatement);
     return builder;

+ 3 - 4
ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java

@@ -69,11 +69,10 @@ public class GenericDbmsHelper implements DbmsHelper {
   }
 
   @Override
-  public String getSetNullableStatement(String tableName, String columnName,
-      boolean nullable) {
+  public String getSetNullableStatement(String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable) {
     StringBuilder stringBuilder = new StringBuilder();
     writeAlterTableClause(stringBuilder, tableName);
-    writeSetNullableString(stringBuilder, tableName, columnName, nullable);
+    writeSetNullableString(stringBuilder, tableName, columnInfo, nullable);
     return stringBuilder.toString();
   }
 
@@ -115,7 +114,7 @@ public class GenericDbmsHelper implements DbmsHelper {
   }
 
   public StringBuilder writeSetNullableString(StringBuilder builder,
-      String tableName, String columnName, boolean nullable) {
+      String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable) {
     throw new UnsupportedOperationException(
         "Column nullable modification not supported for generic DB");
   }

+ 3 - 2
ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/MySqlHelper.java

@@ -54,8 +54,9 @@ public class MySqlHelper extends GenericDbmsHelper {
 
   @Override
   public StringBuilder writeSetNullableString(StringBuilder builder,
-      String tableName, String columnName, boolean nullable) {
-    builder.append(" MODIFY ").append(columnName);
+      String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable) {
+    builder.append(" MODIFY ").append(columnInfo.getName()).append(" ");
+    writeColumnType(builder, columnInfo);
     String nullStatement = nullable ? " NULL" : " NOT NULL";
     builder.append(nullStatement);
     return builder;

+ 2 - 2
ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/OracleHelper.java

@@ -46,8 +46,8 @@ public class OracleHelper extends GenericDbmsHelper {
 
   @Override
   public StringBuilder writeSetNullableString(StringBuilder builder,
-      String tableName, String columnName, boolean nullable) {
-    builder.append(" MODIFY ").append(columnName);
+      String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable) {
+    builder.append(" MODIFY ").append(columnInfo.getName());
     String nullStatement = nullable ? " NULL" : " NOT NULL";
     builder.append(nullStatement);
     return builder;

+ 2 - 2
ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/PostgresHelper.java

@@ -46,8 +46,8 @@ public class PostgresHelper extends GenericDbmsHelper {
 
   @Override
   public StringBuilder writeSetNullableString(StringBuilder builder,
-      String tableName, String columnName, boolean nullable) {
-    builder.append(" ALTER COLUMN ").append(columnName);
+      String tableName, DBAccessor.DBColumnInfo columnInfo, boolean nullable) {
+    builder.append(" ALTER COLUMN ").append(columnInfo.getName());
     String nullStatement = nullable ? " SET NULL" : " SET NOT NULL";
     builder.append(nullStatement);
     return builder;

+ 1 - 5
ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java

@@ -366,11 +366,7 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
 
     populateConfigVersions();
 
-    if (Configuration.MYSQL_DB_NAME.equals(dbType)) {
-      dbAccessor.executeQuery("ALTER TABLE clusterconfig MODIFY version BIGINT NOT NULL");
-    } else {
-      dbAccessor.setNullable("clusterconfig", "version", false);
-    }
+    dbAccessor.setNullable("clusterconfig", new DBColumnInfo("version", Long.class, null), false);
 
     dbAccessor.executeQuery("ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (cluster_id, type_name, version_tag)", true);
     dbAccessor.executeQuery("ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version)", true);

+ 4 - 2
ambari-server/src/test/java/org/apache/ambari/server/orm/DBAccessorImplTest.java

@@ -332,7 +332,8 @@ public class DBAccessorImplTest {
 
     statement.close();
 
-    dbAccessor.setNullable(tableName, "isNullable", false);
+    dbAccessor.setNullable(tableName, new DBColumnInfo("isNullable",
+            String.class, 1000, "test", false), false);
     statement = dbAccessor.getConnection().createStatement();
     resultSet = statement.executeQuery("SELECT isNullable FROM " + tableName);
     rsmd = resultSet.getMetaData();
@@ -340,7 +341,8 @@ public class DBAccessorImplTest {
 
     statement.close();
 
-    dbAccessor.setNullable(tableName, "isNullable", true);
+    dbAccessor.setNullable(tableName, new DBColumnInfo("isNullable",
+            String.class, 1000, "test", false), true);
     statement = dbAccessor.getConnection().createStatement();
     resultSet = statement.executeQuery("SELECT isNullable FROM " + tableName);
     rsmd = resultSet.getMetaData();