cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eric Polino" <e...@campgroundautomation.com>
Subject Re: QueryChain
Date Wed, 20 Aug 2008 18:22:51 GMT
Alright sweet! That was it! Thanks.

Now, QueryChain always returns DataRows because it can't know how to
marshal objects.  Clearly the results from the three queries being run
in the following code could be marshaled into List<Student> objects.
Is there a way I can do that?

  SQLTemplate tmpl = new SQLTemplate(TypeFoo.class, "select
#result('field1' 'int' 'age'), #result('field2' 'String' 'name') from
Students where age < $bar");
  QueryChain query = new QueryChain();

  Map<String, String> param = new HashMap<String, String>();

  param.put("bar", "4");
  query.add(tmpl.queryWithParameters(param));

  param.put("bar", "7");
  query.add(tmpl.queryWithParameters(param));

  param.put("bar", "14");
  query.add(tmpl.queryWithParameters(param));

  QueryResponse response = context.performGenericQuery(query);

Here's how I'm getting my List<List<DataRow>> object from
performGenericQuery().  It's a little dirty, but it seems to work for
me.  Is this any useful to the marshaling I'm talking about above?

    QueryResponse ret = getDataContext().performGenericQuery(query);
    List<List<DataRow>> val = new ArrayList<List<DataRow>>();
    ret.reset();
    while(ret.next()){
      if(ret.isList()){
        val.add(ret.currentList());
      }
    }

Once again, TIA,
Eric


On Wed, Aug 20, 2008 at 4:09 AM, Andrus Adamchik <andrus@objectstyle.org> wrote:
> Hi Eric,
>
> 'performQuery' method will only return the first result set, no matter how
> many results you have in the query. To get all results, you will need to use
> a different method for select:
>
> QueryResponse result = context.performGenericQuery(query);
>
> Then you can scan vis the QueryResponse object and access individual result
> lists:
>
> http://cayenne.apache.org/doc/api/org/apache/cayenne/QueryResponse.html
>
> HTH
> Andrus
>
>
> On Aug 19, 2008, at 5:21 PM, Eric Polino wrote:
>
>> I need to run a group of select queries all at once and would like to
>> parallelize it.  I'm attempting to do it with QueryChain but I'm
>> having issues getting the data I'm querying.  I know that QueryChain
>> will always return DataRows, but it seems as though I only get the
>> first query's result back and not all of them.  I'm using this page
>> from the guide as my starting point.
>> http://cayenne.apache.org/doc/querychain.html
>>
>> QueryChain query = new QueryChain();
>>
>> query.addQuery(new SQLTemplate(TypeFoo.class, "select count(*) as foo1
>> from TypeFoo"));
>> query.addQuery(new SQLTemplate(TypeBar.class, "select count(*) as foo2
>> from TypeBar"));
>> query.addQuery(new SQLTemplate(Type.class, "select count(*) as foo3
>> from Type"));
>>
>> List<DataRow> ret = getDataContext().performQuery(query);
>> DataRow dr = ret.get(0);
>>
>> System.out.println(ret.size()); //  "1"
>> System.out.println(dr.keySet().size());  //  "1"
>> System.out.println("FOO1 " + dr.get("FOO1")); //  "FOO1 123"
>> System.out.println("FOO2 " + dr.get("FOO2")); //  "FOO2 null"
>> System.out.println("FOO3 " + dr.get("FOO3")); //  "FOO3 null"
>>
>> TIA,
>> Eric
>>
>>
>> --
>> Eric Polino
>> Campground Automated Systems
>>
>
>



-- 
Eric Polino
Campground Automated Systems

Mime
View raw message