#2039 Map LocalDateTime when generating DB migrations for Postgres to timestamp DB type

This commit is contained in:
Rob Bygrave committed 2021-09-22 16:23:10 +12:00
1 parent e85a471fcf
commit a14f7a1766
13 files changed
+135 -35

No files matched your search

@@ -1,39 +1,144 @@
package io.ebean.config.dbplatform;
import io.ebean.config.dbplatform.clickhouse.ClickHousePlatform;
import io.ebean.config.dbplatform.h2.H2Platform;
import io.ebean.config.dbplatform.mysql.MySqlPlatform;
import io.ebean.config.dbplatform.oracle.OraclePlatform;
import io.ebean.config.dbplatform.postgres.PostgresPlatform;
import io.ebean.config.dbplatform.sqlserver.SqlServer16Platform;
import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class DbTypeMapTest {
public class DbTypeMapTest {
final DbPlatformTypeMapping logicalTypeMap = DbPlatformTypeMapping.logicalTypes();
@Test
public void testLookupRender_given_postgresPlatformType() throws Exception {
void testLookupRender_given_postgresPlatformType() {
PostgresPlatform pg = new PostgresPlatform();
DbPlatformTypeMapping dbTypeMap = pg.getDbTypeMap();
assertThat(dbTypeMap.lookup("clob", false).renderType(0, 0)).isEqualTo("text");
assertThat(dbTypeMap.lookup("CLOB", false).renderType(0, 0)).isEqualTo("text");
assertThat(dbTypeMap.lookup("varchar", true).renderType(20, 0)).isEqualTo("varchar(20)");
assertThat(dbTypeMap.lookup("timestamp", false).renderType(0, 0)).isEqualTo("timestamptz");
assertThat(dbTypeMap.lookup("localdatetime", false).renderType(0, 0)).isEqualTo("timestamp");
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("json");
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("jsonb");
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0, 0)).isEqualTo("text");
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0, 0)).isEqualTo("bytea");
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200, 0)).isEqualTo("varchar(200)");
}
@Test
public void testPlatformTypes() {
void testLookupRender_given_mysql() {
DbPlatformTypeMapping dbTypeMap = new MySqlPlatform().getDbTypeMap();
DbPlatformTypeMapping dbTypeMap = DbPlatformTypeMapping.logicalTypes();
DbPlatformType dbType = dbTypeMap.get(DbPlatformType.JSON);
DbPlatformType json = dbTypeMap.lookup("json", false);
assertThat(dbTypeMap.lookup("clob", false).renderType(0, 0)).isEqualTo("longtext");
assertThat(dbTypeMap.lookup("CLOB", false).renderType(0, 0)).isEqualTo("longtext");
assertThat(dbTypeMap.lookup("varchar", true).renderType(20, 0)).isEqualTo("varchar(20)");
assertThat(dbTypeMap.lookup("timestamp", false).renderType(0, 0)).isEqualTo("datetime(6)");
assertThat(dbTypeMap.lookup("localdatetime", false).renderType(0, 0)).isEqualTo("datetime(6)");
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("json");
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("json");
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0, 0)).isEqualTo("longtext");
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0, 0)).isEqualTo("longblob");
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200, 0)).isEqualTo("varchar(200)");
}
@Test
void testLookupRender_given_sqlserver17() {
DbPlatformTypeMapping dbTypeMap = new SqlServer17Platform().getDbTypeMap();
assertThat(dbTypeMap.lookup("clob", false).renderType(0, 0)).isEqualTo("nvarchar(max)");
assertThat(dbTypeMap.lookup("CLOB", false).renderType(0, 0)).isEqualTo("nvarchar(max)");
assertThat(dbTypeMap.lookup("varchar", true).renderType(20, 0)).isEqualTo("nvarchar(20)");
assertThat(dbTypeMap.lookup("timestamp", false).renderType(0, 0)).isEqualTo("datetime2");
assertThat(dbTypeMap.lookup("localdatetime", false).renderType(0, 0)).isEqualTo("datetime2");
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("nvarchar(max)");
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("nvarchar(max)");
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0, 0)).isEqualTo("nvarchar(max)");
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0, 0)).isEqualTo("image");
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200, 0)).isEqualTo("nvarchar(200)");
}
@Test
void testLookupRender_given_sqlserver16() {
DbPlatformTypeMapping dbTypeMap = new SqlServer16Platform().getDbTypeMap();
assertThat(dbTypeMap.lookup("clob", false).renderType(0, 0)).isEqualTo("text");
assertThat(dbTypeMap.lookup("CLOB", false).renderType(0, 0)).isEqualTo("text");
assertThat(dbTypeMap.lookup("varchar", true).renderType(20, 0)).isEqualTo("varchar(20)");
assertThat(dbTypeMap.lookup("timestamp", false).renderType(0, 0)).isEqualTo("datetime2");
assertThat(dbTypeMap.lookup("localdatetime", false).renderType(0, 0)).isEqualTo("datetime2");
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("text");
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("text");
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0, 0)).isEqualTo("text");
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0, 0)).isEqualTo("image");
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200, 0)).isEqualTo("varchar(200)");
}
@Test
void testLookupRender_given_oracle() {
DbPlatformTypeMapping dbTypeMap = new OraclePlatform().getDbTypeMap();
assertThat(dbTypeMap.lookup("clob", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("CLOB", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("varchar", true).renderType(20, 0)).isEqualTo("varchar2(20)");
assertThat(dbTypeMap.lookup("timestamp", false).renderType(0, 0)).isEqualTo("timestamp");
assertThat(dbTypeMap.lookup("localdatetime", false).renderType(0, 0)).isEqualTo("timestamp");
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0, 0)).isEqualTo("blob");
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200, 0)).isEqualTo("varchar2(200)");
}
@Test
void testLookupRender_given_h2() {
DbPlatformTypeMapping dbTypeMap = new H2Platform().getDbTypeMap();
assertThat(dbTypeMap.lookup("clob", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("CLOB", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("varchar", true).renderType(20, 0)).isEqualTo("varchar(20)");
assertThat(dbTypeMap.lookup("timestamp", false).renderType(0, 0)).isEqualTo("timestamp");
assertThat(dbTypeMap.lookup("localdatetime", false).renderType(0, 0)).isEqualTo("timestamp");
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0, 0)).isEqualTo("clob");
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0, 0)).isEqualTo("blob");
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200, 0)).isEqualTo("varchar(200)");
}
@Test
void testLookupRender_given_clickhouse() {
DbPlatformTypeMapping dbTypeMap = new ClickHousePlatform().getDbTypeMap();
assertThat(dbTypeMap.lookup("clob", false).renderType(0, 0)).isEqualTo("String");
assertThat(dbTypeMap.lookup("CLOB", false).renderType(0, 0)).isEqualTo("String");
assertThat(dbTypeMap.lookup("varchar", true).renderType(20, 0)).isEqualTo("String");
assertThat(dbTypeMap.lookup("timestamp", false).renderType(0, 0)).isEqualTo("DateTime");
assertThat(dbTypeMap.lookup("localdatetime", false).renderType(0, 0)).isEqualTo("DateTime");
assertThat(dbTypeMap.lookup("json", false).renderType(0, 0)).isEqualTo("String");
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0, 0)).isEqualTo("String");
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0, 0)).isEqualTo("String");
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0, 0)).isEqualTo("blob");
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200, 0)).isEqualTo("String");
}
@Test
void testPlatformTypes_logical_json() {
DbPlatformType dbType = logicalTypeMap.get(DbPlatformType.JSON);
DbPlatformType json = logicalTypeMap.lookup("json", false);
assertThat(dbType).isSameAs(json);
}
@Test
void testPlatformTypes_logical_localDateTime() {
DbPlatformType dbType = logicalTypeMap.get(DbPlatformType.LOCALDATETIME);
DbPlatformType localDateTime = logicalTypeMap.lookup("localdatetime", false);
assertThat(dbType).isSameAs(localDateTime);
}
}