Re: QueryChain

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

  • Next message: Eric Polino: "Re: QueryChain"

    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 <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
    



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