diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java index 120e98a27..2372ed7c3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java @@ -23,6 +23,9 @@ import java.util.function.Predicate; */ public final class DtoQueryRequest extends AbstractSqlQueryRequest { + private static final String ENC_PREFIX = EncryptAlias.PREFIX; + private static final String ENC_PREFIX_UPPER = EncryptAlias.PREFIX.toUpperCase(); + private final SpiDtoQuery query; private final DtoQueryEngine queryEngine; @@ -133,9 +136,9 @@ public final class DtoQueryRequest extends AbstractSqlQueryRequest { } static String parseColumn(String columnLabel) { - if (columnLabel.startsWith("_e_") || columnLabel.startsWith("_E_")) { + if (columnLabel.startsWith(ENC_PREFIX) || columnLabel.startsWith(ENC_PREFIX_UPPER)) { // encrypted column alias in the form _e__ - final int pos = columnLabel.indexOf("_", 3); + final int pos = columnLabel.indexOf("_", 4); if (pos > -1) { return columnLabel.substring(pos + 1); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/EncryptAlias.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/EncryptAlias.java new file mode 100644 index 000000000..e73a2a9e9 --- /dev/null +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/EncryptAlias.java @@ -0,0 +1,8 @@ +package io.ebeaninternal.server.core; + +/** + * Used to create column alias for encrypted columns. + */ +public interface EncryptAlias { + String PREFIX = "zx__"; +} diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java index d3b1f429b..270415a22 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanProperty.java @@ -18,6 +18,7 @@ import io.ebeaninternal.api.SpiExpressionRequest; import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.api.json.SpiJsonReader; import io.ebeaninternal.api.json.SpiJsonWriter; +import io.ebeaninternal.server.core.EncryptAlias; import io.ebeaninternal.server.core.InternString; import io.ebeaninternal.server.deploy.generatedproperty.GeneratedProperty; import io.ebeaninternal.server.deploy.generatedproperty.GeneratedWhenCreated; @@ -65,6 +66,8 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty { private static final Logger logger = LoggerFactory.getLogger(BeanProperty.class); + private static final String ENC_PREFIX = " " + EncryptAlias.PREFIX; + /** * Flag to mark this is the id property. */ @@ -531,7 +534,7 @@ public class BeanProperty implements ElPropertyValue, Property, STreeProperty { * Return the SQL for the column including decryption function and column alias. */ private String getDecryptSqlWithColumnAlias(String tableAlias) { - return dbEncryptFunction.getDecryptSql(tableAlias + "." + this.getDbColumn()) + " _e_" + tableAlias + "_" + this.getDbColumn(); + return dbEncryptFunction.getDecryptSql(tableAlias + "." + this.getDbColumn()) + ENC_PREFIX + tableAlias + "_" + this.getDbColumn(); } @Override diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/core/DtoQueryRequestTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/core/DtoQueryRequestTest.java index f8bdd66bd..4b85f18f1 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/core/DtoQueryRequestTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/core/DtoQueryRequestTest.java @@ -11,10 +11,10 @@ public class DtoQueryRequestTest { public void testParse() { assertEquals("foo", DtoQueryRequest.parseColumn("foo")); - assertEquals("bar", DtoQueryRequest.parseColumn("_e_t0_bar")); - assertEquals("BAR", DtoQueryRequest.parseColumn("_E_T0_BAR")); - assertEquals("baz", DtoQueryRequest.parseColumn("_e_t42_baz")); - assertEquals("BAZ", DtoQueryRequest.parseColumn("_E_T42_BAZ")); + assertEquals("bar", DtoQueryRequest.parseColumn("zx__t0_bar")); + assertEquals("BAR", DtoQueryRequest.parseColumn("ZX__T0_BAR")); + assertEquals("baz", DtoQueryRequest.parseColumn("zx__t42_baz")); + assertEquals("BAZ", DtoQueryRequest.parseColumn("ZX__T42_BAZ")); assertEquals("e_t42_nope", DtoQueryRequest.parseColumn("e_t42_nope")); assertEquals("_f_t42_nope", DtoQueryRequest.parseColumn("_f_t42_nope"));