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/26 11:30:06 UTC

svn commit: r729476 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src: main/java/org/apache/cayenne/access/ main/java/org/apache/cayenne/access/jdbc/ main/java/org/apache/cayenne/access/select/ main/java/org/apache/cayenne/cache/ main/j...

Author: aadamchik
Date: Fri Dec 26 02:30:04 2008
New Revision: 729476

URL: http://svn.apache.org/viewvc?rev=729476&view=rev
Log:
CAY-1162 SelectDescriptor concept

refactoring of custom SQL result descriptors to remove some overengineered structures and make descriptors more usable

Added:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultEntityResultSegment.java
      - copied, changed from r729459, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultEntityResultSegment.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultScalarResultSegment.java
      - copied, changed from r729459, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultScalarResultSegment.java
Removed:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultEntityResultSegment.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultResultSetMetadata.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultScalarResultSegment.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLResultSetMetadata.java
Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQuery.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectStore.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.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/EntitySegmentBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/ScalarSegmentBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/SelectDescriptorBuilder.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/cache/NestedQueryCache.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/SQLResult.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultQueryMetadata.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/EJBQLQueryMetadata.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadata.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadataWrapper.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalQuery.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RangeQuery.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/MockQueryMetadata.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQuery.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQuery.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQuery.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQuery.java Fri Dec 26 02:30:04 2008
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.access;
 
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cayenne.map.DataMap;
@@ -32,7 +33,6 @@
 import org.apache.cayenne.query.QueryRouter;
 import org.apache.cayenne.query.SQLAction;
 import org.apache.cayenne.query.SQLActionVisitor;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.reflect.ClassDescriptor;
 
 /**
@@ -51,7 +51,7 @@
         return this;
     }
 
-    public SQLResultSetMetadata getResultSetMapping() {
+    public List<Object> getResultSetMapping() {
         return null;
     }
 
@@ -73,7 +73,7 @@
     public String getCacheKey() {
         return null;
     }
-    
+
     public Map<String, String> getPathSplitAliases() {
         return null;
     }
@@ -104,7 +104,7 @@
     public int getFetchOffset() {
         return 0;
     }
-    
+
     /**
      * @deprecated since 3.0
      */

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java Fri Dec 26 02:30:04 2008
@@ -37,10 +37,10 @@
 import org.apache.cayenne.cache.QueryCacheEntryFactory;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbRelationship;
-import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.LifecycleEvent;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.query.EntityResultSegment;
 import org.apache.cayenne.query.ObjectIdQuery;
 import org.apache.cayenne.query.PrefetchSelectQuery;
 import org.apache.cayenne.query.PrefetchTreeNode;
@@ -50,7 +50,6 @@
 import org.apache.cayenne.query.QueryRouter;
 import org.apache.cayenne.query.RefreshQuery;
 import org.apache.cayenne.query.RelationshipQuery;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.LifecycleCallbackRegistry;
 import org.apache.cayenne.util.GenericResponse;
@@ -434,20 +433,19 @@
 
                 ObjectConversionStrategy converter;
 
-                SQLResultSetMetadata rsMapping = metadata.getResultSetMapping();
+                List<Object> rsMapping = metadata.getResultSetMapping();
                 if (rsMapping == null) {
                     converter = new SingleObjectConversionStrategy();
                 }
                 else {
 
-                    int entityResultCount = rsMapping.getEntitySegments().length;
-                    int columnResultCount = rsMapping.getScalarSegments().length;
-
-                    if (entityResultCount == 1 && columnResultCount == 0) {
-                        converter = new SingleObjectConversionStrategy();
-                    }
-                    else if (entityResultCount == 0 && columnResultCount == 1) {
-                        converter = new SingleScalarConversionStrategy();
+                    if (rsMapping.size() == 1) {
+                        if (rsMapping.get(0) instanceof EntityResultSegment) {
+                            converter = new SingleObjectConversionStrategy();
+                        }
+                        else {
+                            converter = new SingleScalarConversionStrategy();
+                        }
                     }
                     else {
                         converter = new MixedConversionStrategy();
@@ -681,29 +679,25 @@
 
             int rowsLen = mainRows.size();
 
-            SQLResultSetMetadata rsMapping = metadata.getResultSetMapping();
+            List<Object> rsMapping = metadata.getResultSetMapping();
+            int width = rsMapping.size();
 
             // no conversions needed for scalar positions; reuse Object[]'s to fill them
             // with resolved objects
+            List<List<?>> resultLists = new ArrayList<List<?>>(width);
+            for (int i = 0; i < width; i++) {
 
-            int[] entityPositions = rsMapping.getEntitySegments();
-            EntityResolver resolver = domain.getEntityResolver();
-            List[] resultLists = new List[entityPositions.length];
-            for (int i = 0; i < entityPositions.length; i++) {
-                int pos = entityPositions[i];
-
-                List<Persistent> nextResult = toObjects(rsMapping
-                        .getEntitySegment(pos)
-                        .getClassDescriptor(), null, mainRows, pos);
-
-                resultLists[i] = nextResult;
-            }
-
-            for (int j = 0; j < rowsLen; j++) {
-
-                Object[] row = mainRows.get(j);
-                for (int i = 0; i < entityPositions.length; i++) {
-                    row[entityPositions[i]] = resultLists[i].get(j);
+                if (rsMapping.get(i) instanceof EntityResultSegment) {
+                    EntityResultSegment entitySegment = (EntityResultSegment) rsMapping
+                            .get(i);
+                    List<Persistent> nextResult = toObjects(entitySegment
+                            .getClassDescriptor(), null, mainRows, i);
+                    resultLists.add(nextResult);
+
+                    for (int j = 0; j < rowsLen; j++) {
+                        Object[] row = mainRows.get(j);
+                        row[i] = nextResult.get(j);
+                    }
                 }
             }
 
@@ -713,10 +707,8 @@
                     .getCallbackRegistry();
 
             if (!callbackRegistry.isEmpty(LifecycleEvent.POST_LOAD)) {
-                for (int i = 0; i < entityPositions.length; i++) {
-                    callbackRegistry.performCallbacks(
-                            LifecycleEvent.POST_LOAD,
-                            resultLists[i]);
+                for (List<?> list : resultLists) {
+                    callbackRegistry.performCallbacks(LifecycleEvent.POST_LOAD, list);
                 }
             }
         }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectStore.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectStore.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectStore.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/ObjectStore.java Fri Dec 26 02:30:04 2008
@@ -54,7 +54,6 @@
 import org.apache.cayenne.query.QueryCacheStrategy;
 import org.apache.cayenne.query.QueryMetadata;
 import org.apache.cayenne.query.RefreshQuery;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.reflect.AttributeProperty;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.PropertyVisitor;
@@ -406,8 +405,8 @@
     }
 
     /**
-     * Updates snapshots in the underlying DataRowStore. If <code>refresh</code> is
-     * true, all snapshots in <code>snapshots</code> will be loaded into DataRowStore,
+     * Updates snapshots in the underlying DataRowStore. If <code>refresh</code> is true,
+     * all snapshots in <code>snapshots</code> will be loaded into DataRowStore,
      * regardless of the existing cache state. If <code>refresh</code> is false, only
      * missing snapshots are loaded. This method is normally called internally by the
      * DataContext owning the ObjectStore to update the caches after a select query.
@@ -1161,7 +1160,7 @@
             return cacheKey;
         }
 
-        public SQLResultSetMetadata getResultSetMapping() {
+        public List<Object> getResultSetMapping() {
             return null;
         }
 
@@ -1196,7 +1195,7 @@
         public int getFetchOffset() {
             return 0;
         }
-        
+
         /**
          * @deprecated since 3.0
          */

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/EJBQLTranslationContext.java Fri Dec 26 02:30:04 2008
@@ -31,8 +31,8 @@
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.query.EJBQLQuery;
 import org.apache.cayenne.query.EntityResultSegment;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.query.SQLTemplate;
+import org.apache.cayenne.query.ScalarResultSegment;
 import org.apache.cayenne.reflect.ClassDescriptor;
 
 /**
@@ -46,7 +46,7 @@
     private Map<Object, Object> parameters;
     private EJBQLTranslatorFactory translatorFactory;
     private EntityResolver entityResolver;
-    private SQLResultSetMetadata resultSetMetadata;
+    private List<Object> resultSetMetadata;
 
     private Map<String, String> tableAliases;
     private Map<String, Object> boundParameters;
@@ -387,7 +387,7 @@
                     "No result set mapping exists for expression, can't map EntityResult");
         }
 
-        return resultSetMetadata.getEntitySegment(resultDescriptorPosition++);
+        return (EntityResultSegment) resultSetMetadata.get(resultDescriptorPosition++);
     }
 
     /**
@@ -400,7 +400,8 @@
                     "No result set mapping exists for expression, can't map column aliases");
         }
 
-        return resultSetMetadata.getScalarSegment(resultDescriptorPosition++).getColumn();
+        return ((ScalarResultSegment) resultSetMetadata.get(resultDescriptorPosition++))
+                .getColumn();
     }
 
     boolean isAppendingResultColumns() {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/jdbc/JDBCResultIterator.java Fri Dec 26 02:30:04 2008
@@ -31,7 +31,7 @@
 import org.apache.cayenne.access.ResultIterator;
 import org.apache.cayenne.query.EntityResultSegment;
 import org.apache.cayenne.query.QueryMetadata;
-import org.apache.cayenne.query.SQLResultSetMetadata;
+import org.apache.cayenne.query.ScalarResultSegment;
 
 /**
  * A ResultIterator over the underlying JDBC ResultSet.
@@ -86,37 +86,42 @@
             RowDescriptor descriptor,
             QueryMetadata queryMetadata) {
 
-        SQLResultSetMetadata rsMapping = queryMetadata.getResultSetMapping();
+        List<Object> rsMapping = queryMetadata.getResultSetMapping();
         if (rsMapping != null) {
 
-            int resultWidth = rsMapping.getSegmentsCount();
-            int[] entitySegments = rsMapping.getEntitySegments();
-            int[] scalarSegments = rsMapping.getScalarSegments();
-
+            int resultWidth = rsMapping.size();
             if (resultWidth == 0) {
                 throw new CayenneRuntimeException("Empty result descriptor");
             }
             else if (resultWidth == 1) {
 
-                if (entitySegments.length > 0) {
-                    return createEntityRowReader(descriptor, rsMapping
-                            .getEntitySegment(0));
+                Object segment = rsMapping.get(0);
+
+                if (segment instanceof EntityResultSegment) {
+                    return createEntityRowReader(
+                            descriptor,
+                            (EntityResultSegment) segment);
                 }
                 else {
-                    return new ScalarRowReader(descriptor, rsMapping.getScalarSegment(0));
+                    return new ScalarRowReader(descriptor, (ScalarResultSegment) segment);
                 }
             }
             else {
                 CompoundRowReader reader = new CompoundRowReader(resultWidth);
-                for (int i : entitySegments) {
 
-                    reader.addRowReader(i, createEntityRowReader(descriptor, rsMapping
-                            .getEntitySegment(i)));
-                }
+                for (int i = 0; i < resultWidth; i++) {
+                    Object segment = rsMapping.get(i);
 
-                for (int i : scalarSegments) {
-                    reader.addRowReader(i, new ScalarRowReader(descriptor, rsMapping
-                            .getScalarSegment(i)));
+                    if (segment instanceof EntityResultSegment) {
+                        reader.addRowReader(i, createEntityRowReader(
+                                descriptor,
+                                (EntityResultSegment) segment));
+                    }
+                    else {
+                        reader.addRowReader(i, new ScalarRowReader(
+                                descriptor,
+                                (ScalarResultSegment) segment));
+                    }
                 }
 
                 return reader;

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=729476&r1=729475&r2=729476&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 Fri Dec 26 02:30:04 2008
@@ -33,12 +33,8 @@
     private CompoundRowReader rowReader;
     private List<SelectColumn> columns;
 
-    CompoundSelectDescriptor(int width) {
-        this.segments = new SelectDescriptor[width];
-    }
-
-    void append(int position, SelectDescriptor<Object> segmentDescriptor) {
-        segments[position] = segmentDescriptor;
+    CompoundSelectDescriptor(SelectDescriptor<Object>[] segments) {
+        this.segments = segments;
     }
 
     public List<SelectColumn> getColumns() {

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=729476&r1=729475&r2=729476&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 Fri Dec 26 02:30:04 2008
@@ -35,7 +35,6 @@
 import org.apache.cayenne.map.ObjRelationship;
 import org.apache.cayenne.query.EntityResultSegment;
 import org.apache.cayenne.query.QueryMetadata;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.reflect.ClassDescriptor;
 
 /**
@@ -56,9 +55,9 @@
         ClassDescriptor rootDescriptor;
         EntityResultSegment segmentMetadata;
 
-        SQLResultSetMetadata resultSetMetadata = metadata.getResultSetMapping();
-        if (resultSetMetadata != null) {
-            segmentMetadata = resultSetMetadata.getEntitySegment(position);
+        List<Object> segmentDesriptors = metadata.getResultSetMapping();
+        if (segmentDesriptors != null) {
+            segmentMetadata = (EntityResultSegment) segmentDesriptors.get(position);
             rootDescriptor = segmentMetadata.getClassDescriptor();
         }
         else {

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=729476&r1=729475&r2=729476&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 Fri Dec 26 02:30:04 2008
@@ -18,9 +18,10 @@
  ****************************************************************/
 package org.apache.cayenne.access.select;
 
+import java.util.List;
+
 import org.apache.cayenne.access.types.ExtendedType;
 import org.apache.cayenne.access.types.ExtendedTypeMap;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.query.ScalarResultSegment;
 
 /**
@@ -28,16 +29,17 @@
  */
 class ScalarSegmentBuilder {
 
-    private SQLResultSetMetadata metadata;
+    private List<Object> resultDescriptors;
     private ExtendedType converter;
 
-    ScalarSegmentBuilder(ExtendedTypeMap extendedTypes, SQLResultSetMetadata metadata) {
+    ScalarSegmentBuilder(ExtendedTypeMap extendedTypes, List<Object> resultDescriptors) {
         this.converter = extendedTypes.getDefaultType();
-        this.metadata = metadata;
+        this.resultDescriptors = resultDescriptors;
     }
 
     SelectDescriptor<Object> getSegment(int position) {
-        ScalarResultSegment segment = metadata.getScalarSegment(position);
+        ScalarResultSegment segment = (ScalarResultSegment) resultDescriptors
+                .get(position);
         return new ScalarSegment(segment.getColumn(), converter);
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/SelectDescriptorBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/SelectDescriptorBuilder.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/SelectDescriptorBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/select/SelectDescriptorBuilder.java Fri Dec 26 02:30:04 2008
@@ -18,10 +18,12 @@
  ****************************************************************/
 package org.apache.cayenne.access.select;
 
+import java.util.List;
+
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.access.types.ExtendedTypeMap;
+import org.apache.cayenne.query.EntityResultSegment;
 import org.apache.cayenne.query.QueryMetadata;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 
 /**
  * A class used as a builder of SelectDescriptors of any complexity.
@@ -41,75 +43,67 @@
 
     public SelectDescriptor<?> fromQueryMetadata(QueryMetadata queryMetadata) {
 
-        int resultWidth;
-        int[] entitySegments;
-        int[] scalarSegments;
-
-        // No metadata mapping means a single entity result...
-        SQLResultSetMetadata resultSetMetadata = queryMetadata.getResultSetMapping();
-        if (resultSetMetadata != null) {
-            resultWidth = resultSetMetadata.getSegmentsCount();
-            entitySegments = resultSetMetadata.getEntitySegments();
-            scalarSegments = resultSetMetadata.getScalarSegments();
-        }
-        else {
-            resultWidth = 1;
-            entitySegments = new int[] {
-                0
-            };
-            scalarSegments = new int[0];
-        }
+        List<Object> segmentDescriptors = queryMetadata.getResultSetMapping();
+        int resultWidth = segmentDescriptors != null ? segmentDescriptors.size() : 1;
 
         if (resultWidth == 0) {
             throw new CayenneRuntimeException("Empty result descriptor");
         }
 
+        int entitySegments = 0, scalarSegments = 0;
+        SelectDescriptor<Object>[] segments = new SelectDescriptor[resultWidth];
+
+        if (segmentDescriptors == null) {
+            segments[0] = getEntitySegmentBuilder(queryMetadata).getSegment(0);
+            entitySegments++;
+        }
+        else {
+            for (int i = 0; i < resultWidth; i++) {
+
+                Object segmentDescriptor = segmentDescriptors.get(i);
+
+                if (segmentDescriptor instanceof EntityResultSegment) {
+                    segments[i] = getEntitySegmentBuilder(queryMetadata).getSegment(i);
+                    entitySegments++;
+                }
+                else {
+                    segments[i] = getScalarSegmentBuilder(segmentDescriptors).getSegment(
+                            i);
+                    scalarSegments++;
+                }
+            }
+        }
+
         // sanity check - paginated queries are only possible if there is an "id" of each
         // row. for now this means single entity queries...
         if (queryMetadata.getPageSize() > 0) {
-            if (entitySegments.length != 1 || scalarSegments.length != 0) {
+            if (entitySegments != 1 || scalarSegments != 0) {
                 throw new CayenneRuntimeException(
                         "Paginated queries are only supported for a single entity result");
             }
         }
 
-        if (scalarSegments.length > 0) {
-            scalarSegmentBuilder = createScalarSegmentBuilder(resultSetMetadata);
-        }
-
-        if (entitySegments.length > 0) {
-            entitySegmentBuilder = createEntitySegmentBuilder(queryMetadata);
-        }
-
         // do some small optimizations for the common 1 segment results...
         if (resultWidth == 1) {
-            if (entitySegments.length > 0) {
-                return entitySegmentBuilder.getSegment(0);
-            }
-            else {
-                return scalarSegmentBuilder.getSegment(0);
-            }
-        }
-
-        CompoundSelectDescriptor compoundDescriptor = new CompoundSelectDescriptor(
-                resultWidth);
-
-        for (int i : entitySegments) {
-            compoundDescriptor.append(i, entitySegmentBuilder.getSegment(i));
-        }
-
-        for (int i : scalarSegments) {
-            compoundDescriptor.append(i, scalarSegmentBuilder.getSegment(i));
+            return segments[0];
         }
 
-        return compoundDescriptor;
+        return new CompoundSelectDescriptor(segments);
     }
 
-    protected EntitySegmentBuilder createEntitySegmentBuilder(QueryMetadata queryMetadata) {
-        return new EntitySegmentBuilder(extendedTypes, queryMetadata);
+    protected EntitySegmentBuilder getEntitySegmentBuilder(QueryMetadata queryMetadata) {
+        if (entitySegmentBuilder == null) {
+            entitySegmentBuilder = new EntitySegmentBuilder(extendedTypes, queryMetadata);
+        }
+        return entitySegmentBuilder;
     }
 
-    protected ScalarSegmentBuilder createScalarSegmentBuilder(SQLResultSetMetadata md) {
-        return new ScalarSegmentBuilder(extendedTypes, md);
+    protected ScalarSegmentBuilder getScalarSegmentBuilder(List<Object> segmentDescriptors) {
+        if (scalarSegmentBuilder == null) {
+            scalarSegmentBuilder = new ScalarSegmentBuilder(
+                    extendedTypes,
+                    segmentDescriptors);
+        }
+        return scalarSegmentBuilder;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/cache/NestedQueryCache.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/cache/NestedQueryCache.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/cache/NestedQueryCache.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/cache/NestedQueryCache.java Fri Dec 26 02:30:04 2008
@@ -29,7 +29,6 @@
 import org.apache.cayenne.query.Query;
 import org.apache.cayenne.query.QueryCacheStrategy;
 import org.apache.cayenne.query.QueryMetadata;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.reflect.ClassDescriptor;
 
 /**
@@ -164,7 +163,7 @@
         public int getFetchOffset() {
             return mdDelegate.getFetchOffset();
         }
-        
+
         /**
          * @deprecated since 3.0
          */
@@ -187,7 +186,7 @@
         public PrefetchTreeNode getPrefetchTree() {
             return mdDelegate.getPrefetchTree();
         }
-        
+
         public Map<String, String> getPathSplitAliases() {
             return mdDelegate.getPathSplitAliases();
         }
@@ -196,7 +195,7 @@
             return mdDelegate.getProcedure();
         }
 
-        public SQLResultSetMetadata getResultSetMapping() {
+        public List<Object> getResultSetMapping() {
             return mdDelegate.getResultSetMapping();
         }
 

Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultEntityResultSegment.java (from r729459, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultEntityResultSegment.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultEntityResultSegment.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultEntityResultSegment.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultEntityResultSegment.java&r1=729459&r2=729476&rev=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultEntityResultSegment.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultEntityResultSegment.java Fri Dec 26 02:30:04 2008
@@ -16,10 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.query;
+package org.apache.cayenne.map;
 
 import java.util.Map;
 
+import org.apache.cayenne.query.EntityResultSegment;
 import org.apache.cayenne.reflect.ClassDescriptor;
 
 /**

Copied: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultScalarResultSegment.java (from r729459, cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultScalarResultSegment.java)
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultScalarResultSegment.java?p2=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultScalarResultSegment.java&p1=cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultScalarResultSegment.java&r1=729459&r2=729476&rev=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultScalarResultSegment.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/DefaultScalarResultSegment.java Fri Dec 26 02:30:04 2008
@@ -16,7 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  ****************************************************************/
-package org.apache.cayenne.query;
+package org.apache.cayenne.map;
+
+import org.apache.cayenne.query.ScalarResultSegment;
 
 /**
  * @since 3.0

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/SQLResult.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/SQLResult.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/SQLResult.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/SQLResult.java Fri Dec 26 02:30:04 2008
@@ -21,6 +21,9 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+
+import org.apache.cayenne.reflect.ClassDescriptor;
 
 /**
  * A metadata object that defines how a row in a result set can be converted to result
@@ -41,6 +44,49 @@
 
     }
 
+    public List<Object> getResolvedComponents(EntityResolver resolver) {
+
+        if (resultDescriptors == null) {
+            return Collections.emptyList();
+        }
+
+        List<Object> resolvedComponents = new ArrayList<Object>(resultDescriptors.size());
+
+        int offset = 0;
+        for (Object component : getComponents()) {
+            if (component instanceof String) {
+                resolvedComponents.add(new DefaultScalarResultSegment(
+                        (String) component,
+                        offset));
+                offset = offset + 1;
+            }
+            else if (component instanceof EntityResult) {
+                EntityResult entityResult = (EntityResult) component;
+                Map<String, String> fields = entityResult.getDbFields(resolver);
+
+                String entityName = entityResult.getEntityName();
+                if (entityName == null) {
+                    entityName = resolver
+                            .lookupObjEntity(entityResult.getEntityClass())
+                            .getName();
+                }
+
+                ClassDescriptor classDescriptor = resolver.getClassDescriptor(entityName);
+                resolvedComponents.add(new DefaultEntityResultSegment(
+                        classDescriptor,
+                        fields,
+                        offset));
+                offset = offset + fields.size();
+            }
+            else {
+                throw new IllegalArgumentException(
+                        "Unsupported result descriptor component: " + component);
+            }
+        }
+
+        return resolvedComponents;
+    }
+
     /**
      * Creates a named SQLResultSet.
      */
@@ -57,8 +103,9 @@
     }
 
     /**
-     * Returns a list of result descriptors. Column descriptors are returned as Strings,
-     * entity descriptors - as {@link EntityResult}.
+     * Returns a list of "uncompiled" result descriptors. Column descriptors are returned
+     * as Strings, entity descriptors - as {@link EntityResult}. To get fully resolved
+     * descriptors, use {@link #getResolvedComponents(EntityResolver)}.
      */
     public List<Object> getComponents() {
         return resultDescriptors != null ? resultDescriptors : Collections.EMPTY_LIST;

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/BaseQueryMetadata.java Fri Dec 26 02:30:04 2008
@@ -22,6 +22,7 @@
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
 
@@ -55,7 +56,7 @@
     String cacheKey;
     String[] cacheGroups;
     
-    transient SQLResultSetMetadata resultSetMapping;
+    transient List<Object> resultSetMapping;
     transient DbEntity dbEntity;
     transient DataMap dataMap;
     transient Object lastRoot;
@@ -290,7 +291,7 @@
     /**
      * @since 3.0
      */
-    public SQLResultSetMetadata getResultSetMapping() {
+    public List<Object> getResultSetMapping() {
         return resultSetMapping;
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultQueryMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultQueryMetadata.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultQueryMetadata.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/DefaultQueryMetadata.java Fri Dec 26 02:30:04 2008
@@ -20,6 +20,7 @@
 package org.apache.cayenne.query;
 
 import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cayenne.map.DataMap;
@@ -60,7 +61,7 @@
     /**
      * @since 3.0
      */
-    public SQLResultSetMetadata getResultSetMapping() {
+    public List<Object> getResultSetMapping() {
         return null;
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/EJBQLQueryMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/EJBQLQueryMetadata.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/EJBQLQueryMetadata.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/EJBQLQueryMetadata.java Fri Dec 26 02:30:04 2008
@@ -32,9 +32,9 @@
     boolean resolve(EntityResolver resolver, EJBQLQuery query) {
         EJBQLCompiledExpression expression = query.getExpression(resolver);
 
-        resultSetMapping = expression.getResult() != null
-                ? new DefaultResultSetMetadata(expression.getResult(), resolver)
-                : null;
+        resultSetMapping = expression.getResult() != null ? expression
+                .getResult()
+                .getResolvedComponents(resolver) : null;
 
         ObjEntity root = expression.getRootDescriptor().getEntity();
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadata.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadata.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadata.java Fri Dec 26 02:30:04 2008
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.query;
 
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cayenne.map.DataMap;
@@ -289,10 +290,11 @@
     Map<String, String> getPathSplitAliases();
 
     /**
-     * Returns a mapping of the result set data rows. Can be null. If not null overrides
-     * prefetching and data row settings.
+     * Returns an optional list of result set mapping hints. Elements in the list can be
+     * either {@link EntityResultSegment} or {@link ScalarResultSegment}. The returned
+     * list can be null.
      * 
      * @since 3.0
      */
-    SQLResultSetMetadata getResultSetMapping();
+    List<Object> getResultSetMapping();
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadataWrapper.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadataWrapper.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadataWrapper.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/QueryMetadataWrapper.java Fri Dec 26 02:30:04 2008
@@ -20,6 +20,7 @@
 package org.apache.cayenne.query;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cayenne.map.DataMap;
@@ -64,7 +65,7 @@
     /**
      * @since 3.0
      */
-    public SQLResultSetMetadata getResultSetMapping() {
+    public List<Object> getResultSetMapping() {
         return info.getResultSetMapping();
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/query/SQLTemplateMetadata.java Fri Dec 26 02:30:04 2008
@@ -35,9 +35,9 @@
 
         if (super.resolve(root, resolver, null)) {
 
-            resultSetMapping = query.getResult() != null
-                    ? new DefaultResultSetMetadata(query.getResult(), resolver)
-                    : null;
+            resultSetMapping = query.getResult() != null ? query
+                    .getResult()
+                    .getResolvedComponents(resolver) : null;
 
             // generate unique cache key...
             if (QueryCacheStrategy.NO_CACHE == getCacheStrategy()) {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalQuery.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalQuery.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalQuery.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalQuery.java Fri Dec 26 02:30:04 2008
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.remote;
 
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cayenne.map.DataMap;
@@ -33,7 +34,6 @@
 import org.apache.cayenne.query.QueryRouter;
 import org.apache.cayenne.query.SQLAction;
 import org.apache.cayenne.query.SQLActionVisitor;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.reflect.ClassDescriptor;
 
 /**
@@ -71,7 +71,7 @@
                 return cacheKey;
             }
 
-            public SQLResultSetMetadata getResultSetMapping() {
+            public List<Object> getResultSetMapping() {
                 return metadata.getResultSetMapping();
             }
 
@@ -108,7 +108,7 @@
             public int getFetchOffset() {
                 return metadata.getFetchOffset();
             }
-            
+
             /**
              * @deprecated since 3.0
              */

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/IncrementalSelectQuery.java Fri Dec 26 02:30:04 2008
@@ -36,7 +36,6 @@
 import org.apache.cayenne.query.QueryRouter;
 import org.apache.cayenne.query.SQLAction;
 import org.apache.cayenne.query.SQLActionVisitor;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.util.XMLEncoder;
@@ -79,7 +78,7 @@
                 return cacheKey;
             }
 
-            public SQLResultSetMetadata getResultSetMapping() {
+            public List<Object> getResultSetMapping() {
                 return metadata.getResultSetMapping();
             }
 
@@ -113,7 +112,7 @@
             public int getFetchOffset() {
                 return metadata.getFetchOffset();
             }
-            
+
             /**
              * @deprecated since 3.0
              */

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RangeQuery.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RangeQuery.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RangeQuery.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/remote/RangeQuery.java Fri Dec 26 02:30:04 2008
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.remote;
 
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cayenne.map.DataMap;
@@ -33,7 +34,6 @@
 import org.apache.cayenne.query.QueryRouter;
 import org.apache.cayenne.query.SQLAction;
 import org.apache.cayenne.query.SQLActionVisitor;
-import org.apache.cayenne.query.SQLResultSetMetadata;
 import org.apache.cayenne.reflect.ClassDescriptor;
 
 /**
@@ -76,7 +76,7 @@
                 return originatingQuery;
             }
 
-            public SQLResultSetMetadata getResultSetMapping() {
+            public List<Object> getResultSetMapping() {
                 return null;
             }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/MockQueryMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/MockQueryMetadata.java?rev=729476&r1=729475&r2=729476&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/MockQueryMetadata.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/MockQueryMetadata.java Fri Dec 26 02:30:04 2008
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.query;
 
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cayenne.map.DataMap;
@@ -29,7 +30,7 @@
 
 public class MockQueryMetadata implements QueryMetadata {
     
-    public SQLResultSetMetadata getResultSetMapping() {
+    public List<Object> getResultSetMapping() {
         return null;
     }