mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-11-12 22:41:35 +00:00
Merge branch 'master' into wip/h2database-v2
This commit is contained in:
113 files changed
+1589
-372
No files matched your search
@@ -27,16 +27,17 @@ public class DatabaseConfigTest {
|
||||
@Test
|
||||
public void evalPropertiesInput() {
|
||||
|
||||
String home = System.getenv("HOME");
|
||||
String home = System.getProperty("user.home");
|
||||
String fileSeparator = System.getProperty("file.separator");
|
||||
|
||||
Properties props = new Properties();
|
||||
props.setProperty("ddl.initSql", "${HOME}/initSql");
|
||||
props.setProperty("ddl.initSql", "${user.home}" + fileSeparator + "initSql");
|
||||
|
||||
DatabaseConfig config = new DatabaseConfig();
|
||||
config.loadFromProperties(props);
|
||||
|
||||
String ddlInitSql = config.getDdlInitSql();
|
||||
assertThat(ddlInitSql).isEqualTo(home+"/initSql");
|
||||
assertThat(ddlInitSql).isEqualTo(home + fileSeparator + "initSql");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -50,30 +50,31 @@ public class PropertiesWrapperTest {
|
||||
@Test
|
||||
public void testGetProperties() {
|
||||
|
||||
String home = System.getenv("HOME");
|
||||
String home = System.getProperty("user.home");
|
||||
String tmpDir = System.getProperty("java.io.tmpdir");
|
||||
String fileSeparator = System.getProperty("file.separator");
|
||||
|
||||
Properties properties = new Properties();
|
||||
properties.put("someBasic", "hello");
|
||||
properties.put("someInt", "42");
|
||||
properties.put("someDouble", "5.5");
|
||||
properties.put("somePath", "${HOME}/hello");
|
||||
properties.put("someSystemProp", "/aaa/${java.io.tmpdir}/bbb");
|
||||
properties.put("somePath", "${user.home}" + fileSeparator + "hello");
|
||||
properties.put("someSystemProp", fileSeparator + "aaa" + fileSeparator + "${java.io.tmpdir}" + fileSeparator + "bbb");
|
||||
|
||||
Properties evalCopy = Config.asConfiguration().eval(properties);
|
||||
PropertiesWrapper pw = new PropertiesWrapper("pref", "myserver", evalCopy, null);
|
||||
|
||||
assertEquals(42, pw.getInt("someInt", 99));
|
||||
assertEquals(Double.valueOf(5.5D), (Double.valueOf(pw.getDouble("someDouble", 99.9D))));
|
||||
assertEquals(home + "/hello", pw.get("somePath", null));
|
||||
assertEquals("/aaa/" + tmpDir + "/bbb", pw.get("someSystemProp"));
|
||||
assertEquals(home + fileSeparator + "hello", pw.get("somePath", null));
|
||||
assertEquals(fileSeparator + "aaa" + fileSeparator + tmpDir + fileSeparator + "bbb", pw.get("someSystemProp"));
|
||||
|
||||
pw = new PropertiesWrapper(evalCopy, null);
|
||||
|
||||
assertEquals(42, pw.getInt("someInt", 99));
|
||||
assertEquals(Double.valueOf(5.5D), (Double.valueOf(pw.getDouble("someDouble", 99.9D))));
|
||||
assertEquals(home + "/hello", pw.get("somePath", null));
|
||||
assertEquals("/aaa/" + tmpDir + "/bbb", pw.get("someSystemProp"));
|
||||
assertEquals(home + fileSeparator + "hello", pw.get("somePath", null));
|
||||
assertEquals(fileSeparator + "aaa" + fileSeparator + tmpDir + fileSeparator + "bbb", pw.get("someSystemProp"));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,28 +2,34 @@ package io.ebean.config.dbplatform;
|
||||
|
||||
import io.ebean.config.PlatformConfig;
|
||||
import io.ebean.config.dbplatform.oracle.Oracle11Platform;
|
||||
import io.ebean.config.dbplatform.oracle.Oracle12Platform;
|
||||
import io.ebean.config.dbplatform.oracle.OraclePlatform;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class OraclePlatformTest {
|
||||
class OraclePlatformTest {
|
||||
|
||||
@Test
|
||||
public void columnAliasPrefix_Oracle11Platform() {
|
||||
void columnAliasPrefix_Oracle11Platform() {
|
||||
Oracle11Platform platform11 = new Oracle11Platform();
|
||||
assertThat(platform11.columnAliasPrefix).isEqualTo("c");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void columnAliasPrefix_OraclePlatform() {
|
||||
OraclePlatform platform = new OraclePlatform();
|
||||
assertThat(platform.columnAliasPrefix).isEqualTo("c");
|
||||
void columnAliasPrefix_Oracle12Platform() {
|
||||
Oracle12Platform platform12 = new Oracle12Platform();
|
||||
assertThat(platform12.columnAliasPrefix).isEqualTo("c");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void uuid_default() {
|
||||
void columnAliasPrefix_OraclePlatform() {
|
||||
OraclePlatform platform = new OraclePlatform();
|
||||
assertThat(platform.columnAliasPrefix).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void uuid_default() {
|
||||
OraclePlatform platform = new OraclePlatform();
|
||||
platform.configure(new PlatformConfig(), false);
|
||||
DbPlatformType dbType = platform.getDbTypeMap().get(DbPlatformType.UUID);
|
||||
@@ -31,8 +37,7 @@ public class OraclePlatformTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void uuid_as_binary() {
|
||||
|
||||
void uuid_as_binary() {
|
||||
OraclePlatform platform = new OraclePlatform();
|
||||
PlatformConfig config = new PlatformConfig();
|
||||
config.setDbUuid(PlatformConfig.DbUuid.AUTO_BINARY);
|
||||
|
||||
@@ -4,24 +4,22 @@ import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import io.ebean.ModifyAwareType;
|
||||
import io.ebean.text.json.EJson;
|
||||
import io.ebean.util.IOUtils;
|
||||
import io.ebeaninternal.json.ModifyAwareMap;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.io.Writer;
|
||||
import java.nio.file.Files;
|
||||
import java.util.*;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
public class EJsonTests {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(EJsonTests.class);
|
||||
|
||||
@Test
|
||||
public void test_map_simple() throws IOException {
|
||||
|
||||
@@ -46,15 +44,13 @@ public class EJsonTests {
|
||||
public void write_withWriter_expect_writerNotClosed() throws IOException {
|
||||
|
||||
File temp = Files.createTempFile("some", ".json").toFile();
|
||||
FileWriter writer = new FileWriter(temp);
|
||||
Map<String,Object> map = new LinkedHashMap<>();
|
||||
map.put("foo", "bar");
|
||||
EJson.write(map, writer);
|
||||
writer.write("The end.");
|
||||
writer.flush();
|
||||
writer.close();
|
||||
|
||||
log.info("write to file {}", temp.getAbsolutePath());
|
||||
try (Writer writer = IOUtils.newWriter(temp)) {
|
||||
Map<String, Object> map = new LinkedHashMap<>();
|
||||
map.put("foo", "bar");
|
||||
EJson.write(map, writer);
|
||||
writer.write("The end.");
|
||||
}
|
||||
assertThat(temp).hasContent("{\"foo\":\"bar\"}The end.");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
package io.ebean.test.config.platform;
|
||||
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class DockerHostTest {
|
||||
|
||||
@Test
|
||||
void runningInDocker_when_false_alwaysUseLocalhost() {
|
||||
DockerHost dockerHost = new DockerHost();
|
||||
assertFalse(dockerHost.runningInDocker());
|
||||
assertEquals("localhost", dockerHost.dockerHost("foo"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void runningInDocker_when_true_useExplicit() {
|
||||
TDDockerHost dockerHost = new TDDockerHost();
|
||||
assertTrue(dockerHost.runningInDocker());
|
||||
|
||||
assertEquals("my-host", dockerHost.dockerHost("my-host"));
|
||||
}
|
||||
|
||||
@Disabled
|
||||
@Test
|
||||
void runningInDocker_when_trueAndLinux_useDefault() {
|
||||
TDDockerHost dockerHost = new TDDockerHost();
|
||||
assertTrue(dockerHost.runningInDocker());
|
||||
|
||||
assertEquals("172.17.0.1", dockerHost.dockerHost(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
void runningInDocker_when_windowsDefault() {
|
||||
TDDockerHost dockerHost = new TDDockerHost();
|
||||
assertTrue(dockerHost.runningInDocker());
|
||||
|
||||
String origName = System.getProperty("os.name");
|
||||
System.setProperty("os.name", "win");
|
||||
try {
|
||||
assertEquals("host.docker.internal",dockerHost.defaultDockerHost());
|
||||
assertEquals("host.docker.internal", dockerHost.dockerHost(null));
|
||||
} finally {
|
||||
System.setProperty("os.name", origName);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void runningInDocker_when_macDefault() {
|
||||
TDDockerHost dockerHost = new TDDockerHost();
|
||||
assertTrue(dockerHost.runningInDocker());
|
||||
|
||||
String origName = System.getProperty("os.name");
|
||||
System.setProperty("os.name", "mac");
|
||||
try {
|
||||
assertEquals("host.docker.internal",dockerHost.defaultDockerHost());
|
||||
assertEquals("host.docker.internal", dockerHost.dockerHost(null));
|
||||
} finally {
|
||||
System.setProperty("os.name", origName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
void runningInDocker_when_linuxDefault() {
|
||||
TDDockerHost dockerHost = new TDDockerHost();
|
||||
assertTrue(dockerHost.runningInDocker());
|
||||
|
||||
String origName = System.getProperty("os.name");
|
||||
System.setProperty("os.name", "linux");
|
||||
try {
|
||||
assertEquals("172.17.0.1",dockerHost.defaultDockerHost());
|
||||
assertEquals("172.17.0.1", dockerHost.dockerHost(null));
|
||||
} finally {
|
||||
System.setProperty("os.name", origName);
|
||||
}
|
||||
}
|
||||
|
||||
static class TDDockerHost extends DockerHost {
|
||||
|
||||
@Override
|
||||
boolean initInDocker() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -11,6 +11,7 @@ import org.tests.model.basic.ResetBasicData;
|
||||
import org.tests.model.basic.TBytesOnly;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
@@ -94,7 +95,7 @@ public class CachedBeanDataSerializeTest extends BaseTestCase {
|
||||
|
||||
TBytesOnly bean = new TBytesOnly();
|
||||
bean.setId(42);
|
||||
bean.setContent(stringContent.getBytes("UTF-8"));
|
||||
bean.setContent(stringContent.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
BeanDescriptor<TBytesOnly> desc = getBeanDescriptor(TBytesOnly.class);
|
||||
CachedBeanData extract = CachedBeanDataFromBean.extract(desc, (EntityBean) bean);
|
||||
|
||||
@@ -5,6 +5,7 @@ import io.ebean.config.EncryptKey;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.tests.basic.encrypt.BasicEncryptKey;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -19,7 +20,7 @@ public class TestSimpleEncryptor extends BaseTestCase {
|
||||
|
||||
EncryptKey key = new BasicEncryptKey("hello");
|
||||
|
||||
byte[] data = "test123".getBytes();
|
||||
byte[] data = "test123".getBytes(StandardCharsets.UTF_8);
|
||||
|
||||
byte[] ecData = e.encrypt(data, key);
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@ import org.tests.model.ivo.converter.MoneyTypeConverter;
|
||||
import javax.persistence.EnumType;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Types;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.fail;
|
||||
@@ -29,7 +31,6 @@ public class TestTypeManager extends BaseTestCase {
|
||||
DefaultTypeManager typeManager = createTypeManager();
|
||||
|
||||
ScalarType<?> type = typeManager.createEnumScalarType(MyEnum.class, null);
|
||||
typeManager.addEnumType(type, MyEnum.class);
|
||||
|
||||
Object val = type.read(new DummyDataReader("A"));
|
||||
assertThat(val).isEqualTo(MyEnum.Aval);
|
||||
@@ -131,6 +132,13 @@ public class TestTypeManager extends BaseTestCase {
|
||||
return new DefaultTypeManager(config, bootupClasses);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCalendar() throws SQLException {
|
||||
|
||||
DefaultTypeManager typeManager = createTypeManager();
|
||||
ScalarType<?> typeB = typeManager.getScalarType(GregorianCalendar.class);
|
||||
assertThat(typeB).isInstanceOf(ScalarTypeCalendar.class);
|
||||
}
|
||||
/**
|
||||
* Test double DataReader implementation.
|
||||
*/
|
||||
|
||||
@@ -8,12 +8,14 @@ import org.tests.model.basic.PFileContent;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class TestDeleteImportedPartial extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
PFile persistentFile = new PFile("test.txt", new PFileContent("test".getBytes()));
|
||||
PFile persistentFile = new PFile("test.txt", new PFileContent("test".getBytes(StandardCharsets.UTF_8)));
|
||||
|
||||
DB.save(persistentFile);
|
||||
Integer id = persistentFile.getId();
|
||||
|
||||
@@ -8,13 +8,15 @@ import org.tests.model.basic.PersistentFileContent;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class TestDeleteOneToOne extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void testCreateDeletePersistentFile() {
|
||||
|
||||
PersistentFile persistentFile = new PersistentFile("test.txt", new PersistentFileContent(
|
||||
"test".getBytes()));
|
||||
"test".getBytes(StandardCharsets.UTF_8)));
|
||||
|
||||
DB.save(persistentFile);
|
||||
Integer id = persistentFile.getId();
|
||||
|
||||
@@ -8,16 +8,18 @@ import org.tests.model.basic.PFileContent;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class TestDeleteOneToOneMultiple extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void testCreateDeletePersistentFile() {
|
||||
|
||||
PFile persistentFile = new PFile("test.txt", new PFileContent("test".getBytes()));
|
||||
PFile persistentFile = new PFile("test.txt", new PFileContent("test".getBytes(StandardCharsets.UTF_8)));
|
||||
// PFile persistentFile = new PFile();
|
||||
// persistentFile.setName("test.txt");
|
||||
// PFileContent content = new PFileContent();
|
||||
// content.setContent("test".getBytes());
|
||||
// content.setContent("test".getBytes(StandardCharsets.UTF_8));
|
||||
// persistentFile.setFileContent(content);
|
||||
|
||||
DB.save(persistentFile);
|
||||
|
||||
@@ -8,12 +8,14 @@ import org.tests.model.basic.PersistentFileContent;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class TestSaveDeleteOneToOne extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void testCreateDeletePersistentFile() {
|
||||
PersistentFile persistentFile = new PersistentFile("test.txt",
|
||||
new PersistentFileContent("test".getBytes()));
|
||||
new PersistentFileContent("test".getBytes(StandardCharsets.UTF_8)));
|
||||
|
||||
DB.save(persistentFile);
|
||||
DB.delete(persistentFile);
|
||||
@@ -22,7 +24,7 @@ public class TestSaveDeleteOneToOne extends BaseTestCase {
|
||||
@Test
|
||||
public void testCreateLoadDeletePersistentFile() {
|
||||
PersistentFile persistentFile = new PersistentFile("test.txt",
|
||||
new PersistentFileContent("test".getBytes()));
|
||||
new PersistentFileContent("test".getBytes(StandardCharsets.UTF_8)));
|
||||
|
||||
DB.save(persistentFile);
|
||||
|
||||
|
||||
@@ -8,11 +8,13 @@ import org.tests.model.basic.PFileContent;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class TestSaveDeleteOneToOneMultiple extends BaseTestCase {
|
||||
|
||||
// public void testCreateDeletePFile() {
|
||||
// PFile persistentFile = new PFile("test.txt",
|
||||
// new PFileContent("test".getBytes()));
|
||||
// new PFileContent("test".getBytes(StandardCharsets.UTF_8)));
|
||||
//
|
||||
// DB.save(persistentFile);
|
||||
// DB.delete(persistentFile);
|
||||
@@ -21,7 +23,7 @@ public class TestSaveDeleteOneToOneMultiple extends BaseTestCase {
|
||||
@Test
|
||||
public void testCreateLoadDeletePFile() {
|
||||
PFile persistentFile = new PFile("test.txt",
|
||||
new PFileContent("test".getBytes()));
|
||||
new PFileContent("test".getBytes(StandardCharsets.UTF_8)));
|
||||
|
||||
DB.save(persistentFile);
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import io.ebean.DB;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.tests.model.basic.TWithPreInsert;
|
||||
import org.tests.model.basic.TWithPreInsertChild;
|
||||
import org.tests.model.basic.event.TWithPreInsertPersistAdapter;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
@@ -27,6 +28,7 @@ class TestPreInsertValidation extends BaseTestCase {
|
||||
assertThat(e.requestCascadeState()).isEqualTo(2);
|
||||
|
||||
TWithPreInsert e1 = DB.find(TWithPreInsert.class, e.getId());
|
||||
assert e1 != null;
|
||||
|
||||
e1.setTitle("Missus");
|
||||
DB.save(e1);
|
||||
@@ -54,11 +56,21 @@ class TestPreInsertValidation extends BaseTestCase {
|
||||
assert e1 != null;
|
||||
|
||||
e1.setTitle("ParentCascading-changed");
|
||||
e1.children().get(0).setName("Child0-changed");
|
||||
TWithPreInsertChild childBean = e1.children().get(0);
|
||||
childBean.setName("Child0-changed");
|
||||
DB.save(e1);
|
||||
|
||||
assertThat(e1.requestCascadeState()).isEqualTo(12);
|
||||
assertThat(e1.children().get(0).requestCascadeState()).isEqualTo(11);
|
||||
assertThat(childBean.requestCascadeState()).isEqualTo(11);
|
||||
|
||||
DB.delete(e1);
|
||||
|
||||
assertThat(e1.requestCascadeState()).isEqualTo(22);
|
||||
|
||||
// assert that isCascade() was true for the child bean
|
||||
assertThat(TWithPreInsertPersistAdapter.cascadeDelete).hasSize(1);
|
||||
String deleteCascade = TWithPreInsertPersistAdapter.cascadeDelete.get(0);
|
||||
assertThat(deleteCascade).isEqualTo("class org.tests.model.basic.TWithPreInsertChild:1");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -26,7 +26,7 @@ public class TestDefaults extends BaseTestCase {
|
||||
final List<String> current = LoggedSql.collect();
|
||||
|
||||
assertThat(current).isNotEmpty();
|
||||
if (isMySql() || isMariaDB()) {
|
||||
if (isMySql() || isMariaDB() || isOracle()) {
|
||||
assertThat(current.get(0)).contains("insert into defaults_model_draft values (default);");
|
||||
} else if (isSqlServer()) {
|
||||
assertThat(current.get(0)).contains("insert into defaults_model_draft (id) values (?)");
|
||||
|
||||
+3
-1
@@ -9,12 +9,14 @@ import org.tests.model.basic.PFileContent;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class TestConstructorPutfieldReplacement extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
PFile persistentFile = new PFile("test.txt", new PFileContent("test".getBytes()));
|
||||
PFile persistentFile = new PFile("test.txt", new PFileContent("test".getBytes(StandardCharsets.UTF_8)));
|
||||
|
||||
EntityBean eb = (EntityBean) persistentFile;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
@@ -14,6 +14,8 @@ import org.tests.idkeys.db.GenKeySeqB;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.junit.jupiter.api.Assumptions.assumeTrue;
|
||||
@@ -24,6 +26,7 @@ public class TestGeneratedKeys extends BaseTestCase {
|
||||
@ForPlatform(Platform.H2) // readSequenceValue is H2 specific
|
||||
public void testGenKeySeqA() throws SQLException {
|
||||
assumeTrue(idType() == IdType.SEQUENCE);
|
||||
|
||||
SpiEbeanServer server = spiEbeanServer();
|
||||
|
||||
try (Transaction tx = server.beginTransaction()) {
|
||||
@@ -69,20 +72,34 @@ public class TestGeneratedKeys extends BaseTestCase {
|
||||
}
|
||||
|
||||
private long readSequenceValue(Transaction tx, String sequence) throws SQLException {
|
||||
Statement stm = null;
|
||||
try {
|
||||
stm = tx.connection().createStatement();
|
||||
ResultSet rs = stm.executeQuery("select currval('" + sequence + "')");
|
||||
rs.next();
|
||||
String sql;
|
||||
switch (spiEbeanServer().databasePlatform().getPlatform().base()) {
|
||||
case H2 :
|
||||
sql = "select currval('" + sequence + "')";
|
||||
break;
|
||||
|
||||
case DB2 :
|
||||
sql = "values previous value for " + sequence;
|
||||
|
||||
break;
|
||||
case SQLSERVER :
|
||||
sql = "select current_value from sys.sequences where name = '" + sequence + "'";
|
||||
break;
|
||||
|
||||
case MARIADB :
|
||||
throw new UnsupportedOperationException("reading sequence value outside of the current connection is not supported. "
|
||||
+ "See https://mariadb.com/kb/en/previous-value-for-sequence_name/#description");
|
||||
|
||||
default :
|
||||
throw new UnsupportedOperationException("reading sequence value from "
|
||||
+ spiEbeanServer().databasePlatform().getPlatform()
|
||||
+ " is not supported.");
|
||||
|
||||
}
|
||||
try (Statement stm = tx.connection().createStatement()) {
|
||||
ResultSet rs = stm.executeQuery(sql);
|
||||
rs.next();
|
||||
return rs.getLong(1);
|
||||
} finally {
|
||||
if (stm != null) {
|
||||
try {
|
||||
stm.close();
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,5 +126,25 @@ public class TestGeneratedKeys extends BaseTestCase {
|
||||
assertNotNull(al.getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@ForPlatform({Platform.H2, Platform.MARIADB, Platform.SQLSERVER, Platform.DB2})
|
||||
public void testGeneratedKeys() throws SQLException {
|
||||
assumeTrue(idType() == IdType.SEQUENCE);
|
||||
|
||||
SpiEbeanServer server = spiEbeanServer();
|
||||
List<Long> idList = new ArrayList<>(52);
|
||||
|
||||
try (Transaction tx = server.beginTransaction()) {
|
||||
// bigger than increment
|
||||
for (int i = 1; i < 52; i++) {
|
||||
GenKeySeqA gks = new GenKeySeqA();
|
||||
gks.setDescription("my description " + i);
|
||||
server.save(gks);
|
||||
assertFalse(idList.contains(gks.getId()));
|
||||
idList.add(gks.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static javax.persistence.CascadeType.PERSIST;
|
||||
import static javax.persistence.CascadeType.ALL;
|
||||
|
||||
@Entity
|
||||
public class TWithPreInsert implements TWithPreInsertCommon {
|
||||
@@ -20,7 +20,7 @@ public class TWithPreInsert implements TWithPreInsertCommon {
|
||||
|
||||
private String title;
|
||||
|
||||
@OneToMany(cascade = PERSIST)
|
||||
@OneToMany(cascade = ALL)
|
||||
private List<TWithPreInsertChild> children = new ArrayList<>();
|
||||
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,8 @@ package org.tests.model.basic;
|
||||
|
||||
public interface TWithPreInsertCommon {
|
||||
|
||||
Integer getId();
|
||||
|
||||
String getName();
|
||||
|
||||
void setName(String name);
|
||||
|
||||
+15
@@ -4,8 +4,13 @@ import io.ebean.event.BeanPersistAdapter;
|
||||
import io.ebean.event.BeanPersistRequest;
|
||||
import org.tests.model.basic.TWithPreInsertCommon;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TWithPreInsertPersistAdapter extends BeanPersistAdapter {
|
||||
|
||||
public static List<String> cascadeDelete = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public boolean isRegisterFor(Class<?> cls) {
|
||||
return TWithPreInsertCommon.class.isAssignableFrom(cls);
|
||||
@@ -32,4 +37,14 @@ public class TWithPreInsertPersistAdapter extends BeanPersistAdapter {
|
||||
return super.preUpdate(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preDelete(BeanPersistRequest<?> request) {
|
||||
TWithPreInsertCommon bean = (TWithPreInsertCommon) request.bean();
|
||||
if (request.isCascade()) {
|
||||
cascadeDelete.add(bean.getClass() + ":" + bean.getId());
|
||||
} else {
|
||||
bean.requestCascadeState(22);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package org.tests.model.elementcollection;
|
||||
|
||||
import io.ebean.annotation.Cache;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Cache
|
||||
@Entity
|
||||
public class EcblPerson2 {
|
||||
|
||||
@Id
|
||||
long id;
|
||||
|
||||
String name;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(joinColumns = @JoinColumn(name = "person_id"))
|
||||
List<EcPhone> phoneNumbers = new ArrayList<>();
|
||||
|
||||
@Version
|
||||
long version;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "person id:" + id + " name:" + name + " phs:" + phoneNumbers;
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public List<EcPhone> getPhoneNumbers() {
|
||||
return phoneNumbers;
|
||||
}
|
||||
|
||||
public void setPhoneNumbers(List<EcPhone> phoneNumbers) {
|
||||
this.phoneNumbers = phoneNumbers;
|
||||
}
|
||||
|
||||
public long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(long version) {
|
||||
this.version = version;
|
||||
}
|
||||
}
|
||||
+2
-4
@@ -9,10 +9,10 @@ import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class TestElementCollectionEmbeddedListCache extends BaseTestCase {
|
||||
class TestElementCollectionEmbeddedListCache extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
void test() {
|
||||
|
||||
EcblPerson person = new EcblPerson("CacheL");
|
||||
person.getPhoneNumbers().add(new EcPhone("64", "021","1234"));
|
||||
@@ -86,12 +86,10 @@ public class TestElementCollectionEmbeddedListCache extends BaseTestCase {
|
||||
assertThat(four.getPhoneNumbers().toString()).contains("61-07-11");
|
||||
assertThat(four.getPhoneNumbers()).hasSize(1);
|
||||
|
||||
|
||||
DB.delete(four);
|
||||
sql = LoggedSql.collect();
|
||||
assertThat(sql).hasSize(2);
|
||||
|
||||
|
||||
LoggedSql.stop();
|
||||
}
|
||||
}
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
package org.tests.model.elementcollection;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.DB;
|
||||
import io.ebean.test.LoggedSql;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class TestElementCollectionEmbeddedListCache2 extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
void test() {
|
||||
|
||||
EcblPerson2 person = new EcblPerson2();
|
||||
person.setName("CacheL");
|
||||
person.getPhoneNumbers().add(new EcPhone("64", "021","1234"));
|
||||
person.getPhoneNumbers().add(new EcPhone("64","021","4321"));
|
||||
DB.save(person);
|
||||
|
||||
EcblPerson2 one = DB.find(EcblPerson2.class)
|
||||
.setId(person.getId())
|
||||
.fetch("phoneNumbers")
|
||||
.findOne();
|
||||
|
||||
LoggedSql.start();
|
||||
|
||||
one.getPhoneNumbers().size();
|
||||
|
||||
List<String> sql = LoggedSql.collect();
|
||||
assertThat(sql).isEmpty();
|
||||
|
||||
EcblPerson2 two = DB.find(EcblPerson2.class )
|
||||
.setId(person.getId())
|
||||
.findOne();
|
||||
|
||||
two.getPhoneNumbers().size();
|
||||
assertThat(two.getPhoneNumbers().toString()).contains("64-021-1234", "64-021-4321");
|
||||
|
||||
sql = LoggedSql.collect();
|
||||
assertThat(sql).isEmpty(); // cache hit
|
||||
|
||||
two.getPhoneNumbers().add(new EcPhone("61", "07", "11"));
|
||||
two.getPhoneNumbers().remove(1);
|
||||
|
||||
DB.save(two);
|
||||
|
||||
sql = LoggedSql.collect();
|
||||
if (isPersistBatchOnCascade()) {
|
||||
assertThat(sql).hasSize(5); // update of collection only
|
||||
assertSql(sql.get(0)).contains("delete from ecbl_person2_phone_numbers where person_id=?");
|
||||
assertSqlBind(sql.get(1));
|
||||
assertSql(sql.get(2)).contains("insert into ecbl_person2_phone_numbers (person_id,country_code,area,phnum) values (?,?,?,?)");
|
||||
assertSqlBind(sql, 3, 4);
|
||||
} else {
|
||||
assertThat(sql).hasSize(3); // update of collection only
|
||||
assertSql(sql.get(0)).contains("delete from ecbl_person2_phone_numbers where person_id=?");
|
||||
assertSql(sql.get(1)).contains("insert into ecbl_person2_phone_numbers (person_id,country_code,area,phnum) values (?,?,?,?)");
|
||||
assertSql(sql.get(2)).contains("insert into ecbl_person2_phone_numbers (person_id,country_code,area,phnum) values (?,?,?,?)");
|
||||
}
|
||||
|
||||
EcblPerson2 three = DB.find(EcblPerson2.class )
|
||||
.setId(person.getId())
|
||||
.findOne();
|
||||
|
||||
assertThat(three.getPhoneNumbers().toString()).contains("61-07-11", "64-021-1234");
|
||||
assertThat(three.getPhoneNumbers()).hasSize(2);
|
||||
|
||||
sql = LoggedSql.collect();
|
||||
assertThat(sql).isEmpty(); // cache hit
|
||||
|
||||
|
||||
three.setName("mod-3");
|
||||
three.getPhoneNumbers().remove(0);
|
||||
|
||||
DB.save(three);
|
||||
|
||||
sql = LoggedSql.collect();
|
||||
assertThat(sql).hasSize(5);
|
||||
|
||||
EcblPerson2 four = DB.find(EcblPerson2.class )
|
||||
.setId(person.getId())
|
||||
.findOne();
|
||||
|
||||
assertThat(four.getPhoneNumbers().toString()).contains("61-07-11");
|
||||
assertThat(four.getPhoneNumbers()).hasSize(1);
|
||||
|
||||
|
||||
DB.delete(four);
|
||||
sql = LoggedSql.collect();
|
||||
assertThat(sql).hasSize(2);
|
||||
|
||||
|
||||
LoggedSql.stop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package org.tests.model.embedded;
|
||||
|
||||
import io.ebean.annotation.DbArray;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
public class EmbArrayMaster {
|
||||
|
||||
@Embeddable
|
||||
public static class EmbArrayDetail {
|
||||
@DbArray
|
||||
List<String> vals;
|
||||
|
||||
public EmbArrayDetail(List<String> vals) {
|
||||
this.vals = vals;
|
||||
}
|
||||
}
|
||||
|
||||
@Id
|
||||
int id;
|
||||
|
||||
@ElementCollection
|
||||
@CollectionTable(name = "test_array_detail", joinColumns = {@JoinColumn(name = "master_id")})
|
||||
List<EmbArrayDetail> details;
|
||||
|
||||
public EmbArrayMaster(List<EmbArrayDetail> details) {
|
||||
this.details = details;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.tests.model.embedded;
|
||||
|
||||
import io.ebean.DB;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static java.util.Collections.singletonList;
|
||||
|
||||
class TestEmbeddedDbArray {
|
||||
|
||||
/**
|
||||
* Failing test case for #2477
|
||||
*/
|
||||
@Disabled
|
||||
@Test
|
||||
void testArrayInsert() {
|
||||
EmbArrayMaster t = new EmbArrayMaster(singletonList(new EmbArrayMaster.EmbArrayDetail(emptyList())));
|
||||
DB.insert(t);
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,7 @@ public class MnyNode {
|
||||
joinColumns = @JoinColumn(name = "from_id", referencedColumnName = "id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "to_id", referencedColumnName = "id"))
|
||||
@Where(clause = "${mta}.flags & 1 != 0")
|
||||
@Where(clause = "BITAND(${mta}.flags, 1) != 0", platforms = Platform.H2)
|
||||
@Where(clause = "BITAND(${mta}.flags, 1) != 0", platforms = {Platform.H2, Platform.ORACLE})
|
||||
List<MnyNode> bit1Relations;
|
||||
|
||||
@ManyToMany
|
||||
@@ -41,7 +41,7 @@ public class MnyNode {
|
||||
joinColumns = @JoinColumn(name = "to_id", referencedColumnName = "id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "from_id", referencedColumnName = "id"))
|
||||
@Where(clause = "${mta}.flags & 1 != 0")
|
||||
@Where(clause = "BITAND(${mta}.flags, 1) != 0", platforms = Platform.H2)
|
||||
@Where(clause = "BITAND(${mta}.flags, 1) != 0", platforms = {Platform.H2, Platform.ORACLE})
|
||||
List<MnyNode> bit1ReverseRelations;
|
||||
|
||||
@ManyToMany
|
||||
@@ -49,7 +49,7 @@ public class MnyNode {
|
||||
joinColumns = @JoinColumn(name = "from_id", referencedColumnName = "id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "to_id", referencedColumnName = "id"))
|
||||
@Where(clause = "${mta}.flags & 2 != 0")
|
||||
@Where(clause = "BITAND(${mta}.flags, 2) != 0", platforms = Platform.H2)
|
||||
@Where(clause = "BITAND(${mta}.flags, 2) != 0", platforms = {Platform.H2, Platform.ORACLE})
|
||||
List<MnyNode> bit2Relations;
|
||||
|
||||
@ManyToMany
|
||||
@@ -57,7 +57,7 @@ public class MnyNode {
|
||||
joinColumns = @JoinColumn(name = "to_id", referencedColumnName = "id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "from_id", referencedColumnName = "id"))
|
||||
@Where(clause = "${mta}.flags & 2 != 0")
|
||||
@Where(clause = "BITAND(${mta}.flags, 2) != 0", platforms = Platform.H2)
|
||||
@Where(clause = "BITAND(${mta}.flags, 2) != 0", platforms = {Platform.H2, Platform.ORACLE})
|
||||
List<MnyNode> bit2ReverseRelations;
|
||||
|
||||
@ManyToMany
|
||||
|
||||
@@ -7,6 +7,7 @@ import javax.persistence.Version;
|
||||
import java.nio.file.Path;
|
||||
import java.sql.Date;
|
||||
import java.time.*;
|
||||
import java.util.Calendar;
|
||||
|
||||
@Entity
|
||||
public class SomeNewTypesBean {
|
||||
@@ -58,6 +59,8 @@ public class SomeNewTypesBean {
|
||||
|
||||
Duration duration;
|
||||
|
||||
Calendar calendar;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
@@ -217,4 +220,12 @@ public class SomeNewTypesBean {
|
||||
public void setDuration(Duration duration) {
|
||||
this.duration = duration;
|
||||
}
|
||||
|
||||
public Calendar getCalendar() {
|
||||
return calendar;
|
||||
}
|
||||
|
||||
public void setCalendar(final Calendar calendar) {
|
||||
this.calendar = calendar;
|
||||
}
|
||||
}
|
||||
@@ -12,14 +12,12 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
|
||||
public class ParentQueryTest extends BaseTestCase {
|
||||
class ParentQueryTest extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void QueryParentCollectionFetch() {
|
||||
|
||||
void queryParentCollectionFetch() {
|
||||
List<Data> exampleData = new ArrayList<>();
|
||||
exampleData.add(new Data(0));
|
||||
exampleData.add(new Data(1));
|
||||
@@ -40,7 +38,7 @@ public class ParentQueryTest extends BaseTestCase {
|
||||
List<Parent> partial = DB.find(Parent.class).where().ge("val", 1001).findList();
|
||||
assertNotNull(partial.get(0).getData());
|
||||
assertThat(partial.get(0).getMore()).startsWith("PQT-");
|
||||
assertEquals(partial.get(0).getData().get(0).getVal().intValue(), 0);
|
||||
assertThat(partial.get(0).getData()).hasSize(3);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,26 +3,25 @@ package org.tests.text.csv;
|
||||
import io.ebean.DB;
|
||||
import io.ebean.TransactionalTestCase;
|
||||
import io.ebean.text.csv.CsvReader;
|
||||
import io.ebean.util.IOUtils;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.tests.model.basic.Customer;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.util.Locale;
|
||||
|
||||
public class TestCsvReader extends TransactionalTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
public void test() throws Exception {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
try {
|
||||
URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv");
|
||||
File f = new File(resource.getFile());
|
||||
|
||||
FileReader reader = new FileReader(f);
|
||||
URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv");
|
||||
try (Reader reader = IOUtils.newReader(resource.openStream())){
|
||||
|
||||
CsvReader<Customer> csvReader = DB.getDefault().createCsvReader(Customer.class);
|
||||
|
||||
@@ -32,15 +31,13 @@ public class TestCsvReader extends TransactionalTestCase {
|
||||
// csvReader.addProperty("id");
|
||||
csvReader.addProperty("status");
|
||||
csvReader.addProperty("name");
|
||||
csvReader.addDateTime("anniversary", "dd-MMM-yyyy");
|
||||
csvReader.addDateTime("anniversary", "dd-MMM-yyyy", Locale.ENGLISH);
|
||||
csvReader.addProperty("billingAddress.line1");
|
||||
csvReader.addProperty("billingAddress.city");
|
||||
csvReader.addProperty("billingAddress.country.code");
|
||||
|
||||
csvReader.process(reader);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,12 +4,14 @@ import io.ebean.DB;
|
||||
import io.ebean.TransactionalTestCase;
|
||||
import io.ebean.text.csv.CsvReader;
|
||||
import io.ebean.text.csv.DefaultCsvCallback;
|
||||
import io.ebean.util.IOUtils;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.tests.model.basic.Customer;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.util.Locale;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@@ -19,41 +21,40 @@ public class TestCsvReaderWithCallback extends TransactionalTestCase {
|
||||
public void test() throws Throwable {
|
||||
|
||||
URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv");
|
||||
File f = new File(resource.getFile());
|
||||
try (Reader reader = IOUtils.newReader(resource.openStream())) {
|
||||
|
||||
FileReader reader = new FileReader(f);
|
||||
CsvReader<Customer> csvReader = DB.getDefault().createCsvReader(Customer.class);
|
||||
|
||||
CsvReader<Customer> csvReader = DB.getDefault().createCsvReader(Customer.class);
|
||||
csvReader.setPersistBatchSize(2);
|
||||
csvReader.setLogInfoFrequency(3);
|
||||
|
||||
csvReader.setPersistBatchSize(2);
|
||||
csvReader.setLogInfoFrequency(3);
|
||||
csvReader.addIgnore();
|
||||
// csvReader.addProperty("id");
|
||||
csvReader.addProperty("status");
|
||||
csvReader.addProperty("name");
|
||||
csvReader.addDateTime("anniversary", "dd-MMM-yyyy", Locale.ENGLISH);
|
||||
csvReader.addProperty("billingAddress.line1");
|
||||
csvReader.addProperty("billingAddress.city");
|
||||
// processor.addReference("billingAddress.country.code");
|
||||
csvReader.addProperty("billingAddress.country.code");
|
||||
|
||||
csvReader.addIgnore();
|
||||
// csvReader.addProperty("id");
|
||||
csvReader.addProperty("status");
|
||||
csvReader.addProperty("name");
|
||||
csvReader.addDateTime("anniversary", "dd-MMM-yyyy");
|
||||
csvReader.addProperty("billingAddress.line1");
|
||||
csvReader.addProperty("billingAddress.city");
|
||||
// processor.addReference("billingAddress.country.code");
|
||||
csvReader.addProperty("billingAddress.country.code");
|
||||
int before = DB.find(Customer.class).findCount();
|
||||
|
||||
int before = DB.find(Customer.class).findCount();
|
||||
csvReader.process(reader, new DefaultCsvCallback<Customer>() {
|
||||
|
||||
csvReader.process(reader, new DefaultCsvCallback<Customer>() {
|
||||
@Override
|
||||
public void processBean(int row, String[] lineContent, Customer cust) {
|
||||
|
||||
@Override
|
||||
public void processBean(int row, String[] lineContent, Customer cust) {
|
||||
server.save(cust.getBillingAddress(), transaction);
|
||||
server.save(cust, transaction);
|
||||
|
||||
server.save(cust.getBillingAddress(), transaction);
|
||||
server.save(cust, transaction);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
int after = DB.find(Customer.class).findCount();
|
||||
assertThat(after).isEqualTo(before + 9);
|
||||
int after = DB.find(Customer.class).findCount();
|
||||
assertThat(after).isEqualTo(before + 9);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,9 +4,12 @@ import io.ebean.BaseTestCase;
|
||||
import io.ebean.DB;
|
||||
import io.ebean.text.json.EJson;
|
||||
import io.ebean.text.json.JsonContext;
|
||||
import io.ebean.util.IOUtils;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -20,19 +23,20 @@ public class TestJsonSimple extends BaseTestCase {
|
||||
public void test() throws IOException {
|
||||
|
||||
InputStream is = this.getClass().getResourceAsStream("/example1.json");
|
||||
String jsonText;
|
||||
try (final Reader reader = IOUtils.newReader(is)) {
|
||||
LineNumberReader lineReader = new LineNumberReader(reader);
|
||||
|
||||
final Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
|
||||
LineNumberReader lineReader = new LineNumberReader(reader);
|
||||
String readLine;
|
||||
|
||||
String readLine;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
while ((readLine = lineReader.readLine()) != null) {
|
||||
sb.append(readLine);
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
while ((readLine = lineReader.readLine()) != null) {
|
||||
sb.append(readLine);
|
||||
jsonText = sb.toString();
|
||||
}
|
||||
|
||||
String jsonText = sb.toString();
|
||||
|
||||
Object el = EJson.parse(jsonText);
|
||||
assertThat(el).isNotNull();
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.tests.model.types.SomeNewTypesBean;
|
||||
import java.io.File;
|
||||
import java.nio.file.Paths;
|
||||
import java.time.*;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -44,6 +45,7 @@ public class TestNewTypes extends BaseTestCase {
|
||||
bean.setPath(Paths.get(TEMP_PATH));
|
||||
bean.setPeriod(Period.of(4,3,2));
|
||||
bean.setDuration(Duration.ofMinutes(5));
|
||||
bean.setCalendar(Calendar.getInstance());
|
||||
|
||||
|
||||
DB.save(bean);
|
||||
@@ -104,6 +106,10 @@ public class TestNewTypes extends BaseTestCase {
|
||||
list = DB.find(SomeNewTypesBean.class).where().eq("duration", Duration.ofMinutes(5)).findList();
|
||||
assertThat(list).isNotEmpty();
|
||||
|
||||
// Calendar.getInstance() returns an implementation, which then has to be remapped to ScalarTypeCalendar
|
||||
list = DB.find(SomeNewTypesBean.class).where().le("calendar", Calendar.getInstance()).findList();
|
||||
assertThat(list).isNotEmpty();
|
||||
|
||||
SomeNewTypesBean fetched = DB.find(SomeNewTypesBean.class, bean.getId());
|
||||
|
||||
assertEquals(bean.getZoneId(), fetched.getZoneId());
|
||||
@@ -122,6 +128,7 @@ public class TestNewTypes extends BaseTestCase {
|
||||
assertEquals(bean.getPath(), fetched.getPath());
|
||||
assertEquals(bean.getPeriod(), fetched.getPeriod());
|
||||
assertEquals(bean.getDuration(), fetched.getDuration());
|
||||
assertEquals(bean.getCalendar(), fetched.getCalendar());
|
||||
|
||||
|
||||
String asJson = DB.json().toJson(fetched);
|
||||
@@ -139,10 +146,10 @@ public class TestNewTypes extends BaseTestCase {
|
||||
assertThat(toBean.getOffsetDateTime()).isEqualToIgnoringNanos(bean.getOffsetDateTime());
|
||||
assertEquals(bean.getLocalTime().toSecondOfDay(), toBean.getLocalTime().toSecondOfDay());
|
||||
assertEquals(bean.getInstant().toEpochMilli() / 1000, toBean.getInstant().toEpochMilli() / 1000);
|
||||
// FIXME: This test fails on Windows with: expected:<\tmp> but was:<C:\tmp>
|
||||
assertEquals(bean.getPath(), toBean.getPath());
|
||||
assertEquals(bean.getPeriod(), toBean.getPeriod());
|
||||
assertEquals(bean.getDuration(), toBean.getDuration());
|
||||
assertEquals(bean.getCalendar(), toBean.getCalendar());
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user