Cleanup tests for Oracle

This commit is contained in:
Rob Bygrave
2018-02-02 23:17:03 +13:00
parent b2bbb05b83
commit 823cb45221
12 changed files with 131 additions and 24 deletions
@@ -1,8 +1,8 @@
package io.ebean;
import org.junit.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import javax.persistence.PersistenceException;
@@ -23,6 +23,8 @@ public class EbeanServer_eqlTest extends BaseTestCase {
if (isSqlServer()) {
assertThat(query.getGeneratedSql()).startsWith("select top 100 ");
assertThat(query.getGeneratedSql()).endsWith("order by t0.id");
} else if (isOracle()) {
assertThat(query.getGeneratedSql()).contains("where rownum <= 100");
} else {
assertThat(query.getGeneratedSql()).endsWith("order by t0.id limit 100");
}
@@ -39,6 +41,8 @@ public class EbeanServer_eqlTest extends BaseTestCase {
if (isSqlServer()) {
assertThat(query.getGeneratedSql()).startsWith("select top 10 ");
assertThat(query.getGeneratedSql()).endsWith("order by t0.id");
} else if (isOracle()) {
assertThat(query.getGeneratedSql()).contains("where rownum <= 10");
} else {
assertThat(query.getGeneratedSql()).endsWith("order by t0.id limit 10");
}
@@ -54,6 +58,9 @@ public class EbeanServer_eqlTest extends BaseTestCase {
if (isSqlServer()) {
assertThat(query.getGeneratedSql()).endsWith("order by t0.id offset 3 rows fetch next 10 rows only");
} else if (isOracle()) {
assertThat(query.getGeneratedSql()).contains("where rownum <= 13");
assertThat(query.getGeneratedSql()).contains("where rn_ > 3");
} else {
assertThat(query.getGeneratedSql()).endsWith("order by t0.id limit 10 offset 3");
}
@@ -72,6 +79,9 @@ public class EbeanServer_eqlTest extends BaseTestCase {
if (isSqlServer()) {
assertThat(query.getGeneratedSql()).endsWith("order by t0.name, t0.id offset 3 rows fetch next 10 rows only");
} else if (isOracle()) {
assertThat(query.getGeneratedSql()).contains("where rownum <= 13");
assertThat(query.getGeneratedSql()).contains("where rn_ > 3");
} else {
assertThat(query.getGeneratedSql()).endsWith("order by t0.name, t0.id limit 10 offset 3");
}
@@ -89,6 +99,9 @@ public class EbeanServer_eqlTest extends BaseTestCase {
if (isSqlServer()) {
assertThat(query.getGeneratedSql()).endsWith("order by t0.id offset 3 rows fetch next 10 rows only");
} else if (isOracle()) {
assertThat(query.getGeneratedSql()).contains("where rownum <= 13");
assertThat(query.getGeneratedSql()).contains("where rn_ > 3");
} else {
assertThat(query.getGeneratedSql()).endsWith("order by t0.id limit 10 offset 3");
}
@@ -106,6 +119,9 @@ public class EbeanServer_eqlTest extends BaseTestCase {
if (isSqlServer()) {
assertThat(query.getGeneratedSql()).startsWith("select top 10 ");
assertThat(query.getGeneratedSql()).endsWith("order by t0.id");
} else if (isOracle()) {
assertThat(query.getGeneratedSql()).contains("t0 order by t0.id");
assertThat(query.getGeneratedSql()).contains(" a where rownum <= 10");
} else {
assertThat(query.getGeneratedSql()).endsWith("order by t0.id limit 10");
}
@@ -340,7 +340,7 @@ public class EqlParserTest extends BaseTestCase {
public void fetch_lazy50_asHint() throws Exception {
ResetBasicData.reset();
Query<Customer> query = parse("fetch billingAddress (+lazy(50),city)");
Query<Customer> query = parse("fetch billingAddress (+lazy(50),city) order by id");
List<Customer> list = query.findList();
assertThat(query.getGeneratedSql()).doesNotContain(", t1.city");
@@ -4,11 +4,10 @@ import io.ebean.AcquireLockException;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import io.ebean.annotation.Platform;
import io.ebean.Query;
import io.ebean.Transaction;
import io.ebean.annotation.ForPlatform;
import io.ebean.annotation.Platform;
import org.junit.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
@@ -31,7 +30,6 @@ public class TestQueryForUpdate extends BaseTestCase {
Query<Customer> query = Ebean.find(Customer.class)
.forUpdate()
.setMaxRows(1)
.order().desc("id");
query.findList();
@@ -44,13 +42,41 @@ public class TestQueryForUpdate extends BaseTestCase {
@Test
@ForPlatform({
Platform.H2, Platform.ORACLE, Platform.POSTGRES, Platform.SQLSERVER
Platform.H2, Platform.POSTGRES, Platform.SQLSERVER, Platform.ORACLE
})
public void testForUpdate_noWait_noMaxRows() {
ResetBasicData.reset();
Ebean.beginTransaction();
try {
Query<Customer> query = Ebean.find(Customer.class)
.forUpdateNoWait()
.order().desc("id");
query.findList();
if (isOracle()) {
assertThat(sqlOf(query)).contains("for update nowait");
} else if (isSqlServer()) {
assertThat(sqlOf(query)).contains("with (updlock,nowait)");
} else {
assertThat(sqlOf(query)).contains("for update nowait");
}
} finally {
Ebean.endTransaction();
}
}
@Test
@ForPlatform({
Platform.H2, Platform.POSTGRES, Platform.SQLSERVER
})
public void testForUpdate_noWait() {
ResetBasicData.reset();
EbeanServer server = Ebean.getDefaultServer();
Ebean.beginTransaction();
@@ -1,16 +1,21 @@
package org.tests.family;
import io.ebean.BaseTestCase;
import io.ebean.annotation.IgnorePlatform;
import io.ebean.annotation.Platform;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.deploy.BeanProperty;
import io.ebeaninternal.server.deploy.BeanPropertyAssocOne;
import org.junit.Test;
import org.tests.model.basic.EBasic;
import org.tests.model.family.ChildPerson;
import org.tests.model.family.GrandParentPerson;
import org.tests.model.family.ParentPerson;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class TestInheritance extends BaseTestCase {
@@ -37,6 +42,7 @@ public class TestInheritance extends BaseTestCase {
* +- parent3 Michael(60)
* </pre>
*/
@IgnorePlatform(Platform.ORACLE)
@Test
public void testInheritance() {
// create some other beans
@@ -2,6 +2,8 @@ package org.tests.model.history;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.annotation.IgnorePlatform;
import io.ebean.annotation.Platform;
import org.junit.Test;
import java.sql.Timestamp;
@@ -35,6 +37,7 @@ public class TestHistoryExclude extends BaseTestCase {
linkFound.getDocs().size();
}
@IgnorePlatform(Platform.ORACLE)
@Test
public void testAsOfThenLazy() {
@@ -2,6 +2,8 @@ package org.tests.model.history;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.annotation.IgnorePlatform;
import io.ebean.annotation.Platform;
import org.junit.Test;
import java.sql.Timestamp;
@@ -35,6 +37,7 @@ public class TestHistoryInclude extends BaseTestCase {
assertThat(linkFound.getDocs().size()).isEqualTo(2);
}
@IgnorePlatform(Platform.ORACLE)
@Test
public void testAsOfThenLazy() {
@@ -18,7 +18,7 @@ public class TestManyToOneAsOne extends BaseTestCase {
@Transactional(batchSize = 20)
@Test
@IgnorePlatform(Platform.SQLSERVER) // probably due the use of sequences - Empl has already an ID and Addr refers to it.
@IgnorePlatform({Platform.SQLSERVER, Platform.ORACLE}) // probably due the use of sequences - Empl has already an ID and Addr refers to it.
public void test_when_jdbcBatch() {
runInserts();
}
@@ -3,15 +3,14 @@ package org.tests.query.other;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.Query;
import org.tests.model.basic.Contact;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import org.junit.Ignore;
import org.junit.Test;
import org.tests.inherit.ChildA;
import org.tests.inherit.Data;
import org.tests.inherit.EUncle;
import org.junit.Ignore;
import org.junit.Test;
import org.tests.model.basic.Contact;
import org.tests.model.basic.Customer;
import org.tests.model.basic.ResetBasicData;
import java.sql.Date;
import java.util.List;
@@ -169,6 +168,9 @@ public class TestQuerySingleAttribute extends BaseTestCase {
List<String> ids = query.findSingleAttributeList();
if (isSqlServer()) {
assertThat(sqlOf(query)).contains("select distinct top 100 t0.id from o_customer t0");
} else if (isOracle()) {
assertThat(sqlOf(query)).contains("from ( select distinct t0.id from o_customer t0");
assertThat(sqlOf(query)).contains("where rownum <= 100");
} else {
assertThat(sqlOf(query)).contains("select distinct t0.id from o_customer t0 limit 100");
}
@@ -243,6 +245,8 @@ public class TestQuerySingleAttribute extends BaseTestCase {
List<String> ids = query.findSingleAttributeList();
if (isSqlServer()) {
assertThat(sqlOf(query)).contains("select top 100 t0.id from o_customer t0");
} else if (isOracle()) {
assertThat(sqlOf(query)).contains("where rownum <= 100");
} else {
assertThat(sqlOf(query)).contains("select t0.id from o_customer t0 limit 100");
}
@@ -2,12 +2,12 @@ package org.tests.query.other;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Assert;
import org.junit.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import java.util.List;
@@ -44,6 +44,7 @@ public class TestWhereAnnotation extends BaseTestCase {
LoggedSqlCollector.start();
List<Customer> customers = Ebean.find(Customer.class)
.order().asc("id")
.findList();
List<Order> orders = customers.get(0).getOrders();
@@ -4,10 +4,10 @@ import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.SqlQuery;
import io.ebean.SqlRow;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -62,6 +62,8 @@ public class SqlQueryTests extends BaseTestCase {
// explicit order is specified. In postgres this leads to strange scrolling
// artifacts.
assertThat(sql.get(0)).contains("order by 1 offset 3 rows fetch next 10 rows only");
} else if (isOracle()) {
assertThat(sql.get(0)).contains("from o_order offset 3 rows fetch next 10 rows only");
} else {
assertThat(sql.get(0)).contains("Select * from o_order limit 10 offset 3; --bind()");
}
@@ -100,6 +102,8 @@ public class SqlQueryTests extends BaseTestCase {
if (isSqlServer()) {
assertThat(sql.get(0)).contains("Select * from o_order order by id offset 0 rows fetch next 10 rows only;");
} else if (isOracle()) {
assertThat(sql.get(0)).contains("from o_order order by id fetch next 10 rows only;");
} else {
assertThat(sql.get(0)).contains("Select * from o_order order by id limit 10");
}
@@ -120,6 +124,8 @@ public class SqlQueryTests extends BaseTestCase {
if (isSqlServer()) {
assertThat(sql.get(0)).contains("select * from o_order where o_order.id > ? order by id offset 0 rows fetch next 10 rows only;");
} else if (isOracle()) {
assertThat(sql.get(0)).contains("order by id fetch next 10 rows only");
} else {
assertThat(sql.get(0)).contains("select * from o_order where o_order.id > ? order by id limit 10;");
}
@@ -139,6 +145,8 @@ public class SqlQueryTests extends BaseTestCase {
if (isSqlServer()) {
assertThat(sql.get(0)).contains("offset 0 rows fetch next 10 rows only");
} else if (isOracle()) {
assertThat(sql.get(0)).contains("fetch next 10 rows only");
} else {
assertThat(sql.get(0)).contains("limit 10");
}
@@ -10,11 +10,11 @@ import io.ebean.RawSql;
import io.ebean.RawSqlBuilder;
import io.ebean.annotation.IgnorePlatform;
import io.ebean.annotation.Platform;
import org.junit.Assert;
import org.junit.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.util.List;
import java.util.concurrent.ExecutionException;
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
public class TestRawSqlOrmQuery extends BaseTestCase {
@IgnorePlatform(Platform.ORACLE)
@Test
public void testNamed() {
@@ -168,11 +169,14 @@ public class TestRawSqlOrmQuery extends BaseTestCase {
if (isSqlServer()) {
assertThat(query.getGeneratedSql()).contains("top 100 ");
assertThat(query.getGeneratedSql()).contains("order by o.ship_date desc, o.id");
} else if (isOracle()) {
assertThat(query.getGeneratedSql()).contains("a where rownum <= 100 )");
} else {
assertThat(query.getGeneratedSql()).contains("order by o.ship_date desc, o.id limit 100");
}
}
@IgnorePlatform(Platform.ORACLE)
@Test
public void testPaging_when_setOrderBy_expect_id_appendToOrderBy() {
@@ -227,6 +231,8 @@ public class TestRawSqlOrmQuery extends BaseTestCase {
if (isSqlServer()) {
assertThat(sqlOf(query)).contains("select top 100 ");
assertThat(sqlOf(query)).contains("order by o.id desc");
} else if (isOracle()) {
assertThat(sqlOf(query)).contains("a where rownum <= 100 )");
} else {
assertThat(sqlOf(query)).contains("order by o.id desc limit 100");
}
@@ -7,6 +7,7 @@ import io.ebean.EbeanServer;
import io.ebean.Query;
import io.ebean.annotation.IgnorePlatform;
import io.ebean.annotation.Platform;
import org.ebeantest.LoggedSqlCollector;
import org.junit.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
@@ -107,8 +108,11 @@ public class TestNativeSqlBasic extends BaseTestCase {
}
}
/**
* Oracle does not support getTableName() via JDBC resultSet meta data
*/
@Test
@IgnorePlatform(Platform.SQLSERVER) // does only work in 'cursor' mode!
@IgnorePlatform({Platform.SQLSERVER, Platform.ORACLE}) // does only work in 'cursor' mode!
public void partialAssoc() {
ResetBasicData.reset();
@@ -126,6 +130,36 @@ public class TestNativeSqlBasic extends BaseTestCase {
}
}
@Test
public void partialAssocIncludingOracle() {
ResetBasicData.reset();
EbeanServer server = Ebean.getDefaultServer();
String nativeSql = "select o.id, o.status, o.kcustomer_id from o_order o";
List<Order> orders = server.findNative(Order.class, nativeSql)
.findList();
LoggedSqlCollector.start();
for (Order order : orders) {
order.getStatus();
}
List<String> sql = LoggedSqlCollector.current();
assertThat(sql).isEmpty();
for (Order order : orders) {
order.getCustomer().getName();
}
sql = LoggedSqlCollector.stop();
assertThat(sql).hasSize(1);
assertThat(sql.get(0)).contains(" from o_customer t0 where ");
}
@Test
public void fetchQuery() {