i added a patch against trunk to the ticket. spiffytech - can you see if that works for you?
cfh On Monday, August 13, 2012 12:20:02 AM UTC-7, howesc wrote: > > we do special query handling on the key field, so i suspect the multiple > filters on key is wonky. i'll try and look at this in the next couple of > days.... > > thanks for reporting, and thanks for your patience guiding us through it. > :) > > christian > > On Sunday, August 12, 2012 8:01:29 PM UTC-7, spiffytech wrote: >> >> Yes, I've verified that this can be done. The below query works in the >> App Engine Datastore Viewer (note that it only worked once I manually >> created the index in index.yaml and deployed it; web2py did not >> automatically create the appropriate index: >> >> SELECT * FROM posts WHERE __key__ IN (KEY('posts', 3), KEY('posts', 4), >> KEY('posts', 1003)) and post_date <= DATETIME('2012-08-12 00:00:00') ORDER >> BY post_date DESC >> >> >> On Sunday, August 12, 2012 9:56:20 PM UTC-4, Anthony wrote: >>> >>> How would you do the query in GQL? Have you confirmed that it can be >>> done? >>> >>> Anthony >>> >>> On Sunday, August 12, 2012 9:23:39 PM UTC-4, spiffytech wrote: >>>> >>>> I tested with your suggested orderby, but the outcome was the same. >>>> >>>> I tested with the query as you wrote it below, with no common_filter, >>>> and the query still failed. Since that's a pretty straightforward query >>>> that should work, this seems like a bug to me, so I filed a web2py bug >>>> report: http://code.google.com/p/web2py/issues/detail?id=930 >>>> >>>> >>>> On Thursday, August 9, 2012 5:39:14 PM UTC-4, howesc wrote: >>>>> >>>>> i had to look up common_filters.....based on your experience i would >>>>> assume that this is being implemented as a query filter rather than >>>>> getting >>>>> results from the DB and then filtering them. so what is must be causing >>>>> in >>>>> your case is: >>>>> >>>>> posts = db((db.posts.id.belongs(post_ids)) & >>>>> (db.posts.post_date<=request.now)).select(db.posts.ALL,orderby=db.posts.post_date, >>>>> cache >>>>> =(cache.ram, 60)) >>>>> >>>>> it *might* work if you put an orderby on that is >>>>> db.posts.id|db.posts.post_date >>>>> i'm not sure. you might have to remove the common filter for this query >>>>> and then filter the results. (i don't have experience with common filters >>>>> and how they are implemented) >>>>> >>>>> GAE has a restriction on IN queries (web2py belongs queries) that they >>>>> have no more than 30 items in the list. "because i said so" says google. >>>>> >>>>> >>>>> >>>>> On Thursday, August 9, 2012 1:57:13 PM UTC-7, spiffytech wrote: >>>>>> >>>>>> I've narrowed the problem down further- the exception is caused by a >>>>>> common_filter attached to my posts table: >>>>>> >>>>>> common_filter = lambda query: db.posts.post_date <= request.now >>>>>> >>>>>> I'm not sure why that would trigger the orderby error, though. >>>>>> >>>>>> Also, is there some significance to limiting the belongs lists to 30 >>>>>> items? >>>>>> >>>>>> >>>>>> >>>>>> On Thursday, August 9, 2012 4:24:13 PM UTC-4, howesc wrote: >>>>>>> >>>>>>> the query and the error message do not match. your query has no >>>>>>> orderby, yet the error message suggests there is an orderby property >>>>>>> set. >>>>>>> this confuses me. >>>>>>> >>>>>>> i do: >>>>>>> >>>>>>> db(db.table.id.belongs([list of items not more than 30 >>>>>>> long])).select() >>>>>>> >>>>>>> all the time on GAE and it works for me (latest stable web2py, and >>>>>>> the last time i checked trunk though that was a few weeks ago) >>>>>>> >>>>>>> note that cache does nothing on selects on GAE due to the inability >>>>>>> to serialize Rows objects to memcache (at least i think that is the >>>>>>> limitation) >>>>>>> >>>>>>> cfh >>>>>>> >>>>>>> On Thursday, August 9, 2012 10:40:33 AM UTC-7, spiffytech wrote: >>>>>>>> >>>>>>>> I'm trying to use the DAL belongs clause on App Engine and am >>>>>>>> getting an error. >>>>>>>> >>>>>>>> posts = db(db.posts.id.belongs(post_ids)).select(db.posts.ALL,cache >>>>>>>> =(cache.ram, 60)) >>>>>>>> >>>>>>>> Produces: >>>>>>>> >>>>>>>> BadArgumentError: First ordering property must be the same as >>>>>>>> inequality filter property, if specified for this query; received >>>>>>>> __key__, >>>>>>>> expected post_date >>>>>>>> >>>>>>>> Some Googling suggests this can be due to not providing a sort key. >>>>>>>> I tried orderby=db.posts.post_date with no success. What could be >>>>>>>> going wrong? >>>>>>>> >>>>>>>> I'm using the latest trunk web2py, but tested all the way back to >>>>>>>> 1.99.3. >>>>>>>> >>>>>>> --