[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r7356 - trunk/gnue-common/src/datasources/drivers/Base
From: |
reinhard |
Subject: |
[gnue] r7356 - trunk/gnue-common/src/datasources/drivers/Base |
Date: |
Tue, 12 Apr 2005 09:10:32 -0500 (CDT) |
Author: reinhard
Date: 2005-04-12 09:10:31 -0500 (Tue, 12 Apr 2005)
New Revision: 7356
Modified:
trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py
trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
Log:
Pass connection, tablename and boundFields as parameters to RecordSet.
Modified: trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py 2005-04-12
13:42:17 UTC (rev 7355)
+++ trunk/gnue-common/src/datasources/drivers/Base/RecordSet.py 2005-04-12
14:10:31 UTC (rev 7356)
@@ -37,10 +37,14 @@
# Constructor
# ---------------------------------------------------------------------------
- def __init__ (self, parent, initialData = {}, masterRecord = None,
+ def __init__ (self, parent, initialData = {}, connection = None,
+ tablename = '', boundFields = [], masterRecord = None,
masterKeyFields = [], masterLinkFields = [], defaultValues = {},
rowidField = None, primarykeyFields = []):
+ self.__connection = connection
+ self.__tablename = tablename
+ self.__boundFields = [f.lower () for f in boundFields]
self.__masterRecord = masterRecord
self.__masterKeyFields = masterKeyFields
self.__masterLinkFields = masterLinkFields
@@ -85,16 +89,14 @@
# 1. mark as new
self.__status = 'empty'
- do = self._parent._dataObject
-
# 2. Set all fields to None, so that the dictionary at least contains a
# key for every field
- for field in do._fieldReferences.keys ():
- self.__fields [field.lower ()] = None
+ for field in self.__boundFields:
+ self.__fields [field] = None
# 3. Get default values from driver (e.g. initialize primary keys)
- if do._connection: # There are datasources w/o connection!
- defaults = do._connection.initialize (do.table)
+ if self.__connection:
+ defaults = self.__connection.initialize (self.__tablename)
for (fieldname, value) in defaults.items ():
self.__setField (fieldname, value)
@@ -166,13 +168,13 @@
# If this field is bound to a datasource and the datasource is read only,
# generate an error.
- if self._parent.isFieldBound(fieldname) and self._parent.isReadOnly():
+ if fieldname in self.__boundFields and self._parent.isReadOnly ():
# Provide better feedback??
tmsg = u_("Attempted to modify read only field '%s'") % fieldname
raise Exceptions.ReadOnlyError, tmsg
self.__setField (fieldname, value)
- if self._parent.isFieldBound (fieldname):
+ if fieldname in self.__boundFields:
if self.__status in ['empty', 'clean']:
if self.__status == 'empty':
self.__status = 'inserted'
@@ -316,8 +318,8 @@
# If all else fails, use all fields in the where clause
else:
- for field in self.__initialData.keys ():
- if self._parent.isFieldBound (field):
+ for field in self.__boundFields:
+ if self.__initialData.has_key (field):
result [field] = self.__initialData [field]
return result
@@ -329,9 +331,8 @@
def __requery (self, fields):
- do = self._parent._dataObject
- newfields = do._connection.requery (do.table, self.__wherefields (),
- fields)
+ newfields = self.__connection.requery (self.__tablename,
+ self.__wherefields (), fields)
self.__initialData.update (newfields)
self.__fields.update (newfields)
@@ -352,13 +353,6 @@
if not self.isPending ():
return
- # Should a post() to a read only datasource cause a ReadOnlyError?
- # It does no harm to attempt to post since nothing will be posted,
- # But does this allow sloppy programming?
-
- gDebug (8, 'Preparing to post datasource %s' \
- % self._parent._dataObject.name)
-
# Update the link to our master record, in case any key fields were updated
# in the master when it was posted.
self.__setMasterLink ()
@@ -390,26 +384,24 @@
do = self._parent._dataObject
if hasattr(do,'primarykey') and hasattr(do,'primarykeyseq'):
if do.primarykey and do.primarykeyseq and ',' not in do.primarykey and
\
- hasattr(do._connection,'getsequence') and \
+ hasattr(self.__connection,'getsequence') and \
self.getField(do.primarykey) is None:
-
self.setField(do.primarykey,do._connection.getsequence(do.primarykeyseq))
+
self.setField(do.primarykey,self.__connection.getsequence(do.primarykeyseq))
# If we have a connection (i.e. we aren't static or unbound), do the post
- if self._parent._dataObject._connection:
- do = self._parent._dataObject
- gDebug (8, 'Posting datasource %s' % do.name)
-
+ if self.__connection is not None:
if self.__status == 'deleted':
- do._connection.delete (do.table, self.__wherefields (), recordNumber)
-
+ self.__connection.delete (self.__tablename, self.__wherefields (),
+ recordNumber)
else:
modifiedFields = {}
- for field in self.__modifiedFlags.keys ():
- if self._parent.isFieldBound (field):
+ for field in self.__boundFields:
+ if self.__modifiedFlags.has_key (field):
modifiedFields [field] = self.__fields [field]
if self.__status in ['empty', 'inserted']:
- rowid = do._connection.insert (do.table, modifiedFields,
recordNumber)
+ rowid = self.__connection.insert (self.__tablename, modifiedFields,
+ recordNumber)
if self.__rowidField:
self.__fields [self.__rowidField] = rowid
self.__initialData [self.__rowidField] = rowid
@@ -419,8 +411,8 @@
self.__requery (self.__detailLinkFlags.keys ())
else:
- do._connection.update (do.table, self.__wherefields (),
- modifiedFields, recordNumber)
+ self.__connection.update (self.__tablename, self.__wherefields (),
+ modifiedFields, recordNumber)
# The record is now "clean" again
self.__status = 'clean'
@@ -452,9 +444,7 @@
ds = self._parent._dataObject._dataSource
if ds and ds.requery:
if self.__rowidField or self.__primarykeyFields:
- fields = [field for field in self.__fields.keys ()
- if self._parent.isFieldBound (field)]
- self.__requery (fields)
+ self.__requery (self.__boundFields)
# ---------------------------------------------------------------------------
@@ -517,9 +507,8 @@
raise errors.ApplicationError, u_("Function call on empty record")
self.__post_master ()
- do = self._parent._dataObject
- result = do._connection.call (do.table, self.__wherefields (), methodname,
- parameters)
+ result = self.__connection.call (self.__tablename, self.__wherefields (),
+ methodname, parameters)
self.__requery_master ()
return result
@@ -597,8 +586,7 @@
# ---------------------------------------------------------------------------
def __repr__ (self):
- do = self._parent._dataObject
- if hasattr (do, 'table'):
- return "<RecordSet for %s>" % do.table
+ if self.__tablename:
+ return "<RecordSet for %s>" % self.__tablename
else:
return "<Unbound/Static RecordSet>"
Modified: trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2005-04-12
13:42:17 UTC (rev 7355)
+++ trunk/gnue-common/src/datasources/drivers/Base/ResultSet.py 2005-04-12
14:10:31 UTC (rev 7356)
@@ -151,21 +151,6 @@
return self.current.isPending()
# ---------------------------------------------------------------------------
-
- # Returns 1=Field is bound to a database field
- # TODO: pass a list of bound field names to RecordSet instead
- def isFieldBound(self, fieldName):
-
- # TODO: until the case problem get's fixed in common we do the following
- # workaround.
- for item in self._dataObject._fieldReferences.keys ():
- if item.lower () == fieldName.lower ():
- return True
-
- return False
-
-
- # ---------------------------------------------------------------------------
# Create a new RecordSet instance
# ---------------------------------------------------------------------------
@@ -178,6 +163,9 @@
record = RecordSet (
parent = self,
initialData = initialData,
+ connection = self._dataObject._dataSource._connection,
+ tablename = self._dataObject.table,
+ boundFields = self._dataObject._fieldReferences.keys (),
masterRecord = self._masterRecordSet,
masterKeyFields = self._dataObject._masterfields,
masterLinkFields = self._dataObject._detailfields,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7356 - trunk/gnue-common/src/datasources/drivers/Base,
reinhard <=