#2695 - DDL Generation for @UniqueConstraint ignores the name - should be the index name when given

This commit is contained in:
Rob Bygrave
2022-05-16 22:06:14 +12:00
parent ceac2d12b1
commit 4f3c9adf6f
4 changed files with 15 additions and 16 deletions
@@ -29,10 +29,10 @@ public final class IndexDefinition {
/**
* Create a unique constraint given the column names.
*/
public IndexDefinition(String[] columns) {
public IndexDefinition(String name, String[] columns) {
this.columns = columns;
this.unique = true;
this.name = null;
this.name = name;
this.platforms = null;
this.concurrent = false;
this.definition = null;
@@ -135,7 +135,7 @@ final class AnnotationClass extends AnnotationParser {
UniqueConstraint uc = typeGet(cls, UniqueConstraint.class);
if (uc != null) {
descriptor.addIndex(new IndexDefinition(convertColumnNames(uc.columnNames())));
descriptor.addIndex(new IndexDefinition(uc.name(), convertColumnNames(uc.columnNames())));
}
View view = typeGet(cls, View.class);
if (view != null) {
@@ -145,7 +145,7 @@ final class AnnotationClass extends AnnotationParser {
if (table != null) {
UniqueConstraint[] uniqueConstraints = table.uniqueConstraints();
for (UniqueConstraint c : uniqueConstraints) {
descriptor.addIndex(new IndexDefinition(convertColumnNames(c.columnNames())));
descriptor.addIndex(new IndexDefinition(c.name(), convertColumnNames(c.columnNames())));
}
}
StorageEngine storage = typeGet(cls, StorageEngine.class);
@@ -1,12 +1,11 @@
package io.ebeaninternal.server.deploy;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class IndexDefinitionTest {
class IndexDefinitionTest {
private static final String[] simpleCol1 = new String[]{"one"};
private static final String[] simpleCol2 = new String[]{"one","two"};
@@ -14,29 +13,29 @@ public class IndexDefinitionTest {
private static final String[] formulaCol2 = new String[]{"one","lower(two)"};
@Test
public void isUniqueConstraint_TRUE_when_simpleMultiColumn() {
Assertions.assertTrue(new IndexDefinition(simpleCol1).isUniqueConstraint());
assertTrue(new IndexDefinition(simpleCol2).isUniqueConstraint());
void isUniqueConstraint_TRUE_when_simpleMultiColumn() {
assertTrue(new IndexDefinition("", simpleCol1).isUniqueConstraint());
assertTrue(new IndexDefinition("", simpleCol2).isUniqueConstraint());
}
@Test
public void isUniqueConstraint_NOT_when_columnWithFormula() {
assertFalse(new IndexDefinition(formulaCol1).isUniqueConstraint());
assertFalse(new IndexDefinition(formulaCol2).isUniqueConstraint());
void isUniqueConstraint_NOT_when_columnWithFormula() {
assertFalse(new IndexDefinition("", formulaCol1).isUniqueConstraint());
assertFalse(new IndexDefinition("", formulaCol2).isUniqueConstraint());
}
@Test
public void isUniqueConstraint_NOT_when_concurrentTrue() {
void isUniqueConstraint_NOT_when_concurrentTrue() {
assertFalse(new IndexDefinition(simpleCol1, "name", true, null, true, null).isUniqueConstraint());
}
@Test
public void isUniqueConstraint_NOT_when_definitionNotEmpty() {
void isUniqueConstraint_NOT_when_definitionNotEmpty() {
assertFalse(new IndexDefinition(simpleCol1, "name", true, null, false, "create index foo").isUniqueConstraint());
}
@Test
public void isUniqueConstraint_TRUE_otherwise() {
void isUniqueConstraint_TRUE_otherwise() {
assertTrue(new IndexDefinition(simpleCol1, "name", true, null, false, "").isUniqueConstraint());
assertTrue(new IndexDefinition(simpleCol1, "name", true, null, false, null).isUniqueConstraint());
}
@@ -7,7 +7,7 @@ import javax.persistence.UniqueConstraint;
@Cache(naturalKey = "appName")
@Entity
@UniqueConstraint(columnNames = "app_name")
@UniqueConstraint(name="uq_ocached_app", columnNames = "app_name")
public class OCachedApp extends OCacheBase {
private String appName;