[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue common/src/GDataSource.py common/src/dbdri...
From: |
James Thompson |
Subject: |
gnue common/src/GDataSource.py common/src/dbdri... |
Date: |
Fri, 04 Jan 2002 17:56:59 -0500 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: James Thompson <address@hidden> 02/01/04 17:56:59
Modified files:
common/src : GDataSource.py
common/src/dbdrivers/_dbsig: DBdriver.py
common/src/dbdrivers/popy: DBdriver.py
common/src/dbdrivers/postgresql: DBdriver.py
common/src/dbdrivers/psycopg: DBdriver.py
common/src/dbdrivers/pypgsql: DBdriver.py
forms/samples/zipcode: states.gfd
Log message:
Syncing machines
more _pgsql driver merges
added support for accurate record counts on queries
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/GDataSource.py.diff?tr1=1.20&tr2=1.21&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/_dbsig/DBdriver.py.diff?tr1=1.27&tr2=1.28&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/popy/DBdriver.py.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/postgresql/DBdriver.py.diff?tr1=1.30&tr2=1.31&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/psycopg/DBdriver.py.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/pypgsql/DBdriver.py.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/samples/zipcode/states.gfd.diff?tr1=1.20&tr2=1.21&r1=text&r2=text
Patches:
Index: gnue/common/src/GDataSource.py
diff -c gnue/common/src/GDataSource.py:1.20 gnue/common/src/GDataSource.py:1.21
*** gnue/common/src/GDataSource.py:1.20 Fri Dec 21 17:20:38 2001
--- gnue/common/src/GDataSource.py Fri Jan 4 17:56:59 2002
***************
*** 175,181 ****
'table': {
'Typecast': GTypecast.name },
'cache': {
! 'Typecast': GTypecast.whole },
'prequery': {
'Typecast': GTypecast.boolean,
'Default': 0 },
--- 175,182 ----
'table': {
'Typecast': GTypecast.name },
'cache': {
! 'Typecast': GTypecast.whole,
! 'Default': 5 },
'prequery': {
'Typecast': GTypecast.boolean,
'Default': 0 },
Index: gnue/common/src/dbdrivers/_dbsig/DBdriver.py
diff -c gnue/common/src/dbdrivers/_dbsig/DBdriver.py:1.27
gnue/common/src/dbdrivers/_dbsig/DBdriver.py:1.28
*** gnue/common/src/dbdrivers/_dbsig/DBdriver.py:1.27 Fri Jan 4 14:51:14 2002
--- gnue/common/src/dbdrivers/_dbsig/DBdriver.py Fri Jan 4 17:56:59 2002
***************
*** 105,111 ****
(self._parent._dataObject.table, string.join(fields,','), \
string.join(vals,',') )
-
def _buildUpdateStatement(self):
updates = []
for field in self._modifiedFlags.keys():
--- 105,110 ----
***************
*** 140,146 ****
self._fieldNames.append(t[0])
GDebug.printMesg(5, "Field names set to %s" % self._fieldNames)
! self._recordCount = cursor.rowcount > 0 and cursor.rowcount or 0
# If a DB driver supports a unique identifier for rows,
# list it here. _primaryIdField is the field name (lower case)
--- 139,145 ----
self._fieldNames.append(t[0])
GDebug.printMesg(5, "Field names set to %s" % self._fieldNames)
! self._recordCount = cursor.rowcount or 0
# If a DB driver supports a unique identifier for rows,
# list it here. _primaryIdField is the field name (lower case)
***************
*** 183,189 ****
self._cachedRecords.pop(i)
self._recordCount -= 1
else:
! i = i + 1
# Move to record 0 if all preceding records were deleted
# (or set to -1 if all records were deleted)
--- 182,188 ----
self._cachedRecords.pop(i)
self._recordCount -= 1
else:
! i += 1
# Move to record 0 if all preceding records were deleted
# (or set to -1 if all records were deleted)
***************
*** 202,213 ****
try:
rsets = self._cursor.fetchmany()
except self._dataObject._DatabaseError, err:
pass
# TODO: It seems that popy does what the other drivers don't
# TODO: and raises this error ALOT need to find out why
! # raise GDataObjects.ConnectionError, err
!
if len(rsets):
for rs in(rsets):
if rs:
--- 201,215 ----
try:
rsets = self._cursor.fetchmany()
+ print "RSETS:", rsets
except self._dataObject._DatabaseError, err:
pass
+ # raise GDataObjects.ConnectionError, err
# TODO: It seems that popy does what the other drivers don't
# TODO: and raises this error ALOT need to find out why
! # TODO: BTW - This should not be in here :(
! #
! # TODO: Since popy fails the fetchmany() with
if len(rsets):
for rs in(rsets):
if rs:
***************
*** 248,260 ****
'notlike': (2, 2, '%s NOT LIKE %s', None ),
'between': (3, 3, '%s BETWEEN %s AND %s', None ) }
! def __init__(self):
GDataObjects.DataObject.__init__(self)
GDebug.printMesg (1,"DB-SIG database driver backend initializing")
self._resultSetClass = DBSIG_ResultSet
self._DatabaseError = None
# This should be over-ridden only if driver needs more than user/pass
--- 250,263 ----
'notlike': (2, 2, '%s NOT LIKE %s', None ),
'between': (3, 3, '%s BETWEEN %s AND %s', None ) }
! def __init__(self, strictQueryCount=1):
GDataObjects.DataObject.__init__(self)
GDebug.printMesg (1,"DB-SIG database driver backend initializing")
self._resultSetClass = DBSIG_ResultSet
self._DatabaseError = None
+ self._strictQueryCount = strictQueryCount
# This should be over-ridden only if driver needs more than user/pass
***************
*** 265,281 ****
def _createResultSet(self, conditions={}, readOnly=0,
masterRecordSet=None):
try:
cursor = self._dataConnection.cursor()
cursor.arraysize = self.cache
cursor.execute(self._buildQuery(conditions))
! print "cache is ", cursor.arraysize
!
except self._DatabaseError, err:
raise GDataObjects.ConnectionError, err
rs = self._resultSetClass(self, cursor=cursor,
masterRecordSet=masterRecordSet)
if readOnly:
rs._readonly = readOnly
return rs
def commit(self):
GDebug.printMesg (5,"DB-SIG database driver: commit()")
--- 268,297 ----
def _createResultSet(self, conditions={}, readOnly=0,
masterRecordSet=None):
try:
cursor = self._dataConnection.cursor()
+
+ # pull a record count for the upcomming query
+ if self._strictQueryCount:
+ recordCount = self._getQueryCount(conditions)
+
cursor.arraysize = self.cache
cursor.execute(self._buildQuery(conditions))
!
except self._DatabaseError, err:
raise GDataObjects.ConnectionError, err
rs = self._resultSetClass(self, cursor=cursor,
masterRecordSet=masterRecordSet)
+ if self._strictQueryCount:
+ rs._recordCount = recordCount
if readOnly:
rs._readonly = readOnly
+
return rs
+ def _getQueryCount(self,conditions={}):
+ cursor = self._dataConnection.cursor()
+
+ cursor.execute(self._buildQueryCount(conditions))
+ rs = cursor.fetchone()
+ return rs[0]
def commit(self):
GDebug.printMesg (5,"DB-SIG database driver: commit()")
***************
*** 299,308 ****
self._beginTransaction()
- # def _buildQuery(self, conditions={}):
- # return None
-
-
# Used to convert a condition tree to an sql where clause
def _conditionToSQL (self, condition):
if condition == {} or condition == None:
--- 315,320 ----
***************
*** 376,384 ****
class DBSIG_DataObject_Object:
def __init__(self):
! pass # TODO: A dummy placeholder to let old db driver work
! # TODO: each can have their *_DataObject_Object object from
__init__ing
! # TODO: DBSIG_DataObject_Object
def _buildQuery(self, conditions={}):
GDebug.printMesg(7,'Implicit Fields: %s' % self._fieldReferences)
--- 388,398 ----
class DBSIG_DataObject_Object:
def __init__(self):
! # TODO: A dummy placeholder to let old db driver work
! # TODO: each can have their *_DataObject_Object object from __init__ing
! # TODO: DBSIG_DataObject_Object
! GDebug.printMesg(0,
! "Database driver needs updated to not initialize
DBSIG_DataObject_Object")
def _buildQuery(self, conditions={}):
GDebug.printMesg(7,'Implicit Fields: %s' % self._fieldReferences)
***************
*** 396,413 ****
return q
class DBSIG_DataObject_SQL:
def _buildQuery(self, conditions={}):
# Obviously, this is in a pre-alpha state :)
return "select zipcode, city, state from zipcode order by zipcode desc"
-
-
supportedDataObjects = {
'object': DBSIG_DataObject_Object,
'sql': DBSIG_DataObject_SQL
}
--- 410,437 ----
return q
+ def _buildQueryCount(self, conditions={}):
+ q = "SELECT count(*) FROM %s%s" % (self.table,
self._conditionToSQL(conditions))
+ GDebug.printMesg(5,q)
+
+ return q
class DBSIG_DataObject_SQL:
def _buildQuery(self, conditions={}):
# Obviously, this is in a pre-alpha state :)
return "select zipcode, city, state from zipcode order by zipcode desc"
supportedDataObjects = {
'object': DBSIG_DataObject_Object,
'sql': DBSIG_DataObject_SQL
}
+
+
+
+
+
+
+
Index: gnue/common/src/dbdrivers/popy/DBdriver.py
diff -c gnue/common/src/dbdrivers/popy/DBdriver.py:1.9
gnue/common/src/dbdrivers/popy/DBdriver.py:1.10
*** gnue/common/src/dbdrivers/popy/DBdriver.py:1.9 Fri Jan 4 14:51:14 2002
--- gnue/common/src/dbdrivers/popy/DBdriver.py Fri Jan 4 17:56:59 2002
***************
*** 41,79 ****
pass
class PG_ResultSet(PGSQL_ResultSet):
! pass
class PG_DataObject(PGSQL_DataObject):
def __init__(self):
! PGSQL_DataObject.__init__(self)
! self._DatabaseError = PoPy.DatabaseError
! self._resultSetClass = PG_ResultSet
- def connect(self, connectData={}):
- GDebug.printMesg(1,"Postgresql database driver initializing")
- try:
- self._dataConnection = PoPy.connect('user=%s password=%s host=%s
dbname=%s' %
- (connectData['_username'],
connectData['_password'], connectData['host'], connectData['dbname']))
- self.triggerExtensions = TriggerExtensions(self._dataConnection)
- except self._DatabaseError, value:
- raise GDataObjects.LoginError, value
-
- try:
- encoding = connectData['encoding']
- GDebug.printMesg(1,'Setting postgresql client_encoding to %s' %
encoding)
- cursor = self._dataConnection.cursor()
- cursor.execute("SET CLIENT_ENCODING TO '%s'" % encoding)
- cursor.close()
- except KeyError:
- pass
- except self._DatabaseError:
- try:
- cursor.close()
- except:
- pass
-
- self._postConnect()
-
class PG_DataObject_Object(PG_DataObject, \
PGSQL_DataObject_Object):
--- 41,79 ----
pass
class PG_ResultSet(PGSQL_ResultSet):
! def _loadNextRecord(self):
! if self._cursor:
! rs = None
!
! try:
! rsets = self._cursor.fetchmany()
! # TODO: It seems that popy does what the other drivers don't
! # TODO: and raises this error ALOT need to find out why
! except self._dataObject._DatabaseError, err:
! rsets = []
! # raise GDataObjects.ConnectionError, err
! if len(rsets):
! for rs in(rsets):
! if rs:
! i = 0
! dict = {}
! for f in (rs):
! dict[self._fieldNames[i]] = f
! i += 1
! self._cachedRecords.append (self._recordSetClass(parent=self, \
!
initialData=dict))
! else:
! return 0
! return 1
! else:
! return 0
! else:
! return 0
class PG_DataObject(PGSQL_DataObject):
def __init__(self):
! PGSQL_DataObject.__init__(self, PoPy, PG_ResultSet)
class PG_DataObject_Object(PG_DataObject, \
PGSQL_DataObject_Object):
Index: gnue/common/src/dbdrivers/postgresql/DBdriver.py
diff -c gnue/common/src/dbdrivers/postgresql/DBdriver.py:1.30
gnue/common/src/dbdrivers/postgresql/DBdriver.py:1.31
*** gnue/common/src/dbdrivers/postgresql/DBdriver.py:1.30 Fri Jan 4
14:51:14 2002
--- gnue/common/src/dbdrivers/postgresql/DBdriver.py Fri Jan 4 17:56:59 2002
***************
*** 29,36 ****
#
- from string import lower, join
- import sys
from gnue.common import GDebug, GDataObjects, GConnections
from gnue.common.dbdrivers._pgsql.DBdriver \
import PGSQL_RecordSet, PGSQL_ResultSet, PGSQL_DataObject, \
--- 29,34 ----
***************
*** 38,45 ****
PGSQL_TriggerExtensions
try:
! import pgdb as pgdriver
! import pgdb as SIG2api
from _pg import error as PGError # This is so we can catch login errors
except ImportError, message:
raise GConnections.AdapterNotInstalled, \
--- 36,42 ----
PGSQL_TriggerExtensions
try:
! import pgdb
from _pg import error as PGError # This is so we can catch login errors
except ImportError, message:
raise GConnections.AdapterNotInstalled, \
***************
*** 52,66 ****
pass
class PG_DataObject(PGSQL_DataObject):
def __init__(self):
PGSQL_DataObject.__init__(self)
! self._DatabaseError = SIG2api.Error
self._resultSetClass = PG_ResultSet
def connect(self, connectData={}):
GDebug.printMesg(1,"Postgresql database driver initializing")
try:
! self._dataConnection = SIG2api.connect(user=connectData['_username'],
password=connectData['_password'],
host=connectData['host'],
database=connectData['dbname'])
--- 49,68 ----
pass
class PG_DataObject(PGSQL_DataObject):
+
def __init__(self):
PGSQL_DataObject.__init__(self)
! self._DatabaseError = pgdb.Error
self._resultSetClass = PG_ResultSet
+ # TODO: This needs to go away. Need to make _pgsql use a _getConnection
+ # TODO: method that returns the data connection. But I'm out of time for
+ # TODO: today
+
def connect(self, connectData={}):
GDebug.printMesg(1,"Postgresql database driver initializing")
try:
! self._dataConnection = pgdb.connect(user=connectData['_username'],
password=connectData['_password'],
host=connectData['host'],
database=connectData['dbname'])
Index: gnue/common/src/dbdrivers/psycopg/DBdriver.py
diff -c gnue/common/src/dbdrivers/psycopg/DBdriver.py:1.9
gnue/common/src/dbdrivers/psycopg/DBdriver.py:1.10
*** gnue/common/src/dbdrivers/psycopg/DBdriver.py:1.9 Fri Jan 4 14:51:14 2002
--- gnue/common/src/dbdrivers/psycopg/DBdriver.py Fri Jan 4 17:56:59 2002
***************
*** 29,35 ****
#
! import psycopg as pgdriver
from string import lower, join
import sys
--- 29,35 ----
#
! import psycopg
from string import lower, join
import sys
***************
*** 47,60 ****
class PG_DataObject(PGSQL_DataObject):
def __init__(self):
! PGSQL_DataObject.__init__(self, pgdriver, PG_ResultSet)
class PG_DataObject_Object(PG_DataObject, \
PGSQL_DataObject_Object):
def __init__(self):
- # Call PGSQL init first because PG_DataObject needs to overwrite
- # some of its values
- #PGSQL_DataObject_Object.__init__(self)
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
--- 47,57 ----
class PG_DataObject(PGSQL_DataObject):
def __init__(self):
! PGSQL_DataObject.__init__(self, psycopg, PG_ResultSet)
class PG_DataObject_Object(PG_DataObject, \
PGSQL_DataObject_Object):
def __init__(self):
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
***************
*** 63,71 ****
class PG_DataObject_SQL(PG_DataObject, \
PGSQL_DataObject_SQL):
def __init__(self):
- # Call PGSQL init first because PG_DataObject needs to overwrite
- # some of its values
- PGSQL_DataObject_SQL.__init__(self)
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
--- 60,65 ----
Index: gnue/common/src/dbdrivers/pypgsql/DBdriver.py
diff -c gnue/common/src/dbdrivers/pypgsql/DBdriver.py:1.19
gnue/common/src/dbdrivers/pypgsql/DBdriver.py:1.20
*** gnue/common/src/dbdrivers/pypgsql/DBdriver.py:1.19 Fri Jan 4 14:51:14 2002
--- gnue/common/src/dbdrivers/pypgsql/DBdriver.py Fri Jan 4 17:56:59 2002
***************
*** 81,124 ****
class PG_DataObject(PGSQL_DataObject):
def __init__(self):
! PGSQL_DataObject.__init__(self)
! self._DatabaseError = PgSQL.DatabaseError
! self._resultSetClass = PG_ResultSet
!
! def connect(self, connectData={}):
! GDebug.printMesg(1,"Postgresql database driver initializing")
! try:
! self._dataConnection = PgSQL.connect("%s::%s:%s:%s::" % \
! (connectData['host'],
! connectData['dbname'],
! connectData['_username'],
! connectData['_password']))
! self.triggerExtensions = TriggerExtensions(self._dataConnection)
! except self._DatabaseError, value:
! GDebug.printMesg(1,"%s::%s:%s:***::" % \
! (connectData['host'],
! connectData['dbname'],
! connectData['_username']))
! GDebug.printMesg(1,"Exception %s " % value)
! raise GDataObjects.LoginError, value
!
! try:
! encoding = connectData['encoding']
! GDebug.printMesg(1,'Setting postgresql client_encoding to %s' %
encoding)
! cursor = self._dataConnection.cursor()
! cursor.execute("SET CLIENT_ENCODING TO '%s'" % encoding)
! cursor.close()
! except KeyError:
! pass
! except self._DatabaseError:
! try:
! cursor.close()
! except:
! pass
!
! GDebug.printMesg(1,"Pre post connect")
! self._postConnect()
! GDebug.printMesg(1,"Post post connect")
class PG_DataObject_Object(PG_DataObject, \
PGSQL_DataObject_Object):
--- 81,87 ----
class PG_DataObject(PGSQL_DataObject):
def __init__(self):
! PGSQL_DataObject.__init__(self, PgSQL, PG_ResultSet)
class PG_DataObject_Object(PG_DataObject, \
PGSQL_DataObject_Object):
Index: gnue/forms/samples/zipcode/states.gfd
diff -c gnue/forms/samples/zipcode/states.gfd:1.20
gnue/forms/samples/zipcode/states.gfd:1.21
*** gnue/forms/samples/zipcode/states.gfd:1.20 Thu Jan 3 22:17:00 2002
--- gnue/forms/samples/zipcode/states.gfd Fri Jan 4 17:56:59 2002
***************
*** 7,15 ****
<options>
<option value="0.0.2" name="version"/>
</options>
! <datasource cache="100" database="gnue" name="dsstate" order_by="state"
table="state"/>
! <datasource master="dsstate" order_by="city" cache="100" database="gnue"
name="dscities" table="zipcode" masterlink="state"
detaillink="state"/>
<page name="Page_1">
<block name="blkstate" rows="5" datasource="dsstate">
--- 7,15 ----
<options>
<option value="0.0.2" name="version"/>
</options>
! <datasource cache="15" database="gnue" name="dsstate" order_by="state"
table="state"/>
! <datasource master="dsstate" order_by="city" cache="15" database="gnue"
name="dscities" table="zipcode" masterlink="state"
detaillink="state"/>
<page name="Page_1">
<block name="blkstate" rows="5" datasource="dsstate">
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue common/src/GDataSource.py common/src/dbdri...,
James Thompson <=