This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 36add985c22aa06b2334ec6b17d79f02fb1010f8 Author: Nikita Timofeev <[email protected]> AuthorDate: Fri Jul 1 18:06:13 2022 +0300 CAY-2737 Cayenne 4.3: cleanup deprecated code --- .../legacy/DefaultBatchTranslatorFactory.java | 64 -------- .../batch/legacy/DeleteBatchTranslator.java | 118 -------------- .../batch/legacy/InsertBatchTranslator.java | 149 ----------------- .../batch/legacy/SoftDeleteBatchTranslator.java | 110 ------------- .../batch/legacy/SoftDeleteTranslatorFactory.java | 73 --------- .../batch/legacy/UpdateBatchTranslator.java | 148 ----------------- .../java/org/apache/cayenne/dba/JdbcAdapter.java | 11 -- .../org/apache/cayenne/dba/db2/DB2Adapter.java | 8 - .../org/apache/cayenne/dba/derby/DerbyAdapter.java | 5 - .../cayenne/dba/frontbase/FrontBaseAdapter.java | 5 - .../java/org/apache/cayenne/dba/h2/H2Adapter.java | 5 - .../apache/cayenne/dba/ingres/IngresAdapter.java | 8 - .../org/apache/cayenne/dba/mysql/MySQLAdapter.java | 10 -- .../apache/cayenne/dba/oracle/OracleAdapter.java | 9 - .../cayenne/dba/postgres/PostgresAdapter.java | 8 - .../apache/cayenne/dba/sybase/SybaseAdapter.java | 9 - .../java/org/apache/cayenne/reflect/Property.java | 31 ---- .../resource/FilesystemResourceLocator.java | 118 -------------- .../batch/legacy/DeleteBatchTranslatorIT.java | 164 ------------------- .../batch/legacy/InsertBatchTranslatorIT.java | 105 ------------ .../batch/legacy/SoftDeleteBatchTranslatorIT.java | 181 --------------------- .../batch/legacy/UpdateBatchTranslatorIT.java | 170 ------------------- .../resource/FilesystemResourceLocatorTest.java | 108 ------------ 23 files changed, 1617 deletions(-) diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DefaultBatchTranslatorFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DefaultBatchTranslatorFactory.java deleted file mode 100644 index d246fe3b6..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DefaultBatchTranslatorFactory.java +++ /dev/null @@ -1,64 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.access.translator.batch.legacy; - -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.access.translator.batch.BatchTranslator; -import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.query.BatchQuery; -import org.apache.cayenne.query.DeleteBatchQuery; -import org.apache.cayenne.query.InsertBatchQuery; -import org.apache.cayenne.query.UpdateBatchQuery; - -/** - * Default implementation of {@link BatchTranslatorFactory}. - * - * @since 4.0 - * @deprecated since 4.2 - */ -@Deprecated -public class DefaultBatchTranslatorFactory implements BatchTranslatorFactory { - - @Override - public BatchTranslator translator(BatchQuery query, DbAdapter adapter, String trimFunction) { - if (query instanceof InsertBatchQuery) { - return insertTranslator((InsertBatchQuery) query, adapter); - } else if (query instanceof UpdateBatchQuery) { - return updateTranslator((UpdateBatchQuery) query, adapter, trimFunction); - } else if (query instanceof DeleteBatchQuery) { - return deleteTranslator((DeleteBatchQuery) query, adapter, trimFunction); - } else { - throw new CayenneRuntimeException("Unsupported batch query: %s", query); - } - } - - protected BatchTranslator deleteTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) { - return new DeleteBatchTranslator(query, adapter, trimFunction); - } - - protected BatchTranslator insertTranslator(InsertBatchQuery query, DbAdapter adapter) { - return new InsertBatchTranslator(query, adapter); - } - - protected BatchTranslator updateTranslator(UpdateBatchQuery query, DbAdapter adapter, String trimFunction) { - return new UpdateBatchTranslator(query, adapter, trimFunction); - } - -} diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslator.java deleted file mode 100644 index afe719652..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslator.java +++ /dev/null @@ -1,118 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - -package org.apache.cayenne.access.translator.batch.legacy; - -import java.util.Iterator; -import java.util.List; - -import org.apache.cayenne.access.translator.DbAttributeBinding; -import org.apache.cayenne.access.types.ExtendedType; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.dba.QuotingStrategy; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.query.BatchQueryRow; -import org.apache.cayenne.query.DeleteBatchQuery; - -/** - * Translator for delete BatchQueries. Creates parameterized DELETE SQL - * statements. - * @deprecated since 4.2 - */ -@Deprecated -public class DeleteBatchTranslator extends DefaultBatchTranslator { - - public DeleteBatchTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) { - super(query, adapter, trimFunction); - } - - @Override - protected String createSql() { - - QuotingStrategy strategy = adapter.getQuotingStrategy(); - - StringBuilder buffer = new StringBuilder("DELETE FROM "); - buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity())); - - applyQualifier(buffer); - - return buffer.toString(); - } - - /** - * Appends WHERE clause to SQL string - */ - protected void applyQualifier(StringBuilder buffer) { - buffer.append(" WHERE "); - - DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query; - Iterator<DbAttribute> i = deleteBatch.getDbAttributes().iterator(); - while (i.hasNext()) { - DbAttribute attribute = i.next(); - appendDbAttribute(buffer, attribute); - buffer.append(deleteBatch.isNull(attribute) ? " IS NULL" : " = ?"); - - if (i.hasNext()) { - buffer.append(" AND "); - } - } - } - - @Override - protected DbAttributeBinding[] createBindings() { - DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query; - List<DbAttribute> attributes = deleteBatch.getDbAttributes(); - int len = attributes.size(); - - DbAttributeBinding[] bindings = new DbAttributeBinding[len]; - - for (int i = 0; i < len; i++) { - bindings[i] = new DbAttributeBinding(attributes.get(i)); - } - - return bindings; - } - - @Override - protected DbAttributeBinding[] doUpdateBindings(BatchQueryRow row) { - - int len = bindings.length; - - DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query; - - for (int i = 0, j = 1; i < len; i++) { - - DbAttributeBinding b = bindings[i]; - - // skip null attributes... they are translated as "IS NULL" - if (deleteBatch.isNull(b.getAttribute())) { - b.exclude(); - } else { - Object value = row.getValue(i); - ExtendedType extendedType = value != null - ? adapter.getExtendedTypes().getRegisteredType(value.getClass()) - : adapter.getExtendedTypes().getDefaultType(); - - b.include(j++, value, extendedType); - } - } - - return bindings; - } -} diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslator.java deleted file mode 100644 index 3bc59274b..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslator.java +++ /dev/null @@ -1,149 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - -package org.apache.cayenne.access.translator.batch.legacy; - -import java.util.List; - -import org.apache.cayenne.access.translator.DbAttributeBinding; -import org.apache.cayenne.access.types.ExtendedType; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.dba.QuotingStrategy; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.query.BatchQueryRow; -import org.apache.cayenne.query.InsertBatchQuery; - -/** - * Translator of InsertBatchQueries. - * @deprecated since 4.2 - */ -@Deprecated -public class InsertBatchTranslator extends DefaultBatchTranslator { - - public InsertBatchTranslator(InsertBatchQuery query, DbAdapter adapter) { - // no trimming is needed here, so passing hardcoded NULL for trim - // function - super(query, adapter, null); - } - - @Override - protected String createSql() { - - List<DbAttribute> dbAttributes = query.getDbAttributes(); - QuotingStrategy strategy = adapter.getQuotingStrategy(); - - StringBuilder buffer = new StringBuilder("INSERT INTO "); - buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity())); - buffer.append(" ("); - - int columnCount = 0; - for (DbAttribute attribute : dbAttributes) { - - // attribute inclusion rule - one of the rules below must be true: - // (1) attribute not generated - // (2) attribute is generated and PK and adapter does not support - // generated - // keys - - if (includeInBatch(attribute)) { - - if (columnCount > 0) { - buffer.append(", "); - } - buffer.append(strategy.quotedName(attribute)); - columnCount++; - } - } - - buffer.append(") VALUES ("); - - for (int i = 0; i < columnCount; i++) { - if (i > 0) { - buffer.append(", "); - } - - buffer.append('?'); - } - buffer.append(')'); - return buffer.toString(); - } - - @Override - protected DbAttributeBinding[] createBindings() { - List<DbAttribute> attributes = query.getDbAttributes(); - int len = attributes.size(); - - DbAttributeBinding[] bindings = new DbAttributeBinding[len]; - - for (int i = 0; i < len; i++) { - DbAttribute a = attributes.get(i); - - bindings[i] = new DbAttributeBinding(a); - - // include/exclude state depends on DbAttribute only and can be - // precompiled here - if (includeInBatch(a)) { - // setting fake position here... all we care about is that it is - // > -1 - bindings[i].include(1, null, null); - } else { - bindings[i].exclude(); - } - } - - return bindings; - } - - @Override - protected DbAttributeBinding[] doUpdateBindings(BatchQueryRow row) { - int len = bindings.length; - - for (int i = 0, j = 1; i < len; i++) { - - DbAttributeBinding b = bindings[i]; - - // exclusions are permanent - if (!b.isExcluded()) { - Object value = row.getValue(i); - ExtendedType extendedType = value != null - ? adapter.getExtendedTypes().getRegisteredType(value.getClass()) - : adapter.getExtendedTypes().getDefaultType(); - - b.include(j++, value, extendedType); - } - } - - return bindings; - } - - /** - * Returns true if an attribute should be included in the batch. - * - * @since 1.2 - */ - protected boolean includeInBatch(DbAttribute attribute) { - // attribute inclusion rule - one of the rules below must be true: - // (1) attribute not generated - // (2) attribute is generated and PK and adapter does not support - // generated - // keys - - return !attribute.isGenerated() || (attribute.isPrimaryKey() && !adapter.supportsGeneratedKeys()); - } -} diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslator.java deleted file mode 100644 index b616d9287..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslator.java +++ /dev/null @@ -1,110 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.access.translator.batch.legacy; - -import java.util.Objects; - -import org.apache.cayenne.access.translator.DbAttributeBinding; -import org.apache.cayenne.access.types.ExtendedType; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.dba.QuotingStrategy; -import org.apache.cayenne.dba.TypesMapping; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.query.BatchQueryRow; -import org.apache.cayenne.query.DeleteBatchQuery; - -/** - * Implementation of {@link DeleteBatchTranslator}, which uses 'soft' delete - * (runs UPDATE and sets 'deleted' field to true instead-of running SQL DELETE) - * - * @deprecated since 4.2 - */ -@Deprecated -public class SoftDeleteBatchTranslator extends DeleteBatchTranslator { - - private String deletedFieldName; - - public SoftDeleteBatchTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction, - String deletedFieldName) { - super(query, adapter, trimFunction); - this.deletedFieldName = Objects.requireNonNull(deletedFieldName); - } - - @Override - protected String createSql() { - - QuotingStrategy strategy = adapter.getQuotingStrategy(); - - StringBuilder buffer = new StringBuilder("UPDATE "); - buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity())); - buffer.append(" SET ").append(strategy.quotedIdentifier(query.getDbEntity(), deletedFieldName)).append(" = ?"); - - applyQualifier(buffer); - - return buffer.toString(); - } - - @Override - protected DbAttributeBinding[] createBindings() { - - DbAttributeBinding[] superBindings = super.createBindings(); - - int slen = superBindings.length; - - DbAttributeBinding[] bindings = new DbAttributeBinding[slen + 1]; - - DbAttribute deleteAttribute = Objects.requireNonNull(query.getDbEntity().getAttribute(deletedFieldName)); - String typeName = TypesMapping.getJavaBySqlType(deleteAttribute); - ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName); - - bindings[0] = new DbAttributeBinding(deleteAttribute); - bindings[0].include(1, true, extendedType); - - System.arraycopy(superBindings, 0, bindings, 1, slen); - - return bindings; - } - - @Override - protected DbAttributeBinding[] doUpdateBindings(BatchQueryRow row) { - int len = bindings.length; - - DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query; - - // skip position 0... Otherwise follow super algorithm - for (int i = 1, j = 2; i < len; i++) { - - DbAttributeBinding b = bindings[i]; - - // skip null attributes... they are translated as "IS NULL" - if (deleteBatch.isNull(b.getAttribute())) { - b.exclude(); - } else { - Object value = row.getValue(i - 1); - ExtendedType extendedType = value != null - ? adapter.getExtendedTypes().getRegisteredType(value.getClass()) - : adapter.getExtendedTypes().getDefaultType(); - - b.include(j++, value, extendedType); - } - } - - return bindings; - } -} diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteTranslatorFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteTranslatorFactory.java deleted file mode 100644 index 1fa838eed..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteTranslatorFactory.java +++ /dev/null @@ -1,73 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.access.translator.batch.legacy; - -import java.sql.Types; -import java.util.Objects; - -import org.apache.cayenne.access.translator.batch.BatchTranslator; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.query.DeleteBatchQuery; - -/** - * Implementation of {link #BatchTranslator}, which uses 'soft' delete - * (runs UPDATE and sets 'deleted' field to true instead-of running SQL DELETE) - * - * @since 4.0 - * @deprecated since 4.2 - */ -@Deprecated -public class SoftDeleteTranslatorFactory extends DefaultBatchTranslatorFactory { - /** - * Default name of 'deleted' field - */ - public static final String DEFAULT_DELETED_FIELD_NAME = "DELETED"; - - /** - * Name of 'deleted' field - */ - private String deletedFieldName; - - public SoftDeleteTranslatorFactory() { - this(DEFAULT_DELETED_FIELD_NAME); - } - - public SoftDeleteTranslatorFactory(String deletedFieldName) { - this.deletedFieldName = Objects.requireNonNull(deletedFieldName); - } - - @Override - protected BatchTranslator deleteTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) { - - DbAttribute attr = query.getDbEntity().getAttribute(deletedFieldName); - boolean needsSoftDelete = attr != null && attr.getType() == Types.BOOLEAN; - - return needsSoftDelete - ? new SoftDeleteBatchTranslator(query, adapter, trimFunction, deletedFieldName) - : super.deleteTranslator(query, adapter, trimFunction); - } - - /** - * @return name of 'deleted' field - */ - public String getDeletedFieldName() { - return deletedFieldName; - } -} diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslator.java deleted file mode 100644 index 36e851bb2..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslator.java +++ /dev/null @@ -1,148 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - -package org.apache.cayenne.access.translator.batch.legacy; - -import java.util.Iterator; -import java.util.List; - -import org.apache.cayenne.access.translator.DbAttributeBinding; -import org.apache.cayenne.access.types.ExtendedType; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.dba.QuotingStrategy; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.query.BatchQueryRow; -import org.apache.cayenne.query.UpdateBatchQuery; - -/** - * A translator for UpdateBatchQueries that produces parameterized SQL. - * @deprecated since 4.2 - */ -@Deprecated -public class UpdateBatchTranslator extends DefaultBatchTranslator { - - public UpdateBatchTranslator(UpdateBatchQuery query, DbAdapter adapter, String trimFunction) { - super(query, adapter, trimFunction); - } - - @Override - protected String createSql() { - UpdateBatchQuery updateBatch = (UpdateBatchQuery) query; - - QuotingStrategy strategy = adapter.getQuotingStrategy(); - - List<DbAttribute> qualifierAttributes = updateBatch.getQualifierAttributes(); - List<DbAttribute> updatedDbAttributes = updateBatch.getUpdatedAttributes(); - - StringBuilder buffer = new StringBuilder("UPDATE "); - buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity())); - buffer.append(" SET "); - - int len = updatedDbAttributes.size(); - for (int i = 0; i < len; i++) { - if (i > 0) { - buffer.append(", "); - } - - DbAttribute attribute = updatedDbAttributes.get(i); - buffer.append(strategy.quotedName(attribute)); - buffer.append(" = ?"); - } - - buffer.append(" WHERE "); - - Iterator<DbAttribute> i = qualifierAttributes.iterator(); - while (i.hasNext()) { - DbAttribute attribute = i.next(); - appendDbAttribute(buffer, attribute); - buffer.append(updateBatch.isNull(attribute) ? " IS NULL" : " = ?"); - - if (i.hasNext()) { - buffer.append(" AND "); - } - } - - return buffer.toString(); - } - - @Override - protected DbAttributeBinding[] createBindings() { - UpdateBatchQuery updateBatch = (UpdateBatchQuery) query; - - List<DbAttribute> updatedDbAttributes = updateBatch.getUpdatedAttributes(); - List<DbAttribute> qualifierAttributes = updateBatch.getQualifierAttributes(); - - int ul = updatedDbAttributes.size(); - int ql = qualifierAttributes.size(); - - DbAttributeBinding[] bindings = new DbAttributeBinding[ul + ql]; - - for (int i = 0; i < ul; i++) { - bindings[i] = new DbAttributeBinding(updatedDbAttributes.get(i)); - } - - for (int i = 0; i < ql; i++) { - bindings[ul + i] = new DbAttributeBinding(qualifierAttributes.get(i)); - } - - return bindings; - } - - @Override - protected DbAttributeBinding[] doUpdateBindings(BatchQueryRow row) { - - UpdateBatchQuery updateBatch = (UpdateBatchQuery) query; - - List<DbAttribute> updatedDbAttributes = updateBatch.getUpdatedAttributes(); - List<DbAttribute> qualifierAttributes = updateBatch.getQualifierAttributes(); - - int ul = updatedDbAttributes.size(); - int ql = qualifierAttributes.size(); - - int j = 1; - - for (int i = 0; i < ul; i++) { - Object value = row.getValue(i); - ExtendedType extendedType = value != null - ? adapter.getExtendedTypes().getRegisteredType(value.getClass()) - : adapter.getExtendedTypes().getDefaultType(); - - bindings[i].include(j++, value, extendedType); - } - - for (int i = 0; i < ql; i++) { - - DbAttribute a = qualifierAttributes.get(i); - - // skip null attributes... they are translated as "IS NULL" - if (updateBatch.isNull(a)) { - continue; - } - - Object value = row.getValue(ul + i); - ExtendedType extendedType = value != null - ? adapter.getExtendedTypes().getRegisteredType(value.getClass()) - : adapter.getExtendedTypes().getDefaultType(); - - bindings[ul + i].include(j++, value, extendedType); - } - - return bindings; - } -} diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java index 5dfc160d4..8c250d6a3 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java @@ -103,7 +103,6 @@ public class JdbcAdapter implements DbAdapter { this.caseInsensitiveCollations = runtimeProperties.getBoolean(Constants.CI_PROPERTY, false); this.resourceLocator = resourceLocator; - this.pkGenerator = createPkGenerator(); this.quotingStrategy = createQuotingStrategy(); this.ejbqlTranslatorFactory = createEJBQLTranslatorFactory(); @@ -191,16 +190,6 @@ public class JdbcAdapter implements DbAdapter { extendedTypes.addFactory(new ValueObjectTypeFactory(extendedTypes, valueObjectTypeRegistry)); } - /** - * Creates and returns a primary key generator. This factory method should - * be overriden by JdbcAdapter subclasses to provide custom implementations - * of PKGenerator. - */ - @Deprecated - protected PkGenerator createPkGenerator() { - return new JdbcPkGenerator(this); - } - /** * Creates and returns an {@link EJBQLTranslatorFactory} used to generate * visitors for EJBQL to SQL translations. This method should be overriden diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java index bdbd376be..1f4887127 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java @@ -73,14 +73,6 @@ public class DB2Adapter extends JdbcAdapter { setSupportsGeneratedKeys(true); } - /** - * Creates a DB2 specific PK Generator. - */ - @Override - protected PkGenerator createPkGenerator() { - return new DB2PkGenerator(this); - } - @Override protected void configureExtendedTypes(ExtendedTypeMap map) { super.configureExtendedTypes(map); diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java index e7471fe19..437b0e394 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java @@ -95,11 +95,6 @@ public class DerbyAdapter extends JdbcAdapter { public boolean supportsGeneratedKeysForBatchInserts() { return false; } - - @Override - protected PkGenerator createPkGenerator() { - return new DerbyPkGenerator(this); - } @Override public SQLAction getAction(Query query, DataNode node) { diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java index 28c667729..cdc56a0f9 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java @@ -214,11 +214,6 @@ public class FrontBaseAdapter extends JdbcAdapter { return Collections.singleton("DROP TABLE " + getQuotingStrategy().quotedFullyQualifiedName(table) + " CASCADE"); } - @Override - protected PkGenerator createPkGenerator() { - return new FrontBasePkGenerator(this); - } - /** * Uses FrontBaseActionBuilder to create the right action. * diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java index 128321bd2..6799ef5de 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java @@ -96,9 +96,4 @@ public class H2Adapter extends JdbcAdapter { // create specially configured CharType handler map.registerType(new H2CharType()); } - - @Override - protected PkGenerator createPkGenerator() { - return new H2PkGenerator(this); - } } diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java index ffa1aabb5..a04e3a4ab 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java @@ -92,14 +92,6 @@ public class IngresAdapter extends JdbcAdapter { map.registerType(new IngresBooleanType()); } - /** - * @see JdbcAdapter#createPkGenerator() - */ - @Override - protected PkGenerator createPkGenerator() { - return new IngresPkGenerator(this); - } - @Override public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws SQLException, Exception { diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java index 1573379ff..06e248a76 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java @@ -249,16 +249,6 @@ public class MySQLAdapter extends JdbcAdapter { } } - /** - * Creates and returns a primary key generator. Overrides superclass - * implementation to return an instance of MySQLPkGenerator that does the - * correct table locking. - */ - @Override - protected PkGenerator createPkGenerator() { - return new MySQLPkGenerator(this); - } - /** * @since 3.0 */ diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java index ccb93e72d..2f2b7b3ba 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java @@ -214,15 +214,6 @@ public class OracleAdapter extends JdbcAdapter { map.registerType(new OracleBooleanType()); } - /** - * Creates and returns a primary key generator. Overrides superclass - * implementation to return an instance of OraclePkGenerator. - */ - @Override - protected PkGenerator createPkGenerator() { - return new OraclePkGenerator(this); - } - /** * Returns a query string to drop a table corresponding to <code>ent</code> * DbEntity. Changes superclass behavior to drop all related foreign key diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java index 1765c3ba5..d1373a08e 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java @@ -259,14 +259,6 @@ public class PostgresAdapter extends JdbcAdapter { return Collections.singleton("DROP TABLE " + context.quotedFullyQualifiedName(table) + " CASCADE"); } - /** - * @see JdbcAdapter#createPkGenerator() - */ - @Override - protected PkGenerator createPkGenerator() { - return new PostgresPkGenerator(this); - } - @Override public boolean supportsCatalogsOnReverseEngineering() { return false; diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java index 303381f8a..f4013fd66 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java @@ -111,15 +111,6 @@ public class SybaseAdapter extends JdbcAdapter { map.registerType(new ByteType(true)); } - /** - * Creates and returns a primary key generator. Overrides superclass - * implementation to return an instance of SybasePkGenerator. - */ - @Override - protected PkGenerator createPkGenerator() { - return new SybasePkGenerator(this); - } - @Override public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws Exception { diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/Property.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/Property.java deleted file mode 100644 index 133209e17..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/Property.java +++ /dev/null @@ -1,31 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - -package org.apache.cayenne.reflect; - -/** - * Defines bean property API used by Cayenne to access object data, do faulting and graph - * maintenance tasks. - * - * @since 1.2 - * @deprecated since 4.0 renamed to PropertyDescriptor. - * - */ -public interface Property extends PropertyDescriptor { -} diff --git a/cayenne-server/src/main/java/org/apache/cayenne/resource/FilesystemResourceLocator.java b/cayenne-server/src/main/java/org/apache/cayenne/resource/FilesystemResourceLocator.java deleted file mode 100644 index 295837a6c..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/resource/FilesystemResourceLocator.java +++ /dev/null @@ -1,118 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.resource; - -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.ConfigurationException; - -import java.io.File; -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.Collection; - -/** - * A {@link ResourceLocator} that can locate resources in the filesystem. Instances of - * {@link FilesystemResourceLocator} are explicitly created by the user and then bound to - * a DI registry. E.g.: - * - * <pre> - * class MyModule implements Module { - * - * public void configure(Binder binder) { - * File dir1 = ... - * File dir2 = ... - * binder.bind(ResourceLocator.class). - * toInstance(new FilesystemResourceLocator(dir1, dir2); - * } - * </pre> - * - * @since 3.1 - * @deprecated since 4.1. This can be implemented as a custom strategy outside Cayenne. There's no need for this object - * to be in Cayenne. - */ -@Deprecated -public class FilesystemResourceLocator implements ResourceLocator { - - protected File[] roots; - - /** - * Creates a new {@link FilesystemResourceLocator}, using an array of base locations - * ("roots"). If a location is a file, its parent directory is used for resolving. If - * location is a directory, it is used as is. If no locations are specified, current - * application directory is used as a single base. - */ - public FilesystemResourceLocator(File... roots) { - init(roots); - } - - /** - * Creates a new {@link FilesystemResourceLocator}, using a collection of base - * locations. If a location is a file, its parent directory is used for resolving. If - * location is a directory, it is used as is. If no locations are specified, current - * application directory is used as a single base. - */ - public FilesystemResourceLocator(Collection<File> roots) { - if (roots == null) { - throw new NullPointerException("Null roots"); - } - - init(roots.toArray(new File[roots.size()])); - } - - private void init(File[] roots) { - - if (roots == null || roots.length == 0) { - roots = new File[] { - new File(System.getProperty("user.dir")) - }; - } - - this.roots = new File[roots.length]; - for (int i = 0; i < roots.length; i++) { - File root = roots[i].isDirectory() ? roots[i] : roots[i].getParentFile(); - if (root == null) { - throw new ConfigurationException("Invalid root: %s", roots[i]); - } - - this.roots[i] = root; - } - } - - public Collection<Resource> findResources(String name) { - Collection<Resource> resources = new ArrayList<>(3); - - for (File root : roots) { - - File resourceFile = new File(root, name); - if (resourceFile.exists()) { - try { - resources.add(new URLResource(resourceFile.toURI().toURL())); - } - catch (MalformedURLException e) { - throw new CayenneRuntimeException( - "Can't convert file to URL: %s", - e, - resourceFile.getAbsolutePath()); - } - } - } - - return resources; - } -} diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslatorIT.java deleted file mode 100644 index 2af52dbd9..000000000 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslatorIT.java +++ /dev/null @@ -1,164 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - -package org.apache.cayenne.access.translator.batch.legacy; - -import org.apache.cayenne.configuration.server.ServerRuntime; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.dba.JdbcAdapter; -import org.apache.cayenne.di.AdhocObjectFactory; -import org.apache.cayenne.di.Inject; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.query.DeleteBatchQuery; -import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity; -import org.apache.cayenne.unit.UnitDbAdapter; -import org.apache.cayenne.unit.di.server.CayenneProjects; -import org.apache.cayenne.unit.di.server.ServerCase; -import org.apache.cayenne.unit.di.server.UseServerRuntime; -import org.junit.Test; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.mockito.Mockito.mock; - -@Deprecated -@UseServerRuntime(CayenneProjects.LOCKING_PROJECT) -public class DeleteBatchTranslatorIT extends ServerCase { - - @Inject - private ServerRuntime runtime; - - @Inject - private DbAdapter adapter; - - @Inject - private UnitDbAdapter unitAdapter; - - @Inject - private AdhocObjectFactory objectFactory; - - @Test - public void testConstructor() throws Exception { - DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName()); - - DeleteBatchTranslator builder = new DeleteBatchTranslator(mock(DeleteBatchQuery.class), adapter, null); - - assertSame(adapter, builder.adapter); - } - - @Test - public void testCreateSqlString() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - - List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID")); - - DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1); - - DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName()); - DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null); - String generatedSql = builder.getSql(); - assertNotNull(generatedSql); - assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ?", generatedSql); - } - - @Test - public void testCreateSqlStringWithNulls() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - - List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"), - entity.getAttribute("NAME")); - - Collection<String> nullAttributes = Collections.singleton("NAME"); - - DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1); - - DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName()); - DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null); - String generatedSql = builder.getSql(); - assertNotNull(generatedSql); - assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ? AND NAME IS NULL", generatedSql); - } - - @Test - public void testCreateSqlStringWithIdentifiersQuote() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - try { - - entity.getDataMap().setQuotingSQLIdentifiers(true); - List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID")); - - DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1); - JdbcAdapter adapter = (JdbcAdapter) this.adapter; - DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null); - String generatedSql = builder.getSql(); - - String charStart = unitAdapter.getIdentifiersStartQuote(); - String charEnd = unitAdapter.getIdentifiersEndQuote(); - - assertNotNull(generatedSql); - assertEquals("DELETE FROM " + charStart + entity.getName() + charEnd + " WHERE " + charStart - + "LOCKING_TEST_ID" + charEnd + " = ?", generatedSql); - } finally { - entity.getDataMap().setQuotingSQLIdentifiers(false); - } - - } - - @Test - public void testCreateSqlStringWithNullsWithIdentifiersQuote() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - try { - - entity.getDataMap().setQuotingSQLIdentifiers(true); - - List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"), - entity.getAttribute("NAME")); - - Collection<String> nullAttributes = Collections.singleton("NAME"); - - DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1); - - JdbcAdapter adapter = (JdbcAdapter) this.adapter; - - DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null); - String generatedSql = builder.getSql(); - - String charStart = unitAdapter.getIdentifiersStartQuote(); - String charEnd = unitAdapter.getIdentifiersEndQuote(); - assertNotNull(generatedSql); - - assertEquals("DELETE FROM " + charStart + entity.getName() + charEnd + " WHERE " + charStart - + "LOCKING_TEST_ID" + charEnd + " = ? AND " + charStart + "NAME" + charEnd + " IS NULL", - generatedSql); - } finally { - entity.getDataMap().setQuotingSQLIdentifiers(false); - } - } -} diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslatorIT.java deleted file mode 100644 index dad5bd467..000000000 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslatorIT.java +++ /dev/null @@ -1,105 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.access.translator.batch.legacy; - -import org.apache.cayenne.configuration.server.ServerRuntime; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.dba.JdbcAdapter; -import org.apache.cayenne.di.AdhocObjectFactory; -import org.apache.cayenne.di.Inject; -import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.query.InsertBatchQuery; -import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity; -import org.apache.cayenne.unit.UnitDbAdapter; -import org.apache.cayenne.unit.di.server.CayenneProjects; -import org.apache.cayenne.unit.di.server.ServerCase; -import org.apache.cayenne.unit.di.server.UseServerRuntime; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.mockito.Mockito.mock; - -@Deprecated -@UseServerRuntime(CayenneProjects.LOCKING_PROJECT) -public class InsertBatchTranslatorIT extends ServerCase { - - @Inject - private ServerRuntime runtime; - - @Inject - private DbAdapter adapter; - - @Inject - private UnitDbAdapter unitAdapter; - - @Inject - private AdhocObjectFactory objectFactory; - - @Test - public void testConstructor() throws Exception { - DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName()); - - InsertBatchTranslator builder = new InsertBatchTranslator(mock(InsertBatchQuery.class), adapter); - - assertSame(adapter, builder.adapter); - } - - @Test - public void testCreateSqlString() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - - DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName()); - InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1); - InsertBatchTranslator builder = new InsertBatchTranslator(insertQuery, adapter); - String generatedSql = builder.getSql(); - assertNotNull(generatedSql); - assertEquals("INSERT INTO " + entity.getName() + " (DESCRIPTION, INT_COLUMN_NOTNULL, INT_COLUMN_NULL, LOCKING_TEST_ID, NAME) VALUES (?, ?, ?, ?, ?)", - generatedSql); - } - - @Test - public void testCreateSqlStringWithIdentifiersQuote() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - try { - - entity.getDataMap().setQuotingSQLIdentifiers(true); - - JdbcAdapter adapter = (JdbcAdapter) this.adapter; - - InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1); - InsertBatchTranslator builder = new InsertBatchTranslator(insertQuery, adapter); - String generatedSql = builder.getSql(); - String charStart = unitAdapter.getIdentifiersStartQuote(); - String charEnd = unitAdapter.getIdentifiersEndQuote(); - assertNotNull(generatedSql); - assertEquals("INSERT INTO " + charStart + entity.getName() + charEnd - + " (" + charStart + "DESCRIPTION" + charEnd + ", " - + charStart + "INT_COLUMN_NOTNULL" + charEnd + ", " - + charStart + "INT_COLUMN_NULL" + charEnd + ", " - + charStart + "LOCKING_TEST_ID" + charEnd + ", " - + charStart + "NAME" + charEnd + ") VALUES (?, ?, ?, ?, ?)", generatedSql); - } finally { - entity.getDataMap().setQuotingSQLIdentifiers(false); - } - } -} diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslatorIT.java deleted file mode 100644 index 36efd4c82..000000000 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslatorIT.java +++ /dev/null @@ -1,181 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.access.translator.batch.legacy; - -import org.apache.cayenne.ObjectContext; -import org.apache.cayenne.PersistenceState; -import org.apache.cayenne.access.DataNode; -import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.dba.JdbcAdapter; -import org.apache.cayenne.di.AdhocObjectFactory; -import org.apache.cayenne.di.Inject; -import org.apache.cayenne.exp.Expression; -import org.apache.cayenne.exp.ExpressionFactory; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.query.DeleteBatchQuery; -import org.apache.cayenne.query.ObjectSelect; -import org.apache.cayenne.query.SQLTemplate; -import org.apache.cayenne.test.parallel.ParallelTestContainer; -import org.apache.cayenne.testdo.soft_delete.SoftDelete; -import org.apache.cayenne.unit.UnitDbAdapter; -import org.apache.cayenne.unit.di.server.CayenneProjects; -import org.apache.cayenne.unit.di.server.ServerCase; -import org.apache.cayenne.unit.di.server.UseServerRuntime; -import org.junit.Test; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@Deprecated -@UseServerRuntime(CayenneProjects.SOFT_DELETE_PROJECT) -public class SoftDeleteBatchTranslatorIT extends ServerCase { - - @Inject - private ObjectContext context; - - @Inject - protected DbAdapter adapter; - - @Inject - private DataNode dataNode; - - @Inject - private UnitDbAdapter unitAdapter; - - @Inject - private AdhocObjectFactory objectFactory; - - private DeleteBatchTranslator createTranslator(DeleteBatchQuery query) { - JdbcAdapter adapter = objectFactory.newInstance(JdbcAdapter.class, JdbcAdapter.class.getName()); - return createTranslator(query, adapter); - } - - private DeleteBatchTranslator createTranslator(DeleteBatchQuery query, JdbcAdapter adapter) { - return (DeleteBatchTranslator) new SoftDeleteTranslatorFactory().translator(query, adapter, null); - } - - @Test - public void testCreateSqlString() { - DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity(); - - List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("ID")); - - DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.emptySet(), 1); - DeleteBatchTranslator builder = createTranslator(deleteQuery); - String generatedSql = builder.getSql(); - assertNotNull(generatedSql); - assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE ID = ?", generatedSql); - } - - @Test - public void testCreateSqlStringWithNulls() { - DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity(); - - List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("ID"), entity.getAttribute("NAME")); - - Collection<String> nullAttributes = Collections.singleton("NAME"); - - DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1); - DeleteBatchTranslator builder = createTranslator(deleteQuery); - String generatedSql = builder.getSql(); - assertNotNull(generatedSql); - assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE ID = ? AND NAME IS NULL", generatedSql); - } - - @Test - public void testCreateSqlStringWithIdentifiersQuote() { - DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity(); - try { - - entity.getDataMap().setQuotingSQLIdentifiers(true); - - List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("ID")); - - DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.emptySet(), 1); - JdbcAdapter adapter = (JdbcAdapter) this.adapter; - DeleteBatchTranslator builder = createTranslator(deleteQuery, adapter); - String generatedSql = builder.getSql(); - - String charStart = unitAdapter.getIdentifiersStartQuote(); - String charEnd = unitAdapter.getIdentifiersEndQuote(); - - assertNotNull(generatedSql); - assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DELETED" + charEnd - + " = ? WHERE " + charStart + "ID" + charEnd + " = ?", generatedSql); - } finally { - entity.getDataMap().setQuotingSQLIdentifiers(false); - } - - } - - @Test - public void testUpdate() throws Exception { - - final DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity(); - - BatchTranslatorFactory oldFactory = dataNode.getBatchTranslatorFactory(); - try { - dataNode.setBatchTranslatorFactory(new SoftDeleteTranslatorFactory()); - - final SoftDelete test = context.newObject(SoftDelete.class); - test.setName("SoftDeleteBatchQueryBuilderTest"); - context.commitChanges(); - - new ParallelTestContainer() { - - @Override - protected void assertResult() { - Expression exp = ExpressionFactory.matchExp("name", test.getName()); - assertEquals(1, ObjectSelect.query(SoftDelete.class, exp).selectCount(context)); - - exp = ExpressionFactory.matchDbExp("DELETED", true); - assertEquals(0, ObjectSelect.query(SoftDelete.class, exp).selectCount(context)); - } - }.runTest(200); - - context.deleteObjects(test); - assertEquals(test.getPersistenceState(), PersistenceState.DELETED); - context.commitChanges(); - - new ParallelTestContainer() { - - @Override - protected void assertResult() { - Expression exp = ExpressionFactory.matchExp("name", test.getName()); - assertEquals(0, ObjectSelect.query(SoftDelete.class, exp).selectCount(context)); - - SQLTemplate template = new SQLTemplate(entity, "SELECT * FROM SOFT_DELETE"); - template.setFetchingDataRows(true); - assertEquals(1, context.performQuery(template).size()); - } - }.runTest(200); - } finally { - context.performQuery(new SQLTemplate(entity, "DELETE FROM SOFT_DELETE")); - dataNode.setBatchTranslatorFactory(oldFactory); - } - } - -} diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslatorIT.java deleted file mode 100644 index 1a10261f8..000000000 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslatorIT.java +++ /dev/null @@ -1,170 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - -package org.apache.cayenne.access.translator.batch.legacy; - -import org.apache.cayenne.configuration.server.ServerRuntime; -import org.apache.cayenne.dba.DbAdapter; -import org.apache.cayenne.dba.JdbcAdapter; -import org.apache.cayenne.di.AdhocObjectFactory; -import org.apache.cayenne.di.Inject; -import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.query.UpdateBatchQuery; -import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity; -import org.apache.cayenne.unit.UnitDbAdapter; -import org.apache.cayenne.unit.di.server.CayenneProjects; -import org.apache.cayenne.unit.di.server.ServerCase; -import org.apache.cayenne.unit.di.server.UseServerRuntime; -import org.junit.Test; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.mockito.Mockito.mock; - -@Deprecated -@UseServerRuntime(CayenneProjects.LOCKING_PROJECT) -public class UpdateBatchTranslatorIT extends ServerCase { - - @Inject - private ServerRuntime runtime; - - @Inject - private DbAdapter adapter; - - @Inject - private UnitDbAdapter unitAdapter; - - @Inject - private AdhocObjectFactory objectFactory; - - @Test - public void testConstructor() throws Exception { - DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName()); - UpdateBatchTranslator builder = new UpdateBatchTranslator(mock(UpdateBatchQuery.class), adapter, null); - assertSame(adapter, builder.adapter); - } - - @Test - public void testCreateSqlString() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - - List idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID")); - List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION")); - - UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, - Collections.<String> emptySet(), 1); - - DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName()); - UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null); - String generatedSql = builder.getSql(); - assertNotNull(generatedSql); - assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ? WHERE LOCKING_TEST_ID = ?", generatedSql); - } - - @Test - public void testCreateSqlStringWithNulls() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - - List idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"), entity.getAttribute("NAME")); - - List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION")); - - Collection nullAttributes = Collections.singleton("NAME"); - - UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, nullAttributes, 1); - - DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName()); - UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null); - String generatedSql = builder.getSql(); - assertNotNull(generatedSql); - - assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ? WHERE LOCKING_TEST_ID = ? AND NAME IS NULL", - generatedSql); - } - - @Test - public void testCreateSqlStringWithIdentifiersQuote() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - try { - - entity.getDataMap().setQuotingSQLIdentifiers(true); - List idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID")); - List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION")); - - UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, - Collections.<String> emptySet(), 1); - JdbcAdapter adapter = (JdbcAdapter) this.adapter; - - UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null); - String generatedSql = builder.getSql(); - - String charStart = unitAdapter.getIdentifiersStartQuote(); - String charEnd = unitAdapter.getIdentifiersEndQuote(); - - assertNotNull(generatedSql); - assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DESCRIPTION" - + charEnd + " = ? WHERE " + charStart + "LOCKING_TEST_ID" + charEnd + " = ?", generatedSql); - - } finally { - entity.getDataMap().setQuotingSQLIdentifiers(false); - } - } - - @Test - public void testCreateSqlStringWithNullsWithIdentifiersQuote() throws Exception { - DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class) - .getDbEntity(); - try { - - entity.getDataMap().setQuotingSQLIdentifiers(true); - List idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"), entity.getAttribute("NAME")); - - List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION")); - - Collection nullAttributes = Collections.singleton("NAME"); - - UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, - nullAttributes, 1); - JdbcAdapter adapter = (JdbcAdapter) this.adapter; - - UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null); - String generatedSql = builder.getSql(); - assertNotNull(generatedSql); - - String charStart = unitAdapter.getIdentifiersStartQuote(); - String charEnd = unitAdapter.getIdentifiersEndQuote(); - assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DESCRIPTION" - + charEnd + " = ? WHERE " + charStart + "LOCKING_TEST_ID" + charEnd + " = ? AND " + charStart - + "NAME" + charEnd + " IS NULL", generatedSql); - - } finally { - entity.getDataMap().setQuotingSQLIdentifiers(false); - } - } - -} diff --git a/cayenne-server/src/test/java/org/apache/cayenne/resource/FilesystemResourceLocatorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/resource/FilesystemResourceLocatorTest.java deleted file mode 100644 index 93b1e325d..000000000 --- a/cayenne-server/src/test/java/org/apache/cayenne/resource/FilesystemResourceLocatorTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.resource; - -import org.apache.cayenne.test.file.FileUtil; -import org.junit.Test; - -import java.io.File; -import java.io.FileOutputStream; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -@Deprecated -public class FilesystemResourceLocatorTest { - - @Test - public void testArrayConstructor() { - FilesystemResourceLocator l1 = new FilesystemResourceLocator(); - assertEquals(1, l1.roots.length); - assertEquals(System.getProperty("user.dir"), l1.roots[0].getPath()); - - File base = FileUtil.baseTestDirectory(); - File f1 = new File(base, "f1"); - File f2 = new File(new File(base, "f2"), "f3"); - - FilesystemResourceLocator l2 = new FilesystemResourceLocator(f1, f2); - assertEquals(2, l2.roots.length); - assertEquals(base, l2.roots[0]); - assertEquals(new File(base, "f2"), l2.roots[1]); - } - - @Test - public void testCollectionConstructor() { - FilesystemResourceLocator l1 = new FilesystemResourceLocator(Collections.<File> emptyList()); - assertEquals(1, l1.roots.length); - assertEquals(System.getProperty("user.dir"), l1.roots[0].getPath()); - - File base = FileUtil.baseTestDirectory(); - File f1 = new File(base, "f1"); - File f2 = new File(new File(base, "f2"), "f3"); - - FilesystemResourceLocator l2 = new FilesystemResourceLocator(Arrays.asList(f1, f2)); - assertEquals(2, l2.roots.length); - assertEquals(base, l2.roots[0]); - assertEquals(new File(base, "f2"), l2.roots[1]); - } - - @Test - public void testFindResources() throws Exception { - - File base = new File(FileUtil.baseTestDirectory(), getClass().getName()); - File root1 = new File(base, "r1"); - File root2 = new File(base, "r2"); - - root1.mkdirs(); - root2.mkdirs(); - - FilesystemResourceLocator locator = new FilesystemResourceLocator(root1, root2); - Collection<Resource> resources1 = locator.findResources("x.txt"); - assertNotNull(resources1); - assertEquals(0, resources1.size()); - - File f1 = new File(root1, "x.txt"); - touch(f1); - - Collection<Resource> resources2 = locator.findResources("x.txt"); - assertNotNull(resources2); - assertEquals(1, resources2.size()); - assertEquals(f1.toURI().toURL(), resources2.iterator().next().getURL()); - - File f2 = new File(root2, "x.txt"); - touch(f2); - - Collection<Resource> resources3 = locator.findResources("x.txt"); - assertNotNull(resources3); - assertEquals(2, resources3.size()); - - Resource[] resources3a = resources3.toArray(new Resource[2]); - assertEquals(f1.toURI().toURL(), resources3a[0].getURL()); - assertEquals(f2.toURI().toURL(), resources3a[1].getURL()); - } - - private void touch(File f) throws Exception { - try (FileOutputStream out = new FileOutputStream(f);) { - out.write('a'); - } - } -}
