diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index 8a826d2ac1..7ddc753eb4 100644 --- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -4596,24 +4596,32 @@ private static int getColumnIndexFromTableColumns(List cols, Strin return -1; } - private boolean constraintNameAlreadyExists(MTable table, String constraintName) { + private static final String QUERY_CONSTRAINT_NAME = + "select *\n" + + " from KEY_CONSTRAINTS\n" + + " where CONSTRAINT_NAME = :constraintName\n" + + " and PARENT_TBL_ID = :parentTblId\n"; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private boolean constraintNameAlreadyExists(MTable table, String constraintName) { boolean commited = false; - Query constraintExistsQuery = null; - String constraintNameIfExists = null; + Query constraintExistsQuery = null; + boolean alreadyExists = false; try { openTransaction(); - constraintName = normalizeIdentifier(constraintName); - constraintExistsQuery = pm.newQuery(MConstraint.class, - "parentTable == parentTableP && constraintName == constraintNameP"); - constraintExistsQuery.declareParameters("java.lang.Long parentTableP, java.lang.String constraintNameP"); - constraintExistsQuery.setUnique(true); - constraintExistsQuery.setResult("constraintName"); - constraintNameIfExists = (String) constraintExistsQuery.executeWithArray(table.getId(), constraintName); + Map parameters = new HashMap<>(2); + parameters.put("constraintName", normalizeIdentifier(constraintName)); + parameters.put("parentTblId", table.getId()); + + constraintExistsQuery = pm.newQuery("javax.jdo.query.SQL", QUERY_CONSTRAINT_NAME); + constraintExistsQuery.setClass(MConstraint.class); + List constraints = (List) constraintExistsQuery.executeWithMap(parameters); + alreadyExists = CollectionUtils.isNotEmpty(constraints); commited = commitTransaction(); } finally { rollbackAndCleanup(commited, constraintExistsQuery); } - return constraintNameIfExists != null && !constraintNameIfExists.isEmpty(); + return alreadyExists; } private String generateConstraintName(MTable table, String... parameters) throws MetaException {