107 |
|
|
108 |
self._defaultValues = {} |
self._defaultValues = {} |
109 |
self.triggerExtensions = None |
self.triggerExtensions = None |
110 |
|
self._emptyResultSet = None |
111 |
|
|
112 |
|
|
113 |
# Do we have a master datasource? |
# Do we have a master datasource? |
130 |
|
|
131 |
# Designed to be replaced by vendor-specific code |
# Designed to be replaced by vendor-specific code |
132 |
def _createEmptyResultSet(self, readOnly=0, masterRecordSet=None): |
def _createEmptyResultSet(self, readOnly=0, masterRecordSet=None): |
133 |
cond = GConditions.GCondition() |
if not self._emptyResultSet: |
134 |
ceq = GConditions.GCeq(cond) |
cond = GConditions.GCondition() |
135 |
GConditions.GCConst(ceq,1,"number") |
ceq = GConditions.GCeq(cond) |
136 |
GConditions.GCConst(ceq,0,"number") |
GConditions.GCConst(ceq,1,"number") |
137 |
return self.createResultSet(conditions=cond, readOnly=readOnly, |
GConditions.GCConst(ceq,0,"number") |
138 |
masterRecordSet=masterRecordSet) |
self._emptyResultSet = self.createResultSet(conditions=cond, readOnly=readOnly, |
139 |
|
masterRecordSet=masterRecordSet) |
140 |
|
self._emptyResultSet._cachedRecords = [] |
141 |
|
self._emptyResultSet._currentRecord = -1 |
142 |
|
self._emptyResultSet._defaultValues = {} |
143 |
|
self._emptyResultSet._recordCount = 0 |
144 |
|
self._emptyResultSet.current = None |
145 |
|
return self._emptyResultSet |
146 |
|
|
147 |
|
|
148 |
# Add a detail data object. This dataobject will create a new resultset |
# Add a detail data object. This dataobject will create a new resultset |
149 |
# everytime this dataobject changes (new record, etc). The optional |
# everytime this dataobject changes (new record, etc). The optional |
259 |
if (not master.current._cachedDetailResultSets.has_key(self)) or \ |
if (not master.current._cachedDetailResultSets.has_key(self)) or \ |
260 |
( not int(gConfig('CacheDetailRecords')) and \ |
( not int(gConfig('CacheDetailRecords')) and \ |
261 |
not master.current._cachedDetailResultSets[self].isPending() ): |
not master.current._cachedDetailResultSets[self].isPending() ): |
262 |
|
hasNullPk = 0 |
263 |
for i in range(0, len(self._masterfields)): |
for i in range(0, len(self._masterfields)): |
264 |
GDebug.printMesg(10,"Adding criteria") |
GDebug.printMesg(10,"Adding criteria") |
265 |
criteria[string.strip(self._detailfields[i])] = \ |
value = master.current.getField(string.strip(self._masterfields[i])) |
266 |
master.current.getField(string.strip(self._masterfields[i])) |
if not value: |
267 |
|
hasNullPk = 1 |
268 |
|
break |
269 |
|
criteria[string.strip(self._detailfields[i])] = value |
270 |
GDebug.printMesg(10,master.current.getField(self._masterfields[i])) |
GDebug.printMesg(10,master.current.getField(self._masterfields[i])) |
271 |
master.current.addDetailResultSet(self.createResultSet(\ |
if hasNullPk: |
272 |
|
master.current.addDetailResultSet(self.createEmptyResultSet(readOnly=0, masterRecordSet=master.current)) |
273 |
|
else: |
274 |
|
master.current.addDetailResultSet(self.createResultSet(\ |
275 |
conditions=criteria, masterRecordSet=master.current)) |
conditions=criteria, masterRecordSet=master.current)) |
276 |
|
|
277 |
|
## |
278 |
## master.current._cachedDetailResultSets[self] = \ |
## master.current._cachedDetailResultSets[self] = \ |
279 |
## self.createResultSet(conditions=criteria, masterRecordSet=master.current) |
## self.createResultSet(conditions=criteria, masterRecordSet=master.current) |
280 |
return master.current._cachedDetailResultSets[self] |
return master.current._cachedDetailResultSets[self] |