[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue common/src/dbdrivers/appserver/DBdriver.py...
From: |
Jan Ischebeck |
Subject: |
gnue common/src/dbdrivers/appserver/DBdriver.py... |
Date: |
Sun, 26 May 2002 05:22:15 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Jan Ischebeck <address@hidden> 02/05/26 05:22:15
Modified files:
common/src/dbdrivers/appserver: DBdriver.py
appserver/grpc : GEAS.grpc
appserver/src : geasInstance.py geasList.py geasSession.py
Log message:
update appserver/DBdriver to support writing, inserting and deleting
records
added functions for inserting and deleting records to appserver
for appserver v0.01 just geasConditions support is missing
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/appserver/DBdriver.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/grpc/GEAS.grpc.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/geasInstance.py.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/geasList.py.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/appserver/src/geasSession.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
Patches:
Index: gnue/appserver/grpc/GEAS.grpc
diff -c gnue/appserver/grpc/GEAS.grpc:1.2 gnue/appserver/grpc/GEAS.grpc:1.3
*** gnue/appserver/grpc/GEAS.grpc:1.2 Sun May 19 18:34:59 2002
--- gnue/appserver/grpc/GEAS.grpc Sun May 26 05:22:15 2002
***************
*** 34,49 ****
</method>
<method name="firstInstance"
return="<SessionManager.geasInstance>"/>
<method name="nextInstance"
return="<SessionManager.geasInstance>"/>
</object>
<object name="geasInstance">
<attribute name="classname" type="string" readonly=""/>
<method name="get" return="string">
<argument name="fieldname" type="string"/>
</method>
! <method name="set">
<argument name="fieldname" type="string"/>
<argument name="value" type="string"/>
</method>
</object>
</service>
</gnurpc>
--- 34,54 ----
</method>
<method name="firstInstance"
return="<SessionManager.geasInstance>"/>
<method name="nextInstance"
return="<SessionManager.geasInstance>"/>
+ <method name="insertNewInstance"
return="<SessionManager.geasInstance>"/>
</object>
<object name="geasInstance">
<attribute name="classname" type="string" readonly=""/>
<method name="get" return="string">
<argument name="fieldname" type="string"/>
</method>
! <method name="put">
<argument name="fieldname" type="string"/>
<argument name="value" type="string"/>
</method>
+ <method name="call">
+ <argument name="methodname" type="string"/>
+ </method>
+ <method name="delete"/>
</object>
</service>
</gnurpc>
Index: gnue/appserver/src/geasInstance.py
diff -c gnue/appserver/src/geasInstance.py:1.3
gnue/appserver/src/geasInstance.py:1.4
*** gnue/appserver/src/geasInstance.py:1.3 Wed May 22 11:25:10 2002
--- gnue/appserver/src/geasInstance.py Sun May 26 05:22:15 2002
***************
*** 19,25 ****
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: geasInstance.py,v 1.3 2002/05/22 15:25:10 siesel Exp $
#
=============================================================================
# Instance class
--- 19,25 ----
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: geasInstance.py,v 1.4 2002/05/26 09:22:15 siesel Exp $
#
=============================================================================
# Instance class
***************
*** 60,62 ****
--- 60,70 ----
def call (self, methodname):
pass
+
+
+ #
---------------------------------------------------------------------------
+ # Delete this instance
+ #
---------------------------------------------------------------------------
+
+ def delete(self):
+ self._record.delete()
Index: gnue/appserver/src/geasList.py
diff -c gnue/appserver/src/geasList.py:1.3 gnue/appserver/src/geasList.py:1.4
*** gnue/appserver/src/geasList.py:1.3 Sun May 19 18:34:59 2002
--- gnue/appserver/src/geasList.py Sun May 26 05:22:15 2002
***************
*** 19,25 ****
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: geasList.py,v 1.3 2002/05/19 22:34:59 siesel Exp $
from gnue.common import GDataSource
import geasInstance
--- 19,25 ----
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: geasList.py,v 1.4 2002/05/26 09:22:15 siesel Exp $
from gnue.common import GDataSource
import geasInstance
***************
*** 39,45 ****
self._classname = classname
self._prefetch = []
self._conditions = []
- self._sort = []
#
---------------------------------------------------------------------------
# Actually these 3 only set variables
--- 39,44 ----
***************
*** 68,78 ****
--- 67,84 ----
# bug fix should be moved into common after the freeze
self._datasource._datasourceDictionary={}
+
+ # set the field to sort (has to be called before phase init
+ if hasattr(self,"_sort"):
+ self._datasource.order_by=self._sort
+
self._datasource.phaseInit ()
# TODO: get the column names from the prefetch field names
for field in self._prefetch:
self._datasource.referenceField (field)
+
+
self._resultset = self._datasource.createResultSet ()
#
---------------------------------------------------------------------------
***************
*** 94,96 ****
--- 100,112 ----
return geasInstance.geasInstance (self._classname,
self._resultset.current)
else:
return None
+
+
+ #
---------------------------------------------------------------------------
+ # insert a new empty instance in the list and return it
+ #
---------------------------------------------------------------------------
+
+ def insertNewInstance (self):
+ self._resultset.insertRecord()
+ return geasInstance.geasInstance (self._classname,
self._resultset.current)
+
Index: gnue/appserver/src/geasSession.py
diff -c gnue/appserver/src/geasSession.py:1.4
gnue/appserver/src/geasSession.py:1.5
*** gnue/appserver/src/geasSession.py:1.4 Wed May 22 11:25:10 2002
--- gnue/appserver/src/geasSession.py Sun May 26 05:22:15 2002
***************
*** 19,25 ****
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: geasSession.py,v 1.4 2002/05/22 15:25:10 siesel Exp $
import geasList
--- 19,25 ----
# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
! # $Id: geasSession.py,v 1.5 2002/05/26 09:22:15 siesel Exp $
import geasList
***************
*** 55,58 ****
def rollback (self):
for l in self._activelists:
! l._datasource.abort()
--- 55,58 ----
def rollback (self):
for l in self._activelists:
! l._datasource.rollback()
Index: gnue/common/src/dbdrivers/appserver/DBdriver.py
diff -c gnue/common/src/dbdrivers/appserver/DBdriver.py:1.1
gnue/common/src/dbdrivers/appserver/DBdriver.py:1.2
*** gnue/common/src/dbdrivers/appserver/DBdriver.py:1.1 Sun May 19 18:34:59 2002
--- gnue/common/src/dbdrivers/appserver/DBdriver.py Sun May 26 05:22:14 2002
***************
*** 35,51 ****
import md5
import sys
! class GEASv2_RecordSet(GDataObjects.RecordSet):
! def _postChanges(self):
! values = []
! fields = []
! fieldString = ""
! for field in (self._modifiedFields.keys()):
! fields.append(field + " = %s")
! values.append(self._fields[field])
- # statement = 'UPDATE %s SET %s WHERE %s = %s'
-
# GEASv2_ResultSet
#
# Notes:
--- 35,60 ----
import md5
import sys
! class GEASv2_RecordSet(GDataObjects.RecordSet):
! def setAssoziatedInstance(self,instance):
! self._instance=instance
!
! def _postChanges(self):
! if self._deleteFlag:
! GDebug.printMesg(5, 'GEASv2: Instance deleted')
! self._instance.delete()
!
! if self._insertFlag:
! GDebug.printMesg(5, 'GEASv2: new Instance created and inserted')
! self._instance=self._parent._cursor.insertNewInstance()
!
! for field in (self._modifiedFlags.keys()):
! self._instance.put(field,self._fields[field])
!
! self._updateFlag = 0
! self._insertFlag = 0
! self._deleteFlag = 0
# GEASv2_ResultSet
#
# Notes:
***************
*** 60,77 ****
self._recordSetClass = GEASv2_RecordSet
# Populate field names
! self._fieldNames = self._dataObject.getFields(self._dataObject.table)
!
! # load first record
! if self._cursor==3:
! Instance=self._cursor.firstInstance()
! if (Instance!=None) and (Instance!=1):
! dict = {}
! for fieldName in self._fieldNames:
! dict[fieldName] = Instance.get(fieldName)
! self._cachedRecords.append (self._recordSetClass(parent=self, \
! initialData=dict))
!
GDebug.printMesg(5, 'ResultSet created')
--- 69,75 ----
self._recordSetClass = GEASv2_RecordSet
# Populate field names
! self._fieldNames = self._dataObject.getFields(self._dataObject.table)
GDebug.printMesg(5, 'ResultSet created')
***************
*** 80,102 ****
if self._cursor:
# Populate the result set
! # for recordSet in resultSet.objects:
! # load all records into the cache
Instance=self._cursor.nextInstance()
dict = {}
! # xmlrpc GNURPC driver changes None to 1
while (Instance!=None) and (Instance!=1):
dict = {}
for fieldName in self._fieldNames:
dict[fieldName] = Instance.get(fieldName)
! self._cachedRecords.append (self._recordSetClass(parent=self, \
! initialData=dict))
Instance=self._cursor.nextInstance()
if dict != {}:
! return 1
return 0
class GEASv2_DataObject(GDataObjects.DataObject):
# ConditionalName (min args, max args, field creation, bypass function )
--- 78,157 ----
if self._cursor:
# Populate the result set
!
! # load all instances into the cache
Instance=self._cursor.nextInstance()
dict = {}
! # xmlrpc GNURPC driver changes None into 1
! # so we have to check for None or 1
while (Instance!=None) and (Instance!=1):
dict = {}
for fieldName in self._fieldNames:
dict[fieldName] = Instance.get(fieldName)
!
! record=self._recordSetClass(parent=self,initialData=dict)
! record.setAssoziatedInstance(Instance)
! self._cachedRecords.append (record)
!
! # increase record count by one
! # (should be replaced by a geasList.getQueryCount() later)
! self._recordCount=self._recordCount+1
!
! # try to load next instance
Instance=self._cursor.nextInstance()
+
+ # check if an record has added to the cache
if dict != {}:
! return 1
!
! # if no record returned return a zero
return 0
+
+ # Post changes to the database
+ # similar function like in GDataObjects, just with an missing line
+ def post(self, foreign_keys={}):
+ # post our changes
+
+ recordPosition = 0
+ while recordPosition < len(self._cachedRecords):
+ record = self._cachedRecords[recordPosition]
+
+ delete = record._emptyFlag or record._deleteFlag
+ if not delete:
+ # Flip the flag for 'default' values to true so that hidden
+ # default fields are included in insert statements
+ if record.isPending():
+ for field in self._dataObject._defaultValues.keys():
+ record._modifiedFlags[field] = 1
+
+ for field in foreign_keys.keys():
+ record._fields[field] = foreign_keys[field]
+ # Some DBs will throw an exception if you update a Primary Key
+ # (even if you are updating to the same value)
+ if record._insertFlag:
+ record._modifiedFlags[field] = 1
+
+ recordPosition += 1
+ else:
+ # Adjust the current record if a preceding record
+ # or the current record is deleted
+ if recordPosition <= self._currentRecord:
+ self._currentRecord -= 1
+ self._cachedRecords.pop(recordPosition)
+ self._recordCount -= 1
+
+ record.post()
+
+ # Move to record 0 if all preceding records were deleted
+ # (or set to -1 if all records were deleted)
+ if self._currentRecord < 0:
+ if len(self._cachedRecords):
+ self._currentRecord = 0
+ else:
+ self._currentRecord = -1
+
class GEASv2_DataObject(GDataObjects.DataObject):
# ConditionalName (min args, max args, field creation, bypass function )
***************
*** 137,156 ****
user = connectData['_username']
passwd = connectData['_password']
! print "Opening RPC connection ..."
! params = { 'host': 'localhost',
! 'port': 8765,
! 'transport': 'http' }
! self._server = GComm.attach('xmlrpc',params)
! print "Setup an link to the session manager"
sessionManager = self._server.request("SessionManager")
! print "Get the status of the session manager"
! print "Status: ",sessionManager.Status()
! print "Creating session object ..."
self._session=sessionManager.getNewSession()
try:
--- 192,210 ----
user = connectData['_username']
passwd = connectData['_password']
! params = { 'host': connectData['host'],
! 'port': connectData['port'],
! 'transport': connectData['transport']}
! self._server = GComm.attach( connectData['rpctype'],params)
! GDebug.printMesg(3,"Setup an link to the session manager")
sessionManager = self._server.request("SessionManager")
! GDebug.printMesg(3,"Get the status of the session manager")
! GDebug.printMesg(3,"Status: "+sessionManager.Status())
! GDebug.printMesg(3,"Creating session object ...")
self._session=sessionManager.getNewSession()
try:
***************
*** 269,275 ****
def _createResultSet(self, conditions={}, readOnly=0, masterRecordSet=None):
print _("Conditions"), conditions # self._buildQuery(conditions)
try:
! self._list = self._session.createList ("person")
except:
raise GDataObjects.ConnectionError, "Error during creation of object
list"
try:
--- 323,329 ----
def _createResultSet(self, conditions={}, readOnly=0, masterRecordSet=None):
print _("Conditions"), conditions # self._buildQuery(conditions)
try:
! self._list = self._session.createList (self.table)
except:
raise GDataObjects.ConnectionError, "Error during creation of object
list"
try:
***************
*** 278,289 ****
except self._DatabaseError, err:
raise GDataObjects.ConnectionError, err
! print "Setting up list object ..."
! self._list.setPrefetch (["name", "street", "city","zip"])
! # self._list.setPrefetch (self._fieldlist)
! self._list.setSort (["zip"])
! print "Populating list ..."
self._list.populate ()
rs = self._resultSetClass(self, cursor=self._list, masterRecordSet=None)
--- 332,351 ----
except self._DatabaseError, err:
raise GDataObjects.ConnectionError, err
! GDebug.printMesg (5,"Setting up list object ...");
!
! # the fieldnames seem to be stored in _fieldReferences
! fieldlist=self._fieldReferences.keys()
! self._list.setPrefetch (fieldlist);
!
! GDebug.printMesg (5,"Using "+str(fieldlist)+" as fieldlist");
!
! if hasattr(self,"order_by"):
! GDebug.printMesg (5,"Sorting list by field '"+self.order_by+"'");
! self._list.setSort (self.order_by)
!
! GDebug.printMesg (5,"Populating list ...");
self._list.populate ()
rs = self._resultSetClass(self, cursor=self._list, masterRecordSet=None)
- gnue common/src/dbdrivers/appserver/DBdriver.py...,
Jan Ischebeck <=