You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2008/12/25 20:51:15 UTC
svn commit: r729435 -
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/
Author: aadamchik
Date: Thu Dec 25 11:51:15 2008
New Revision: 729435
URL: http://svn.apache.org/viewvc?rev=729435&view=rev
Log:
CAY-1162 SelectDescriptor concept
support for reading IDs, refactoring
Removed:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/SelectSegment.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundRowReader.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundSelectDescriptor.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntityRowReader.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegment.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegmentBuilder.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/RowReader.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarRowReader.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegment.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegmentBuilder.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundRowReader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundRowReader.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundRowReader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundRowReader.java Thu Dec 25 11:51:15 2008
@@ -39,6 +39,12 @@
this.readers[pos] = reader;
}
+ public void setColumnOffset(int offset) {
+ for (int i = 0; i < readers.length; i++) {
+ readers[i].setColumnOffset(offset);
+ }
+ }
+
public Object[] readRow(ResultSet resultSet) throws CayenneException {
int width = readers.length;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundSelectDescriptor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundSelectDescriptor.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundSelectDescriptor.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/CompoundSelectDescriptor.java Thu Dec 25 11:51:15 2008
@@ -29,15 +29,15 @@
*/
class CompoundSelectDescriptor implements SelectDescriptor<Object[]> {
- private SelectSegment[] segments;
+ private SelectDescriptor<Object>[] segments;
private CompoundRowReader rowReader;
private List<SelectColumn> columns;
CompoundSelectDescriptor(int width) {
- this.segments = new SelectSegment[width];
+ this.segments = new SelectDescriptor[width];
}
- void append(int position, SelectSegment segmentDescriptor) {
+ void append(int position, SelectDescriptor<Object> segmentDescriptor) {
segments[position] = segmentDescriptor;
}
@@ -60,9 +60,13 @@
// finish descriptor initialization
for (int i = 0; i < segments.length; i++) {
- segments[i].setColumnOffset(columns.size());
+
+ int offset = columns.size();
columns.addAll(segments[i].getColumns());
- rowReader.addRowReader(i, segments[i].getRowReader(resultSet));
+
+ RowReader<Object> rowReader = segments[i].getRowReader(resultSet);
+ rowReader.setColumnOffset(offset);
+ this.rowReader.addRowReader(i, rowReader);
}
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntityRowReader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntityRowReader.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntityRowReader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntityRowReader.java Thu Dec 25 11:51:15 2008
@@ -57,7 +57,7 @@
}
}
- void setColumnOffset(int offset) {
+ public void setColumnOffset(int offset) {
for (int i = 0; i < columnIndexes.length; i++) {
columnIndexes[i] = i + offset + 1;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegment.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegment.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegment.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegment.java Thu Dec 25 11:51:15 2008
@@ -26,21 +26,16 @@
/**
* @since 3.0
*/
-class EntitySegment implements SelectSegment {
+class EntitySegment implements SelectDescriptor<Object> {
private List<? extends SelectColumn> columns;
- private EntityRowReader rowReader;
+ private RowReader<Object> rowReader;
- EntitySegment(EntityRowReader rowReader, List<? extends SelectColumn> columns) {
+ EntitySegment(RowReader<Object> rowReader, List<? extends SelectColumn> columns) {
this.columns = columns;
this.rowReader = rowReader;
}
- public void setColumnOffset(int offset) {
- rowReader.setColumnOffset(offset);
-
- }
-
public List<? extends SelectColumn> getColumns() {
return columns;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegmentBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegmentBuilder.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegmentBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/EntitySegmentBuilder.java Thu Dec 25 11:51:15 2008
@@ -51,7 +51,7 @@
this.metadata = metadata;
}
- SelectSegment getSegment(int position) {
+ SelectDescriptor<Object> getSegment(int position) {
ClassDescriptor rootDescriptor;
EntityResultSegment segmentMetadata;
@@ -81,7 +81,7 @@
return forEntity(rootDescriptor, segmentMetadata);
}
- private SelectSegment forEntity(
+ private SelectDescriptor<Object> forEntity(
ClassDescriptor rootDescriptor,
EntityResultSegment segmentMetadata) {
@@ -97,7 +97,7 @@
}
- private SelectSegment forSingleSelectEntity(
+ private SelectDescriptor<Object> forSingleSelectEntity(
ClassDescriptor rootDescriptor,
EntityResultSegment segmentMetadata,
DbEntity root) {
@@ -111,14 +111,22 @@
appender.appendAll();
}
- EntityRowReader rowReader = new EntityRowReader(rootDescriptor
- .getEntity()
- .getName(), appender.columns);
+ RowReader<Object> rowReader;
+ // read single column ID as scalar
+ if (metadata.getPageSize() > 0 && appender.columns.size() == 1) {
+ EntitySelectColumn column = appender.columns.get(0);
+ rowReader = new ScalarRowReader(column.getConverter(), column.getJdbcType());
+ }
+ else {
+ rowReader = new EntityRowReader(
+ rootDescriptor.getEntity().getName(),
+ appender.columns);
+ }
return new EntitySegment(rowReader, appender.columns);
}
- private SelectSegment forUnionSelectEntity(
+ private SelectDescriptor<Object> forUnionSelectEntity(
ClassDescriptor rootDescriptor,
EntityResultSegment segmentMetadata,
Collection<DbEntity> unionRoots) {
@@ -126,7 +134,7 @@
throw new UnsupportedOperationException("TODO: union query");
}
- private SelectSegment forDbEntity(
+ private SelectDescriptor<Object> forDbEntity(
DbEntity dbEntity,
EntityResultSegment segmentMetadata) {
// TODO - queries with DbEntity root
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/RowReader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/RowReader.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/RowReader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/RowReader.java Thu Dec 25 11:51:15 2008
@@ -34,4 +34,10 @@
* Extracts a DataRow from the ResultSet at its current position.
*/
T readRow(ResultSet resultSet) throws CayenneException;
+
+ /**
+ * Sets an absolute offset of the first column processed by the reader from the
+ * begginging of the result set row.
+ */
+ void setColumnOffset(int offset);
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarRowReader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarRowReader.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarRowReader.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarRowReader.java Thu Dec 25 11:51:15 2008
@@ -22,7 +22,6 @@
import org.apache.cayenne.CayenneException;
import org.apache.cayenne.access.types.ExtendedType;
-import org.apache.cayenne.dba.TypesMapping;
import org.apache.cayenne.util.Util;
/**
@@ -32,16 +31,21 @@
private ExtendedType converter;
private int index;
+ private int jdbcType;
- ScalarRowReader(ExtendedType converter, int index) {
+ ScalarRowReader(ExtendedType converter, int jdbcType) {
this.converter = converter;
- this.index = index;
+ this.index = 1;
+ this.jdbcType = jdbcType;
+ }
+
+ public void setColumnOffset(int offset) {
+ this.index = offset + 1;
}
public Object readRow(ResultSet resultSet) throws CayenneException {
try {
- return converter
- .materializeObject(resultSet, index, TypesMapping.NOT_DEFINED);
+ return converter.materializeObject(resultSet, index, jdbcType);
}
catch (CayenneException cex) {
// rethrow unmodified
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegment.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegment.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegment.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegment.java Thu Dec 25 11:51:15 2008
@@ -31,19 +31,14 @@
*
* @since 3.0
*/
-class ScalarSegment implements SelectSegment, SelectColumn {
+class ScalarSegment implements SelectDescriptor<Object>, SelectColumn {
private String columnName;
- private ExtendedType converter;
private RowReader<Object> rowReader;
ScalarSegment(String columnName, ExtendedType converter) {
this.columnName = columnName;
- this.converter = converter;
- }
-
- private RowReader<Object> createRowReader(int offset) {
- return new ScalarRowReader(converter, offset + 1);
+ this.rowReader = new ScalarRowReader(converter, TypesMapping.NOT_DEFINED);
}
public List<SelectColumn> getColumns() {
@@ -51,18 +46,9 @@
}
public RowReader<Object> getRowReader(ResultSet resultSet) {
-
- if (rowReader == null) {
- rowReader = createRowReader(0);
- }
-
return rowReader;
}
- public void setColumnOffset(int offset) {
- this.rowReader = createRowReader(offset);
- }
-
public String getColumnName(int unionSegmentIndex, String tableAlias) {
if (tableAlias == null || tableAlias.length() == 0) {
return columnName;
@@ -77,11 +63,11 @@
public String getDataRowKey() {
throw new UnsupportedOperationException(
- "'dataRowKey' is meaningless for Scalar columns");
+ "'dataRowKey' is meaningless for Scalar segments");
}
public List<DbRelationship> getPath(int unionSegmentIndex) {
throw new UnsupportedOperationException(
- "'dataRowKey' is unsupported for Scalar columns");
+ "'getPath' is unsupported for Scalar segments");
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegmentBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegmentBuilder.java?rev=729435&r1=729434&r2=729435&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegmentBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegmentBuilder.java Thu Dec 25 11:51:15 2008
@@ -36,7 +36,7 @@
this.metadata = metadata;
}
- SelectSegment getSegment(int position) {
+ SelectDescriptor<Object> getSegment(int position) {
ScalarResultSegment segment = metadata.getScalarSegment(position);
return new ScalarSegment(segment.getColumn(), converter);
}