#1827 - @UniqueConstraint columnNames should be respecting ebean.allQuotedIdentifiers

This commit is contained in:
rob bygrave
2019-10-05 22:37:06 +13:00
parent 3574479627
commit 9b5ab542d7
3 changed files with 76 additions and 5 deletions
@@ -134,12 +134,12 @@ public class AnnotationClass extends AnnotationParser {
}
for (Index index : findAnnotationsRecursive(cls, Index.class)) {
descriptor.addIndex(new IndexDefinition(index.columnNames(), index.name(), index.unique()));
descriptor.addIndex(new IndexDefinition(convertColumnNames(index.columnNames()), index.name(), index.unique()));
}
UniqueConstraint uc = findAnnotationRecursive(cls, UniqueConstraint.class);
if (uc != null) {
descriptor.addIndex(new IndexDefinition(uc.columnNames()));
descriptor.addIndex(new IndexDefinition(convertColumnNames(uc.columnNames())));
}
View view = findAnnotationRecursive(cls, View.class);
@@ -150,7 +150,7 @@ public class AnnotationClass extends AnnotationParser {
if (table != null) {
UniqueConstraint[] uniqueConstraints = table.uniqueConstraints();
for (UniqueConstraint c : uniqueConstraints) {
descriptor.addIndex(new IndexDefinition(c.columnNames()));
descriptor.addIndex(new IndexDefinition(convertColumnNames(c.columnNames())));
}
}
@@ -103,8 +103,7 @@ public abstract class AnnotationParser extends AnnotationBase {
void readColumn(Column columnAnn, DeployBeanProperty prop) {
if (!isEmpty(columnAnn.name())) {
String dbColumn = databasePlatform.convertQuotedIdentifiers(columnAnn.name());
prop.setDbColumn(dbColumn);
prop.setDbColumn(databasePlatform.convertQuotedIdentifiers(columnAnn.name()));
}
prop.setDbInsertable(columnAnn.insertable());
@@ -138,4 +137,11 @@ public abstract class AnnotationParser extends AnnotationBase {
}
return groups.length == 0 || groups.length == 1 && Default.class.isAssignableFrom(groups[0]);
}
String[] convertColumnNames(String[] columnNames) {
for (int i = 0; i < columnNames.length; i++) {
columnNames[i] = databasePlatform.convertQuotedIdentifiers(columnNames[i]);
}
return columnNames;
}
}
@@ -0,0 +1,65 @@
package io.ebeaninternal.server.deploy.parse;
import io.ebean.config.ServerConfig;
import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.server.core.bootup.BootupClasses;
import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import io.ebeaninternal.server.type.DefaultTypeManager;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
public class AnnotationClassTest {
@Test
public void convertColumnNames_when_AllQuotedIdentifiersIsTrue() {
AnnotationClass annotationClass = createAnnotationClass(sqlServerPlatform(true));
String[] colNames = {"Col1", "Col2"};
final String[] columnNames = annotationClass.convertColumnNames(colNames);
assertThat(columnNames.length).isEqualTo(2);
assertThat(columnNames[0]).isEqualTo("[Col1]");
assertThat(columnNames[1]).isEqualTo("[Col2]");
}
@Test
public void convertColumnNames_when_AllQuotedIdentifiersIsFalse() {
AnnotationClass annotationClass = createAnnotationClass(sqlServerPlatform(false));
String[] colNames = {"Col1", "`Col2`", "col3"};
final String[] columnNames = annotationClass.convertColumnNames(colNames);
assertThat(columnNames.length).isEqualTo(3);
assertThat(columnNames[0]).isEqualTo("Col1");
assertThat(columnNames[1]).isEqualTo("[Col2]");
assertThat(columnNames[2]).isEqualTo("col3");
}
@SuppressWarnings("unchecked")
private AnnotationClass createAnnotationClass(ServerConfig config) {
DeployUtil deployUtil = new DeployUtil(new DefaultTypeManager(config, new BootupClasses()), config);
DeployBeanInfo deployBeanInfo = new DeployBeanInfo(deployUtil, mock(DeployBeanDescriptor.class));
ReadAnnotationConfig readAnnotationConfig = mock(ReadAnnotationConfig.class);
return new AnnotationClass(deployBeanInfo, readAnnotationConfig);
}
private ServerConfig sqlServerPlatform(boolean allQuotedIdentifiers) {
SqlServer17Platform sqlServer17Platform = new SqlServer17Platform();
ServerConfig config = new ServerConfig();
config.setDatabasePlatform(sqlServer17Platform);
config.setAllQuotedIdentifiers(allQuotedIdentifiers);
sqlServer17Platform.configure(config.getPlatformConfig());
return config;
}
}