Merge remote-tracking branch 'ebean/master' into native-uuid-sqlserver

This commit is contained in:
Roland Praml committed 2018-03-02 03:18:20 +01:00
commit 20e46cad9b
12 files changed
+217 -132

No files matched your search

@@ -480,6 +480,36 @@ public interface ExpressionList<T> {
*/
Query<T> setUseQueryCache(CacheMode useCache);
/**
* Extended version for setDistinct in conjunction with "findSingleAttributeList";
*
* <pre>{@code
*
* List<CountedValue<Order.Status>> orderStatusCount =
*
* Ebean.find(Order.class)
* .select("status")
* .where()
* .gt("orderDate", LocalDate.now().minusMonths(3))
*
* // fetch as single attribute with a COUNT
* .setCountDistinct(CountDistinctOrder.COUNT_DESC_ATTR_ASC)
* .findSingleAttributeList();
*
* for (CountedValue<Order.Status> entry : orderStatusCount) {
* System.out.println(" count:" + entry.getCount()+" orderStatus:" + entry.getValue() );
* }
*
* // produces
*
* count:3 orderStatus:NEW
* count:1 orderStatus:SHIPPED
* count:1 orderStatus:COMPLETE
*
* }</pre>
*/
Query<T> setCountDistinct(CountDistinctOrder orderBy);
/**
* Calls {@link #setUseQueryCache(CacheMode)} with <code>ON</code> or <code>OFF</code>.
*
+26
View File
@@ -1279,6 +1279,32 @@ public interface Query<T> {
/**
* Extended version for setDistinct in conjunction with "findSingleAttributeList";
*
* <pre>{@code
*
* List<CountedValue<Order.Status>> orderStatusCount =
*
* Ebean.find(Order.class)
* .select("status")
* .where()
* .gt("orderDate", LocalDate.now().minusMonths(3))
*
* // fetch as single attribute with a COUNT
* .setCountDistinct(CountDistinctOrder.COUNT_DESC_ATTR_ASC)
* .findSingleAttributeList();
*
* for (CountedValue<Order.Status> entry : orderStatusCount) {
* System.out.println(" count:" + entry.getCount()+" orderStatus:" + entry.getValue() );
* }
*
* // produces
*
* count:3 orderStatus:NEW
* count:1 orderStatus:SHIPPED
* count:1 orderStatus:COMPLETE
*
* }</pre>
*
*/
Query<T> setCountDistinct(CountDistinctOrder orderBy);
+3 -5
View File
@@ -26,12 +26,10 @@ public interface RawSqlBuilder {
}
/**
* Create and return a SqlRow based on the resultSet and the dbTrueValue.
* @throws SQLException
* Create and return a SqlRow based on the resultSet with dbTrueValue and binaryOptimizedUUID options.
*/
static SqlRow sqlRow(ResultSet resultSet, final String dbTrueValue) throws SQLException {
return XServiceProvider.rawSql().sqlRow(resultSet, dbTrueValue);
static SqlRow sqlRow(ResultSet resultSet, final String dbTrueValue, boolean binaryOptimizedUUID) throws SQLException {
return XServiceProvider.rawSql().sqlRow(resultSet, dbTrueValue, binaryOptimizedUUID);
}
/**
@@ -293,7 +293,7 @@ public class ServerConfig {
/**
* When true create a read only DataSource using readOnlyDataSourceConfig defaulting values from dataSourceConfig.
* I believe this will default to true in some future release (as it has a nice performance benefit).
*
* <p>
* autoReadOnlyDataSource is an unfortunate name for this config option but I haven't come up with a better one.
*/
private boolean autoReadOnlyDataSource;
@@ -483,8 +483,7 @@ public class ServerConfig {
/**
* Should the javax.validation.constraints.NotNull enforce a notNull column in DB.
* If set to false, you have to use io.ebean.annotation.NotNull to explicityl create
* a not null column.
* If set to false, use io.ebean.annotation.NotNull or Column(nullable=true).
*/
private boolean useJavaxValidationNotNull = true;
@@ -3034,14 +3033,12 @@ public class ServerConfig {
}
/**
* Controlws when Ebean should generate a <code>NOT NULL</code> column.
* If an <code>io.ebean.annotation.NotNull</code> is present, Ebean generates
* <code>NOT NULL</code> columns
* If set to <code>true</code> (default) Ebean generates also
* <code>NOT NULL</code> columns when a <code>&x64;javax.validation.contstraints.NotNull</code>
* annotation is present (and it is in <code>Default</code> group.)
* If set to <code>false</code> the <code>&x64;javax.validation.contstraints.NotNull</code> is
* ignored
* Controls if Ebean should ignore <code>&x64;javax.validation.contstraints.NotNull</code>
* with respect to generating a <code>NOT NULL</code> column.
* <p>
* Normally when Ebean sees javax NotNull annotation it means that column is defined as NOT NULL.
* Set this to <code>false</code> and the javax NotNull annotation is effectively ignored (and
* we instead use Ebean's own NotNull annotation or JPA Column(nullable=false) annotation.
*/
public void setUseJavaxValidationNotNull(boolean useJavaxValidationNotNull) {
this.useJavaxValidationNotNull = useJavaxValidationNotNull;
@@ -3091,7 +3088,6 @@ public class ServerConfig {
return dataSource;
}
/**
/**
* Specify how UUID is stored.
*/
@@ -3164,5 +3160,5 @@ public class ServerConfig {
VERSION4,
VERSION1,
VERSION1RND
};
}
}
@@ -29,7 +29,10 @@ public interface SpiRawSqlService {
/**
* Create based on a JDBC ResultSet.
* @throws SQLException
*
* @param resultSet The ResultSet row to read as a SqlRow
* @param dbTrueValue The DB true value
* @param binaryOptimizedUUID Flag set to true if the UUID value is stored as optimised binary(16)
*/
SqlRow sqlRow(ResultSet resultSet, String dbTrueValue) throws SQLException;
SqlRow sqlRow(ResultSet resultSet, String dbTrueValue, boolean binaryOptimizedUUID) throws SQLException;
}
@@ -268,8 +268,7 @@ public class DefaultDbMigration implements DbMigration {
if (extraDdl != null) {
List<DdlScript> ddlScript = extraDdl.getDdlScript();
for (DdlScript script : ddlScript) {
if (script.isDrop() == false
&& ExtraDdlXmlReader.matchPlatform(dbPlatform.getName(), script.getPlatforms())) {
if (!script.isDrop() && ExtraDdlXmlReader.matchPlatform(dbPlatform.getName(), script.getPlatforms())) {
writeExtraDdl(migrationDir, script);
}
}
@@ -1,10 +1,9 @@
package io.ebeaninternal.extraddl.model;
import io.ebean.util.StringHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.ebean.util.StringHelper;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
@@ -28,8 +27,7 @@ public class ExtraDdlXmlReader {
}
StringBuilder sb = new StringBuilder(300);
for (DdlScript script : read.getDdlScript()) {
if (script.isDrop() == drops
&& matchPlatform(platformName, script.getPlatforms())) {
if (script.isDrop() == drops && matchPlatform(platformName, script.getPlatforms())) {
logger.debug("include script {}", script.getName());
String value = script.getValue();
sb.append(value);
@@ -1,6 +1,7 @@
package io.ebeaninternal.server.expression;
import io.ebean.CacheMode;
import io.ebean.CountDistinctOrder;
import io.ebean.Expression;
import io.ebean.ExpressionFactory;
import io.ebean.ExpressionList;
@@ -493,6 +494,10 @@ public class DefaultExpressionList<T> implements SpiExpressionList<T> {
return query.setUseQueryCache(useCache);
}
public Query<T> setCountDistinct(CountDistinctOrder orderBy) {
return query.setCountDistinct(orderBy);
}
@Override
public Query<T> setUseDocStore(boolean useDocsStore) {
return query.setUseDocStore(useDocsStore);
@@ -1,6 +1,7 @@
package io.ebeaninternal.server.expression;
import io.ebean.CacheMode;
import io.ebean.CountDistinctOrder;
import io.ebean.Expression;
import io.ebean.ExpressionList;
import io.ebean.FetchPath;
@@ -792,6 +793,11 @@ class JunctionExpression<T> implements SpiJunction<T>, SpiExpression, Expression
return exprList.setDisableReadAuditing();
}
@Override
public Query<T> setCountDistinct(CountDistinctOrder orderBy) {
return exprList.setCountDistinct(orderBy);
}
@Override
public ExpressionList<T> startsWith(String propertyName, String value) {
return exprList.startsWith(propertyName, value);
@@ -34,10 +34,11 @@ public class DRawSqlService implements SpiRawSqlService {
}
@Override
public SqlRow sqlRow(ResultSet resultSet, String dbTrueValue) throws SQLException {
public SqlRow sqlRow(ResultSet resultSet, String dbTrueValue, boolean binaryOptimizedUUID) throws SQLException {
ResultSetMetaData meta = resultSet.getMetaData();
int estCap = (int) (meta.getColumnCount() / 0.7f) + 1;
DefaultSqlRow ret = new DefaultSqlRow(estCap, 0.75f, dbTrueValue);
DefaultSqlRow ret = new DefaultSqlRow(estCap, 0.75f, dbTrueValue, binaryOptimizedUUID);
for (int i = 1; i <= meta.getColumnCount(); i++) {
String name = meta.getColumnLabel(i);