From 9af006b15b722225befb09f9b461264e1b15e4c8 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 23 Sep 2021 18:49:28 +1200 Subject: [PATCH] Update tests only for Oracle --- ebean-test/pom.xml | 14 +++++++-- .../src/test/java/io/ebean/BaseTestCase.java | 2 +- .../test/java/io/ebean/PlatformCondition.java | 2 +- .../org/etest/ForTestsBeforeAfterTest.java | 2 +- .../src/test/java/org/etest/ForTestsTest.java | 2 +- .../org/tests/basic/encrypt/TestEncrypt.java | 2 ++ .../org/tests/model/m2m/TestM2MWithWhere.java | 30 +++++++++---------- .../org/tests/o2m/TestOneToManyWhere.java | 2 +- .../java/org/tests/query/TestSubQuery.java | 14 ++++----- .../query/joins/TestQueryJoinOnFormula.java | 10 +++---- .../query/other/TestQuerySingleAttribute.java | 2 +- .../tests/softdelete/TestSoftDeleteBasic.java | 4 +-- .../TestSoftDeleteOptionalRelationship.java | 2 +- .../TestTransparentPersist.java | 4 +-- 14 files changed, 51 insertions(+), 41 deletions(-) diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index b2335dffa..01caeb5aa 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 ebean-parent @@ -160,14 +161,14 @@ com.microsoft.sqlserver mssql-jdbc - 6.2.2.jre8 + 9.4.0.jre8 test mysql mysql-connector-java - 8.0.16 + 8.0.26 test @@ -185,6 +186,13 @@ test + + com.oracle.database.jdbc + ojdbc10 + 19.12.0.0 + test + + ch.qos.logback logback-classic diff --git a/ebean-test/src/test/java/io/ebean/BaseTestCase.java b/ebean-test/src/test/java/io/ebean/BaseTestCase.java index 38f933d42..6e9ad234f 100644 --- a/ebean-test/src/test/java/io/ebean/BaseTestCase.java +++ b/ebean-test/src/test/java/io/ebean/BaseTestCase.java @@ -143,7 +143,7 @@ public abstract class BaseTestCase { } protected String trimSql(String sql) { - if (sql.contains(" c0,") || sql.contains(" c0 ") || sql.contains(" c1,") || sql.contains(" c1 ")) { + if (sql.contains(" c0 from ") || sql.contains(" c0,") || sql.contains(" c0 ") || sql.contains(" c1,") || sql.contains(" c1 ")) { // for oracle we include column alias so lets remove those return trimSql(sql, 10); } diff --git a/ebean-test/src/test/java/io/ebean/PlatformCondition.java b/ebean-test/src/test/java/io/ebean/PlatformCondition.java index 9122bf826..af8ce62d1 100644 --- a/ebean-test/src/test/java/io/ebean/PlatformCondition.java +++ b/ebean-test/src/test/java/io/ebean/PlatformCondition.java @@ -25,7 +25,7 @@ public class PlatformCondition implements ExecutionCondition { } IgnorePlatform ignore = annotatedElement.getAnnotation(IgnorePlatform.class); if (ignore != null && platformMath(ignore.value())) { - return ConditionEvaluationResult.disabled("@ForPlatform"); + return ConditionEvaluationResult.disabled("@IgnorePlatform"); } } return ENABLED; diff --git a/ebean-test/src/test/java/org/etest/ForTestsBeforeAfterTest.java b/ebean-test/src/test/java/org/etest/ForTestsBeforeAfterTest.java index 5c1bd7e60..81e25b80a 100644 --- a/ebean-test/src/test/java/org/etest/ForTestsBeforeAfterTest.java +++ b/ebean-test/src/test/java/org/etest/ForTestsBeforeAfterTest.java @@ -28,7 +28,7 @@ public class ForTestsBeforeAfterTest extends BaseTestCase { assertThat(getCount()).isEqualTo(0); } - @IgnorePlatform(Platform.SQLSERVER) + @IgnorePlatform({Platform.SQLSERVER, Platform.ORACLE}) @Test public void createRollbackAll() { doInsert(); diff --git a/ebean-test/src/test/java/org/etest/ForTestsTest.java b/ebean-test/src/test/java/org/etest/ForTestsTest.java index 19f57c9a6..c475ecfce 100644 --- a/ebean-test/src/test/java/org/etest/ForTestsTest.java +++ b/ebean-test/src/test/java/org/etest/ForTestsTest.java @@ -36,7 +36,7 @@ public class ForTestsTest extends BaseTestCase { assertThat(transaction).isNull(); } - @IgnorePlatform(Platform.SQLSERVER) + @IgnorePlatform({Platform.SQLSERVER, Platform.ORACLE}) @Test public void rollbackTransactions() { diff --git a/ebean-test/src/test/java/org/tests/basic/encrypt/TestEncrypt.java b/ebean-test/src/test/java/org/tests/basic/encrypt/TestEncrypt.java index 143aa059c..3c9925c04 100644 --- a/ebean-test/src/test/java/org/tests/basic/encrypt/TestEncrypt.java +++ b/ebean-test/src/test/java/org/tests/basic/encrypt/TestEncrypt.java @@ -4,6 +4,7 @@ import io.ebean.BaseTestCase; import io.ebean.DB; import io.ebean.SqlRow; import io.ebean.annotation.ForPlatform; +import io.ebean.annotation.IgnorePlatform; import io.ebean.annotation.Platform; import io.ebean.config.dbplatform.DbEncrypt; import io.ebean.test.LoggedSql; @@ -55,6 +56,7 @@ public class TestEncrypt extends BaseTestCase { assertThat(loggedSql.get(1)).contains("left join e_basicenc t1 on t1.id = t0.other_id"); } + @IgnorePlatform(Platform.ORACLE) @Test public void asDto() { DB.find(EBasicEncrypt.class).delete(); diff --git a/ebean-test/src/test/java/org/tests/model/m2m/TestM2MWithWhere.java b/ebean-test/src/test/java/org/tests/model/m2m/TestM2MWithWhere.java index 0525c0896..a433c388e 100644 --- a/ebean-test/src/test/java/org/tests/model/m2m/TestM2MWithWhere.java +++ b/ebean-test/src/test/java/org/tests/model/m2m/TestM2MWithWhere.java @@ -24,26 +24,26 @@ public class TestM2MWithWhere extends BaseTestCase { List result = DB.find(MnyNode.class).where().eq("allRelations", node).findList(); - assertThat(result).extracting(MnyNode::getId).containsExactly(1, 2, 3, 4, 5); + assertThat(result).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 2, 3, 4, 5); result = DB.find(MnyNode.class).where().eq("allReverseRelations", node).findList(); - assertThat(result).extracting(MnyNode::getId).containsExactly(1, 2, 3, 4, 5); + assertThat(result).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 2, 3, 4, 5); result = DB.find(MnyNode.class).where().eq("bit1Relations", node).findList(); assertThat(result).isEmpty(); // -> to = 1 column: 2 0 2 0 2 result = DB.find(MnyNode.class).where().eq("bit2Relations", node).findList(); - assertThat(result).extracting(MnyNode::getId).containsExactly(1, 3, 5); + assertThat(result).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 3, 5); result = DB.find(MnyNode.class).where().eq("bit1ReverseRelations", node).findList(); // -> from = 1 column: 2 1 3 1 3 - assertThat(result).extracting(MnyNode::getId).containsExactly(2, 3, 4, 5); + assertThat(result).extracting(MnyNode::getId).containsExactlyInAnyOrder(2, 3, 4, 5); result = DB.find(MnyNode.class).where().eq("bit2ReverseRelations", node).findList(); - assertThat(result).hasSize(3).extracting(MnyNode::getId).containsExactly(1, 3, 5); + assertThat(result).hasSize(3).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 3, 5); result = DB.find(MnyNode.class).where().eq("bit2ReverseRelations", node).findList(); - assertThat(result).hasSize(3).extracting(MnyNode::getId).containsExactly(1, 3, 5); + assertThat(result).hasSize(3).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 3, 5); } @Test @@ -51,18 +51,18 @@ public class TestM2MWithWhere extends BaseTestCase { createTestData(); MnyNode node = DB.find(MnyNode.class, 3); - assertThat(node.getAllRelations()).extracting(MnyNode::getId).containsExactly(1, 2, 3, 4, 5); + assertThat(node.getAllRelations()).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 2, 3, 4, 5); - assertThat(node.getAllReverseRelations()).extracting(MnyNode::getId).containsExactly(1, 2, 3, 4, 5); + assertThat(node.getAllReverseRelations()).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 2, 3, 4, 5); - assertThat(node.getBit1Relations()).extracting(MnyNode::getId).containsExactly(4, 5); + assertThat(node.getBit1Relations()).extracting(MnyNode::getId).containsExactlyInAnyOrder(4, 5); - assertThat(node.getBit1ReverseRelations()).extracting(MnyNode::getId).containsExactly(1, 2); + assertThat(node.getBit1ReverseRelations()).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 2); - assertThat(node.getBit2Relations()).extracting(MnyNode::getId).containsExactly(1, 3, 5); + assertThat(node.getBit2Relations()).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 3, 5); LoggedSql.start(); - assertThat(node.getBit2ReverseRelations()).extracting(MnyNode::getId).containsExactly(1, 3, 5); + assertThat(node.getBit2ReverseRelations()).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 3, 5); List sqls = LoggedSql.stop(); assertThat(sqls).hasSize(1); // lazy load @@ -77,8 +77,8 @@ public class TestM2MWithWhere extends BaseTestCase { // no lazyLoad expected LoggedSql.start(); - assertThat(node.getBit1Relations()).extracting(MnyNode::getId).containsExactly(4, 5); - assertThat(node.getBit1ReverseRelations()).extracting(MnyNode::getId).containsExactly(1, 2); + assertThat(node.getBit1Relations()).extracting(MnyNode::getId).containsExactlyInAnyOrder(4, 5); + assertThat(node.getBit1ReverseRelations()).extracting(MnyNode::getId).containsExactlyInAnyOrder(1, 2); sqls = LoggedSql.stop(); assertThat(sqls).hasSize(0); @@ -148,7 +148,7 @@ public class TestM2MWithWhere extends BaseTestCase { el.getWithDbTableName().size(); // trigger Lazy load List sql = LoggedSql.stop(); assertThat(sql).hasSize(2); - assertThat(sql.get(0)).contains("select t0.id, t0.name from mny_node"); + assertSql(sql.get(0)).contains("select t0.id, t0.name from mny_node"); assertThat(sql.get(1)).contains("where 'mny_node' = t0.name"); DB.delete(el); } diff --git a/ebean-test/src/test/java/org/tests/o2m/TestOneToManyWhere.java b/ebean-test/src/test/java/org/tests/o2m/TestOneToManyWhere.java index e60142a8f..77d85654b 100644 --- a/ebean-test/src/test/java/org/tests/o2m/TestOneToManyWhere.java +++ b/ebean-test/src/test/java/org/tests/o2m/TestOneToManyWhere.java @@ -35,7 +35,7 @@ public class TestOneToManyWhere extends BaseTestCase { el.getChildrenWithWhere().size(); // trigger Lazy load List sql = LoggedSql.stop(); assertThat(sql).hasSize(2); - assertThat(sql.get(0)).contains("select t0.id, t0.name from om_basic_parent"); + assertSql(sql.get(0)).contains("select t0.id, t0.name from om_basic_parent"); assertThat(sql.get(1)).contains("where 'om_basic_parent' = t0.name"); DB.delete(el); } diff --git a/ebean-test/src/test/java/org/tests/query/TestSubQuery.java b/ebean-test/src/test/java/org/tests/query/TestSubQuery.java index 469d525a1..b8e26f70c 100644 --- a/ebean-test/src/test/java/org/tests/query/TestSubQuery.java +++ b/ebean-test/src/test/java/org/tests/query/TestSubQuery.java @@ -72,7 +72,7 @@ public class TestSubQuery extends BaseTestCase { if (isPostgres()) { assertThat(debugSq.getGeneratedSql()).isEqualTo("select t1.id from o_order_detail t0 join o_order t1 on t1.id = t0.order_id where t0.product_id = any(?)"); } else { - assertThat(debugSq.getGeneratedSql()).isEqualTo("select t1.id from o_order_detail t0 join o_order t1 on t1.id = t0.order_id where t0.product_id in (?)"); + assertSql(debugSq.getGeneratedSql()).isEqualTo("select t1.id from o_order_detail t0 join o_order t1 on t1.id = t0.order_id where t0.product_id in (?)"); } Query query = DB.find(Order.class).select("shipDate").where().isIn("id", sq).query(); @@ -81,7 +81,7 @@ public class TestSubQuery extends BaseTestCase { if (isPostgres()) { assertThat(query.getGeneratedSql()).isEqualTo("select t0.ship_date from o_order t0 where (t0.id) in (" + debugSq.getGeneratedSql() + ")"); } else { - assertThat(query.getGeneratedSql()).isEqualTo("select t0.ship_date from o_order t0 where (t0.id) in (" + debugSq.getGeneratedSql() + ")"); + assertSql(query.getGeneratedSql()).isEqualTo("select t0.ship_date from o_order t0 where (t0.id) in (" + trimSql(debugSq.getGeneratedSql()) + ")"); } } @@ -101,8 +101,8 @@ public class TestSubQuery extends BaseTestCase { Query query = DB.find(Order.class).select("status").where().isIn("shipDate", sq).query(); query.findSingleAttribute(); - assertThat(query.getGeneratedSql()) - .isEqualTo("select t0.status from o_order t0 where (t0.ship_date) in (" + debugSq.getGeneratedSql() + ")"); + assertSql(query.getGeneratedSql()) + .isEqualTo("select t0.status from o_order t0 where (t0.ship_date) in (" + trimSql(debugSq.getGeneratedSql()) + ")"); } /** @@ -120,13 +120,13 @@ public class TestSubQuery extends BaseTestCase { // execute the subQuery as copy (generatedSQL must be part of original query) Query debugSq = sq.copy(); debugSq.findSingleAttribute(); - assertThat(debugSq.getGeneratedSql()).contains("select t2.id from o_order_detail t0 join o_order t1 on t1.id = t0.order_id left join or_order_ship t2"); + assertSql(debugSq.getGeneratedSql()).contains("select t2.id from o_order_detail t0 join o_order t1 on t1.id = t0.order_id left join or_order_ship t2"); Query query = DB.find(OrderShipment.class).select("shipTime").where().isIn("id", sq).query(); query.findSingleAttribute(); - assertThat(query.getGeneratedSql()) - .isEqualTo("select t0.ship_time from or_order_ship t0 where (t0.id) in (" + debugSq.getGeneratedSql() + ")"); + assertSql(query.getGeneratedSql()) + .isEqualTo("select t0.ship_time from or_order_ship t0 where (t0.id) in (" + trimSql(debugSq.getGeneratedSql()) + ")"); } public void testCompositeKey() { diff --git a/ebean-test/src/test/java/org/tests/query/joins/TestQueryJoinOnFormula.java b/ebean-test/src/test/java/org/tests/query/joins/TestQueryJoinOnFormula.java index 25d93e797..baee1f9d6 100644 --- a/ebean-test/src/test/java/org/tests/query/joins/TestQueryJoinOnFormula.java +++ b/ebean-test/src/test/java/org/tests/query/joins/TestQueryJoinOnFormula.java @@ -81,7 +81,7 @@ public class TestQueryJoinOnFormula extends BaseTestCase { .order().asc("order.totalAmount"); shipQuery.findList(); - assertThat(shipQuery.getGeneratedSql()).isEqualTo("select t0.id " + assertSql(shipQuery.getGeneratedSql()).isEqualTo("select t0.id " + "from or_order_ship t0 " + "left join o_order t1 on t1.id = t0.order_id " + "left join (select order_id, count(*) as total_items, sum(order_qty*unit_price) as total_amount from o_order_detail group by order_id) z_bt1 on z_bt1.order_id = t1.id " @@ -98,7 +98,7 @@ public class TestQueryJoinOnFormula extends BaseTestCase { .where().isNotNull("order.totalAmount").query(); shipQuery.findList(); - assertThat(shipQuery.getGeneratedSql()).isEqualTo("select t0.id " + assertSql(shipQuery.getGeneratedSql()).isEqualTo("select t0.id " + "from or_order_ship t0 " + "left join o_order t1 on t1.id = t0.order_id " + "left join (select order_id, count(*) as total_items, sum(order_qty*unit_price) as total_amount from o_order_detail group by order_id) z_bt1 on z_bt1.order_id = t1.id " @@ -118,7 +118,7 @@ public class TestQueryJoinOnFormula extends BaseTestCase { if (isPostgres()) { assertThat(shipQuery.getGeneratedSql()).contains("select distinct on (t0.id) t0.id from or_order_ship t0"); } else { - assertThat(shipQuery.getGeneratedSql()).contains("select distinct t0.id from or_order_ship t0 "); + assertSql(shipQuery.getGeneratedSql()).contains("select distinct t0.id from or_order_ship t0 "); } assertThat(shipQuery.getGeneratedSql()).contains( "from or_order_ship t0 " + @@ -139,7 +139,7 @@ public class TestQueryJoinOnFormula extends BaseTestCase { .order().asc("order.totalAmount"); shipQuery.findList(); - assertThat(shipQuery.getGeneratedSql()).isEqualTo("select t0.id, t1.id, z_bt1.total_amount " + assertSql(shipQuery.getGeneratedSql()).isEqualTo("select t0.id, t1.id, z_bt1.total_amount " + "from or_order_ship t0 " + "left join o_order t1 on t1.id = t0.order_id " + "left join (select order_id, count(*) as total_items, sum(order_qty*unit_price) as total_amount from o_order_detail group by order_id) z_bt1 on z_bt1.order_id = t1.id " @@ -156,7 +156,7 @@ public class TestQueryJoinOnFormula extends BaseTestCase { .where().isNotNull("order.totalAmount").query(); shipQuery.findList(); - assertThat(shipQuery.getGeneratedSql()).isEqualTo("select t0.id, t1.id, z_bt1.total_amount " + assertSql(shipQuery.getGeneratedSql()).isEqualTo("select t0.id, t1.id, z_bt1.total_amount " + "from or_order_ship t0 " + "left join o_order t1 on t1.id = t0.order_id " + "left join (select order_id, count(*) as total_items, sum(order_qty*unit_price) as total_amount from o_order_detail group by order_id) z_bt1 on z_bt1.order_id = t1.id " diff --git a/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java b/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java index 735bddddd..085a6b18a 100644 --- a/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java +++ b/ebean-test/src/test/java/org/tests/query/other/TestQuerySingleAttribute.java @@ -708,7 +708,7 @@ public class TestQuerySingleAttribute extends BaseTestCase { .findSingleAttributeList(); if (isOracle()) { - assertSql(query).contains("select r1.attribute_, count(*) from (select t2.line_1 as attribute_ from contact t0 join o_customer t1 on t1.id = t0.customer_id left join o_address t2 on t2.id = t1.billing_address_id where t2.line_1 is not null) r1 group by r1.attribute_ order by r1.attribute_ desc offset 1 rows fetch next 2 rows only"); + assertSql(query).contains("select r1.attribute_, count(*) from (select t2.line_1 as attribute_ from contact t0 join o_customer t1 on t1.id = t0.customer_id left join o_address t2 on t2.id = t1.billing_address_id where t2.line_1 is not null) r1 group by r1.attribute_ order by r1.attribute_ desc offset 1 rows fetch next 2 rows only"); } else { assertSql(query).contains("select r1.attribute_, count(*) from (" + "select t2.line_1 as attribute_ from contact t0 " diff --git a/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java b/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java index 4d5fd67af..8642a67aa 100644 --- a/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java +++ b/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java @@ -236,7 +236,7 @@ public class TestSoftDeleteBasic extends BaseTestCase { .query(); List list = query.findList(); - if (isMySql() || isMariaDB() || isSqlServer()) { + if (isMySql() || isMariaDB() || isSqlServer() || isOracle()) { assertSql(query).contains("t0.deleted = 0"); assertSql(query).contains("u1.deleted = 0"); } else { @@ -272,7 +272,7 @@ public class TestSoftDeleteBasic extends BaseTestCase { List list = query.findList(); // Make sure that query includes that the child mustn't've been deleted - if (isMySql() || isMariaDB() || isSqlServer()) { + if (isMySql() || isMariaDB() || isSqlServer() || isOracle()) { assertSql(query).contains("u1.deleted = 0"); assertSql(query).contains("u2.deleted = 0"); } else { diff --git a/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteOptionalRelationship.java b/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteOptionalRelationship.java index f5650673b..a3aee96d6 100644 --- a/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteOptionalRelationship.java +++ b/ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteOptionalRelationship.java @@ -59,7 +59,7 @@ public class TestSoftDeleteOptionalRelationship extends BaseTestCase { final List sql = LoggedSql.stop(); assertThat(sql).hasSize(1); - if (isSqlServer() || isMySql() || isMariaDB()) { + if (isSqlServer() || isMySql() || isMariaDB() || isOracle()) { assertThat(sql.get(0)).contains("left join esoft_del_z t1 on t1.id = t0.organization_id and t1.deleted = 0 where"); } else { assertThat(sql.get(0)).contains("left join esoft_del_z t1 on t1.id = t0.organization_id and t1.deleted = false where"); diff --git a/ebean-test/src/test/java/org/tests/transparentpersist/TestTransparentPersist.java b/ebean-test/src/test/java/org/tests/transparentpersist/TestTransparentPersist.java index 60db7b27b..74c3f3efb 100644 --- a/ebean-test/src/test/java/org/tests/transparentpersist/TestTransparentPersist.java +++ b/ebean-test/src/test/java/org/tests/transparentpersist/TestTransparentPersist.java @@ -248,12 +248,12 @@ public class TestTransparentPersist extends BaseTestCase { assertThat(checkOrder.getShipments().size()).isEqualTo(1); assertThat(sql).hasSize(10); - assertThat(sql.get(0)).contains("select t0.id, t0.status, t0.order_date"); + assertSql(sql.get(0)).contains("select t0.id, t0.status, t0.order_date"); assertThat(sql.get(1)).contains("insert into o_customer"); assertThat(sql.get(2)).contains(" -- bind("); assertThat(sql.get(3)).contains("update o_order set updtime=?, kcustomer_id=? where id=? and updtime=?"); assertThat(sql.get(4)).contains(" -- bind("); - assertThat(sql.get(5)).contains("select t0.order_id, t0.id, t0.ship_time, t0.cretime, t0.updtime, t0.version, t0.order_id from or_order_ship"); + assertSql(sql.get(5)).contains("select t0.order_id, t0.id, t0.ship_time, t0.cretime, t0.updtime, t0.version, t0.order_id from or_order_ship"); assertThat(sql.get(6)).contains("delete from or_order_ship"); assertThat(sql.get(7)).contains(" -- bind("); assertThat(sql.get(8)).contains("insert into or_order_ship");