On Feb 16, 7:12 am, elffikk <[email protected]> wrote:
> hi,
>
> I propose to add a few things to DAL
>
> 1) an 'act_as' parameter in define_table so I can extend Table class
> and use it as regular table
>
> for e.g.
>
> db.define_table("images",
> Field("category", db.categories),
> Field("title"),
> act_as=OrderedList,
> )
>
> OrderedList is a class that extends Table class and adds a 'line'
> column,
> overrides insert and __del__ methods and adds 2 other methods:
> move_before, move_after
>
> required changes to gluon dal:
> - add 'act_as' to the allowed keyword list in define_table method
> ['migrate', 'primarykey', 'fake_migrate', 'format', 'trigger_name',
> 'sequence_name', 'act_as']
> - act_as = args.get('act_as',Table) - Table is the default for
> 'act_as'
> - t = self[tablename] = act_as(self, tablename, *fields, ....
>
> usages:
> _id = db.images.insert(... )
> db.images.move_before(_id, 2)
Not sure I understand this one.
Could you expand on it?.
> 2) please add __mod__ to Expression class so I can use it in dal
> expressions
>
> I want that
>
> #move last image to first position and all other images positions are
> increased by 1
> db(db.images).update(line=db.images.line % _count +1)
>
> but I am forced to use raw sql
> db.executesql('UPDATE images SET line = line %% %s +1', (_count,))
+1 from me, it is easy to add in:
to class BaseAdapter add
def
MOD(self,first,second):
return '(%s %% %s)' %
(self.expand(first),self.expand(second,first.type))
and to class Expression add
def __mod__(self,
other):
return
Expression(self.db,self.db._adapter.MOD,self,other,self.type)