[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r6895 - in trunk/gnue-appserver/src: . generator language
From: |
johannes |
Subject: |
[gnue] r6895 - in trunk/gnue-appserver/src: . generator language |
Date: |
Thu, 13 Jan 2005 09:13:28 -0600 (CST) |
Author: johannes
Date: 2005-01-13 09:13:27 -0600 (Thu, 13 Jan 2005)
New Revision: 6895
Modified:
trunk/gnue-appserver/src/data.py
trunk/gnue-appserver/src/geasList.py
trunk/gnue-appserver/src/geasSession.py
trunk/gnue-appserver/src/generator/form.py
trunk/gnue-appserver/src/language/Session.py
Log:
Added support for 'descending' sort-order and removed "dirty-reads"
Modified: trunk/gnue-appserver/src/data.py
===================================================================
--- trunk/gnue-appserver/src/data.py 2005-01-13 15:11:08 UTC (rev 6894)
+++ trunk/gnue-appserver/src/data.py 2005-01-13 15:13:27 UTC (rev 6895)
@@ -455,6 +455,7 @@
tables.append (table)
fields.extend (fieldlist)
if fk_alias:
+ # FIXME: Instead of a condition we better create a 'LEFT JOIN' later
c = GConditions.buildTreeFromList (
['eq', ['field', alias + u'.gnue_id'],
['field', fk_alias + u'.' + fk_field]])
@@ -475,8 +476,8 @@
datacon.parameters ['appserver'] = True
if order is not None:
- if order != []:
- attributes ['order_by'] = string.joinfields (order, ',')
+ if order:
+ attributes ['order_by'] = order
# create the datasource
datasource = GDataSource.DataSourceWrapper (
@@ -617,10 +618,6 @@
checktype (fields, ListType)
for fields_element in fields: checktype (fields_element, UnicodeType)
- # Make sure the following query have all pending changes available at the
- # backend
- self.postChanges ()
-
return recordset (self.__cache, self.__connections, self.__database,
content, conditions, order)
@@ -727,13 +724,13 @@
# ---------------------------------------------------------------------------
- # Post all pending changes to the backend
+ # Write all changes back to the database
# ---------------------------------------------------------------------------
- def postChanges (self):
+ def commit (self):
"""
- Write all dirty data to the database backend without committing the current
- running transactions. All changes are treated to be 'clean' afterwards.
+ Write all dirty data to the database backend by a single transaction that
+ is committed immediately. This operation invalidates the cache.
"""
tables = self.__cache.dirtyTables ()
@@ -805,19 +802,6 @@
self.__deleted = []
self.__confirmedDeletes = []
-
-
- # ---------------------------------------------------------------------------
- # Write all changes back to the database
- # ---------------------------------------------------------------------------
-
- def commit (self):
- """
- Write all dirty data to the database backend by a single transaction that
- is committed immediately. This operation invalidates the cache.
- """
- self.postChanges ()
-
# Assert
self.__cache._assertClean ()
@@ -1174,7 +1158,7 @@
content = {u't0': (u'address_person', None, None, [u'address_name']),
u't1': (u'address_country', u't0', u'address_country',
[u'address_name'])}
- rs = c.query (content, None, [u't0.address_name'])
+ rs = c.query (content, None, [(u't0.address_name', True)])
print 'Ok'
print 'recordset.firstRecord ...',
Modified: trunk/gnue-appserver/src/geasList.py
===================================================================
--- trunk/gnue-appserver/src/geasList.py 2005-01-13 15:11:08 UTC (rev
6894)
+++ trunk/gnue-appserver/src/geasList.py 2005-01-13 15:13:27 UTC (rev
6895)
@@ -185,7 +185,7 @@
If no such sort order is defined, None is returned.
"""
if len (self.__dsSorting):
- return instance.get (self.__dsSorting)
+ return instance.get ([item [0] for item in self.__dsSorting])
else:
return None
@@ -201,16 +201,17 @@
if len (self.__asSorting) and len (self.__unsorted) > 1:
- # We do support only 'ascending' order by now, but as soon the order-by
- # statement in common changes, we can add this here
for i in self.__unsorted:
# NOTE: building a sort-sequence this way is not optimal. If there are
# multiple calculated fields in an order-by all of them will be
- # executed. Even if a comparison would be able without them. I'll fix
- # this with adding support for descending order.
- i.setSort ([(v, False) for v in i.get (self.__asSorting)])
+ # evaluated.
+ order = []
+ for (item, desc) in self.__asSorting:
+ order.append ((i.get (item) [0], desc))
+ i.setSort (order)
+
self.__unsorted.sort ()
Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py 2005-01-13 15:11:08 UTC (rev
6894)
+++ trunk/gnue-appserver/src/geasSession.py 2005-01-13 15:13:27 UTC (rev
6895)
@@ -366,18 +366,30 @@
sortlist = [] # translated sortlist for datasource
dsSort = [] # datasource sortlist
asSort = [] # appserver sortlist
+
for ix in range (0, len (sortorder)):
- propName = sortorder [ix]
+ sortitem = sortorder [ix]
+ if isinstance (sortitem, TupleType) or isinstance (sortitem, ListType):
+ (propName, descending) = sortitem
+ else:
+ (propName, descending) = (sortitem, False)
+
fieldName = self.__getFieldname (classdef, propName, content, False)
if fieldName is None:
- asSort = sortorder [ix:]
- for item in asSort:
- self.__getFieldname (classdef, item, content, True)
+ for item in sortorder [ix:]:
+ if isinstance (item, TupleType):
+ asSort.append (item)
+ else:
+ asSort.append ((item, False))
+
+ for (field, desc) in asSort:
+ self.__getFieldname (classdef, field, content, True)
+
break
else:
- sortlist.append (fieldName)
- dsSort.append (propName)
+ sortlist.append ((fieldName, descending))
+ dsSort.append ((propName, descending))
recordset = self.__connection.query (content, dsCond, sortlist)
Modified: trunk/gnue-appserver/src/generator/form.py
===================================================================
--- trunk/gnue-appserver/src/generator/form.py 2005-01-13 15:11:08 UTC (rev
6894)
+++ trunk/gnue-appserver/src/generator/form.py 2005-01-13 15:13:27 UTC (rev
6895)
@@ -120,7 +120,8 @@
attrs = {}
order = self.__classDef.sortColumn ()
if order is not None:
- attrs ['order_by'] = order
+ attrs [None] = self.__xml ('sortorder',
+ {None: self.__xml ('sortfield', {'name': order})})
self.__addToSources ('dtsMaster', self.__classDef.classname, attrs)
Modified: trunk/gnue-appserver/src/language/Session.py
===================================================================
--- trunk/gnue-appserver/src/language/Session.py 2005-01-13 15:11:08 UTC
(rev 6894)
+++ trunk/gnue-appserver/src/language/Session.py 2005-01-13 15:13:27 UTC
(rev 6895)
@@ -114,8 +114,8 @@
# -------------------------------------------------------------------------
# Return a collection of 'classname' matching the given arguments
# -------------------------------------------------------------------------
- def find (self, classname, conditions = None, sortorder = ['gnue_id'],
- properties = []):
+ def find (self, classname, conditions = None,
+ sortorder = [('gnue_id', False)], properties = []):
return ObjectList (self, self.qualify (classname), conditions, sortorder,
properties)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r6895 - in trunk/gnue-appserver/src: . generator language,
johannes <=