commit-gnue
[Top][All Lists]
Advanced

[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)
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]