Date: Sun, 31 Jul 2016 21:24:31 +1200
Subject: [PATCH 08/65] #791 - ENH: Add transaction.setRollbackOnly() ... (and
Ebean.setRollbackOnly())
---
src/main/java/com/avaje/ebean/Ebean.java | 7 +++
.../java/com/avaje/ebean/Transaction.java | 5 ++
.../avaje/ebeaninternal/api/ScopeTrans.java | 9 ++++
.../ebeaninternal/api/ScopedTransaction.java | 5 ++
.../server/transaction/JdbcTransaction.java | 14 +++++
.../TestTransactionRollbackOnly.java | 53 +++++++++++++++++++
6 files changed, 93 insertions(+)
create mode 100644 src/test/java/com/avaje/tests/transaction/TestTransactionRollbackOnly.java
diff --git a/src/main/java/com/avaje/ebean/Ebean.java b/src/main/java/com/avaje/ebean/Ebean.java
index 924c1c221..ffd330b1a 100644
--- a/src/main/java/com/avaje/ebean/Ebean.java
+++ b/src/main/java/com/avaje/ebean/Ebean.java
@@ -499,6 +499,13 @@ public final class Ebean {
serverMgr.getDefaultServer().endTransaction();
}
+ /**
+ * Mark the current transaction as rollback only.
+ */
+ public static void setRollbackOnly() {
+ serverMgr.getDefaultServer().currentTransaction().setRollbackOnly();
+ }
+
/**
* Return a map of the differences between two objects of the same type.
*
diff --git a/src/main/java/com/avaje/ebean/Transaction.java b/src/main/java/com/avaje/ebean/Transaction.java
index cd2db3004..526fe28bb 100644
--- a/src/main/java/com/avaje/ebean/Transaction.java
+++ b/src/main/java/com/avaje/ebean/Transaction.java
@@ -74,6 +74,11 @@ public interface Transaction extends Closeable {
*/
void rollback(Throwable e) throws PersistenceException;
+ /**
+ * Mark the transaction for rollback only.
+ */
+ void setRollbackOnly();
+
/**
* If the transaction is active then perform rollback. Otherwise do nothing.
*/
diff --git a/src/main/java/com/avaje/ebeaninternal/api/ScopeTrans.java b/src/main/java/com/avaje/ebeaninternal/api/ScopeTrans.java
index ecdda3085..c2eda8690 100644
--- a/src/main/java/com/avaje/ebeaninternal/api/ScopeTrans.java
+++ b/src/main/java/com/avaje/ebeaninternal/api/ScopeTrans.java
@@ -181,6 +181,15 @@ public class ScopeTrans implements Thread.UncaughtExceptionHandler {
return e;
}
+ /**
+ * Mark the underlying transaction as rollback only.
+ */
+ public void setRollbackOnly() {
+ if (transaction != null) {
+ transaction.setRollbackOnly();
+ }
+ }
+
/**
* An Exception was caught and may or may not cause a rollback to occur.
* Returns the exception and this should be thrown by the calling code.
diff --git a/src/main/java/com/avaje/ebeaninternal/api/ScopedTransaction.java b/src/main/java/com/avaje/ebeaninternal/api/ScopedTransaction.java
index a8a98d5c2..44f7eb62c 100644
--- a/src/main/java/com/avaje/ebeaninternal/api/ScopedTransaction.java
+++ b/src/main/java/com/avaje/ebeaninternal/api/ScopedTransaction.java
@@ -49,6 +49,11 @@ public class ScopedTransaction implements SpiTransaction {
scopeTrans.rollback(e);
}
+ @Override
+ public void setRollbackOnly() {
+ scopeTrans.setRollbackOnly();
+ }
+
@Override
public void end() throws PersistenceException {
try {
diff --git a/src/main/java/com/avaje/ebeaninternal/server/transaction/JdbcTransaction.java b/src/main/java/com/avaje/ebeaninternal/server/transaction/JdbcTransaction.java
index 9edd8b395..79fe82379 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/transaction/JdbcTransaction.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/transaction/JdbcTransaction.java
@@ -66,6 +66,8 @@ public class JdbcTransaction implements SpiTransaction {
*/
protected boolean active;
+ protected boolean rollbackOnly;
+
/**
* The underlying Connection.
*/
@@ -903,6 +905,10 @@ public class JdbcTransaction implements SpiTransaction {
*/
@Override
public void commit() throws RollbackException {
+ if (rollbackOnly) {
+ rollback();
+ return;
+ }
if (!isActive()) {
throw new IllegalStateException(illegalStateMessage);
}
@@ -945,6 +951,14 @@ public class JdbcTransaction implements SpiTransaction {
}
}
+ /**
+ * Mark the transaction as rollback only.
+ */
+ @Override
+ public void setRollbackOnly() {
+ this.rollbackOnly = true;
+ }
+
/**
* Rollback the transaction.
*/
diff --git a/src/test/java/com/avaje/tests/transaction/TestTransactionRollbackOnly.java b/src/test/java/com/avaje/tests/transaction/TestTransactionRollbackOnly.java
new file mode 100644
index 000000000..5b536718c
--- /dev/null
+++ b/src/test/java/com/avaje/tests/transaction/TestTransactionRollbackOnly.java
@@ -0,0 +1,53 @@
+package com.avaje.tests.transaction;
+
+import com.avaje.ebean.Ebean;
+import com.avaje.ebean.Transaction;
+import com.avaje.ebean.annotation.Transactional;
+import com.avaje.tests.model.basic.EBasic;
+import org.junit.Test;
+
+import static org.assertj.core.api.StrictAssertions.assertThat;
+
+public class TestTransactionRollbackOnly {
+
+ private EBasic one;
+
+ private EBasic two;
+
+ @Test
+ public void transaction_setRollbackOnly() {
+
+ doVia_currentTransaction();
+
+ assertThat(one.getId()).isNotNull();
+ assertThat(Ebean.find(EBasic.class, one.getId())).isNull();
+ }
+
+ @Transactional
+ protected void doVia_currentTransaction() {
+
+ one = new EBasic("WillNotSave");
+ Ebean.save(one);
+
+ Transaction transaction = Ebean.currentTransaction();
+ transaction.setRollbackOnly();
+ }
+
+ @Test
+ public void test_Ebean_setRollbackOnly() {
+
+ do_Ebean_setRollbackOnly();
+
+ assertThat(two.getId()).isNotNull();
+ assertThat(Ebean.find(EBasic.class, two.getId())).isNull();
+ }
+
+ @Transactional
+ protected void do_Ebean_setRollbackOnly() {
+
+ two = new EBasic("WillNotSave");
+ Ebean.save(two);
+
+ Ebean.setRollbackOnly();
+ }
+}
From 0f0028eb1f6c4885dbc6cbf593804f5fc21d4dde Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 21:27:58 +1200
Subject: [PATCH 09/65] [maven-release-plugin] prepare release
avaje-ebeanorm-7.21.1
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 095de4c32..56e582df9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
org.avaje.ebeanorm
avaje-ebeanorm
- 7.21.1-SNAPSHOT
+ 7.21.1
jar
avaje-ebeanorm
@@ -37,7 +37,7 @@
scm:git:https://github.com/ebean-orm/avaje-ebeanorm.git
- HEAD
+ avaje-ebeanorm-7.21.1
From 74c6c71301be4788e246ceabd4486d4e0bfb4bdb Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 21:28:17 +1200
Subject: [PATCH 10/65] [maven-release-plugin] prepare for next development
iteration
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 56e582df9..2bc032908 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
org.avaje.ebeanorm
avaje-ebeanorm
- 7.21.1
+ 7.21.2-SNAPSHOT
jar
avaje-ebeanorm
@@ -37,7 +37,7 @@
scm:git:https://github.com/ebean-orm/avaje-ebeanorm.git
- avaje-ebeanorm-7.21.1
+ HEAD
From 4d1340c16cb6542f581a5bdc400bd76e10281529 Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 22:46:07 +1200
Subject: [PATCH 11/65] No effective change - rename SpiQuery method for
m2mIncludeJoin and simplify OrmQueryPlanKey to associated intersection table
name
---
.../com/avaje/ebeaninternal/api/SpiQuery.java | 10 ++++++++--
.../server/deploy/BeanPropertyAssocMany.java | 2 +-
.../server/query/SqlTreeBuilder.java | 2 +-
.../server/querydefn/DefaultOrmQuery.java | 15 +++++++--------
.../server/querydefn/OrmQueryPlanKey.java | 8 ++++----
5 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/src/main/java/com/avaje/ebeaninternal/api/SpiQuery.java b/src/main/java/com/avaje/ebeaninternal/api/SpiQuery.java
index 8b4ebffa0..6ca8ca878 100644
--- a/src/main/java/com/avaje/ebeaninternal/api/SpiQuery.java
+++ b/src/main/java/com/avaje/ebeaninternal/api/SpiQuery.java
@@ -593,9 +593,15 @@ public interface SpiQuery extends Query {
*/
OrmQueryDetail getDetail();
- TableJoin getIncludeTableJoin();
+ /**
+ * Return the extra join for a M2M lazy load.
+ */
+ TableJoin getM2mIncludeJoin();
- void setIncludeTableJoin(TableJoin includeTableJoin);
+ /**
+ * Set the extra join for a M2M lazy load.
+ */
+ void setM2MIncludeJoin(TableJoin includeTableJoin);
/**
* Return the property used to specify keys for a map.
diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocMany.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
index 4581ea350..a64586646 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
@@ -357,7 +357,7 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc {
String tableAlias = manyToMany ? "int_." : "t0.";
if (manyToMany) {
- query.setIncludeTableJoin(inverseJoin);
+ query.setM2MIncludeJoin(inverseJoin);
}
String rawWhere = deriveWhereParentIdSql(true, tableAlias);
String expr = descriptor.getParentIdInExpr(parentIds.size(), rawWhere);
diff --git a/src/main/java/com/avaje/ebeaninternal/server/query/SqlTreeBuilder.java b/src/main/java/com/avaje/ebeaninternal/server/query/SqlTreeBuilder.java
index 2621b50b2..aef2012fb 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/query/SqlTreeBuilder.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/query/SqlTreeBuilder.java
@@ -106,7 +106,7 @@ public class SqlTreeBuilder {
this.query = request.getQuery();
this.disableLazyLoad = query.isDisableLazyLoading();
this.subQuery = Type.SUBQUERY.equals(query.getType()) || Type.ID_LIST.equals(query.getType());
- this.includeJoin = query.getIncludeTableJoin();
+ this.includeJoin = query.getM2mIncludeJoin();
this.manyWhereJoins = query.getManyWhereJoins();
this.queryDetail = query.getDetail();
diff --git a/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java
index 073e9215d..dedc9f597 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java
@@ -55,7 +55,7 @@ public class DefaultOrmQuery implements SpiQuery {
* For lazy loading of ManyToMany we need to add a join to the intersection table. This is that
* join to the intersection table.
*/
- private TableJoin includeTableJoin;
+ private TableJoin m2mIncludeJoin;
private ProfilingListener profilingListener;
@@ -571,7 +571,7 @@ public class DefaultOrmQuery implements SpiQuery {
public DefaultOrmQuery copy(EbeanServer server) {
DefaultOrmQuery copy = new DefaultOrmQuery(beanDescriptor, server, expressionFactory);
- copy.includeTableJoin = includeTableJoin;
+ copy.m2mIncludeJoin = m2mIncludeJoin;
copy.profilingListener = profilingListener;
// copy.query = query;
@@ -846,7 +846,7 @@ public class DefaultOrmQuery implements SpiQuery {
*/
CQueryPlanKey createQueryPlanKey() {
- queryPlanKey = new OrmQueryPlanKey(includeTableJoin, type, detail, maxRows, firstRow,
+ queryPlanKey = new OrmQueryPlanKey(m2mIncludeJoin, type, detail, maxRows, firstRow,
disableLazyLoading, orderBy,
distinct, sqlDistinct, mapKey, id, bindParams, whereExpressions, havingExpressions,
temporalMode, forUpdate, rootTableAlias, rawSql, updateProperties);
@@ -1264,14 +1264,13 @@ public class DefaultOrmQuery implements SpiQuery {
return "Query [" + whereExpressions + "]";
}
- @Override
- public TableJoin getIncludeTableJoin() {
- return includeTableJoin;
+ public TableJoin getM2mIncludeJoin() {
+ return m2mIncludeJoin;
}
@Override
- public void setIncludeTableJoin(TableJoin includeTableJoin) {
- this.includeTableJoin = includeTableJoin;
+ public void setM2MIncludeJoin(TableJoin m2mIncludeJoin) {
+ this.m2mIncludeJoin = m2mIncludeJoin;
}
@Override
diff --git a/src/main/java/com/avaje/ebeaninternal/server/querydefn/OrmQueryPlanKey.java b/src/main/java/com/avaje/ebeaninternal/server/querydefn/OrmQueryPlanKey.java
index 6023754b1..11b1c6616 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/querydefn/OrmQueryPlanKey.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/querydefn/OrmQueryPlanKey.java
@@ -14,7 +14,7 @@ import com.avaje.ebeaninternal.server.deploy.TableJoin;
*/
public class OrmQueryPlanKey implements CQueryPlanKey {
- private final TableJoin includeTableJoin;
+ private final String m2mIncludeTable;
private final String orderByAsSting;
private final OrmQueryDetail detail;
private final SpiExpression where;
@@ -38,7 +38,7 @@ public class OrmQueryPlanKey implements CQueryPlanKey {
public OrmQueryPlanKey(TableJoin includeTableJoin, SpiQuery.Type type, OrmQueryDetail detail, int maxRows, int firstRow, boolean disableLazyLoading, OrderBy> orderBy, boolean distinct, boolean sqlDistinct, String mapKey, Object id, BindParams bindParams, SpiExpression whereExpressions, SpiExpression havingExpressions, SpiQuery.TemporalMode temporalMode, boolean forUpdate, String rootTableAlias, RawSql rawSql, OrmUpdateProperties updateProperties) {
- this.includeTableJoin = includeTableJoin;
+ this.m2mIncludeTable = includeTableJoin == null ? null : includeTableJoin.getTable();
this.type = type;
this.detail = detail;
this.maxRows = maxRows;
@@ -69,7 +69,7 @@ public class OrmQueryPlanKey implements CQueryPlanKey {
builder.add(hasIdValue);
builder.add(temporalMode);
builder.add(rawSqlKey == null ? 0 : rawSqlKey.hashCode());
- builder.add(includeTableJoin != null ? includeTableJoin.queryHash() : 0);
+ builder.add(m2mIncludeTable);
builder.add(rootTableAlias);
if (detail != null) {
@@ -120,7 +120,7 @@ public class OrmQueryPlanKey implements CQueryPlanKey {
if (hasIdValue != that.hasIdValue) return false;
if (type != that.type) return false;
if (temporalMode != that.temporalMode) return false;
- if (includeTableJoin != null ? !includeTableJoin.equals(that.includeTableJoin) : that.includeTableJoin != null) return false;
+ if (m2mIncludeTable != null ? !m2mIncludeTable.equals(that.m2mIncludeTable) : that.m2mIncludeTable != null) return false;
if (orderByAsSting != null ? !orderByAsSting.equals(that.orderByAsSting) : that.orderByAsSting != null) return false;
if (where != null ? !where.isSameByPlan(that.where) : that.where != null) return false;
if (having != null ? !having.isSameByPlan(that.having) : that.having != null) return false;
From 4a9f8cef0e7c5316f9b2a9aa73f12d40ddbcf45e Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 22:49:10 +1200
Subject: [PATCH 12/65] No effective change - rename SpiQuery method for
m2mIncludeJoin and simplify OrmQueryPlanKey to associated intersection table
name
---
.../server/querydefn/OrmQueryPlanKeyTest.java | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/test/java/com/avaje/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java b/src/test/java/com/avaje/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java
index f9f4fdb3e..7af9dfd88 100644
--- a/src/test/java/com/avaje/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java
+++ b/src/test/java/com/avaje/ebeaninternal/server/querydefn/OrmQueryPlanKeyTest.java
@@ -30,7 +30,7 @@ public class OrmQueryPlanKeyTest extends BaseExpressionTest {
@Test
public void equals_when_diffTableJoinNull() {
- TableJoin tableJoin = tableJoin("id", "customer_id");
+ TableJoin tableJoin = tableJoin("table", "id", "customer_id");
OrmQueryPlanKey key1 = new OrmQueryPlanKey(tableJoin, SpiQuery.Type.BEAN, null, 0, 0, false, null, false, false, null, null, null, null, null, SpiQuery.TemporalMode.CURRENT, false, null, null, null);
OrmQueryPlanKey key2 = new OrmQueryPlanKey(null, SpiQuery.Type.BEAN, null, 0, 0, false, null, false, false, null, null, null, null, null, SpiQuery.TemporalMode.CURRENT, false, null, null, null);
@@ -41,8 +41,8 @@ public class OrmQueryPlanKeyTest extends BaseExpressionTest {
@Test
public void equals_when_diffTableJoin() {
- TableJoin tableJoin1 = tableJoin("id", "customer_id");
- TableJoin tableJoin2 = tableJoin("id", "other_customer_id");
+ TableJoin tableJoin1 = tableJoin("one", "id", "customer_id");
+ TableJoin tableJoin2 = tableJoin("two", "id", "customer_id");
OrmQueryPlanKey key1 = new OrmQueryPlanKey(tableJoin1, SpiQuery.Type.BEAN, null, 0, 0, false, null, false, false, null, null, null, null, null, SpiQuery.TemporalMode.CURRENT, false, null, null, null);
OrmQueryPlanKey key2 = new OrmQueryPlanKey(tableJoin2, SpiQuery.Type.BEAN, null, 0, 0, false, null, false, false, null, null, null, null, null, SpiQuery.TemporalMode.CURRENT, false, null, null, null);
@@ -53,8 +53,8 @@ public class OrmQueryPlanKeyTest extends BaseExpressionTest {
@Test
public void equals_when_sameTableJoin() {
- TableJoin tableJoin1 = tableJoin("id", "customer_id");
- TableJoin tableJoin2 = tableJoin("id", "customer_id");
+ TableJoin tableJoin1 = tableJoin("one", "id", "customer_id");
+ TableJoin tableJoin2 = tableJoin("one", "id", "customer_id");
OrmQueryPlanKey key1 = new OrmQueryPlanKey(tableJoin1, SpiQuery.Type.BEAN, null, 0, 0, false, null, false, false, null, null, null, null, null, SpiQuery.TemporalMode.CURRENT, false, null, null, null);
OrmQueryPlanKey key2 = new OrmQueryPlanKey(tableJoin2, SpiQuery.Type.BEAN, null, 0, 0, false, null, false, false, null, null, null, null, null, SpiQuery.TemporalMode.CURRENT, false, null, null, null);
@@ -63,9 +63,9 @@ public class OrmQueryPlanKeyTest extends BaseExpressionTest {
}
@NotNull
- private TableJoin tableJoin(String col1, String col2) {
+ private TableJoin tableJoin(String table, String col1, String col2) {
DeployTableJoin deploy = new DeployTableJoin();
- deploy.setTable("myTable");
+ deploy.setTable(table);
deploy.addJoinColumn(new DeployTableJoinColumn(col1, col2));
return new TableJoin(deploy);
}
From 77deab5cf06ffc2630183cfadfa745b42673f4a1 Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 22:52:48 +1200
Subject: [PATCH 13/65] #792 - Change Logging Rollback message on
org.avaje.ebean.TXN from INFO level to DEBUG level
---
.../ebeaninternal/server/transaction/TransactionManager.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java b/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java
index 954dc4b75..47abc01b5 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/transaction/TransactionManager.java
@@ -344,12 +344,12 @@ public class TransactionManager {
public void notifyOfRollback(SpiTransaction transaction, Throwable cause) {
try {
- if (TXN_LOGGER.isInfoEnabled()) {
+ if (TXN_LOGGER.isDebugEnabled()) {
String msg = transaction.getLogPrefix() + "Rollback";
if (cause != null) {
msg += " error: " + formatThrowable(cause);
}
- TXN_LOGGER.info(msg);
+ TXN_LOGGER.debug(msg);
}
for (TransactionEventListener listener : transactionEventListeners) {
From 76b33511e1e3f1b96ff84dd5e2223e035454f12d Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 23:14:08 +1200
Subject: [PATCH 14/65] #793 - com.avaje.ebean.event.changelog.BeanChange not
keeping passed id value
---
src/main/java/com/avaje/ebean/event/changelog/BeanChange.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/com/avaje/ebean/event/changelog/BeanChange.java b/src/main/java/com/avaje/ebean/event/changelog/BeanChange.java
index 225e04010..4deb57d00 100644
--- a/src/main/java/com/avaje/ebean/event/changelog/BeanChange.java
+++ b/src/main/java/com/avaje/ebean/event/changelog/BeanChange.java
@@ -80,7 +80,7 @@ public class BeanChange {
* Set the bean id (for JSON tools).
*/
public void setId(Object id) {
- this.id = this.id;
+ this.id = id;
}
/**
From e621900de98ed147d95512e27b842b000083cb30 Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 23:23:43 +1200
Subject: [PATCH 15/65] #794 - Refactor - tidy code, remove unused method
arguments
---
.../java/com/avaje/ebean/dbmigration/model/MTable.java | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/avaje/ebean/dbmigration/model/MTable.java b/src/main/java/com/avaje/ebean/dbmigration/model/MTable.java
index 8e8610751..e7e8c66f6 100644
--- a/src/main/java/com/avaje/ebean/dbmigration/model/MTable.java
+++ b/src/main/java/com/avaje/ebean/dbmigration/model/MTable.java
@@ -270,17 +270,15 @@ public class MTable {
}
// compare existing columns (look for dropped columns)
- int columnPosition = 0;
for (MColumn existingColumn : allColumns()) {
MColumn newColumn = newColumnMap.get(existingColumn.getName());
if (newColumn == null) {
- diffDropColumn(modelDiff, existingColumn, columnPosition, newTable);
+ diffDropColumn(modelDiff, existingColumn);
} else if (newColumn.isDraftOnly() && !draft) {
// effectively a drop column (draft only column on a non-draft table)
logger.trace("... drop column {} from table {} as now draftOnly", newColumn.getName(), name);
- diffDropColumn(modelDiff, existingColumn, columnPosition, newTable);
+ diffDropColumn(modelDiff, existingColumn);
}
- columnPosition++;
}
if (addColumn != null) {
@@ -540,7 +538,7 @@ public class MTable {
/**
* Add a 'drop column' to the diff.
*/
- private void diffDropColumn(ModelDiff modelDiff, MColumn existingColumn, int columnPosition, MTable newTable) {
+ private void diffDropColumn(ModelDiff modelDiff, MColumn existingColumn) {
DropColumn dropColumn = new DropColumn();
dropColumn.setTableName(name);
From abbdda810ae2d3e9d56b87df6270500135a0f4fc Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 23:23:57 +1200
Subject: [PATCH 16/65] #794 - Refactor - tidy code, remove unused method
arguments
---
.../avaje/ebeaninternal/server/type/DefaultTypeManager.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java b/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java
index 9ced06aaf..9b4ad0f40 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java
@@ -209,7 +209,7 @@ public final class DefaultTypeManager implements TypeManager, KnownImmutable {
initialiseJacksonTypes(config);
if (bootupClasses != null) {
- initialiseCustomScalarTypes(jsonDateTime, bootupClasses, config);
+ initialiseCustomScalarTypes(jsonDateTime, bootupClasses);
initialiseScalarConverters(bootupClasses);
initialiseCompoundTypes(bootupClasses);
}
@@ -682,7 +682,7 @@ public final class DefaultTypeManager implements TypeManager, KnownImmutable {
* interface and register it with this TypeManager.
*
*/
- protected void initialiseCustomScalarTypes(JsonConfig.DateTime mode, BootupClasses bootupClasses, ServerConfig serverConfig) {
+ protected void initialiseCustomScalarTypes(JsonConfig.DateTime mode, BootupClasses bootupClasses) {
ScalarTypeLongToTimestamp longToTimestamp = new ScalarTypeLongToTimestamp(mode);
From 87c479cd950f694deac40a62220c5af431d7589f Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 23:24:30 +1200
Subject: [PATCH 17/65] #794 - Refactor - tidy code, remove unused imports
---
src/main/java/com/avaje/ebean/SqlQuery.java | 2 --
.../config/dbplatform/DatabasePlatform.java | 1 -
.../avaje/ebean/event/BeanPersistAdapter.java | 2 --
.../ebean/event/BeanPersistController.java | 2 --
.../server/cache/CachedManyIds.java | 1 -
.../server/cache/DefaultServerCache.java | 1 -
.../server/deploy/AssocOneHelp.java | 1 -
.../server/deploy/AssocOneHelpRefInherit.java | 1 -
.../deploy/BeanPropertyAssocManyJsonHelp.java | 1 -
.../server/el/ElMatchBuilder.java | 2 --
.../server/grammer/antlr/EQLLexer.java | 15 ++++++++-----
.../server/grammer/antlr/EQLParser.java | 22 ++++++++++++++-----
.../server/persist/ExeOrmUpdate.java | 1 -
.../server/persist/ExeUpdateSql.java | 1 -
.../persist/dmlbind/BindableRequest.java | 5 ++---
.../DefaultPersistenceContext.java | 1 -
.../docstore/api/support/DocStructure.java | 3 +--
17 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/src/main/java/com/avaje/ebean/SqlQuery.java b/src/main/java/com/avaje/ebean/SqlQuery.java
index 9541f7e69..58e4b721d 100644
--- a/src/main/java/com/avaje/ebean/SqlQuery.java
+++ b/src/main/java/com/avaje/ebean/SqlQuery.java
@@ -2,8 +2,6 @@ package com.avaje.ebean;
import java.io.Serializable;
import java.util.List;
-import java.util.Map;
-import java.util.Set;
/**
* Query object for performing native SQL queries that return SqlRow's.
diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java
index edf934518..952e71b51 100644
--- a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java
+++ b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java
@@ -15,7 +15,6 @@ import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
-import java.util.Properties;
/**
* Database platform specific settings.
diff --git a/src/main/java/com/avaje/ebean/event/BeanPersistAdapter.java b/src/main/java/com/avaje/ebean/event/BeanPersistAdapter.java
index 44b814e92..7cdab42ba 100644
--- a/src/main/java/com/avaje/ebean/event/BeanPersistAdapter.java
+++ b/src/main/java/com/avaje/ebean/event/BeanPersistAdapter.java
@@ -1,7 +1,5 @@
package com.avaje.ebean.event;
-import java.util.Set;
-
import com.avaje.ebean.config.ServerConfig;
/**
diff --git a/src/main/java/com/avaje/ebean/event/BeanPersistController.java b/src/main/java/com/avaje/ebean/event/BeanPersistController.java
index d10fe07e3..84a53a79a 100644
--- a/src/main/java/com/avaje/ebean/event/BeanPersistController.java
+++ b/src/main/java/com/avaje/ebean/event/BeanPersistController.java
@@ -1,7 +1,5 @@
package com.avaje.ebean.event;
-import java.util.Set;
-
/**
* Used to enhance or override the default bean persistence mechanism.
*
diff --git a/src/main/java/com/avaje/ebeaninternal/server/cache/CachedManyIds.java b/src/main/java/com/avaje/ebeaninternal/server/cache/CachedManyIds.java
index 069057a6f..b84c91194 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/cache/CachedManyIds.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/cache/CachedManyIds.java
@@ -4,7 +4,6 @@ import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCache.java b/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCache.java
index d7db64a10..f6444b840 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCache.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCache.java
@@ -1,7 +1,6 @@
package com.avaje.ebeaninternal.server.cache;
import com.avaje.ebean.BackgroundExecutor;
-import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.cache.ServerCache;
import com.avaje.ebean.cache.ServerCacheOptions;
import com.avaje.ebean.cache.ServerCacheStatistics;
diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelp.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelp.java
index 93dd8210c..4fe99bdb9 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelp.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelp.java
@@ -1,7 +1,6 @@
package com.avaje.ebeaninternal.server.deploy;
import com.avaje.ebean.bean.EntityBean;
-import com.avaje.ebean.bean.EntityBeanIntercept;
import com.avaje.ebean.bean.PersistenceContext;
import com.avaje.ebeaninternal.server.query.SqlJoinType;
diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
index ffb37a85d..4791cb641 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java
@@ -1,7 +1,6 @@
package com.avaje.ebeaninternal.server.deploy;
import com.avaje.ebean.bean.EntityBean;
-import com.avaje.ebean.bean.EntityBeanIntercept;
import com.avaje.ebean.bean.PersistenceContext;
import com.avaje.ebeaninternal.server.query.SqlJoinType;
diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonHelp.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonHelp.java
index 0790b87c8..466eba53a 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonHelp.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocManyJsonHelp.java
@@ -3,7 +3,6 @@ package com.avaje.ebeaninternal.server.deploy;
import com.avaje.ebean.bean.BeanCollection;
import com.avaje.ebean.bean.BeanCollectionAdd;
import com.avaje.ebean.bean.EntityBean;
-import com.avaje.ebeaninternal.api.ClassUtil;
import com.avaje.ebeaninternal.server.text.json.ReadJson;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
diff --git a/src/main/java/com/avaje/ebeaninternal/server/el/ElMatchBuilder.java b/src/main/java/com/avaje/ebeaninternal/server/el/ElMatchBuilder.java
index 343f8e904..f488860e1 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/el/ElMatchBuilder.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/el/ElMatchBuilder.java
@@ -4,8 +4,6 @@ import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
-import com.avaje.ebean.bean.EntityBean;
-
/**
* Contains the various ElMatcher implementations.
diff --git a/src/main/java/com/avaje/ebeaninternal/server/grammer/antlr/EQLLexer.java b/src/main/java/com/avaje/ebeaninternal/server/grammer/antlr/EQLLexer.java
index 3e15448b1..d65b01136 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/grammer/antlr/EQLLexer.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/grammer/antlr/EQLLexer.java
@@ -1,13 +1,16 @@
// Generated from /home/rob/github/avaje-ebeanorm/src/test/resources/EQL.g4 by ANTLR 4.5.3
package com.avaje.ebeaninternal.server.grammer.antlr;
-import org.antlr.v4.runtime.Lexer;
+
import org.antlr.v4.runtime.CharStream;
-import org.antlr.v4.runtime.Token;
-import org.antlr.v4.runtime.TokenStream;
-import org.antlr.v4.runtime.*;
-import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.Lexer;
+import org.antlr.v4.runtime.RuntimeMetaData;
+import org.antlr.v4.runtime.Vocabulary;
+import org.antlr.v4.runtime.VocabularyImpl;
+import org.antlr.v4.runtime.atn.ATN;
+import org.antlr.v4.runtime.atn.ATNDeserializer;
+import org.antlr.v4.runtime.atn.LexerATNSimulator;
+import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.dfa.DFA;
-import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class EQLLexer extends Lexer {
diff --git a/src/main/java/com/avaje/ebeaninternal/server/grammer/antlr/EQLParser.java b/src/main/java/com/avaje/ebeaninternal/server/grammer/antlr/EQLParser.java
index f4ede0ebc..7644c2e38 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/grammer/antlr/EQLParser.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/grammer/antlr/EQLParser.java
@@ -1,13 +1,23 @@
// Generated from /home/rob/github/avaje-ebeanorm/src/test/resources/EQL.g4 by ANTLR 4.5.3
package com.avaje.ebeaninternal.server.grammer.antlr;
-import org.antlr.v4.runtime.atn.*;
+
+import org.antlr.v4.runtime.NoViableAltException;
+import org.antlr.v4.runtime.Parser;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.RecognitionException;
+import org.antlr.v4.runtime.RuntimeMetaData;
+import org.antlr.v4.runtime.TokenStream;
+import org.antlr.v4.runtime.Vocabulary;
+import org.antlr.v4.runtime.VocabularyImpl;
+import org.antlr.v4.runtime.atn.ATN;
+import org.antlr.v4.runtime.atn.ATNDeserializer;
+import org.antlr.v4.runtime.atn.ParserATNSimulator;
+import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.dfa.DFA;
-import org.antlr.v4.runtime.*;
-import org.antlr.v4.runtime.misc.*;
-import org.antlr.v4.runtime.tree.*;
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class EQLParser extends Parser {
diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/ExeOrmUpdate.java b/src/main/java/com/avaje/ebeaninternal/server/persist/ExeOrmUpdate.java
index efd238f73..a53564a20 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/persist/ExeOrmUpdate.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/persist/ExeOrmUpdate.java
@@ -5,7 +5,6 @@ import com.avaje.ebeaninternal.api.SpiTransaction;
import com.avaje.ebeaninternal.api.SpiUpdate;
import com.avaje.ebeaninternal.server.core.PersistRequestOrmUpdate;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
-import com.avaje.ebeaninternal.server.type.DataBind;
import com.avaje.ebeaninternal.server.util.BindParamsParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/ExeUpdateSql.java b/src/main/java/com/avaje/ebeaninternal/server/persist/ExeUpdateSql.java
index 67cb2ab4f..30e0ac473 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/persist/ExeUpdateSql.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/persist/ExeUpdateSql.java
@@ -5,7 +5,6 @@ import com.avaje.ebeaninternal.api.SpiSqlUpdate;
import com.avaje.ebeaninternal.api.SpiTransaction;
import com.avaje.ebeaninternal.server.core.PersistRequestUpdateSql;
import com.avaje.ebeaninternal.server.core.PersistRequestUpdateSql.SqlType;
-import com.avaje.ebeaninternal.server.type.DataBind;
import com.avaje.ebeaninternal.server.util.BindParamsParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/dmlbind/BindableRequest.java b/src/main/java/com/avaje/ebeaninternal/server/persist/dmlbind/BindableRequest.java
index c034e5c78..a81496742 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/persist/dmlbind/BindableRequest.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/persist/dmlbind/BindableRequest.java
@@ -1,12 +1,11 @@
package com.avaje.ebeaninternal.server.persist.dmlbind;
-import java.sql.SQLException;
-
-import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebeaninternal.api.DerivedRelationshipData;
import com.avaje.ebeaninternal.server.core.PersistRequestBean;
import com.avaje.ebeaninternal.server.deploy.BeanProperty;
+import java.sql.SQLException;
+
/**
* Request object passed to bindables.
*/
diff --git a/src/main/java/com/avaje/ebeaninternal/server/transaction/DefaultPersistenceContext.java b/src/main/java/com/avaje/ebeaninternal/server/transaction/DefaultPersistenceContext.java
index b989605df..fa7970edf 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/transaction/DefaultPersistenceContext.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/transaction/DefaultPersistenceContext.java
@@ -1,7 +1,6 @@
package com.avaje.ebeaninternal.server.transaction;
import com.avaje.ebean.bean.PersistenceContext;
-import com.avaje.ebean.bean.PersistenceContextUtil;
import com.avaje.ebeaninternal.api.Monitor;
import java.util.HashMap;
diff --git a/src/main/java/com/avaje/ebeanservice/docstore/api/support/DocStructure.java b/src/main/java/com/avaje/ebeanservice/docstore/api/support/DocStructure.java
index adb658759..eb4866bb9 100644
--- a/src/main/java/com/avaje/ebeanservice/docstore/api/support/DocStructure.java
+++ b/src/main/java/com/avaje/ebeanservice/docstore/api/support/DocStructure.java
@@ -1,9 +1,8 @@
package com.avaje.ebeanservice.docstore.api.support;
-import com.avaje.ebean.text.PathProperties;
import com.avaje.ebean.FetchPath;
+import com.avaje.ebean.text.PathProperties;
import com.avaje.ebeaninternal.server.deploy.BeanDescriptor;
-import com.avaje.ebeaninternal.server.deploy.BeanProperty;
import com.avaje.ebeaninternal.server.deploy.BeanPropertyAssoc;
import java.util.HashMap;
From 79b8395f8f3a544d21071c5ad482e2ae7460e14a Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 23:32:37 +1200
Subject: [PATCH 18/65] #794 - Refactor - tidy code, simplify if
---
.../server/type/reflect/ImmutableMetaFactory.java | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/reflect/ImmutableMetaFactory.java b/src/main/java/com/avaje/ebeaninternal/server/type/reflect/ImmutableMetaFactory.java
index c40004348..096e5341f 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/type/reflect/ImmutableMetaFactory.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/type/reflect/ImmutableMetaFactory.java
@@ -165,11 +165,7 @@ public class ImmutableMetaFactory {
if (methods[i].getParameterTypes().length == 0) {
// could be a getter
String methName = methods[i].getName();
- if (methName.equals("hashCode")) {
-
- } else if (methName.equals("toString")) {
-
- } else {
+ if (!methName.equals("hashCode") && !methName.equals("toString")) {
Class> returnType = methods[i].getReturnType();
if (paramType.equals(returnType)) {
return methods[i];
From ee0615caecbb4f521a8479f833c29d878589ee58 Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 23:33:07 +1200
Subject: [PATCH 19/65] #794 - Refactor - tidy code, use uppercase L for Long
literal
---
.../java/com/avaje/ebeaninternal/server/persist/DmlUtil.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/DmlUtil.java b/src/main/java/com/avaje/ebeaninternal/server/persist/DmlUtil.java
index 92e99a3fe..df174cfbd 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/persist/DmlUtil.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/persist/DmlUtil.java
@@ -10,6 +10,6 @@ public class DmlUtil {
* Return true if the value is null or a Numeric 0 (for primitive int's and long's) or Option empty.
*/
public static boolean isNullOrZero(Object value) {
- return value == null || value instanceof Number && ((Number) value).longValue() == 0l;
+ return value == null || value instanceof Number && ((Number) value).longValue() == 0L;
}
}
From dfdf87fa2dfd93c4a2721f9018899c44765f4a5d Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 23:33:29 +1200
Subject: [PATCH 20/65] #794 - Refactor - tidy code, javadoc tidy
---
src/main/java/com/avaje/ebean/SqlUpdate.java | 3 +--
.../server/deploy/parse/AnnotationAssocManys.java | 4 +---
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/avaje/ebean/SqlUpdate.java b/src/main/java/com/avaje/ebean/SqlUpdate.java
index 5fe6022a9..c02e89485 100644
--- a/src/main/java/com/avaje/ebean/SqlUpdate.java
+++ b/src/main/java/com/avaje/ebean/SqlUpdate.java
@@ -117,8 +117,7 @@ public interface SqlUpdate {
SqlUpdate setParameter(int position, Object value);
/**
- * Set a null parameter via its index position. Exactly the same as
- * {@link #setNull(int, int)}.
+ * Set a null parameter via its index position.
*/
SqlUpdate setNull(int position, int jdbcType);
diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
index e69abc3f1..1e6ebb809 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
@@ -170,9 +170,7 @@ public class AnnotationAssocManys extends AnnotationParser {
}
/**
- * Return the full table name
- * @param joinTable
- * @return
+ * Return the full table name
*/
private String getFullTableName(JoinTable joinTable) {
StringBuilder sb = new StringBuilder();
From 84a86cad0e6760f4148fd52e2bbd901b67680e2e Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Sun, 31 Jul 2016 23:34:55 +1200
Subject: [PATCH 21/65] #794 - Refactor - tidy code, remove unused mimetypes
properties
---
.../server/lib/util/mimetypes.properties | 186 ------------------
1 file changed, 186 deletions(-)
delete mode 100644 src/main/java/com/avaje/ebeaninternal/server/lib/util/mimetypes.properties
diff --git a/src/main/java/com/avaje/ebeaninternal/server/lib/util/mimetypes.properties b/src/main/java/com/avaje/ebeaninternal/server/lib/util/mimetypes.properties
deleted file mode 100644
index 8b77c2af1..000000000
--- a/src/main/java/com/avaje/ebeaninternal/server/lib/util/mimetypes.properties
+++ /dev/null
@@ -1,186 +0,0 @@
- #
- # Used by MimeTypeHelper to find the mime types of based on file extensions.
-
-abs=audio/x-mpeg
-ai=application/postscript
-aif=audio/x-aiff
-aifc=audio/x-aiff
-aiff=audio/x-aiff
-aim=application/x-aim
-art=image/x-jg
-asc=text/plain
-asf=video/x-ms-asf
-asx=video/x-ms-asf
-au=audio/basic
-avi=video/x-msvideo
-avx=video/x-rad-screenplay
-
-bcpio=application/x-bcpio
-bin=application/octet-stream
-bmp=image/bmp
-body=text/html
-
-cdf=application/x-netcdf
-cer=application/x-x509-ca-cert
-class=application/java
-cpio=application/x-cpio
-csh=application/x-csh
-css=text/css
-csv=text/csv
-
-dib=image/bmp
-doc=application/msword
-dtd=application/xml-dtd
-dv=video/x-dv
-dvi=application/x-dvi
-dms=application/octet-stream
-
-eps=application/postscript
-etx=text/x-setext
-exe=application/octet-stream
-
-gif=image/gif
-gtar=application/x-gtar
-gz=application/x-gzip
-
-hdf=application/x-hdf
-htc=text/x-component
-htm=text/html
-html=text/html
-hqx=application/mac-binhex40
-
-ico=image/x-icon
-ief=image/ief
-
-jad=text/vnd.sun.j2me.app-descriptor
-jar=application/java-archive
-java=text/plain
-jnlp=application/x-java-jnlp-file
-jpe=image/jpeg
-jpeg=image/jpeg
-jpg=image/jpeg
-js=text/javascript
-jsf=text/plain
-jspf=text/plain
-
-kar=audio/midi
-
-latex=application/x-latex
-lha=application/octet-stream
-lzh=application/octet-stream
-
-m3u=audio/x-mpegurl
-mac=image/x-macpaint
-man=application/x-troff-man
-mathml=application/mathml+xml
-me=application/x-troff-me
-mid=audio/midi
-midi=audio/midi
-mif=application/vnd.mif
-mov=video/quicktime
-movie=video/x-sgi-movie
-mp1=audio/x-mpeg
-mp2=audio/mpeg
-mp3=audio/mpeg
-mpa=audio/x-mpeg
-mpe=video/mpeg
-mpeg=video/mpeg
-mpega=audio/x-mpeg
-mpga=audio/mpeg
-mpg=video/mpeg
-mpv2=video/mpeg2
-ms=application/x-troff-ms
-
-nc=application/x-netcdf
-
-oda=application/oda
-ogg=application/ogg
-
-pbm=image/x-portable-bitmap
-pct=image/pict
-pdf=application/pdf
-pgm=image/x-portable-graymap
-pic=image/pict
-pict=image/pict
-pls=audio/x-scpls
-png=image/png
-pnm=image/x-portable-anymap
-pnt=image/x-macpaint
-ppm=image/x-portable-pixmap
-pps=application/vnd.ms-powerpoint
-ppt=application/vnd.ms-powerpoint
-ps=application/postscript
-psd=image/x-photoshop
-
-qt=video/quicktime
-qti=image/x-quicktime
-qtif=image/x-quicktime
-
-ra=audio/x-realaudio
-ram=audio/x-pn-realaudio
-ras=image/x-cmu-raster
-rdf=application/rdf+xml
-rgb=image/x-rgb
-rpm=audio/x-pn-realaudio-plugin
-rm=application/vnd.rn-realmedia
-roff=application/x-troff
-rtf=text/rtf
-rtx=text/richtext
-
-sh=application/x-sh
-shar=application/x-shar
-shtml=text/x-server-parsed-html
-sgml=text/sgml
-sgm=text/sgml
-smf=audio/x-midi
-sit=application/x-stuffit
-snd=audio/basic
-src=application/x-wais-source
-sv4cpio=application/x-sv4cpio
-sv4crc=application/x-sv4crc
-svg=image/svg+xml
-svgz=image/svg
-swf=application/x-shockwave-flash
-
-t=application/x-troff
-tar=application/x-tar
-tcl=application/x-tcl
-tex=application/x-tex
-texi=application/x-texinfo
-texinfo=application/x-texinfo
-tif=image/tiff
-tiff=image/tiff
-tr=application/x-troff
-tsv=text/tab-separated-values
-txt=text/plain
-
-ulw=audio/basic
-ustar=application/x-ustar
-
-vcd=application/x-cdlink
-vrml=model/vrml
-vsd=application/x-visio
-vxml=application/voicexml+xml
-
-wav=audio/x-wav
-wbmp=image/vnd.wap.wbmp
-wml=text/vnd.wap.wml
-wmlc=application/vnd.wap.wmlc
-wmls=text/vnd.wap.wmlscript
-wmlscriptc=application/vnd.wap.wmlscriptc
-wrl=model/vrml
-
-xbm=image/x-xbitmap
-xht=application/xhtml+xml
-xhtml=application/xhtml+xml
-xls=application/vnd.ms-excel
-xml=application/xml
-xpm=image/x-xpixmap
-xsl=application/xml
-xslt=application/xslt+xml
-xul=application/vnd.mozilla.xul+xml
-xwd=image/x-xwindowdump
-
-Z=application/x-compress
-z=application/x-compress
-zip=application/zip
\ No newline at end of file
From 4d16cf9caac83ee2cffc9f9aca12f63c1640ed46 Mon Sep 17 00:00:00 2001
From: Matus Zamborsky
Date: Mon, 1 Aug 2016 10:13:05 +0200
Subject: [PATCH 22/65] Add check for distinct query when adding id attribute
to order clause in paging query
---
.../com/avaje/ebeaninternal/server/query/CQueryEngine.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/com/avaje/ebeaninternal/server/query/CQueryEngine.java b/src/main/java/com/avaje/ebeaninternal/server/query/CQueryEngine.java
index 425e488f8..0818ca8ca 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/query/CQueryEngine.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/query/CQueryEngine.java
@@ -300,9 +300,10 @@ public class CQueryEngine {
SpiQuery query = request.getQuery();
- if (query.getMaxRows() > 1 || query.getFirstRow() > 0) {
+ if (!query.isDistinct() && (query.getMaxRows() > 1 || query.getFirstRow() > 0)) {
// deemed to be a be a paging query - check that the order by contains
// the id property to ensure unique row ordering for predicable paging
+ // but only in case, this is not a distinct query
request.getBeanDescriptor().appendOrderById(query);
}
From cdad31bd8a69e1b86c10b0cae8c8e37d8988fcb9 Mon Sep 17 00:00:00 2001
From: Matus Zamborsky
Date: Mon, 1 Aug 2016 12:20:50 +0200
Subject: [PATCH 23/65] Added test for distinct paging query
---
.../tests/query/other/TestQueryDistinct.java | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java b/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java
index 7a7e6040f..a442c3677 100644
--- a/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java
+++ b/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java
@@ -80,5 +80,32 @@ public class TestQueryDistinct extends BaseTestCase {
Assert.assertNull(customer.getAnniversary());
}
}
+
+ @Test
+ public void testPagingQuery() {
+
+ ResetBasicData.reset();
+
+ Query query = Ebean.find(Customer.class)
+ .setMaxRows(10)
+ .setDistinct(true)
+ .select("name");
+
+ List customers = query.findList();
+
+ String generatedSql = query.getGeneratedSql();
+ Assert.assertTrue(generatedSql.contains("select distinct t0.name c0 from o_customer t0 limit 10"));
+
+ for (Customer customer : customers) {
+
+ EntityBeanIntercept ebi = ((EntityBean)customer)._ebean_getIntercept();
+ Assert.assertTrue(ebi.isDisableLazyLoad());
+ Assert.assertNull(ebi.getPersistenceContext());
+
+ // lazy loading disabled
+ Assert.assertNull(customer.getId());
+ Assert.assertNull(customer.getAnniversary());
+ }
+ }
}
From e6e6a282454b1a23539ed0862108b3d98b3e3432 Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Mon, 1 Aug 2016 22:53:47 +1200
Subject: [PATCH 24/65] No effective change - tidy asserts on TestQueryDistinct
(AssertJ string contains etc)
---
.../tests/query/other/TestQueryDistinct.java | 52 ++++++++-----------
1 file changed, 23 insertions(+), 29 deletions(-)
diff --git a/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java b/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java
index a442c3677..751bbc73c 100644
--- a/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java
+++ b/src/test/java/com/avaje/tests/query/other/TestQueryDistinct.java
@@ -1,10 +1,5 @@
package com.avaje.tests.query.other;
-import java.util.List;
-
-import org.junit.Assert;
-import org.junit.Test;
-
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.Query;
@@ -12,6 +7,14 @@ import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebean.bean.EntityBeanIntercept;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
+import org.junit.Test;
+
+import java.util.List;
+
+import static junit.framework.TestCase.assertNull;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
public class TestQueryDistinct extends BaseTestCase {
@@ -27,17 +30,17 @@ public class TestQueryDistinct extends BaseTestCase {
List customers = query.findList();
String generatedSql = query.getGeneratedSql();
- Assert.assertTrue(generatedSql.contains("select distinct t0.name c0 from o_customer t0"));
+ assertThat(generatedSql).contains("select distinct t0.name c0 from o_customer t0");
for (Customer customer : customers) {
EntityBeanIntercept ebi = ((EntityBean)customer)._ebean_getIntercept();
- Assert.assertTrue(ebi.isDisableLazyLoad());
- Assert.assertNull(ebi.getPersistenceContext());
+ assertTrue(ebi.isDisableLazyLoad());
+ assertNull(ebi.getPersistenceContext());
// lazy loading disabled
- Assert.assertNull(customer.getId());
- Assert.assertNull(customer.getAnniversary());
+ assertNull(customer.getId());
+ assertNull(customer.getAnniversary());
}
}
@@ -53,7 +56,7 @@ public class TestQueryDistinct extends BaseTestCase {
query.findList();
String generatedSql = query.getGeneratedSql();
- Assert.assertTrue(generatedSql.contains("select distinct t0.name c0 from o_customer t0"));
+ assertThat(generatedSql).contains("select distinct t0.name c0 from o_customer t0");
}
@Test
@@ -69,20 +72,20 @@ public class TestQueryDistinct extends BaseTestCase {
List customers = query.findList();
String generatedSql = query.getGeneratedSql();
- Assert.assertTrue(generatedSql.contains("select distinct t0.status c0 from o_customer t0"));
+ assertThat(generatedSql).contains("select distinct t0.status c0 from o_customer t0");
for (Customer customer : customers) {
- Assert.assertNotNull(customer.getStatus());
+ assertNotNull(customer.getStatus());
// lazy loading disabled
- Assert.assertNull(customer.getId());
- Assert.assertNull(customer.getAnniversary());
+ assertNull(customer.getId());
+ assertNull(customer.getAnniversary());
}
}
@Test
- public void testPagingQuery() {
+ public void testPagingQuery_expect_doesNotAddOrderBy() {
ResetBasicData.reset();
@@ -91,20 +94,11 @@ public class TestQueryDistinct extends BaseTestCase {
.setDistinct(true)
.select("name");
- List customers = query.findList();
+ query.findList();
- String generatedSql = query.getGeneratedSql();
- Assert.assertTrue(generatedSql.contains("select distinct t0.name c0 from o_customer t0 limit 10"));
-
- for (Customer customer : customers) {
-
- EntityBeanIntercept ebi = ((EntityBean)customer)._ebean_getIntercept();
- Assert.assertTrue(ebi.isDisableLazyLoad());
- Assert.assertNull(ebi.getPersistenceContext());
-
- // lazy loading disabled
- Assert.assertNull(customer.getId());
- Assert.assertNull(customer.getAnniversary());
+ if (isH2() || isPostgres()) {
+ String generatedSql = query.getGeneratedSql();
+ assertThat(generatedSql).contains("select distinct t0.name c0 from o_customer t0 limit 10");
}
}
From e2ee6e8e98cd4ca9131be7039d9ccf0516a728b4 Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Tue, 2 Aug 2016 11:06:09 +1200
Subject: [PATCH 25/65] No effective change - update tests with EBasicVer new
constructor
---
.../java/com/avaje/ebean/BaseTestCase.java | 2 +-
.../ebean/EbeanServer_deleteAllByIdTest.java | 4 +-
.../ebean/EbeanServer_deleteByIdTest.java | 4 +-
.../avaje/ebean/EbeanServer_deleteTest.java | 4 +-
.../avaje/ebean/EbeanServer_saveAllTest.java | 4 +-
.../event/BeanPersistControllerTest.java | 6 +--
.../avaje/ebean/event/BeanPostLoadTest.java | 3 +-
.../com/avaje/tests/basic/TestIUDVanilla.java | 6 +--
.../tests/basic/TestLogTransLogOnError.java | 6 +--
.../batchinsert/TestBatchInsertFlush.java | 47 +++++++++++++++++++
.../tests/cache/TestQueryCacheInsert.java | 4 +-
.../TestDeleteWithoutOptimisticLocking.java | 6 +--
.../tests/iud/TestInsertQueryUpdate.java | 3 +-
.../tests/iud/TestInsertUpdateTrans.java | 3 +-
.../avaje/tests/model/basic/EBasicVer.java | 4 ++
.../TestPersistenceContextQueryScope.java | 3 +-
.../TestDeleteFromPersistenceContext.java | 4 +-
.../TestTxTypeOnTransactional.java | 3 +-
.../avaje/tests/update/TestMarkAsDirty.java | 4 +-
.../update/TestUpdateAllLoadedProperties.java | 6 +--
20 files changed, 75 insertions(+), 51 deletions(-)
create mode 100644 src/test/java/com/avaje/tests/batchinsert/TestBatchInsertFlush.java
diff --git a/src/test/java/com/avaje/ebean/BaseTestCase.java b/src/test/java/com/avaje/ebean/BaseTestCase.java
index ab5700445..e6be4834e 100644
--- a/src/test/java/com/avaje/ebean/BaseTestCase.java
+++ b/src/test/java/com/avaje/ebean/BaseTestCase.java
@@ -13,7 +13,7 @@ public class BaseTestCase {
static {
logger.debug("... preStart");
- if (!AgentLoader.loadAgentFromClasspath("avaje-ebeanorm-agent","debug=0;packages=com.avaje.tests.**,org.avaje.test.**")) {
+ if (!AgentLoader.loadAgentFromClasspath("avaje-ebeanorm-agent","debug=1;packages=com.avaje.tests,org.avaje.test")) {
logger.info("avaje-ebeanorm-agent not found in classpath - not dynamically loaded");
}
}
diff --git a/src/test/java/com/avaje/ebean/EbeanServer_deleteAllByIdTest.java b/src/test/java/com/avaje/ebean/EbeanServer_deleteAllByIdTest.java
index 9e5ce361c..0e3f48ebd 100644
--- a/src/test/java/com/avaje/ebean/EbeanServer_deleteAllByIdTest.java
+++ b/src/test/java/com/avaje/ebean/EbeanServer_deleteAllByIdTest.java
@@ -114,8 +114,6 @@ public class EbeanServer_deleteAllByIdTest {
}
private EBasicVer bean(String name) {
- EBasicVer bean = new EBasicVer();
- bean.setName(name);
- return bean;
+ return new EBasicVer(name);
}
}
\ No newline at end of file
diff --git a/src/test/java/com/avaje/ebean/EbeanServer_deleteByIdTest.java b/src/test/java/com/avaje/ebean/EbeanServer_deleteByIdTest.java
index a0b3bebf6..987c2c61a 100644
--- a/src/test/java/com/avaje/ebean/EbeanServer_deleteByIdTest.java
+++ b/src/test/java/com/avaje/ebean/EbeanServer_deleteByIdTest.java
@@ -85,8 +85,6 @@ public class EbeanServer_deleteByIdTest {
}
private EBasicVer bean(String name) {
- EBasicVer bean = new EBasicVer();
- bean.setName(name);
- return bean;
+ return new EBasicVer(name);
}
}
\ No newline at end of file
diff --git a/src/test/java/com/avaje/ebean/EbeanServer_deleteTest.java b/src/test/java/com/avaje/ebean/EbeanServer_deleteTest.java
index 82d377dc6..48d3ce3ba 100644
--- a/src/test/java/com/avaje/ebean/EbeanServer_deleteTest.java
+++ b/src/test/java/com/avaje/ebean/EbeanServer_deleteTest.java
@@ -48,8 +48,6 @@ public class EbeanServer_deleteTest {
}
private EBasicVer bean(String name) {
- EBasicVer bean = new EBasicVer();
- bean.setName(name);
- return bean;
+ return new EBasicVer(name);
}
}
\ No newline at end of file
diff --git a/src/test/java/com/avaje/ebean/EbeanServer_saveAllTest.java b/src/test/java/com/avaje/ebean/EbeanServer_saveAllTest.java
index 850a420a0..4cdedd009 100644
--- a/src/test/java/com/avaje/ebean/EbeanServer_saveAllTest.java
+++ b/src/test/java/com/avaje/ebean/EbeanServer_saveAllTest.java
@@ -123,8 +123,6 @@ public class EbeanServer_saveAllTest extends BaseTestCase {
}
private EBasicVer bean(String name) {
- EBasicVer bean = new EBasicVer();
- bean.setName(name);
- return bean;
+ return new EBasicVer(name);
}
}
\ No newline at end of file
diff --git a/src/test/java/com/avaje/ebean/event/BeanPersistControllerTest.java b/src/test/java/com/avaje/ebean/event/BeanPersistControllerTest.java
index c889510e0..5aba15b8a 100644
--- a/src/test/java/com/avaje/ebean/event/BeanPersistControllerTest.java
+++ b/src/test/java/com/avaje/ebean/event/BeanPersistControllerTest.java
@@ -24,8 +24,7 @@ public class BeanPersistControllerTest {
EbeanServer ebeanServer = getEbeanServer(continuePersistingAdapter);
- EBasicVer bean = new EBasicVer();
- bean.setName("testController");
+ EBasicVer bean = new EBasicVer("testController");
ebeanServer.save(bean);
assertThat(continuePersistingAdapter.methodsCalled).hasSize(2);
@@ -49,8 +48,7 @@ public class BeanPersistControllerTest {
EbeanServer ebeanServer = getEbeanServer(stopPersistingAdapter);
- EBasicVer bean = new EBasicVer();
- bean.setName("testController");
+ EBasicVer bean = new EBasicVer("testController");
ebeanServer.save(bean);
assertThat(stopPersistingAdapter.methodsCalled).hasSize(1);
diff --git a/src/test/java/com/avaje/ebean/event/BeanPostLoadTest.java b/src/test/java/com/avaje/ebean/event/BeanPostLoadTest.java
index 2372e3c1e..1e782cc67 100644
--- a/src/test/java/com/avaje/ebean/event/BeanPostLoadTest.java
+++ b/src/test/java/com/avaje/ebean/event/BeanPostLoadTest.java
@@ -24,8 +24,7 @@ public class BeanPostLoadTest extends BaseTestCase {
EbeanServer ebeanServer = getEbeanServer();
- EBasicVer bean = new EBasicVer();
- bean.setName("testPostLoad");
+ EBasicVer bean = new EBasicVer("testPostLoad");
bean.setDescription("someDescription");
bean.setOther("other");
diff --git a/src/test/java/com/avaje/tests/basic/TestIUDVanilla.java b/src/test/java/com/avaje/tests/basic/TestIUDVanilla.java
index 0cb0b2b7d..2b9d1e3d8 100644
--- a/src/test/java/com/avaje/tests/basic/TestIUDVanilla.java
+++ b/src/test/java/com/avaje/tests/basic/TestIUDVanilla.java
@@ -14,8 +14,7 @@ public class TestIUDVanilla extends BaseTestCase {
@Test
public void test() {
- EBasicVer e0 = new EBasicVer();
- e0.setName("vanilla");
+ EBasicVer e0 = new EBasicVer("vanilla");
Ebean.save(e0);
@@ -39,9 +38,8 @@ public class TestIUDVanilla extends BaseTestCase {
e2.setName("forcedUpdate");
Ebean.update(e2);
- EBasicVer e3 = new EBasicVer();
+ EBasicVer e3 = new EBasicVer("ModNoOCC");
e3.setId(e0.getId());
- e3.setName("ModNoOCC");
Ebean.update(e3);
diff --git a/src/test/java/com/avaje/tests/basic/TestLogTransLogOnError.java b/src/test/java/com/avaje/tests/basic/TestLogTransLogOnError.java
index 9f53c0f65..58a8368d5 100644
--- a/src/test/java/com/avaje/tests/basic/TestLogTransLogOnError.java
+++ b/src/test/java/com/avaje/tests/basic/TestLogTransLogOnError.java
@@ -25,9 +25,8 @@ public class TestLogTransLogOnError extends BaseTestCase {
Ebean.find(Customer.class).findList();
Ebean.find(Order.class).where().gt("id", 1).findList();
- EBasicVer newBean = new EBasicVer();
+ EBasicVer newBean = new EBasicVer("aName");
newBean.setDescription("something");
- newBean.setName("aName");
// Ebean.save(newBean);
@@ -55,13 +54,12 @@ public class TestLogTransLogOnError extends BaseTestCase {
try {
Ebean.find(Customer.class).findList();
- EBasicVer newBean = new EBasicVer();
+ EBasicVer newBean = new EBasicVer("aName");
newBean
.setDescription("something sdfjksdjflsjdflsjdflksjdfkjd fsjdfkjsdkfjsdkfjskdjfskjdf"
+ " sjdf sdjflksjdfkjsdlfkjsdkfjs ksjdfksjdlfjsldf something sdfjksdjflsjdflsjdflksjdfkjd"
+ "fsjdfkjsdkfjsdkfjskdjfskjdf sjdf sdjflksjdfkjsdlfkjsdkfjs ksjdfksjdlfjsldf something s"
+ "dfjksdjflsjdflsjdflksjdfkjd fsjdfkjsdkfjsdkfjskdjfskjdf sjdf sdjflksjdfkjsdlfkjsdkfjs ");
- newBean.setName("aName");
// t.log("--- next insert should error");
Ebean.save(newBean);
diff --git a/src/test/java/com/avaje/tests/batchinsert/TestBatchInsertFlush.java b/src/test/java/com/avaje/tests/batchinsert/TestBatchInsertFlush.java
new file mode 100644
index 000000000..ed5fc8892
--- /dev/null
+++ b/src/test/java/com/avaje/tests/batchinsert/TestBatchInsertFlush.java
@@ -0,0 +1,47 @@
+package com.avaje.tests.batchinsert;
+
+import com.avaje.ebean.BaseTestCase;
+import com.avaje.ebean.Ebean;
+import com.avaje.ebean.EbeanServer;
+import com.avaje.ebean.Transaction;
+import com.avaje.ebean.config.PersistBatch;
+import com.avaje.tests.model.basic.EBasicVer;
+import org.junit.Test;
+
+import java.sql.Timestamp;
+
+public class TestBatchInsertFlush extends BaseTestCase {
+
+ @Test
+ public void testFlushOnGetId() {
+
+ EbeanServer server = Ebean.getDefaultServer();
+ Transaction txn = server.beginTransaction();
+ try {
+ txn.setBatch(PersistBatch.ALL);
+
+ EBasicVer b1 = new EBasicVer("b1");
+ server.save(b1, txn);
+
+ EBasicVer b2 = new EBasicVer("b2");
+ server.save(b2, txn);
+
+ //txn.flushBatch();
+
+ b1.setDescription("modify");
+ System.out.println("here");
+ Timestamp lastUpdate = b1.getLastUpdate();
+ Integer id = b1.getId();
+
+ EBasicVer b3 = new EBasicVer("b3");
+ server.save(b3, txn);
+
+ txn.commit();
+
+ } finally {
+ txn.end();
+ }
+
+
+ }
+}
diff --git a/src/test/java/com/avaje/tests/cache/TestQueryCacheInsert.java b/src/test/java/com/avaje/tests/cache/TestQueryCacheInsert.java
index 82ad9f308..966effe01 100644
--- a/src/test/java/com/avaje/tests/cache/TestQueryCacheInsert.java
+++ b/src/test/java/com/avaje/tests/cache/TestQueryCacheInsert.java
@@ -17,12 +17,12 @@ public class TestQueryCacheInsert extends BaseTestCase {
EbeanServer server = Ebean.getServer(null);
- EBasicVer account = new EBasicVer();
+ EBasicVer account = new EBasicVer("junk");
server.save(account);
List alist0 = server.find(EBasicVer.class).setUseQueryCache(true).findList();
- EBasicVer a2 = new EBasicVer();
+ EBasicVer a2 = new EBasicVer("junk2");
server.save(a2);
awaitL2Cache();
diff --git a/src/test/java/com/avaje/tests/delete/TestDeleteWithoutOptimisticLocking.java b/src/test/java/com/avaje/tests/delete/TestDeleteWithoutOptimisticLocking.java
index 8487789db..51d0981b4 100644
--- a/src/test/java/com/avaje/tests/delete/TestDeleteWithoutOptimisticLocking.java
+++ b/src/test/java/com/avaje/tests/delete/TestDeleteWithoutOptimisticLocking.java
@@ -31,8 +31,7 @@ public class TestDeleteWithoutOptimisticLocking extends BaseTestCase {
@Test
public void testSimpleBeanDelete_existingBean_returnsTrue() {
- EBasicVer basic = new EBasicVer();
- basic.setName("DelTest");
+ EBasicVer basic = new EBasicVer("DelTest");
Ebean.save(basic);
EBasicVer basicRef = Ebean.getReference(EBasicVer.class, basic.getId());
@@ -43,8 +42,7 @@ public class TestDeleteWithoutOptimisticLocking extends BaseTestCase {
@Test
public void testSimpleBeanDelete_existingBeanWithJdbcBatch_returnsTrue() {
- EBasicVer basic = new EBasicVer();
- basic.setName("DelTestBatch");
+ EBasicVer basic = new EBasicVer("DelTestBatch");
Ebean.save(basic);
EbeanServer server = Ebean.getDefaultServer();
diff --git a/src/test/java/com/avaje/tests/iud/TestInsertQueryUpdate.java b/src/test/java/com/avaje/tests/iud/TestInsertQueryUpdate.java
index 58fa4375c..e4eaf5894 100644
--- a/src/test/java/com/avaje/tests/iud/TestInsertQueryUpdate.java
+++ b/src/test/java/com/avaje/tests/iud/TestInsertQueryUpdate.java
@@ -15,8 +15,7 @@ public class TestInsertQueryUpdate extends BaseTestCase {
@Test
public void test() {
- EBasicVer e0 = new EBasicVer();
- e0.setName("name0");
+ EBasicVer e0 = new EBasicVer("name0");
e0.setDescription("desc0");
Ebean.save(e0);
diff --git a/src/test/java/com/avaje/tests/iud/TestInsertUpdateTrans.java b/src/test/java/com/avaje/tests/iud/TestInsertUpdateTrans.java
index 8d50beba1..6c71a44ab 100644
--- a/src/test/java/com/avaje/tests/iud/TestInsertUpdateTrans.java
+++ b/src/test/java/com/avaje/tests/iud/TestInsertUpdateTrans.java
@@ -15,8 +15,7 @@ public class TestInsertUpdateTrans extends BaseTestCase {
Ebean.beginTransaction();
try {
- EBasicVer e0 = new EBasicVer();
- e0.setName("onInsert");
+ EBasicVer e0 = new EBasicVer("onInsert");
e0.setDescription("something");
Ebean.save(e0);
diff --git a/src/test/java/com/avaje/tests/model/basic/EBasicVer.java b/src/test/java/com/avaje/tests/model/basic/EBasicVer.java
index 95975f337..7c63183ef 100644
--- a/src/test/java/com/avaje/tests/model/basic/EBasicVer.java
+++ b/src/test/java/com/avaje/tests/model/basic/EBasicVer.java
@@ -25,6 +25,10 @@ public class EBasicVer {
@Version
Timestamp lastUpdate;
+ public EBasicVer(String name) {
+ this.name = name;
+ }
+
public Integer getId() {
return id;
}
diff --git a/src/test/java/com/avaje/tests/persistencecontext/TestPersistenceContextQueryScope.java b/src/test/java/com/avaje/tests/persistencecontext/TestPersistenceContextQueryScope.java
index ee036322b..1a2cd85ce 100644
--- a/src/test/java/com/avaje/tests/persistencecontext/TestPersistenceContextQueryScope.java
+++ b/src/test/java/com/avaje/tests/persistencecontext/TestPersistenceContextQueryScope.java
@@ -16,8 +16,7 @@ public class TestPersistenceContextQueryScope extends BaseTestCase {
@Test
public void test() {
- EBasicVer bean = new EBasicVer();
- bean.setName("first");
+ EBasicVer bean = new EBasicVer("first");
Ebean.save(bean);
//Ebean.getServerCacheManager().setCaching(EBasicVer.class, true);
diff --git a/src/test/java/com/avaje/tests/transaction/TestDeleteFromPersistenceContext.java b/src/test/java/com/avaje/tests/transaction/TestDeleteFromPersistenceContext.java
index 15050e22c..79d26407b 100644
--- a/src/test/java/com/avaje/tests/transaction/TestDeleteFromPersistenceContext.java
+++ b/src/test/java/com/avaje/tests/transaction/TestDeleteFromPersistenceContext.java
@@ -18,9 +18,7 @@ public class TestDeleteFromPersistenceContext extends BaseTestCase {
ResetBasicData.reset();
- EBasicVer bean = new EBasicVer();
- bean.setName("Please Delete Me");
-
+ EBasicVer bean = new EBasicVer("Please Delete Me");
Ebean.save(bean);
SpiTransaction transaction = (SpiTransaction)Ebean.beginTransaction();
diff --git a/src/test/java/com/avaje/tests/unitinternal/TestTxTypeOnTransactional.java b/src/test/java/com/avaje/tests/unitinternal/TestTxTypeOnTransactional.java
index ddecf3197..63a76739a 100644
--- a/src/test/java/com/avaje/tests/unitinternal/TestTxTypeOnTransactional.java
+++ b/src/test/java/com/avaje/tests/unitinternal/TestTxTypeOnTransactional.java
@@ -39,8 +39,7 @@ public class TestTxTypeOnTransactional extends BaseTestCase {
public void testOptimisticException() {
logger.info("-- testOptimisticException");
- EBasicVer v = new EBasicVer();
- v.setName("occ");
+ EBasicVer v = new EBasicVer("occ");
v.setDescription("blah");
Ebean.save(v);
diff --git a/src/test/java/com/avaje/tests/update/TestMarkAsDirty.java b/src/test/java/com/avaje/tests/update/TestMarkAsDirty.java
index dbca56a69..789ec6e1d 100644
--- a/src/test/java/com/avaje/tests/update/TestMarkAsDirty.java
+++ b/src/test/java/com/avaje/tests/update/TestMarkAsDirty.java
@@ -14,9 +14,7 @@ public class TestMarkAsDirty extends BaseTestCase {
@Test
public void test() throws InterruptedException {
- EBasicVer bean = new EBasicVer();
- bean.setName("markAsDirty");
-
+ EBasicVer bean = new EBasicVer("markAsDirty");
Ebean.save(bean);
Timestamp lastUpdate = bean.getLastUpdate();
diff --git a/src/test/java/com/avaje/tests/update/TestUpdateAllLoadedProperties.java b/src/test/java/com/avaje/tests/update/TestUpdateAllLoadedProperties.java
index 8e83930aa..a02782991 100644
--- a/src/test/java/com/avaje/tests/update/TestUpdateAllLoadedProperties.java
+++ b/src/test/java/com/avaje/tests/update/TestUpdateAllLoadedProperties.java
@@ -20,13 +20,11 @@ public class TestUpdateAllLoadedProperties extends BaseTestCase {
@Test
public void test() {
- EBasicVer basic1 = new EBasicVer();
- basic1.setName("basic1");
+ EBasicVer basic1 = new EBasicVer("basic1");
basic1.setDescription("aaa");
Ebean.save(basic1);
- EBasicVer basic2 = new EBasicVer();
- basic1.setName("basic2");
+ EBasicVer basic2 = new EBasicVer("basic2");
basic1.setDescription("bbb");
Ebean.save(basic2);
From 48edf64013387e9a618989c408f79473afa763e6 Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Tue, 2 Aug 2016 11:10:19 +1200
Subject: [PATCH 26/65] No effective change - typo in javadoc
---
.../com/avaje/ebeaninternal/server/persist/BatchControl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/BatchControl.java b/src/main/java/com/avaje/ebeaninternal/server/persist/BatchControl.java
index c76277461..846ed3dd2 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/persist/BatchControl.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/persist/BatchControl.java
@@ -146,7 +146,7 @@ public final class BatchControl {
/**
* Entity Bean insert, update or delete. This will either execute the request
- * immediately or queue it for batch processing later. The queue is flushed
+ * immediately or queue it for batch processing later. The queue is flushedIntercept
* according to the depth (object graph depth).
*/
public int executeOrQueue(PersistRequestBean> request, boolean batch) {
From dacdc2690278828b0d6566394082515f26b21c4b Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Tue, 2 Aug 2016 16:16:34 +1200
Subject: [PATCH 27/65] #798 - ENH: Add support for transparent full JDBC
batch. Via enhancement agent 8.1.1 intercept bean getter to automatically
flush the JDBC batch buffer.
---
pom.xml | 4 +-
.../avaje/ebean/bean/EntityBeanIntercept.java | 35 ++++++++++-
.../avaje/ebean/bean/PreGetterCallback.java | 13 ++++
.../server/core/PersistRequestBean.java | 20 +++++-
.../server/deploy/id/IdBinderSimple.java | 2 -
.../batchinsert/TestBatchInsertFlush.java | 61 +++++++++++++++++--
.../basic/xtra/TestInsertBatchThenUpdate.java | 17 +++---
7 files changed, 130 insertions(+), 22 deletions(-)
create mode 100644 src/main/java/com/avaje/ebean/bean/PreGetterCallback.java
diff --git a/pom.xml b/pom.xml
index 2bc032908..7adc9a211 100644
--- a/pom.xml
+++ b/pom.xml
@@ -174,7 +174,7 @@
org.avaje.ebeanorm
avaje-ebeanorm-agent
- 4.11.1
+ 4.12.1-SNAPSHOT
test
@@ -249,7 +249,7 @@
org.avaje.ebeanorm
avaje-ebeanorm-mavenenhancer
- 4.11.1
+ 4.12.1-SNAPSHOT
test
diff --git a/src/main/java/com/avaje/ebean/bean/EntityBeanIntercept.java b/src/main/java/com/avaje/ebean/bean/EntityBeanIntercept.java
index 24462e614..1f9af8aa9 100644
--- a/src/main/java/com/avaje/ebean/bean/EntityBeanIntercept.java
+++ b/src/main/java/com/avaje/ebean/bean/EntityBeanIntercept.java
@@ -39,6 +39,8 @@ public final class EntityBeanIntercept implements Serializable {
private transient BeanLoader beanLoader;
+ private transient PreGetterCallback preGetterCallback;
+
private String ebeanServerName;
/**
@@ -186,6 +188,21 @@ public final class EntityBeanIntercept implements Serializable {
return embeddedOwnerIndex;
}
+ /**
+ * Clear the getter callback.
+ */
+ public void clearGetterCallback() {
+ this.preGetterCallback = null;
+ }
+
+ /**
+ * Register the callback to be triggered when getter is called.
+ * This is used primarily to automatically flush the JDBC batch.
+ */
+ public void registerGetterCallback(PreGetterCallback getterCallback) {
+ this.preGetterCallback = getterCallback;
+ }
+
/**
* Set the embedded beans owning bean.
*/
@@ -832,19 +849,31 @@ public final class EntityBeanIntercept implements Serializable {
public void initialisedMany(int propertyIndex) {
loadedProps[propertyIndex] = true;
}
-
+
+ private final void preGetterCallback() {
+ if (preGetterCallback != null) {
+ preGetterCallback.preGetterTrigger();
+ }
+ }
+
+ /**
+ * Called prior to Id property getter.
+ */
+ public void preGetId() {
+ preGetterCallback();
+ }
+
/**
* Method that is called prior to a getter method on the actual entity.
*/
public void preGetter(int propertyIndex) {
+ preGetterCallback();
if (state == STATE_NEW || disableLazyLoad) {
return;
}
-
if (!isLoadedProperty(propertyIndex)) {
loadBean(propertyIndex);
}
-
if (nodeUsageCollector != null) {
nodeUsageCollector.addUsed(getProperty(propertyIndex));
}
diff --git a/src/main/java/com/avaje/ebean/bean/PreGetterCallback.java b/src/main/java/com/avaje/ebean/bean/PreGetterCallback.java
new file mode 100644
index 000000000..8faecec22
--- /dev/null
+++ b/src/main/java/com/avaje/ebean/bean/PreGetterCallback.java
@@ -0,0 +1,13 @@
+package com.avaje.ebean.bean;
+
+/**
+ * A callback that can be registered to fire on getter method calls.
+ * It's primary purpose is to automatically flush JDBC batch buffer.
+ */
+public interface PreGetterCallback {
+
+ /**
+ * Trigger the callback.
+ */
+ void preGetterTrigger();
+}
diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java
index afd86bfa6..55c997538 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java
@@ -1,6 +1,7 @@
package com.avaje.ebeaninternal.server.core;
import com.avaje.ebean.ValuePair;
+import com.avaje.ebean.bean.PreGetterCallback;
import com.avaje.ebeaninternal.api.ConcurrencyMode;
import com.avaje.ebean.annotation.DocStoreMode;
import com.avaje.ebean.bean.EntityBean;
@@ -36,7 +37,7 @@ import java.util.Set;
/**
* PersistRequest for insert update or delete of a bean.
*/
-public final class PersistRequestBean extends PersistRequest implements BeanPersistRequest, DocStoreUpdate {
+public final class PersistRequestBean extends PersistRequest implements BeanPersistRequest, DocStoreUpdate, PreGetterCallback {
private final BeanManager beanManager;
@@ -137,6 +138,11 @@ public final class PersistRequestBean extends PersistRequest implements BeanP
private long version;
+ /**
+ * Flag set when request is added to JDBC batch registered as a "getter callback" to automatically flush batch.
+ */
+ private boolean getterCallback;
+
public PersistRequestBean(SpiEbeanServer server, T bean, Object parentBean, BeanManager mgr, SpiTransaction t,
PersistExecute persistExecute, PersistRequest.Type type, boolean saveRecurse, boolean publish) {
@@ -239,8 +245,17 @@ public final class PersistRequestBean extends PersistRequest implements BeanP
*/
public void setBatched() {
batched = true;
+ if (type == Type.INSERT || type == Type.UPDATE) {
+ // used to trigger automatic jdbc batch flush
+ intercept.registerGetterCallback(this);
+ getterCallback = true;
+ }
}
+ @Override
+ public void preGetterTrigger() {
+ transaction.flushBatch();
+ }
public void setSkipBatchForTopLevel() {
skipBatchForTopLevel = true;
@@ -621,6 +636,9 @@ public final class PersistRequestBean extends PersistRequest implements BeanP
@Override
public int executeNow() {
+ if (getterCallback) {
+ intercept.clearGetterCallback();
+ }
switch (type) {
case INSERT:
persistExecute.executeInsertBean(this);
diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/id/IdBinderSimple.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/id/IdBinderSimple.java
index 0a3f05474..aa677d98b 100644
--- a/src/main/java/com/avaje/ebeaninternal/server/deploy/id/IdBinderSimple.java
+++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/id/IdBinderSimple.java
@@ -217,12 +217,10 @@ public final class IdBinderSimple implements IdBinder {
if (!idValue.getClass().equals(expectedType)) {
idValue = scalarType.toBeanType(idValue);
}
-
if (bean != null) {
// support PropertyChangeSupport
idProperty.setValueIntercept(bean, idValue);
}
-
return idValue;
}
}
diff --git a/src/test/java/com/avaje/tests/batchinsert/TestBatchInsertFlush.java b/src/test/java/com/avaje/tests/batchinsert/TestBatchInsertFlush.java
index ed5fc8892..141da0b3c 100644
--- a/src/test/java/com/avaje/tests/batchinsert/TestBatchInsertFlush.java
+++ b/src/test/java/com/avaje/tests/batchinsert/TestBatchInsertFlush.java
@@ -10,6 +10,8 @@ import org.junit.Test;
import java.sql.Timestamp;
+import static org.junit.Assert.assertNotNull;
+
public class TestBatchInsertFlush extends BaseTestCase {
@Test
@@ -26,12 +28,8 @@ public class TestBatchInsertFlush extends BaseTestCase {
EBasicVer b2 = new EBasicVer("b2");
server.save(b2, txn);
- //txn.flushBatch();
-
- b1.setDescription("modify");
- System.out.println("here");
- Timestamp lastUpdate = b1.getLastUpdate();
Integer id = b1.getId();
+ assertNotNull(id);
EBasicVer b3 = new EBasicVer("b3");
server.save(b3, txn);
@@ -41,7 +39,60 @@ public class TestBatchInsertFlush extends BaseTestCase {
} finally {
txn.end();
}
+ }
+ @Test
+ public void testFlushOnGetProperty() {
+ EbeanServer server = Ebean.getDefaultServer();
+ Transaction txn = server.beginTransaction();
+ try {
+ txn.setBatch(PersistBatch.ALL);
+
+ EBasicVer b1 = new EBasicVer("b1");
+ server.save(b1, txn);
+
+ EBasicVer b2 = new EBasicVer("b2");
+ server.save(b2, txn);
+
+ // flush here
+ Timestamp lastUpdate = b1.getLastUpdate();
+ assertNotNull(lastUpdate);
+
+ EBasicVer b3 = new EBasicVer("b3");
+ server.save(b3, txn);
+
+ txn.commit();
+
+ } finally {
+ txn.end();
+ }
+ }
+
+ @Test
+ public void testFlushOnSetProperty() {
+
+ EbeanServer server = Ebean.getDefaultServer();
+ Transaction txn = server.beginTransaction();
+ try {
+ txn.setBatch(PersistBatch.ALL);
+
+ EBasicVer b1 = new EBasicVer("b1");
+ server.save(b1, txn);
+
+ EBasicVer b2 = new EBasicVer("b2");
+ server.save(b2, txn);
+
+ // flush here
+ b1.setDescription("modify");
+
+ EBasicVer b3 = new EBasicVer("b3");
+ server.save(b3, txn);
+
+ txn.commit();
+
+ } finally {
+ txn.end();
+ }
}
}
diff --git a/src/test/java/com/avaje/tests/model/basic/xtra/TestInsertBatchThenUpdate.java b/src/test/java/com/avaje/tests/model/basic/xtra/TestInsertBatchThenUpdate.java
index 617cc1e95..a9c22e64c 100644
--- a/src/test/java/com/avaje/tests/model/basic/xtra/TestInsertBatchThenUpdate.java
+++ b/src/test/java/com/avaje/tests/model/basic/xtra/TestInsertBatchThenUpdate.java
@@ -10,6 +10,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
public class TestInsertBatchThenUpdate extends BaseTestCase {
@@ -24,6 +25,8 @@ public class TestInsertBatchThenUpdate extends BaseTestCase {
try {
txn.setBatch(PersistBatch.ALL);
+ LoggedSqlCollector.start();
+
EdParent parent = new EdParent();
parent.setName("MyComputer");
@@ -36,21 +39,17 @@ public class TestInsertBatchThenUpdate extends BaseTestCase {
Ebean.save(parent);
- // nothing flushed yet
- List loggedSql0 = LoggedSqlCollector.start();
- assertEquals(0, loggedSql0.size());
-
parent.setName("MyDesk");
Ebean.save(parent);
- // nothing flushed yet
- assertEquals(0, LoggedSqlCollector.start().size());
-
Ebean.commitTransaction();
// insert statements for EdExtendedParent
- List loggedSql2 = LoggedSqlCollector.start();
- assertEquals(2, loggedSql2.size());
+ List loggedSql = LoggedSqlCollector.stop();
+ assertEquals(3, loggedSql.size());
+ assertThat(loggedSql.get(0)).contains("insert into td_parent");
+ assertThat(loggedSql.get(1)).contains("insert into td_child ");
+ assertThat(loggedSql.get(2)).contains("update td_parent set parent_name=? where parent_id=?");
} finally {
Ebean.endTransaction();
From baa6fc355e39e17fd451aad3f00375e86ab38459 Mon Sep 17 00:00:00 2001
From: Robin Bygrave
Date: Tue, 2 Aug 2016 20:14:07 +1200
Subject: [PATCH 28/65] No effective change - javadoc update on FetchConfig
---
src/main/java/com/avaje/ebean/FetchConfig.java | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/avaje/ebean/FetchConfig.java b/src/main/java/com/avaje/ebean/FetchConfig.java
index bf2904531..fc4f3de11 100644
--- a/src/main/java/com/avaje/ebean/FetchConfig.java
+++ b/src/main/java/com/avaje/ebean/FetchConfig.java
@@ -29,8 +29,7 @@ import java.io.Serializable;
* // Find Orders join details using a single SQL query
* }