This is an automated email from the ASF dual-hosted git repository. abulatski pushed a commit to branch STABLE-4.1 in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 42f57fc34a7973a9e61de9f8cd343a40674faf5f Author: Arseni Bulatski <ancars...@gmail.com> AuthorDate: Mon Jun 10 12:39:57 2019 +0300 CAY-2584 Crypto: can't use ColumnSelect with encrypted columns --- .../org/apache/cayenne/crypto/CryptoModule.java | 39 ++++++---------------- .../cayenne/crypto/CryptoServerModuleProvider.java | 11 +++--- .../reader/CryptoRowReaderFactoryDecorator.java | 10 +++--- .../jdbc/reader/DefaultRowReaderFactory.java | 18 +++++----- 4 files changed, 29 insertions(+), 49 deletions(-) diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java index 5c75ad5..d2a5e6f 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java @@ -18,6 +18,14 @@ */ package org.apache.cayenne.crypto; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.sql.Types; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Date; + import org.apache.cayenne.access.jdbc.reader.RowReaderFactory; import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory; import org.apache.cayenne.crypto.batch.CryptoBatchTranslatorFactoryDecorator; @@ -33,38 +41,11 @@ import org.apache.cayenne.crypto.transformer.TransformerFactory; import org.apache.cayenne.crypto.transformer.bytes.BytesTransformerFactory; import org.apache.cayenne.crypto.transformer.bytes.DefaultBytesTransformerFactory; import org.apache.cayenne.crypto.transformer.bytes.LazyBytesTransformerFactory; -import org.apache.cayenne.crypto.transformer.value.Base64StringConverter; -import org.apache.cayenne.crypto.transformer.value.BigDecimalConverter; -import org.apache.cayenne.crypto.transformer.value.BigIntegerConverter; -import org.apache.cayenne.crypto.transformer.value.BooleanConverter; -import org.apache.cayenne.crypto.transformer.value.ByteConverter; -import org.apache.cayenne.crypto.transformer.value.BytesConverter; -import org.apache.cayenne.crypto.transformer.value.BytesToBytesConverter; -import org.apache.cayenne.crypto.transformer.value.DefaultValueTransformerFactory; -import org.apache.cayenne.crypto.transformer.value.DoubleConverter; -import org.apache.cayenne.crypto.transformer.value.FloatConverter; -import org.apache.cayenne.crypto.transformer.value.IntegerConverter; -import org.apache.cayenne.crypto.transformer.value.LazyValueTransformerFactory; -import org.apache.cayenne.crypto.transformer.value.LocalDateConverter; -import org.apache.cayenne.crypto.transformer.value.LocalDateTimeConverter; -import org.apache.cayenne.crypto.transformer.value.LocalTimeConverter; -import org.apache.cayenne.crypto.transformer.value.LongConverter; -import org.apache.cayenne.crypto.transformer.value.ShortConverter; -import org.apache.cayenne.crypto.transformer.value.Utf8StringConverter; -import org.apache.cayenne.crypto.transformer.value.UtilDateConverter; -import org.apache.cayenne.crypto.transformer.value.ValueTransformerFactory; +import org.apache.cayenne.crypto.transformer.value.*; import org.apache.cayenne.di.Binder; import org.apache.cayenne.di.MapBuilder; import org.apache.cayenne.di.Module; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.sql.Types; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.util.Date; - /** * Contains cryptography extensions for Cayenne. * @@ -135,7 +116,7 @@ public class CryptoModule implements Module { binder.bind(ColumnMapper.class).toInstance(new PatternColumnMapper(DEFAULT_COLUMN_MAPPER_PATTERN)); binder.decorate(BatchTranslatorFactory.class).before(CryptoBatchTranslatorFactoryDecorator.class); - binder.decorate(RowReaderFactory.class).before(CryptoRowReaderFactoryDecorator.class); + binder.bind(RowReaderFactory.class).to(CryptoRowReaderFactoryDecorator.class); // decorate Crypto's own services to allow Cayenne to operate over plaintext entities even if crypto keys are // not available. diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoServerModuleProvider.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoServerModuleProvider.java index 9fe8bc8..0e79c3a 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoServerModuleProvider.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoServerModuleProvider.java @@ -18,12 +18,13 @@ */ package org.apache.cayenne.crypto; -import org.apache.cayenne.configuration.server.CayenneServerModuleProvider; -import org.apache.cayenne.di.Module; - import java.util.Collection; import java.util.Collections; +import org.apache.cayenne.configuration.server.CayenneServerModuleProvider; +import org.apache.cayenne.configuration.server.ServerModule; +import org.apache.cayenne.di.Module; + /** * @since 4.0 */ @@ -41,7 +42,7 @@ public class CryptoServerModuleProvider implements CayenneServerModuleProvider { @Override public Collection<Class<? extends Module>> overrides() { - // we don't override anything, we only decorate ServerModule services... - return Collections.emptyList(); + Collection modules = Collections.singletonList(ServerModule.class); + return modules; } } diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/reader/CryptoRowReaderFactoryDecorator.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/reader/CryptoRowReaderFactoryDecorator.java index e60600a..2b2f764 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/reader/CryptoRowReaderFactoryDecorator.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/reader/CryptoRowReaderFactoryDecorator.java @@ -18,11 +18,13 @@ ****************************************************************/ package org.apache.cayenne.crypto.reader; +import java.sql.ResultSet; +import java.util.Map; + import org.apache.cayenne.access.jdbc.ColumnDescriptor; import org.apache.cayenne.access.jdbc.RowDescriptor; import org.apache.cayenne.access.jdbc.reader.DefaultRowReaderFactory; import org.apache.cayenne.access.jdbc.reader.RowReader; -import org.apache.cayenne.access.jdbc.reader.RowReaderFactory; import org.apache.cayenne.access.types.ExtendedType; import org.apache.cayenne.access.types.ExtendedTypeMap; import org.apache.cayenne.crypto.map.ColumnMapper; @@ -41,9 +43,6 @@ import org.apache.cayenne.query.EntityResultSegment; import org.apache.cayenne.query.QueryMetadata; import org.apache.cayenne.query.ScalarResultSegment; -import java.sql.ResultSet; -import java.util.Map; - public class CryptoRowReaderFactoryDecorator extends DefaultRowReaderFactory { private TransformerFactory transformerFactory; @@ -51,8 +50,7 @@ public class CryptoRowReaderFactoryDecorator extends DefaultRowReaderFactory { private BytesTransformerFactory bytesTransformerFactory; private ValueTransformerFactory valueTransformerFactory; - public CryptoRowReaderFactoryDecorator(@Inject RowReaderFactory delegate, - @Inject TransformerFactory transformerFactory, + public CryptoRowReaderFactoryDecorator(@Inject TransformerFactory transformerFactory, @Inject ColumnMapper columnMapper, @Inject BytesTransformerFactory bytesTransformerFactory, @Inject ValueTransformerFactory valueTransformerFactory) { diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/DefaultRowReaderFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/DefaultRowReaderFactory.java index 507cbbb..4d90adf 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/DefaultRowReaderFactory.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/reader/DefaultRowReaderFactory.java @@ -18,6 +18,13 @@ ****************************************************************/ package org.apache.cayenne.access.jdbc.reader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.jdbc.ColumnDescriptor; import org.apache.cayenne.access.jdbc.RowDescriptor; @@ -33,13 +40,6 @@ import org.apache.cayenne.query.QueryMetadata; import org.apache.cayenne.query.ScalarResultSegment; import org.apache.cayenne.reflect.ClassDescriptor; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - /** * @since 4.0 */ @@ -108,7 +108,7 @@ public class DefaultRowReaderFactory implements RowReaderFactory { } } - private RowReader<?> createFullRowReader(RowDescriptor descriptor, QueryMetadata queryMetadata, + protected RowReader<?> createFullRowReader(RowDescriptor descriptor, QueryMetadata queryMetadata, PostprocessorFactory postProcessorFactory) { if (queryMetadata.getPageSize() > 0) { @@ -120,7 +120,7 @@ public class DefaultRowReaderFactory implements RowReaderFactory { } } - private class PostprocessorFactory { + protected class PostprocessorFactory { private QueryMetadata queryMetadata; private ExtendedTypeMap extendedTypes;