Merge branch 'master' into feature/StdExpressions

This commit is contained in:
Rob Bygrave
2022-11-08 21:58:34 +13:00
6 changed files with 171 additions and 101 deletions
+86
View File
@@ -190,6 +190,92 @@
<artifactId>ebean-redis</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<!-- platforms -->
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-all</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-clickhouse</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-db2</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-h2</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-hana</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-hsqldb</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mariadb</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-mysql</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-nuodb</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-oracle</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-postgres</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlanywhere</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlite</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.ebean</groupId>
<artifactId>ebean-sqlserver</artifactId>
<version>13.10.2-SNAPSHOT</version>
</dependency>
</dependencies>
@@ -115,88 +115,88 @@ public class DataBind implements DataBinder {
}
@Override
public void setString(String s) throws SQLException {
pstmt.setString(++pos, s);
public void setString(String value) throws SQLException {
pstmt.setString(++pos, value);
}
@Override
public final void setInt(int i) throws SQLException {
pstmt.setInt(++pos, i);
public final void setInt(int value) throws SQLException {
pstmt.setInt(++pos, value);
}
@Override
public final void setLong(long i) throws SQLException {
pstmt.setLong(++pos, i);
public final void setLong(long value) throws SQLException {
pstmt.setLong(++pos, value);
}
@Override
public final void setShort(short i) throws SQLException {
pstmt.setShort(++pos, i);
public final void setShort(short value) throws SQLException {
pstmt.setShort(++pos, value);
}
@Override
public final void setFloat(float i) throws SQLException {
pstmt.setFloat(++pos, i);
public final void setFloat(float value) throws SQLException {
pstmt.setFloat(++pos, value);
}
@Override
public final void setDouble(double i) throws SQLException {
pstmt.setDouble(++pos, i);
public final void setDouble(double value) throws SQLException {
pstmt.setDouble(++pos, value);
}
@Override
public final void setBigDecimal(BigDecimal v) throws SQLException {
pstmt.setBigDecimal(++pos, v);
public final void setBigDecimal(BigDecimal value) throws SQLException {
pstmt.setBigDecimal(++pos, value);
}
@Override
public final void setDate(java.sql.Date v) throws SQLException {
public final void setDate(java.sql.Date value) throws SQLException {
Calendar timeZone = dataTimeZone.getTimeComponentTimeZone();
if (timeZone != null) {
pstmt.setDate(++pos, v, timeZone);
pstmt.setDate(++pos, value, timeZone);
} else {
pstmt.setDate(++pos, v);
pstmt.setDate(++pos, value);
}
}
@Override
public final void setTimestamp(Timestamp v) throws SQLException {
public final void setTimestamp(Timestamp value) throws SQLException {
Calendar timeZone = dataTimeZone.getTimeZone();
if (timeZone != null) {
pstmt.setTimestamp(++pos, v, timeZone);
pstmt.setTimestamp(++pos, value, timeZone);
} else {
pstmt.setTimestamp(++pos, v);
pstmt.setTimestamp(++pos, value);
}
}
@Override
public final void setTime(Time v) throws SQLException {
public final void setTime(Time value) throws SQLException {
Calendar timeZone = dataTimeZone.getTimeComponentTimeZone();
if (timeZone != null) {
pstmt.setTime(++pos, v, timeZone);
pstmt.setTime(++pos, value, timeZone);
} else {
pstmt.setTime(++pos, v);
pstmt.setTime(++pos, value);
}
}
@Override
public void setBoolean(boolean v) throws SQLException {
pstmt.setBoolean(++pos, v);
public void setBoolean(boolean value) throws SQLException {
pstmt.setBoolean(++pos, value);
}
@Override
public void setBytes(byte[] v) throws SQLException {
pstmt.setBytes(++pos, v);
public void setBytes(byte[] value) throws SQLException {
pstmt.setBytes(++pos, value);
}
@Override
public void setByte(byte v) throws SQLException {
pstmt.setByte(++pos, v);
public void setByte(byte value) throws SQLException {
pstmt.setByte(++pos, value);
}
@Override
public void setChar(char v) throws SQLException {
pstmt.setString(++pos, String.valueOf(v));
public void setChar(char value) throws SQLException {
pstmt.setString(++pos, String.valueOf(value));
}
@Override
@@ -215,20 +215,17 @@ public class DataBind implements DataBinder {
@Override
public void setBlob(byte[] bytes) throws SQLException {
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
pstmt.setBinaryStream(++pos, is, bytes.length);
pstmt.setBinaryStream(++pos, new ByteArrayInputStream(bytes), bytes.length);
}
@Override
public void setClob(String content) throws SQLException {
Reader reader = new StringReader(content);
pstmt.setCharacterStream(++pos, reader, content.length());
pstmt.setCharacterStream(++pos, new StringReader(content), content.length());
}
@Override
public void setArray(String arrayType, Object[] elements) throws SQLException {
Array array = connection.createArrayOf(arrayType, elements);
pstmt.setArray(++pos, array);
pstmt.setArray(++pos, connection.createArrayOf(arrayType, elements));
}
}
@@ -33,87 +33,87 @@ public final class BindCaptureStatement extends BindCaptureStatementBase impleme
}
@Override
public void setBoolean(int parameterIndex, boolean x) {
capture.add(new BindCaptureTypes.Boolean(parameterIndex, x));
public void setBoolean(int parameterIndex, boolean value) {
capture.add(new BindCaptureTypes.Boolean(parameterIndex, value));
}
@Override
public void setByte(int parameterIndex, byte x) {
capture.add(new BindCaptureTypes.Byte(parameterIndex, x));
public void setByte(int parameterIndex, byte value) {
capture.add(new BindCaptureTypes.Byte(parameterIndex, value));
}
@Override
public void setShort(int parameterIndex, short x) {
capture.add(new BindCaptureTypes.TShort(parameterIndex, x));
public void setShort(int parameterIndex, short value) {
capture.add(new BindCaptureTypes.TShort(parameterIndex, value));
}
@Override
public void setInt(int parameterIndex, int x) {
capture.add(new BindCaptureTypes.TInt(parameterIndex, x));
public void setInt(int parameterIndex, int value) {
capture.add(new BindCaptureTypes.TInt(parameterIndex, value));
}
@Override
public void setLong(int parameterIndex, long x) {
capture.add(new BindCaptureTypes.TLong(parameterIndex, x));
public void setLong(int parameterIndex, long value) {
capture.add(new BindCaptureTypes.TLong(parameterIndex, value));
}
@Override
public void setFloat(int parameterIndex, float x) {
capture.add(new BindCaptureTypes.TFloat(parameterIndex, x));
public void setFloat(int parameterIndex, float value) {
capture.add(new BindCaptureTypes.TFloat(parameterIndex, value));
}
@Override
public void setDouble(int parameterIndex, double x) {
capture.add(new BindCaptureTypes.TDouble(parameterIndex, x));
public void setDouble(int parameterIndex, double value) {
capture.add(new BindCaptureTypes.TDouble(parameterIndex, value));
}
@Override
public void setBigDecimal(int parameterIndex, BigDecimal x) {
capture.add(new BindCaptureTypes.TBigDecimal(parameterIndex, x));
public void setBigDecimal(int parameterIndex, BigDecimal value) {
capture.add(new BindCaptureTypes.TBigDecimal(parameterIndex, value));
}
@Override
public void setString(int parameterIndex, String x) {
capture.add(new BindCaptureTypes.TString(parameterIndex, x));
public void setString(int parameterIndex, String value) {
capture.add(new BindCaptureTypes.TString(parameterIndex, value));
}
@Override
public void setBytes(int parameterIndex, byte[] x) {
capture.add(new BindCaptureTypes.Bytes(parameterIndex, x));
public void setBytes(int parameterIndex, byte[] value) {
capture.add(new BindCaptureTypes.Bytes(parameterIndex, value));
}
@Override
public void setDate(int parameterIndex, Date x) {
capture.add(new BindCaptureTypes.TDate(parameterIndex, x));
public void setDate(int parameterIndex, Date value) {
capture.add(new BindCaptureTypes.TDate(parameterIndex, value));
}
@Override
public void setTime(int parameterIndex, Time x) {
capture.add(new BindCaptureTypes.TTime(parameterIndex, x));
public void setTime(int parameterIndex, Time value) {
capture.add(new BindCaptureTypes.TTime(parameterIndex, value));
}
@Override
public void setTimestamp(int parameterIndex, Timestamp x) {
capture.add(new BindCaptureTypes.TTimestamp(parameterIndex, x, null));
public void setTimestamp(int parameterIndex, Timestamp value) {
capture.add(new BindCaptureTypes.TTimestamp(parameterIndex, value, null));
}
@Override
public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal) {
capture.add(new BindCaptureTypes.TTimestamp(parameterIndex, x, cal));
public void setTimestamp(int parameterIndex, Timestamp value, Calendar cal) {
capture.add(new BindCaptureTypes.TTimestamp(parameterIndex, value, cal));
}
@Override
public void setObject(int parameterIndex, Object x) {
capture.add(new BindCaptureTypes.TObject(parameterIndex, x));
public void setObject(int parameterIndex, Object value) {
capture.add(new BindCaptureTypes.TObject(parameterIndex, value));
}
@Override
public void setBinaryStream(int parameterIndex, InputStream x, int length) {
public void setBinaryStream(int parameterIndex, InputStream value, int length) {
capture.add(new BindCaptureTypes.BinaryStream(parameterIndex));
}
@Override
public void setCharacterStream(int parameterIndex, Reader reader, int length) {
public void setCharacterStream(int parameterIndex, Reader value, int length) {
capture.add(new BindCaptureTypes.CharacterStream(parameterIndex));
}
@@ -14,17 +14,13 @@ import java.util.*;
public final class InExpression extends AbstractExpression implements IdInCommon {
private final boolean not;
/**
* Set to true when adding "1=1" predicate (due to null or empty sourceValues).
*/
private final boolean empty;
private final boolean not;
private final Collection<?> sourceValues;
private List<Object> bindValues;
private boolean multiValueSupported;
InExpression(String propertyName, Collection<?> sourceValues, boolean not) {
@@ -117,7 +113,6 @@ public final class InExpression extends AbstractExpression implements IdInCommon
}
}
ElPropertyValue prop = getElProp(request);
List<Object> values = bindValues;
if (prop != null && prop.isAssocId()) {
values = new ArrayList<>();
@@ -132,22 +127,22 @@ public final class InExpression extends AbstractExpression implements IdInCommon
if (values.isEmpty()) {
// nothing in in-query
return;
} else if (prop.isDbEncrypted()) {
// bind the key as well as the value
String encryptKey = prop.beanProperty().encryptKey().getStringValue();
request.addBindEncryptKey(encryptKey);
} else if (prop.isLocalEncrypted()) {
List<Object> encValues = new ArrayList<>(values.size());
for (Object value : values) {
encValues.add(prop.localEncrypt(value));
}
// this is most likely binary garbage, so don't add it to the bind log
request.addBindEncryptKey(new MultiValueWrapper(encValues));
return;
}
// if we have no property, we wrap them in a multi value wrapper.
// later the binder will decide, which bind strategy to use.
if (prop != null) {
if (prop.isDbEncrypted()) {
// bind the key as well as the value
request.addBindEncryptKey(prop.beanProperty().encryptKey().getStringValue());
} else if (prop.isLocalEncrypted()) {
List<Object> encValues = new ArrayList<>(values.size());
for (Object value : values) {
encValues.add(prop.localEncrypt(value));
}
// this is most likely binary garbage, so don't add it to the bind log
request.addBindEncryptKey(new MultiValueWrapper(encValues));
return;
}
}
// wrap in a multi value wrapper, later the binder will decide the bind strategy to use
request.addBindValue(new MultiValueWrapper(values));
}
@@ -17,15 +17,7 @@ public class MultiValueBind {
}
Object[] toArray(Collection<?> values, ScalarType<?> type) {
if (type.binary()) {
byte[][] array = new byte[values.size()][];
int i = 0;
for (Object value : values) {
array[i++] = (byte[])type.toJdbcType(value);
}
return array;
}
Object[] array = new Object[values.size()];
Object[] array = type.binary() ? new byte[values.size()][] : new Object[values.size()];
int i = 0;
for (Object value : values) {
array[i++] = type.toJdbcType(value);
@@ -65,8 +65,8 @@ class BasePlatformArrayTypeFactoryTest {
}
@Override
public void setString(String s) {
setEmptyString = "[]".equals(s);
public void setString(String value) {
setEmptyString = "[]".equals(value);
}
@Override