This is an automated email from the ASF dual-hosted git repository. asf-gitbox-commits pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit a2a51df1d2f66766af49f960d31981b777c54107 Author: Andrus Adamchik <[email protected]> AuthorDate: Sun Jun 28 14:04:33 2026 -0400 cleanup - trimming down ColumnDescriptor and turning it into a record --- .../reader/CryptoRowReaderFactoryDecorator.java | 6 +- .../transformer/DefaultTransformerFactory.java | 6 +- .../apache/cayenne/velocity/ResultDirective.java | 16 +- .../VelocitySQLTemplateTranslator_SelectTest.java | 20 +- .../cayenne/access/PrefetchProcessorJointNode.java | 12 +- .../apache/cayenne/access/jdbc/BatchAction.java | 13 +- .../cayenne/access/jdbc/ColumnDescriptor.java | 273 +-------------------- .../cayenne/access/jdbc/ProcedureAction.java | 12 +- .../cayenne/access/jdbc/RowDescriptorBuilder.java | 50 ++-- .../cayenne/access/jdbc/SQLTemplateAction.java | 5 +- .../cayenne/access/jdbc/reader/BaseRowReader.java | 4 +- .../access/jdbc/reader/EmbeddableRowReader.java | 4 +- .../access/jdbc/reader/EntityRowReader.java | 8 +- .../cayenne/access/jdbc/reader/IdRowReader.java | 2 +- .../access/jdbc/reader/ScalarRowReader.java | 2 +- .../translator/select/ColumnDescriptorStage.java | 5 +- .../translator/sqltemplate/directive/Result.java | 14 +- .../cayenne/dba/oracle/OracleProcedureAction.java | 10 +- .../cayenne/dba/postgres/PostgresSelectAction.java | 2 +- .../access/DataContextProcedureQueryIT.java | 7 +- .../cayenne/access/jdbc/ColumnDescriptorTest.java | 69 +----- .../select/ColumnDescriptorStageTest.java | 2 +- .../DbAdapterDelegatedSelectTranslatorIT.java | 22 +- .../select/DefaultObjectSelectTranslatorIT.java | 32 +-- .../org/apache/cayenne/query/ProcedureCallIT.java | 7 +- 25 files changed, 156 insertions(+), 447 deletions(-) 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 549f693a7..b48cdb692 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 @@ -100,7 +100,7 @@ public class CryptoRowReaderFactoryDecorator extends DefaultRowReaderFactory { ExtendedType[] encryptedConverters = new ExtendedType[len]; for (int i = 0; i < len; i++) { - DbAttribute attribute = originalColumns[i].getAttribute(); + DbAttribute attribute = originalColumns[i].attribute(); ExtendedType t = originalConverters[i]; @@ -143,8 +143,8 @@ public class CryptoRowReaderFactoryDecorator extends DefaultRowReaderFactory { DecoratedScalarRowReader(ColumnDescriptor descriptor, RowReader<?> delegateReader) { this.delegateReader = delegateReader; - if(descriptor.getAttribute() != null && columnMapper.isEncrypted(descriptor.getAttribute())) { - this.valueDecryptor = valueTransformerFactory.decryptor(descriptor.getAttribute()); + if(descriptor.attribute() != null && columnMapper.isEncrypted(descriptor.attribute())) { + this.valueDecryptor = valueTransformerFactory.decryptor(descriptor.attribute()); this.bytesDecryptor = bytesTransformerFactory.decryptor(); } else { this.valueDecryptor = null; diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java index 958cc013c..1d76f5097 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java @@ -61,7 +61,7 @@ public class DefaultTransformerFactory implements TransformerFactory { for (int i = 0; i < len; i++) { - DbAttribute a = columns[i].getAttribute(); + DbAttribute a = columns[i].attribute(); if (a != null && columnMapper.isEncrypted(a)) { if (cryptoColumns == null) { cryptoColumns = new ArrayList<>(len - i); @@ -80,8 +80,8 @@ public class DefaultTransformerFactory implements TransformerFactory { for (int i = 0; i < dlen; i++) { ColumnDescriptor cd = columns[cryptoColumns.get(i)]; - mapKeys[i] = cd.getDataRowKey(); - transformers[i] = transformerFactory.decryptor(cd.getAttribute()); + mapKeys[i] = cd.dataRowKey(); + transformers[i] = transformerFactory.decryptor(cd.attribute()); } return new DefaultMapTransformer(mapKeys, transformers, bytesTransformerFactory.decryptor()); diff --git a/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/ResultDirective.java b/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/ResultDirective.java index 43a845496..c8a869160 100644 --- a/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/ResultDirective.java +++ b/cayenne-velocity/src/main/java/org/apache/cayenne/velocity/ResultDirective.java @@ -126,23 +126,17 @@ public class ResultDirective extends Directive { // determine what we want to name this column in a resulting DataRow... String label = (!Util.isEmptyString(dataRowKey)) ? dataRowKey : (!Util.isEmptyString(alias)) ? alias : null; - ColumnDescriptor columnDescriptor = new ColumnDescriptor(); - columnDescriptor.setName(column); - columnDescriptor.setDataRowKey(label); - String type = getChildAsString(context, node, 1); - if (type != null) { - columnDescriptor.setJavaClass(guessType(type)); - } + String javaClass = (type != null) ? guessType(type) : null; // TODO: andrus 6/27/2007 - this is an unofficial jdbcType parameter // that is added // temporarily pending CAY-813 implementation for the sake of EJBQL // query... - Object jdbcType = getChild(context, node, 4); - if (jdbcType instanceof Number) { - columnDescriptor.setJdbcType(((Number) jdbcType).intValue()); - } + Object jdbcTypeChild = getChild(context, node, 4); + int jdbcType = (jdbcTypeChild instanceof Number) ? ((Number) jdbcTypeChild).intValue() : 0; + + ColumnDescriptor columnDescriptor = new ColumnDescriptor(column, label, jdbcType, javaClass, null); writer.write(column); diff --git a/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java b/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java index f49d13b92..01d659d52 100644 --- a/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java +++ b/cayenne-velocity/src/test/java/org/apache/cayenne/velocity/VelocitySQLTemplateTranslator_SelectTest.java @@ -67,8 +67,8 @@ public class VelocitySQLTemplateTranslator_SelectTest { assertEquals("SELECT A FROM ME", compiled.sql()); assertEquals(0, compiled.bindings().length); assertEquals(1, compiled.resultColumns().length); - assertEquals("A", compiled.resultColumns()[0].getName()); - assertNull(compiled.resultColumns()[0].getJavaClass()); + assertEquals("A", compiled.resultColumns()[0].name()); + assertNull(compiled.resultColumns()[0].javaClass()); } @Test @@ -81,8 +81,8 @@ public class VelocitySQLTemplateTranslator_SelectTest { assertEquals(0, compiled.bindings().length); assertEquals(1, compiled.resultColumns().length); - assertEquals("A", compiled.resultColumns()[0].getName()); - assertEquals("java.lang.String", compiled.resultColumns()[0].getJavaClass()); + assertEquals("A", compiled.resultColumns()[0].name()); + assertEquals("java.lang.String", compiled.resultColumns()[0].javaClass()); } @Test @@ -96,9 +96,9 @@ public class VelocitySQLTemplateTranslator_SelectTest { assertEquals(1, compiled.resultColumns().length); ColumnDescriptor column = compiled.resultColumns()[0]; - assertEquals("A", column.getName()); - assertEquals("B", column.getDataRowKey()); - assertEquals("java.lang.String", column.getJavaClass()); + assertEquals("A", column.name()); + assertEquals("B", column.dataRowKey()); + assertEquals("java.lang.String", column.javaClass()); } @Test @@ -111,8 +111,8 @@ public class VelocitySQLTemplateTranslator_SelectTest { assertEquals(0, compiled.bindings().length); assertEquals(3, compiled.resultColumns().length); - assertEquals("A", compiled.resultColumns()[0].getName()); - assertEquals("B", compiled.resultColumns()[1].getName()); - assertEquals("C", compiled.resultColumns()[2].getName()); + assertEquals("A", compiled.resultColumns()[0].name()); + assertEquals("B", compiled.resultColumns()[1].name()); + assertEquals("C", compiled.resultColumns()[2].name()); } } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java b/cayenne/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java index 30487c577..8440a48a1 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/PrefetchProcessorJointNode.java @@ -106,8 +106,8 @@ class PrefetchProcessorJointNode extends PrefetchProcessorNode { Map<String, Object> id = new TreeMap<>(); for (int idIndex : idIndices) { - Object value = flatRow.get(columns[idIndex].getDataRowKey()); - id.put(columns[idIndex].getName(), value); + Object value = flatRow.get(columns[idIndex].dataRowKey()); + id.put(columns[idIndex].name(), value); } return id; @@ -137,7 +137,7 @@ class PrefetchProcessorJointNode extends PrefetchProcessorNode { // extract subset of flat row columns, recasting to the target keys for (ColumnDescriptor column : columns) { - row.put(column.getName(), flatRow.get(column.getDataRowKey())); + row.put(column.name(), flatRow.get(column.dataRowKey())); } // since JDBC row reader won't inject JOINED entity name, we have to detect it here... @@ -247,9 +247,7 @@ class PrefetchProcessorJointNode extends PrefetchProcessorNode { ColumnDescriptor column = map.get(name); if (column == null) { - column = new ColumnDescriptor(); - column.setName(name); - column.setDataRowKey(label); + column = new ColumnDescriptor(name, label, 0, null, null); map.put(name, column); } @@ -275,7 +273,7 @@ class PrefetchProcessorJointNode extends PrefetchProcessorNode { DbAttribute pk = it.next(); for (int j = 0; j < columns.length; j++) { - if (pk.getName().equals(columns[j].getName())) { + if (pk.getName().equals(columns[j].name())) { idIndices[i] = j; break; } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java index 5b7319800..a5bb47938 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/BatchAction.java @@ -42,6 +42,7 @@ import org.apache.cayenne.query.UpdateBatchQuery; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; @@ -277,9 +278,15 @@ public class BatchAction extends BaseSQLAction { ColumnDescriptor[] columns = new ColumnDescriptor[1]; // use column name from result set, but type and Java class from DB attribute - columns[0] = new ColumnDescriptor(keysRS.getMetaData(), 1); - columns[0].setJdbcType(key.getType()); - columns[0].setJavaClass(typeForGeneratedPK(key)); + ResultSetMetaData md = keysRS.getMetaData(); + String columnName = md.getColumnLabel(1); + if (columnName == null || columnName.isEmpty()) { + columnName = md.getColumnName(1); + if (columnName == null || columnName.isEmpty()) { + columnName = "column_1"; + } + } + columns[0] = new ColumnDescriptor(columnName, columnName, key.getType(), typeForGeneratedPK(key), null); builder.setColumns(columns); } else { builder.setResultSet(keysRS); diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java index 64a75f2d3..8b1df6876 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/ColumnDescriptor.java @@ -19,157 +19,24 @@ package org.apache.cayenne.access.jdbc; -import org.apache.cayenne.dba.TypesMapping; import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.map.ObjAttribute; -import org.apache.cayenne.map.ProcedureParameter; -import org.apache.cayenne.util.ToStringBuilder; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; import java.util.Objects; /** * A descriptor of a ResultSet column. - * - * @since 1.1 */ -public class ColumnDescriptor { +public record ColumnDescriptor(String name, String dataRowKey, int jdbcType, String javaClass, DbAttribute attribute) { - protected DbAttribute attribute; - protected String tableName; - protected String procedureName; - - // identifies column in result set - protected String name; - protected String namePrefix; - - // identifies column in a DataRow - protected String dataRowKey; - - protected int jdbcType; - protected String javaClass; - - /** - * @since 4.0 - */ - protected boolean isExpression; - - /** - * Creates a ColumnDescriptor - */ - public ColumnDescriptor() { - } - - /** - * Creates a column descriptor with user-specified parameters. - * - * @since 3.1 - */ - public ColumnDescriptor(String columnName, int jdbcType) { - this(columnName, jdbcType, TypesMapping.getJavaBySqlType(jdbcType)); - } - - /** - * @since 4.0 - */ - public ColumnDescriptor(String columnName, int jdbcType, String javaClass) { - this.name = columnName; - this.dataRowKey = columnName; - this.jdbcType = jdbcType; - this.javaClass = javaClass; - } - - /** - * Creates a ColumnDescriptor from Cayenne DbAttribute. - * - * @since 1.2 - */ - public ColumnDescriptor(DbAttribute attribute, String tableAlias) { - this(attribute.getName(), attribute.getType()); - - this.attribute = attribute; - this.namePrefix = tableAlias; - this.javaClass = attribute.getJavaClassName(); - - if (attribute.getEntity() != null) { - this.tableName = attribute.getEntity().getName(); + public ColumnDescriptor { + if (dataRowKey == null) { + dataRowKey = name; } } /** - * @since 1.2 - */ - public ColumnDescriptor(ObjAttribute objAttribute, DbAttribute dbAttribute, String columnAlias) { - this(dbAttribute, columnAlias); - this.dataRowKey = objAttribute.getDbAttributePath().value(); - this.javaClass = objAttribute.getType(); - } - - /** - * Creates a ColumnDescriptor from stored procedure parameter. - * - * @since 1.2 - */ - public ColumnDescriptor(ProcedureParameter parameter) { - this(parameter.getName(), parameter.getType()); - - if (parameter.getProcedure() != null) { - this.procedureName = parameter.getProcedure().getName(); - } - } - - /** - * Creates a ColumnDescriptor using ResultSetMetaData. - * - * @since 3.1 - */ - public ColumnDescriptor(String columnName, ResultSetMetaData metaData, int position) throws SQLException { - this(columnName, metaData.getColumnType(position)); - } - - /** - * Creates a ColumnDescriptor using ResultSetMetaData. - * - * @since 1.2 - */ - public ColumnDescriptor(ResultSetMetaData metaData, int position) throws SQLException { - this(getColumnNameFromMeta(metaData, position), metaData, position); - } - - private static String getColumnNameFromMeta(ResultSetMetaData metaData, int position) throws SQLException { - String name = metaData.getColumnLabel(position); - if (name == null || name.isEmpty()) { - name = metaData.getColumnName(position); - - if (name == null || name.isEmpty()) { - name = "column_" + position; - } - } - return name; - } - - /** - * Returns a DbAttribute for this column. Since columns descriptors can be - * initialized in a context where a DbAttribite is unknown, this method may - * return null. - * - * @since 4.0 - */ - public DbAttribute getAttribute() { - return attribute; - } - - public void setAttribute(DbAttribute attribute) { - this.attribute = attribute; - } - - /** - * Returns true if another object is a ColumnDescriptor with the same name, - * name prefix, table and procedure names. Other fields are ignored in the - * equality test. - * - * @since 1.2 + * Returns true if another object is a ColumnDescriptor with the same name and data row key. Other fields are + * ignored in the equality test. */ @Override public boolean equals(Object o) { @@ -178,10 +45,7 @@ public class ColumnDescriptor { } return Objects.equals(name, rhs.name) - && Objects.equals(namePrefix, rhs.namePrefix) - && Objects.equals(procedureName, rhs.procedureName) - && Objects.equals(dataRowKey, rhs.dataRowKey) - && Objects.equals(tableName, rhs.tableName); + && Objects.equals(dataRowKey, rhs.dataRowKey); } /** @@ -189,127 +53,6 @@ public class ColumnDescriptor { */ @Override public int hashCode() { - return Objects.hash(name, namePrefix, procedureName, tableName, dataRowKey); - } - - /** - * @since 1.2 - */ - @Override - public String toString() { - ToStringBuilder builder = new ToStringBuilder(this); - builder.append("namePrefix", namePrefix); - builder.append("name", getName()); - builder.append("dataRowKey", getDataRowKey()); - builder.append("tableName", getTableName()); - builder.append("procedureName", getProcedureName()); - builder.append("javaClass", getJavaClass()); - builder.append("jdbcType", getJdbcType()); - return builder.toString(); - } - - /** - * Returns "qualifiedColumnName" property. - * - * @since 1.2 - */ - public String getQualifiedColumnName() { - return (namePrefix != null) ? namePrefix + '.' + name : name; - } - - public int getJdbcType() { - return jdbcType; - } - - /** - * Returns column name. Name is an unqualified column name in a query. - */ - public String getName() { - return name; - } - - /** - * @since 4.0 - */ - public String getNamePrefix() { - return namePrefix; - } - - public void setJdbcType(int i) { - jdbcType = i; - } - - public void setName(String name) { - this.name = name; - } - - public String getJavaClass() { - return javaClass; - } - - public void setJavaClass(String string) { - javaClass = string; - } - - /** - * Returns the name of the parent table. - * - * @since 1.2 - */ - public String getTableName() { - return tableName; - } - - /** - * @since 1.2 - */ - public void setTableName(String tableName) { - this.tableName = tableName; - } - - /** - * Returns the name of the parent stored procedure. - * - * @since 1.2 - */ - public String getProcedureName() { - return procedureName; - } - - /** - * @since 1.2 - */ - public void setProcedureName(String procedureName) { - this.procedureName = procedureName; - } - - /** - * @since 3.0 - */ - public String getDataRowKey() { - return dataRowKey != null ? dataRowKey : getName(); - } - - /** - * @since 3.0 - */ - public void setDataRowKey(String dataRowKey) { - this.dataRowKey = dataRowKey; - } - - /** - * @since 4.0 - * @param isExpression is this column is an expression - */ - public void setIsExpression(boolean isExpression) { - this.isExpression = isExpression; - } - - /** - * @since 4.0 - * @return is this column is an expression - */ - public boolean isExpression() { - return isExpression; + return Objects.hash(name, dataRowKey); } } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/ProcedureAction.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/ProcedureAction.java index 4d292715b..cb53ff0c4 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/ProcedureAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/ProcedureAction.java @@ -27,6 +27,7 @@ import org.apache.cayenne.access.translator.ParameterBinding; import org.apache.cayenne.access.translator.procedure.TranslatedProcedure; import org.apache.cayenne.access.types.ExtendedType; import org.apache.cayenne.dba.DbAdapter; +import org.apache.cayenne.dba.TypesMapping; import org.apache.cayenne.map.Procedure; import org.apache.cayenne.map.ProcedureParameter; import org.apache.cayenne.query.ProcedureQuery; @@ -219,11 +220,12 @@ public class ProcedureAction extends BaseSQLAction { result = new DataRow(2); } - ColumnDescriptor descriptor = new ColumnDescriptor(parameter); - ExtendedType type = dataNode.getAdapter().getExtendedTypes().getRegisteredType(descriptor.getJavaClass()); - Object val = type.materializeObject(statement, i + 1, descriptor.getJdbcType()); + ColumnDescriptor descriptor = new ColumnDescriptor( + parameter.getName(), parameter.getName(), parameter.getType(), TypesMapping.getJavaBySqlType(parameter.getType()), null); + ExtendedType type = dataNode.getAdapter().getExtendedTypes().getRegisteredType(descriptor.javaClass()); + Object val = type.materializeObject(statement, i + 1, descriptor.jdbcType()); - result.put(descriptor.getDataRowKey(), val); + result.put(descriptor.dataRowKey(), val); } if (result != null && !result.isEmpty()) { @@ -232,7 +234,7 @@ public class ProcedureAction extends BaseSQLAction { delegate.nextRows(query, Collections.singletonList(result)); } } - + protected void initStatement(CallableStatement statement) throws Exception { QueryMetadata queryMetadata = query.getMetaData(dataNode.getEntityResolver()); int statementFetchSize = queryMetadata.getStatementFetchSize(); diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/RowDescriptorBuilder.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/RowDescriptorBuilder.java index 3068b2c83..68c6a7b28 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/RowDescriptorBuilder.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/RowDescriptorBuilder.java @@ -21,6 +21,7 @@ package org.apache.cayenne.access.jdbc; import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.types.ExtendedType; import org.apache.cayenne.access.types.ExtendedTypeMap; +import org.apache.cayenne.dba.TypesMapping; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -80,10 +81,10 @@ public class RowDescriptorBuilder { "Can't build RowDescriptor, both 'columns' and 'resultSetMetadata' are null"); } - performTransformAndTypeOverride(columnsForRD); + columnsForRD = performTransformAndTypeOverride(columnsForRD); ExtendedType[] converters = new ExtendedType[columnsForRD.length]; for (int i = 0; i < columnsForRD.length; i++) { - converters[i] = typeMap.getRegisteredType(columnsForRD[i].getJavaClass()); + converters[i] = typeMap.getRegisteredType(columnsForRD[i].javaClass()); } return new RowDescriptor(columnsForRD, converters); @@ -129,8 +130,8 @@ public class RowDescriptorBuilder { // validate uniqueness of names if(validateDuplicateColumnNames) { - if(!uniqueNames.add(descriptor.getDataRowKey())) { - duplicates.add(descriptor.getDataRowKey()); + if(!uniqueNames.add(descriptor.dataRowKey())) { + duplicates.add(descriptor.dataRowKey()); } } rsColumns[outputLen] = descriptor; @@ -166,9 +167,9 @@ public class RowDescriptorBuilder { for (int i = 0; i < len; i++) { if (columnArray[i] != null) { if(mergeColumnsWithRsMetadata) { - return new ColumnDescriptor(rowKey, resultSetMetadata.getColumnType(position), columnArray[position - 1].getJavaClass()); + return new ColumnDescriptor(rowKey, rowKey, resultSetMetadata.getColumnType(position), columnArray[position - 1].javaClass(), null); } else { - String columnRowKey = columnArray[i].getDataRowKey(); + String columnRowKey = columnArray[i].dataRowKey(); // TODO: andrus, 10/14/2009 - 'equalsIgnoreCase' check can result in // subtle bugs in DBs with case-sensitive column names (or when quotes are @@ -181,7 +182,8 @@ public class RowDescriptorBuilder { } } // columnArray doesn't contain ColumnDescriptor for specified column - return new ColumnDescriptor(rowKey, resultSetMetadata, position); + int jdbcType = resultSetMetadata.getColumnType(position); + return new ColumnDescriptor(rowKey, rowKey, jdbcType, TypesMapping.getJavaBySqlType(jdbcType), null); } /** @@ -199,21 +201,35 @@ public class RowDescriptorBuilder { return name; } - private void performTransformAndTypeOverride(ColumnDescriptor[] columnArray) { - if (caseTransformer != null) { - for (ColumnDescriptor aColumnArray : columnArray) { - aColumnArray.setDataRowKey(caseTransformer.apply(aColumnArray.getDataRowKey())); - aColumnArray.setName(caseTransformer.apply(aColumnArray.getName())); - } + private ColumnDescriptor[] performTransformAndTypeOverride(ColumnDescriptor[] columnArray) { + if (caseTransformer == null && typeOverrides == null) { + return columnArray; } - if (typeOverrides != null) { - for (ColumnDescriptor aColumnArray : columnArray) { - String type = typeOverrides.get(aColumnArray.getName()); + + ColumnDescriptor[] result = new ColumnDescriptor[columnArray.length]; + for (int i = 0; i < columnArray.length; i++) { + ColumnDescriptor column = columnArray[i]; + + String name = column.name(); + String dataRowKey = column.dataRowKey(); + String javaClass = column.javaClass(); + + if (caseTransformer != null) { + name = caseTransformer.apply(name); + dataRowKey = caseTransformer.apply(dataRowKey); + } + + // type overrides are keyed by the (possibly transformed) column name + if (typeOverrides != null) { + String type = typeOverrides.get(name); if (type != null) { - aColumnArray.setJavaClass(type); + javaClass = type; } } + + result[i] = new ColumnDescriptor(name, dataRowKey, column.jdbcType(), javaClass, column.attribute()); } + return result; } /** diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java index 958651c94..a5afa378f 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java @@ -306,9 +306,8 @@ public class SQLTemplateAction implements SQLAction { int size = query.getResultColumnsTypes().size(); ColumnDescriptor[] columnDescriptors = new ColumnDescriptor[size]; for (int i = 0; i < size; i++) { - ColumnDescriptor columnDescriptor = new ColumnDescriptor(); - columnDescriptor.setJavaClass(query.getResultColumnsTypes().get(i).getCanonicalName()); - columnDescriptors[i] = columnDescriptor; + // only the Java class is known here; name and type are resolved later from ResultSet metadata + columnDescriptors[i] = new ColumnDescriptor(null, null, 0, query.getResultColumnsTypes().get(i).getCanonicalName(), null); } return columnDescriptors; } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/BaseRowReader.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/BaseRowReader.java index adeab6d76..fb26058dd 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/BaseRowReader.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/BaseRowReader.java @@ -50,8 +50,8 @@ abstract class BaseRowReader<T> implements RowReader<T> { this.types = new int[width]; for (int i = 0; i < width; i++) { - labels[i] = columns[i].getDataRowKey(); - types[i] = columns[i].getJdbcType(); + labels[i] = columns[i].dataRowKey(); + types[i] = columns[i].jdbcType(); } } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/EmbeddableRowReader.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/EmbeddableRowReader.java index e520637c4..c08025669 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/EmbeddableRowReader.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/EmbeddableRowReader.java @@ -52,8 +52,8 @@ class EmbeddableRowReader implements RowReader<DataRow> { ColumnDescriptor[] columns = descriptor.getColumns(); for (int i = 0; i < segmentWidth; i++) { this.converters[i] = converters[startIndex + i]; - types[i] = columns[startIndex + i].getJdbcType(); - labels[i] = segment.getFields().get(columns[startIndex +i].getName()); + types[i] = columns[startIndex + i].jdbcType(); + labels[i] = segment.getFields().get(columns[startIndex +i].name()); } this.mapCapacity = (int) Math.ceil(segmentWidth / 0.75); } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/EntityRowReader.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/EntityRowReader.java index 63a300003..4edb97a5f 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/EntityRowReader.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/EntityRowReader.java @@ -60,17 +60,17 @@ class EntityRowReader implements RowReader<DataRow> { ColumnDescriptor[] columns = descriptor.getColumns(); for (int i = 0; i < segmentWidth; i++) { this.converters[i] = converters[startIndex + i]; - types[i] = columns[startIndex + i].getJdbcType(); + types[i] = columns[startIndex + i].jdbcType(); // query translator may change the order of fields compare to the entity // result, so figure out DataRow labels by doing reverse lookup of // RowDescriptor labels... - if (columns[startIndex + i].getDataRowKey().contains(".")) { + if (columns[startIndex + i].dataRowKey().contains(".")) { // if the dataRowKey contains ".", it is prefetched column and // we can use it instead of search the name by alias - labels[i] = columns[startIndex + i].getDataRowKey(); + labels[i] = columns[startIndex + i].dataRowKey(); } else { - labels[i] = segmentMetadata.getColumnPath(columns[startIndex + i].getDataRowKey()); + labels[i] = segmentMetadata.getColumnPath(columns[startIndex + i].dataRowKey()); } } this.mapCapacity = (int) Math.ceil(segmentWidth / 0.75); diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java index b48da177f..af004af66 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/IdRowReader.java @@ -61,7 +61,7 @@ class IdRowReader<T> extends BaseRowReader<T> { resultMetadata.getColumnOffset() : 0; for(int i = offset, j = 0; i < offset + len; i++) { - DbAttribute a = dbEntity.getAttribute(columns[i].getName()); + DbAttribute a = dbEntity.getAttribute(columns[i].name()); if(a != null && a.isPrimaryKey()) { pk[j++] = i; } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/ScalarRowReader.java b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/ScalarRowReader.java index 2ec0d588b..bb36b6e86 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/ScalarRowReader.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/jdbc/reader/ScalarRowReader.java @@ -39,7 +39,7 @@ class ScalarRowReader<T> implements RowReader<T> { ScalarRowReader(RowDescriptor descriptor, ScalarResultSegment segmentMetadata) { int scalarIndex = segmentMetadata.getColumnOffset(); this.converter = descriptor.getConverters()[scalarIndex]; - this.type = descriptor.getColumns()[scalarIndex].getJdbcType(); + this.type = descriptor.getColumns()[scalarIndex].jdbcType(); this.index = scalarIndex + 1; } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/ColumnDescriptorStage.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/ColumnDescriptorStage.java index 20d5eb8ae..eb43855aa 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/translator/select/ColumnDescriptorStage.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/select/ColumnDescriptorStage.java @@ -46,9 +46,8 @@ class ColumnDescriptorStage implements TranslationStage { name = "__c" + i++; } - ColumnDescriptor descriptor = new ColumnDescriptor(name, resultNode.getJdbcType(), resultNode.getJavaType()); - descriptor.setAttribute(attribute); - descriptor.setDataRowKey(resultNode.getDataRowKey()); + ColumnDescriptor descriptor = new ColumnDescriptor( + name, resultNode.getDataRowKey(), resultNode.getJdbcType(), resultNode.getJavaType(), attribute); context.getColumnDescriptors().add(descriptor); } diff --git a/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/directive/Result.java b/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/directive/Result.java index 6e705d662..19c7cb978 100644 --- a/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/directive/Result.java +++ b/cayenne/src/main/java/org/apache/cayenne/access/translator/sqltemplate/directive/Result.java @@ -75,14 +75,11 @@ public class Result implements Directive { @Override public void apply(Context context, ASTExpression... expressions) { - ColumnDescriptor columnDescriptor = new ColumnDescriptor(); - String column = expressions[0].evaluateAsString(context); - columnDescriptor.setName(column); + String javaClass = null; if (expressions.length > 1) { - String type = expressions[1].evaluateAsString(context); - columnDescriptor.setJavaClass(guessType(type)); + javaClass = guessType(expressions[1].evaluateAsString(context)); } String alias = null; @@ -97,14 +94,13 @@ public class Result implements Directive { // determine what we want to name this column in a resulting DataRow... String label = (!Util.isEmptyString(dataRowKey)) ? dataRowKey : (!Util.isEmptyString(alias)) ? alias : null; - columnDescriptor.setDataRowKey(label); + int jdbcType = 0; if (expressions.length > 4) { - int jdbcType = (int) expressions[4].evaluateAsLong(context); - columnDescriptor.setJdbcType(jdbcType); + jdbcType = (int) expressions[4].evaluateAsLong(context); } - context.addColumnDescriptor(columnDescriptor); + context.addColumnDescriptor(new ColumnDescriptor(column, label, jdbcType, javaClass, null)); context.getBuilder().append(column); if (!Util.isEmptyString(alias) && !alias.equals(column)) { diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleProcedureAction.java b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleProcedureAction.java index b0e9fca7f..50287e905 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleProcedureAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/oracle/OracleProcedureAction.java @@ -31,6 +31,7 @@ import org.apache.cayenne.access.OperationObserver; import org.apache.cayenne.access.jdbc.ColumnDescriptor; import org.apache.cayenne.access.jdbc.ProcedureAction; import org.apache.cayenne.access.jdbc.RowDescriptor; +import org.apache.cayenne.dba.TypesMapping; import org.apache.cayenne.access.types.ExtendedType; import org.apache.cayenne.map.ProcedureParameter; import org.apache.cayenne.query.ProcedureQuery; @@ -79,12 +80,13 @@ class OracleProcedureAction extends ProcedureAction { result = new DataRow(2); } - ColumnDescriptor descriptor = new ColumnDescriptor(parameter); + ColumnDescriptor descriptor = new ColumnDescriptor( + parameter.getName(), parameter.getName(), parameter.getType(), TypesMapping.getJavaBySqlType(parameter.getType()), null); ExtendedType type = dataNode.getAdapter().getExtendedTypes() - .getRegisteredType(descriptor.getJavaClass()); - Object val = type.materializeObject(statement, i + 1, descriptor.getJdbcType()); + .getRegisteredType(descriptor.javaClass()); + Object val = type.materializeObject(statement, i + 1, descriptor.jdbcType()); - result.put(descriptor.getDataRowKey(), val); + result.put(descriptor.dataRowKey(), val); } } diff --git a/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java b/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java index 0edc106ad..e7993a564 100644 --- a/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java +++ b/cayenne/src/main/java/org/apache/cayenne/dba/postgres/PostgresSelectAction.java @@ -75,7 +75,7 @@ class PostgresSelectAction extends SelectAction { private static boolean readsLargeObjects(TranslatedSelect translated) { for (ColumnDescriptor column : translated.resultColumns()) { - if (isLargeObject(column.getJdbcType())) { + if (isLargeObject(column.jdbcType())) { return true; } } diff --git a/cayenne/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryIT.java b/cayenne/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryIT.java index 3a7d9fd28..c8c0c4479 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/DataContextProcedureQueryIT.java @@ -21,6 +21,7 @@ package org.apache.cayenne.access; import org.apache.cayenne.DataRow; import org.apache.cayenne.access.jdbc.ColumnDescriptor; +import org.apache.cayenne.dba.TypesMapping; import org.apache.cayenne.log.NoopJdbcEventLogger; import org.apache.cayenne.map.Procedure; import org.apache.cayenne.query.CapsStrategy; @@ -349,9 +350,9 @@ public class DataContextProcedureQueryIT { ColumnDescriptor[] columns = new ColumnDescriptor[3]; // read ID as Long, and everything else as default types - columns[0] = new ColumnDescriptor("ARTIST_ID", Types.BIGINT); - columns[1] = new ColumnDescriptor("ARTIST_NAME", Types.CHAR); - columns[2] = new ColumnDescriptor("DATE_OF_BIRTH", Types.DATE); + columns[0] = new ColumnDescriptor("ARTIST_ID", "ARTIST_ID", Types.BIGINT, TypesMapping.getJavaBySqlType(Types.BIGINT), null); + columns[1] = new ColumnDescriptor("ARTIST_NAME", "ARTIST_NAME", Types.CHAR, TypesMapping.getJavaBySqlType(Types.CHAR), null); + columns[2] = new ColumnDescriptor("DATE_OF_BIRTH", "DATE_OF_BIRTH", Types.DATE, TypesMapping.getJavaBySqlType(Types.DATE), null); q.addResultDescriptor(columns); List<?> rows = runProcedureSelect(q); diff --git a/cayenne/src/test/java/org/apache/cayenne/access/jdbc/ColumnDescriptorTest.java b/cayenne/src/test/java/org/apache/cayenne/access/jdbc/ColumnDescriptorTest.java index f171db9f6..afaee929e 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/jdbc/ColumnDescriptorTest.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/jdbc/ColumnDescriptorTest.java @@ -19,8 +19,6 @@ package org.apache.cayenne.access.jdbc; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.map.DbEntity; import org.junit.jupiter.api.Test; import java.sql.Types; @@ -33,56 +31,22 @@ public class ColumnDescriptorTest { @Test public void name() { - ColumnDescriptor column = new ColumnDescriptor(); - column.setName("abc"); - assertEquals("abc", column.getName()); + ColumnDescriptor column = new ColumnDescriptor("abc", null, 0, null, null); + assertEquals("abc", column.name()); } @Test public void label() { - ColumnDescriptor column = new ColumnDescriptor(); - column.setDataRowKey("abc"); - assertEquals("abc", column.getDataRowKey()); - } - - @Test - public void dbAttributeConstructor() { - DbEntity entity = new DbEntity("entity"); - DbAttribute a = new DbAttribute(); - a.setName("name"); - a.setType(Types.VARCHAR); - a.setEntity(entity); - - entity.addAttribute(a); - - ColumnDescriptor column = new ColumnDescriptor(a, null); - assertEquals("name", column.getName()); - assertEquals("name", column.getQualifiedColumnName()); - assertEquals("entity", column.getTableName()); - assertEquals(String.class.getName(), column.getJavaClass()); - assertEquals("name", column.getDataRowKey()); - assertEquals(Types.VARCHAR, column.getJdbcType()); + ColumnDescriptor column = new ColumnDescriptor(null, "abc", 0, null, null); + assertEquals("abc", column.dataRowKey()); } @Test public void equals() { - ColumnDescriptor column1 = new ColumnDescriptor(); - column1.setName("n1"); - column1.namePrefix = "np1"; - column1.setTableName("t1"); // type should be ignored in the comparison - column1.setJdbcType(Types.VARCHAR); - - ColumnDescriptor column2 = new ColumnDescriptor(); - column2.setName("n1"); - column2.namePrefix = "np1"; - column2.setTableName("t1"); - column2.setJdbcType(Types.BOOLEAN); - - ColumnDescriptor column3 = new ColumnDescriptor(); - column3.setName("n1"); - column3.namePrefix = "np3"; - column3.setTableName("t1"); + ColumnDescriptor column1 = new ColumnDescriptor("n1", "k1", Types.VARCHAR, null, null); + ColumnDescriptor column2 = new ColumnDescriptor("n1", "k1", Types.BOOLEAN, null, null); + ColumnDescriptor column3 = new ColumnDescriptor("n1", "k3", 0, null, null); assertEquals(column1, column2); assertFalse(column1.equals(column3)); @@ -91,23 +55,10 @@ public class ColumnDescriptorTest { @Test public void hashCodeTest() { - ColumnDescriptor column1 = new ColumnDescriptor(); - column1.setName("n1"); - column1.namePrefix = "np1"; - column1.setTableName("t1"); // type should be ignored in the comparison - column1.setJdbcType(Types.VARCHAR); - - ColumnDescriptor column2 = new ColumnDescriptor(); - column2.setName("n1"); - column2.namePrefix = "np1"; - column2.setTableName("t1"); - column2.setJdbcType(Types.BOOLEAN); - - ColumnDescriptor column3 = new ColumnDescriptor(); - column3.setName("n1"); - column3.namePrefix = "np3"; - column3.setTableName("t1"); + ColumnDescriptor column1 = new ColumnDescriptor("n1", "k1", Types.VARCHAR, null, null); + ColumnDescriptor column2 = new ColumnDescriptor("n1", "k1", Types.BOOLEAN, null, null); + ColumnDescriptor column3 = new ColumnDescriptor("n1", "k3", 0, null, null); assertEquals(column1.hashCode(), column2.hashCode()); diff --git a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/ColumnDescriptorStageTest.java b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/ColumnDescriptorStageTest.java index 092b84155..5e3eb0032 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/ColumnDescriptorStageTest.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/ColumnDescriptorStageTest.java @@ -48,6 +48,6 @@ public class ColumnDescriptorStageTest { assertEquals(1, context.getColumnDescriptors().size()); ColumnDescriptor descriptor = context.getColumnDescriptors().iterator().next(); - assertEquals("key", descriptor.getDataRowKey()); + assertEquals("key", descriptor.dataRowKey()); } } \ No newline at end of file diff --git a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DbAdapterDelegatedSelectTranslatorIT.java b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DbAdapterDelegatedSelectTranslatorIT.java index 55f7082ef..3ef4da969 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DbAdapterDelegatedSelectTranslatorIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DbAdapterDelegatedSelectTranslatorIT.java @@ -720,7 +720,7 @@ public class DbAdapterDelegatedSelectTranslatorIT { tr.sql(); List<ColumnDescriptor> columns = Arrays.asList(tr.resultColumns()); - columns.sort(Comparator.comparing(ColumnDescriptor::getName)); + columns.sort(Comparator.comparing(ColumnDescriptor::name)); DbEntity entity = env.context().getEntityResolver().getDbEntity("PAINTING"); List<DbAttribute> attributes = new ArrayList<>(entity.getAttributes()); @@ -732,10 +732,10 @@ public class DbAdapterDelegatedSelectTranslatorIT { for(int i=0; i<attributes.size(); i++) { DbAttribute attribute = attributes.get(i); ColumnDescriptor descriptor = columns.get(i); - assertEquals(attribute, descriptor.getAttribute()); - assertEquals(attribute.getName(), descriptor.getName()); - assertEquals(attribute.getName(), descriptor.getDataRowKey()); - assertEquals(attribute.getType(), descriptor.getJdbcType()); + assertEquals(attribute, descriptor.attribute()); + assertEquals(attribute.getName(), descriptor.name()); + assertEquals(attribute.getName(), descriptor.dataRowKey()); + assertEquals(attribute.getType(), descriptor.jdbcType()); } } @@ -750,7 +750,7 @@ public class DbAdapterDelegatedSelectTranslatorIT { tr.sql(); List<ColumnDescriptor> columns = Arrays.asList(tr.resultColumns()); - columns.sort(Comparator.comparing(ColumnDescriptor::getName)); + columns.sort(Comparator.comparing(ColumnDescriptor::name)); DbEntity rootEntity = env.context().getEntityResolver().getDbEntity("PAINTING"); List<DbAttribute> attributes = new ArrayList<>(rootEntity.getAttributes()); @@ -761,14 +761,14 @@ public class DbAdapterDelegatedSelectTranslatorIT { for(int i=0; i<attributes.size(); i++) { DbAttribute attribute = attributes.get(i); ColumnDescriptor descriptor = columns.get(i); - assertEquals(attribute, descriptor.getAttribute()); - assertEquals(attribute.getName(), descriptor.getName()); + assertEquals(attribute, descriptor.attribute()); + assertEquals(attribute.getName(), descriptor.name()); if("ARTIST".equals(attribute.getEntity().getName())) { - assertEquals("toArtist." + attribute.getName(), descriptor.getDataRowKey()); + assertEquals("toArtist." + attribute.getName(), descriptor.dataRowKey()); } else { - assertEquals(attribute.getName(), descriptor.getDataRowKey()); + assertEquals(attribute.getName(), descriptor.dataRowKey()); } - assertEquals(attribute.getType(), descriptor.getJdbcType()); + assertEquals(attribute.getType(), descriptor.jdbcType()); } } diff --git a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DefaultObjectSelectTranslatorIT.java b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DefaultObjectSelectTranslatorIT.java index 35293b4fb..bdea314f4 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DefaultObjectSelectTranslatorIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/translator/select/DefaultObjectSelectTranslatorIT.java @@ -48,9 +48,9 @@ public class DefaultObjectSelectTranslatorIT { assertEquals(0, translator.bindings().length); assertEquals(3, translator.resultColumns().length); - assertEquals("ARTIST_NAME", translator.resultColumns()[0].getDataRowKey()); - assertEquals("DATE_OF_BIRTH", translator.resultColumns()[1].getDataRowKey()); - assertEquals("ARTIST_ID", translator.resultColumns()[2].getDataRowKey()); + assertEquals("ARTIST_NAME", translator.resultColumns()[0].dataRowKey()); + assertEquals("DATE_OF_BIRTH", translator.resultColumns()[1].dataRowKey()); + assertEquals("ARTIST_ID", translator.resultColumns()[2].dataRowKey()); assertFalse(translator.hasJoins()); assertFalse(translator.suppressingDistinct()); } @@ -76,9 +76,9 @@ public class DefaultObjectSelectTranslatorIT { assertEquals("PAINTING_TITLE", translator.bindings()[1].getAttribute().getName()); assertEquals(3, translator.resultColumns().length); - assertEquals("ARTIST_NAME", translator.resultColumns()[0].getDataRowKey()); - assertEquals("DATE_OF_BIRTH", translator.resultColumns()[1].getDataRowKey()); - assertEquals("ARTIST_ID", translator.resultColumns()[2].getDataRowKey()); + assertEquals("ARTIST_NAME", translator.resultColumns()[0].dataRowKey()); + assertEquals("DATE_OF_BIRTH", translator.resultColumns()[1].dataRowKey()); + assertEquals("ARTIST_ID", translator.resultColumns()[2].dataRowKey()); assertTrue(translator.hasJoins()); assertFalse(translator.suppressingDistinct()); @@ -108,16 +108,16 @@ public class DefaultObjectSelectTranslatorIT { assertEquals(0, translator.bindings().length); assertEquals(9, translator.resultColumns().length); - assertEquals("ESTIMATED_PRICE", translator.resultColumns()[0].getDataRowKey()); - assertEquals("PAINTING_DESCRIPTION", translator.resultColumns()[1].getDataRowKey()); - assertEquals("PAINTING_TITLE", translator.resultColumns()[2].getDataRowKey()); - assertEquals("ARTIST_ID", translator.resultColumns()[3].getDataRowKey()); - assertEquals("GALLERY_ID", translator.resultColumns()[4].getDataRowKey()); - assertEquals("PAINTING_ID", translator.resultColumns()[5].getDataRowKey()); - - assertEquals("toArtist.ARTIST_ID", translator.resultColumns()[6].getDataRowKey()); - assertEquals("toArtist.DATE_OF_BIRTH", translator.resultColumns()[7].getDataRowKey()); - assertEquals("toArtist.ARTIST_NAME", translator.resultColumns()[8].getDataRowKey()); + assertEquals("ESTIMATED_PRICE", translator.resultColumns()[0].dataRowKey()); + assertEquals("PAINTING_DESCRIPTION", translator.resultColumns()[1].dataRowKey()); + assertEquals("PAINTING_TITLE", translator.resultColumns()[2].dataRowKey()); + assertEquals("ARTIST_ID", translator.resultColumns()[3].dataRowKey()); + assertEquals("GALLERY_ID", translator.resultColumns()[4].dataRowKey()); + assertEquals("PAINTING_ID", translator.resultColumns()[5].dataRowKey()); + + assertEquals("toArtist.ARTIST_ID", translator.resultColumns()[6].dataRowKey()); + assertEquals("toArtist.DATE_OF_BIRTH", translator.resultColumns()[7].dataRowKey()); + assertEquals("toArtist.ARTIST_NAME", translator.resultColumns()[8].dataRowKey()); assertTrue(translator.hasJoins()); assertFalse(translator.suppressingDistinct()); diff --git a/cayenne/src/test/java/org/apache/cayenne/query/ProcedureCallIT.java b/cayenne/src/test/java/org/apache/cayenne/query/ProcedureCallIT.java index d73a0c1ba..5d85e1439 100644 --- a/cayenne/src/test/java/org/apache/cayenne/query/ProcedureCallIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/query/ProcedureCallIT.java @@ -21,6 +21,7 @@ package org.apache.cayenne.query; import org.apache.cayenne.DataRow; import org.apache.cayenne.ProcedureResult; import org.apache.cayenne.access.jdbc.ColumnDescriptor; +import org.apache.cayenne.dba.TypesMapping; import org.apache.cayenne.log.NoopJdbcEventLogger; import org.apache.cayenne.testdo.testmap.Artist; import org.apache.cayenne.testdo.testmap.Painting; @@ -242,9 +243,9 @@ public class ProcedureCallIT { ColumnDescriptor[] columns = new ColumnDescriptor[3]; // read ID as Long, and everything else as default types - columns[0] = new ColumnDescriptor("ARTIST_ID", Types.BIGINT); - columns[1] = new ColumnDescriptor("ARTIST_NAME", Types.CHAR); - columns[2] = new ColumnDescriptor("DATE_OF_BIRTH", Types.DATE); + columns[0] = new ColumnDescriptor("ARTIST_ID", "ARTIST_ID", Types.BIGINT, TypesMapping.getJavaBySqlType(Types.BIGINT), null); + columns[1] = new ColumnDescriptor("ARTIST_NAME", "ARTIST_NAME", Types.CHAR, TypesMapping.getJavaBySqlType(Types.CHAR), null); + columns[2] = new ColumnDescriptor("DATE_OF_BIRTH", "DATE_OF_BIRTH", Types.DATE, TypesMapping.getJavaBySqlType(Types.DATE), null); List<?> rows = runProcedureSelect(ProcedureCall.dataRowQuery(SELECT_STORED_PROCEDURE) .param("aName", "An Artist")
