I do not like the _extra either and I am thinking of a way to get rid
of it but it is all but chaotic.
Consider this example


db.define_table('a',Field('b','double'))
e=(db.a.b.max()-3)*(db.a.b.min()+5)
rows = db().select(e)
row=rows.first()
print row._extra[e]

the _extra prevents conflicts with table names and field names and
allows the key to be any complex expressions. A simpler notation would
not allow that.

I am considering implementing row(e) to be the same as row._extra[e].

Massimo





On Oct 27, 4:50 pm, Thadeus Burgess <thade...@thadeusb.com> wrote:
> I really need to read that thing :)
>
> However, that syntax is chaotic. That row._extra syntax makes me cringe. If
> it works it works, but I think it could be ***better***. Why can it not be
> something like.
>
> rows = db(query).select(sum(field), avg(field)) # I just psuedocoded this.
> Like i usually do in emails :)
>
> print "Sum", rows.field.sum
> print "Avg", rows.field.avg
>
> for r in rows:
>    print r.table.field
>
> -Thadeus
>
> On Tue, Oct 27, 2009 at 4:42 PM, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > On Oct 27, 4:35 pm, Thadeus Burgess <thade...@thadeusb.com> wrote:
> > > Ok, I was about to stand my ground, however I now agree with you.
>
> > > virtualfields is fine to me, as long as our DAL gets support for native
> > SQL
> > > aggregates (liek SUM, AVG, etc).
>
> > The DAL does that already.  Just not all of them.
> > It did so for one year. It is in the manual.
>
> > for row in db(...).select(db.table.field,db.table.otherfield.sum
> > (),groupby=db.table.field):
> >    print row.table.field, row._extra[db.table.otherfield.sum()]
>
> > db.table.field.sum()
> > db.table.field.max()
> > db.table.field.min()
> > db.table.field.count()
>
> > > And when the DAL gets that, it leaves open the option to assign true
> > aliases
> > > that are tied into the SQL query.
>
> > > aliases = {
> > >    'num_items': ['count', '*'],
> > >    'total_price': ['sum', 'item.price'],
> > >    'average_price': ['avg', 'item.price'],}
>
> > > db(db.invoice.id == request.vars.id_invoice).select(alias=aliases)
>
> > > So i'm okay with virtualfields now :P
>
> > > -Thadeus
>
> > > On Tue, Oct 27, 2009 at 4:12 PM, mdipierro <mdipie...@cs.depaul.edu>
> > wrote:
>
> > > > No no. We are not doing that.
>
> > > > The new virtualfields are compute by web2py, not by the database.
>
> > > > Massimo
>
> > > > On Oct 27, 3:55 pm, Thadeus Burgess <thade...@thadeusb.com> wrote:
> > > > > Basically what we are doing is
>
> > > > > SELECT COUNT(*) AS "Number of Orders",
> > > > > SUM(quantity)AS "Total Number of Items Purchased",
> > > > > AVG(quantity)AS "Average Number of Items Purchased"
>
> > > > > FROM orders;
>
> > > > > What is the correct terminology for AS statement? Some research
> > suggest
> > > > > ALIAS is the most accurate term.
>
> > > > > I think we should use "alias" or "aliases"
>
> > > > >http://www.w3schools.com/sql/sql_alias.asp
>
> > > > > -Thadeus
>
> > > > > On Tue, Oct 27, 2009 at 3:31 PM, mdipierro <mdipie...@cs.depaul.edu>
> > > > wrote:
>
> > > > > > I am going with "virtualfields"
>
> > > > > > On Oct 27, 3:19 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> > > > > > > we normally user expressions to refer to things like this
>
> > > > > > > db(query).update(field=db.table.field+1)
>
> > > > > > > How about interface?
>
> > > > > > > On Oct 27, 3:05 pm, Thadeus Burgess <thade...@thadeusb.com>
> > wrote:
>
> > > > > > > > Not meta, too confusing with django stuff.
>
> > > > > > > > How about expression, makes much more sense. That is what it is
> > > > > > actually
> > > > > > > > referred to when talking about SQL. Access calls them
> > expressions
> > > > as
> > > > > > well.
>
> > > > > > > > -Thadeus
>
> > > > > > > > On Tue, Oct 27, 2009 at 2:32 PM, mdipierro <
> > > > mdipie...@cs.depaul.edu>
> > > > > > wrote:
>
> > > > > > > > > should this thing be called meta? interface? extension?
>
> > > > > > > > > On Oct 27, 2:26 pm, mdipierro <mdipie...@cs.depaul.edu>
> > wrote:
> > > > > > > > > > Simple example:
>
> > > > > > > > > > db=DAL('sqlite://test')
> > > > > > > > > > db.define_table('purchase',
> > > > > > > > > >                 Field('item'),
> > > > > > > > > >                 Field('unit_price','double'),
> > > > > > > > > >                 Field('quantity','integer'))
> > > > > > > > > > db.purchase.insert(item='Box',unit_price=15,quantity=3)
> > > > > > > > > > rows=db().select(db.purchase.ALL)
>
> > > > > > > > > > class purchase_meta:
> > > > > > > > > >     _tablename='purchase'
> > > > > > > > > >     def __init__(self,tax):
> > > > > > > > > >         self.tax=tax
> > > > > > > > > >     def revenues(self):
> > > > > > > > > >         return
> > > > > > > > > > self.purchase.unit_price*self.purchase.quantity*self.tax
>
> > > > > > > > > > rows.meta=purchase_meta(1.07)
>
> > > > > > > > > > for row in rows:
> > > > > > > > > >     print row.item,
>
> > row.unit_price,'*',row.quantity,'*',row.tax,'=',row.revenues
>
> > > > > > > > > > More complex example:
>
> > > > > > > > > > db.define_table('a',Field('n','integer'))
> > > > > > > > > > db.define_table('b',Field('n','integer'),Field('a',db.a))
> > > > > > > > > > id = db.a.insert(n=4)
> > > > > > > > > > for i in range(3,5): db.b.insert(n=i,a=id)
> > > > > > > > > > rows=db(db.b.a==db.a.id).select()   ### join
>
> > > > > > > > > > class products:
> > > > > > > > > >     _tablename='c'
> > > > > > > > > >     def n(self): return self.a.n*self.b.n
>
> > > > > > > > > > rows.meta=products()
> > > > > > > > > > for row in rows:
> > > > > > > > > >     print row.a.n,'*',row.b.n,'=' row.c.n
>
> > > > > > > > > > Any suggestions on improving the syntax? Django can do the
> > same
> > > > but
> > > > > > > > > > only at the level of the individual table. web2py can now
> > to it
> > > > for
> > > > > > > > > > joins!
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to