WIP h2database v2

This commit is contained in:
Rob Bygrave
2021-12-17 23:22:25 +13:00
parent 6cc5e83b01
commit 860aad11ce
14 changed files with 37 additions and 22 deletions
+1 -1
View File
@@ -85,7 +85,7 @@
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
<version>2.0.202</version>
<optional>true</optional>
</dependency>
@@ -39,6 +39,7 @@ public class H2Platform extends DatabasePlatform {
this.dbIdentity.setSupportsIdentity(true);
dbTypeMap.put(DbType.UUID, new DbPlatformType("uuid", false));
dbTypeMap.put(DbType.INTEGER, new DbPlatformType("integer", false));
}
/**
@@ -18,13 +18,12 @@ public class H2SequenceIdGenerator extends SequenceBatchIdGenerator {
*/
public H2SequenceIdGenerator(BackgroundExecutor be, DataSource ds, String seqName, int batchSize) {
super(be, ds, seqName, batchSize);
this.baseSql = "select " + seqName + ".nextval";
this.baseSql = "select nextval('" + seqName + "')";
this.unionBaseSql = " union " + baseSql;
}
@Override
public String getSql(int batchSize) {
StringBuilder sb = new StringBuilder();
sb.append(baseSql);
for (int i = 1; i < batchSize; i++) {
+1 -1
View File
@@ -78,7 +78,7 @@
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
<version>2.0.202</version>
<scope>provided</scope>
</dependency>
@@ -6,6 +6,7 @@ import io.ebeaninternal.server.deploy.InheritInfo;
import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Inheritance;
import java.util.LinkedHashMap;
@@ -105,8 +106,11 @@ public final class DeployInherit {
if (da != null) {
// lowercase the discriminator column for RawSql and JSON
info.setColumnName(da.name().toLowerCase());
info.setColumnType(da.discriminatorType());
info.setColumnLength(da.length());
DiscriminatorType discriminatorType = da.discriminatorType();
info.setColumnType(discriminatorType);
if (discriminatorType == DiscriminatorType.STRING) {
info.setColumnLength(da.length());
}
info.setColumnDefn(da.columnDefinition());
}
if (!info.isAbstract()) {
@@ -189,7 +189,12 @@ final class ScalarTypeEnumStandard {
if (dbValue == null || dbValue instanceof Enum<?>) {
return dbValue;
}
int ordinal = (Integer) dbValue;
int ordinal;
if (dbValue instanceof Integer) {
ordinal = (Integer) dbValue;
} else {
ordinal = Integer.parseInt(dbValue.toString());
}
if (ordinal < 0 || ordinal >= enumArray.length) {
String m = "Unexpected ordinal [" + ordinal + "] out of range [" + enumArray.length + "]";
throw new IllegalStateException(m);
@@ -22,6 +22,12 @@ public class H2Ddl extends PlatformDdl {
@Override
protected String convertArrayType(String logicalArrayType) {
return "array";
int pos = logicalArrayType.indexOf('[');
if (pos == -1) {
return logicalArrayType;
} else {
// trim of the fallback varchar length
return logicalArrayType.substring(0, pos) + " array";
}
}
}
@@ -107,7 +107,7 @@ public class BaseDdlHandlerTest extends BaseTestCase {
write = new DdlWrite();
h2Handler().generate(write, Helper.getAlterTableAddDbArrayColumnWithLength());
assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_ninety array;\n\n");
assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_ninety varchar array;\n\n");
write = new DdlWrite();
sqlserverHandler().generate(write, Helper.getAlterTableAddDbArrayColumnWithLength());
@@ -127,7 +127,7 @@ public class BaseDdlHandlerTest extends BaseTestCase {
write = new DdlWrite();
h2Handler().generate(write, Helper.getAlterTableAddDbArrayColumnIntegerWithLength());
assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_integer array;\n\n");
assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_integer integer array;\n\n");
write = new DdlWrite();
sqlserverHandler().generate(write, Helper.getAlterTableAddDbArrayColumnIntegerWithLength());
@@ -57,10 +57,10 @@ public class PlatformDdl_AlterColumnTest {
@Test
public void convertArrayType_h2() {
assertThat(h2Ddl.convertArrayType("varchar[](90)")).isEqualTo("array");
assertThat(h2Ddl.convertArrayType("integer[](60)")).isEqualTo("array");
assertThat(h2Ddl.convertArrayType("varchar[]")).isEqualTo("array");
assertThat(h2Ddl.convertArrayType("integer[]")).isEqualTo("array");
assertThat(h2Ddl.convertArrayType("varchar[](90)")).isEqualTo("varchar array");
assertThat(h2Ddl.convertArrayType("integer[](60)")).isEqualTo("integer array");
assertThat(h2Ddl.convertArrayType("varchar[]")).isEqualTo("varchar array");
assertThat(h2Ddl.convertArrayType("integer[]")).isEqualTo("integer array");
}
@Test
@@ -61,7 +61,7 @@ public class PlatformTypeConverterTest {
assertThat(converter.convert("clob")).isEqualTo("clob");
assertThat(converter.convert("blob")).isEqualTo("blob");
assertThat(converter.convert("tinyint")).isEqualTo("tinyint");
assertThat(converter.convert("integer(8)")).isEqualTo("integer(8)");
assertThat(converter.convert("integer(8)")).isEqualTo("integer");
assertThat(converter.convert("funky")).isEqualTo("funky"); // unknown
}
+3 -3
View File
@@ -16,7 +16,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
<version>1.7.32</version>
<scope>provided</scope>
</dependency>
@@ -187,8 +187,8 @@
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<!-- Note: Using ojdbc10 here will affect loading other drivers on jdk8,
because the driverManager will stop on first load error and stops loading
<!-- Note: Using ojdbc10 here will affect loading other drivers on jdk8,
because the driverManager will stop on first load error and stops loading
other drivers -->
<artifactId>ojdbc8</artifactId>
<version>19.12.0.0</version>
@@ -3,7 +3,7 @@ package org.tests.inheritance.abstrakt;
import javax.persistence.*;
@Entity
@Table(name = "block")
@Table(name = "blockt")
@Inheritance
@DiscriminatorColumn(name = "case_type", discriminatorType = DiscriminatorType.INTEGER)
public abstract class AbstractBaseBlock {
@@ -72,7 +72,7 @@ datasource.db.databaseDriver=org.h2.Driver
datasource.h2.username=sa
datasource.h2.password=
datasource.h2.url=jdbc:h2:mem:testsMem;DB_CLOSE_ON_EXIT=FALSE
datasource.h2.url=jdbc:h2:mem:testsMem;DB_CLOSE_ON_EXIT=FALSE;NON_KEYWORDS=KEY,VALUE
datasource.h2.poolListener=org.tests.basic.MyTestDataSourcePoolListener
#datasource.h2.minConnections=1
#datasource.h2.maxConnections=25
+2 -2
View File
@@ -61,14 +61,14 @@
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<version>1.2.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
<version>2.0.202</version>
<scope>test</scope>
</dependency>