On Oct 28, 2009, at 10:28 AM, mr.freeze wrote:

>
> I think you may be right. What about 'remove' instead of filter?

Sure.

>
> On Oct 28, 12:23 pm, Jonathan Lundell <[email protected]> wrote:
>> 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