/[gnue]/gnue-appserver/src/geasList.py
ViewVC logotype

Diff of /gnue-appserver/src/geasList.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.22 by reinhard, Mon Aug 11 15:26:54 2003 UTC revision 1.23 by reinhard, Tue Aug 12 17:04:52 2003 UTC
# Line 35  class geasList: Line 35  class geasList:
35    # Initalize    # Initalize
36    # ---------------------------------------------------------------------------    # ---------------------------------------------------------------------------
37    
38    def __init__ (self, session, classname):    def __init__ (self, session, classdef):
39      self._session = session      self._session = session
40      self._classname = classname      self._classdef = classdef
41      self._prefetch = []      self._prefetch = []         # property names to be prefetched
42      self._conditions = []      self._conditions = []       # conditions using property names
43        self._sort = []             # property names to be used as sort key
44        self._prefColumns = []      # (db) column names to be prefetched
45        self._sortColumns = []      # (db) column names to be used as sort key
46    
47    # ---------------------------------------------------------------------------    # ---------------------------------------------------------------------------
48    # Actually these 3 only set variables    # Actually these 3 only set variables
49    # ---------------------------------------------------------------------------    # ---------------------------------------------------------------------------
50    
51    def setPrefetch (self, prefetch):    def setPrefetch (self, prefetch):
52      if type(prefetch)==type(""):      if type (prefetch) == type (""):
53        self._prefetch = string.split(prefetch,",")        self._prefetch = string.split (prefetch,",")
54      elif  type(prefetch)==type([]):      elif type (prefetch) == type ([]):
55        self._prefetch = prefetch        self._prefetch = prefetch
56      else:      else:
57        raise Error,"Wrong format of prefetch information."        raise Error,"Wrong format of prefetch information."
58            # test if all properties in prefetch list are valid and find column names
59        self._prefColumns = []
60        for propertyname in self._prefetch:
61          propertydef = self._classdef.properties [propertyname]
62          self._prefColumns.append (propertydef.column)
63    
64    # conditions = an list consisting of condition elements written down in    # conditions = an list consisting of condition elements written down in
65    # prefix  notation i.e. (a=12) AND (c=121) -> AND = a 12 = c 121    # prefix  notation i.e. (a=12) AND (c=121) -> AND = a 12 = c 121
# Line 61  class geasList: Line 68  class geasList:
68    
69    def setConditions (self, conditions):        def setConditions (self, conditions):    
70      self._conditions = conditions      self._conditions = conditions
71            # TODO: translate property names to column names
72      # now building GCondition tree      # now building GCondition tree
73      self._conditionTree = GConditions.buildTreeFromPrefix(conditions)      self._conditionTree = GConditions.buildTreeFromPrefix(conditions)
74    
       
         
75    def setSort (self, sort):    def setSort (self, sort):
76      self._sort = sort      self._sort = sort
77        # test if all properties in sort list are valid and find column names
78        for propertyname in self._sort:
79          propertydef = self._classdef.properties [propertyname]
80          self._sortColumns.append (propertydef.column)
81    
82    # ---------------------------------------------------------------------------    # ---------------------------------------------------------------------------
83    # Populate the list with data from the database backend    # Populate the list with data from the database backend
# Line 76  class geasList: Line 85  class geasList:
85    
86    def populate (self):    def populate (self):
87      self._datasource = GDataSource.GDataSource ()      self._datasource = GDataSource.GDataSource ()
     # TODO: get the table name from the class name  
88      self._datasource.buildObject (name = "",      self._datasource.buildObject (name = "",
89                                    database = self._session._database,                                    database = self._session._database,
90                                    table = self._classname)                                    table = self._classdef.table)
91      self._datasource.setConnectionManager (self._session._connections)      self._datasource.setConnectionManager (self._session._connections)
92    
93      # bug fix should be moved into common after the freeze      # bug fix should be moved into common after the freeze
94      self._datasource._datasourceDictionary={}      self._datasource._datasourceDictionary={}
95    
96      # set the field to sort (has to be called before phase init      # set the property to sort (has to be called before phase init)
97      if hasattr(self,"_sort"):      if self._sortColumns != []:
98        if self._sort!=[]:        self._datasource.order_by = string.joinfields(self._sortColumns, ",")
         self._datasource.order_by=string.joinfields(self._sort,",")  
99            
100      self._datasource.phaseInit ()      self._datasource.phaseInit ()
101      # TODO: get the column names from the prefetch field names  
102      for field in self._prefetch:      for column in self._prefColumns:
103        self._datasource.referenceField (field)        self._datasource.referenceField (column)
104    
105      if hasattr(self,"_conditionTree"):      if hasattr(self,"_conditionTree"):
106        self._resultset = self._datasource.createResultSet(self._conditionTree)        self._resultset = self._datasource.createResultSet (self._conditionTree)
107      else:      else:
108        self._resultset = self._datasource.createResultSet()        self._resultset = self._datasource.createResultSet ()
         
109    
110    # ---------------------------------------------------------------------------    # ---------------------------------------------------------------------------
111    # Get the first instance in the list    # Get the first instance in the list
112    # ---------------------------------------------------------------------------    # ---------------------------------------------------------------------------
113    
114    def firstInstance (self):    def firstInstance (self):
115  #   if self._classname != "appserver_pytrigger" \  #   if self._classdef.fullName != "appserver_pytrigger" \
116  #      and self._classname != "gnue_module":  #      and self._classdef.fullName != "gnue_module":
117  #     trigger=self._session._triggerMg.getTriggerByEvent \  #     trigger=self._session._triggerMg.getTriggerByEvent \
118  #              ('%s:pre_first_inst' % self._classname)  #              ('%s:pre_first_inst' % self._classdef.fullName)
119  #     if trigger!=None:  #     if trigger!=None:
120  #       trigger()  #       trigger()
121                    
122      if self._resultset.firstRecord () != None:      if self._resultset.firstRecord () != None:
123        return geasInstance.geasInstance (self,  self._resultset.current)        return geasInstance.geasInstance (self,  self._resultset.current,
124                                            self._classdef)
125      else:      else:
126        return None        return None
127    
# Line 124  class geasList: Line 131  class geasList:
131    
132    def nextInstance (self):    def nextInstance (self):
133      if self._resultset.nextRecord () != None:      if self._resultset.nextRecord () != None:
134        return geasInstance.geasInstance (self, self._resultset.current)        return geasInstance.geasInstance (self, self._resultset.current,
135                                            self._classdef)
136      else:      else:
137        return None        return None
138    
# Line 167  class geasList: Line 175  class geasList:
175    
176    def insertNewInstance (self):    def insertNewInstance (self):
177      self._resultset.insertRecord ()      self._resultset.insertRecord ()
178      return geasInstance.geasInstance (self, self._resultset.current)      return geasInstance.geasInstance (self, self._resultset.current,
179                                          self._classdef)

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26