On Oct 28, 2009, at 9:58 AM, mdipierro wrote:

>
> On a third thougth. Mr Freeze original names are better (find and
> filter it is).

Your use of 'filter' (or my confusion about it) for both cases  
illustrates its ambiguity. How about 'find' and 'exclude'?

> I added slices too. Here is an example:
>
>
> b=DAL('sqlite://storage')
> db.define_table('a',Field('b'))
> db.a.insert(b='aaa')
> db.a.insert(b='aab')
> db.a.insert(b='abb')
> db.a.insert(b='bbb')
>
> ### return rows that match condition
> rows=db(db.a.id>0).select().find(lambda row: row.b>0)
>
> #### sort rows
> rows0 = rows.sort(lambda row: row.b.upper()):
>
> rows1=db(db.a.id>0).select()
> ### move matching rows from rows1 to rows2
> rows2=rows1.filter(lambda row: row.b>'b')
>
> ### get a slice of the rows
> rows3=rows[1:3]
>
> They can be mixed and matched
>
> rows=(rows1|rows2|rows3).find(..)[:].filter(..).sort(..)
>
> Now one implement at DAL level most functions missing on GAE like OR,
> LIKE, BELONGS.
>
> Massimo
>
> On Oct 28, 11:17 am, mdipierro <[email protected]> wrote:
>> Ok, I am going with filter (same as your find) and extract (same as
>> your filter with some changes to make it faster and issue that caused
>> it to skip some rows). In trunk now.
>>
>> Massimo
>>
>> On Oct 28, 10:51 am, "mr.freeze" <[email protected]> wrote:
>>
>>> Now I'm confused :)  What if you just changed the 'where' to 'find'
>>> and kept both.  Filter should reduce the actual set, returning the
>>> removed rows.  Find should just return the matched rows.
>>
>>> On Oct 28, 10:15 am, mdipierro <[email protected]> wrote:
>>
>>>> OK I just put the where function in trunk but renamed it filter  
>>>> (sorry
>>>> for the confusion).
>>
>>>> On Oct 28, 10:11 am, Joe Barnhart <[email protected]> wrote:
>>
>>>>> I know, that's what I'm saying.... the word "where" suggests it  
>>>>> is an SQL
>>>>> verb but it has nothing to do with SQL.  I was just thinking it  
>>>>> might be
>>>>> confusing to new users of w2p.
>>
>>>>> On Wed, Oct 28, 2009 at 6:32 AM, mr.freeze  
>>>>> <[email protected]> wrote:
>>
>>>>>> No, anything post 'select' is done after the db call, including  
>>>>>> first
>>>>>> () and last().
>>
>>>>>> On Oct 28, 2:51 am, Joe  Barnhart <[email protected]> wrote:
>>>>>>> I love the functionality, but doesn't calling the function  
>>>>>>> "where"
>>>>>>> conjure up the SQL WHERE clause?  I might think it was doing  
>>>>>>> something
>>>>>>> with SELECT...WHERE in the underlying DB.
>>
>>>>>>> -- Joe B.
>>
>>>>>>> On Oct 27, 10:11 pm, "mr.freeze" <[email protected]> wrote:
>>
>>>>>>>> Works! Would you be interested in these for sql.py Rows class?:
>>
>>>>>>>> def where(self,f):
>>>>>>>>     if not self.response:
>>>>>>>>         return None
>>>>>>>>     rows = []
>>>>>>>>     for i in range(0,len(self)):
>>>>>>>>         row = self[i]
>>>>>>>>         if f(row): rows.append(self.response[i])
>>>>>>>>     return Rows(self._db,rows,*self.colnames)
>>
>>>>>>>> def filter(self,f):
>>>>>>>>     if not self.response:
>>>>>>>>         return None
>>>>>>>>     rows = self.response
>>>>>>>>     removed = []
>>>>>>>>     for i in range(0,len(self)):
>>>>>>>>         row = self[i]
>>>>>>>>         if f(row):
>>>>>>>>             removed.append(rows[i])
>>>>>>>>             rows.remove(rows[i])
>>>>>>>>     return Rows(self._db,removed,*self.colnames)
>>
>>>>>>>> Example:
>>>>>>>> db.define_table('things',Field('category'))
>>>>>>>> rows = db(db.things.id>0).select()
>>>>>>>> tests = rows.where(lamdba row: row.category=="test") #  
>>>>>>>> returns matches
>>>>>>>> rows.filter(lamdba row: row.category=="test")# removes and  
>>>>>>>> returns
>>>>>>>> removed
>>
>>>>>>>> On Oct 27, 10:49 pm, mdipierro <[email protected]> wrote:
>>
>>>>>>>>> Thanks. Just fixed in trunk!
>>
>>>>>>>>> On Oct 27, 10:35 pm, "mr.freeze" <[email protected]> wrote:
>>
>>>>>>>>>> I get a syntax error when using this. I believe line 2926 of
>>>>>>>>>> Rows.__getitem__ needs to be changed from:
>>
>>>>>>>>>> if i >= len(self.response) or i < 0:
>>
>>>>>>>>>> ...to...
>>
>>>>>>>>>> if i >= len(self.response):
>>
>>>>>>>>>> since Rows.last() returns self[-1]
>>
>>
> >



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to