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