Re: QueryChain

From: Eric Polino (eri..ampgroundautomation.com)
Date: Wed Aug 20 2008 - 14:24:17 EDT

  • Next message: Aristedes Maniatis: "Re: Handling of database NULL - default value column to modeler?"

    On Wed, Aug 20, 2008 at 2:22 PM, Eric Polino
    <eri..ampgroundautomation.com> wrote:
    > 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

    Typo, that should be Student.class, and not TypeFoo.class

    > #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 <andru..bjectstyle.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
    >

    -- 
    Eric Polino
    Campground Automated Systems
    



    This archive was generated by hypermail 2.0.0 : Wed Aug 20 2008 - 14:24:49 EDT