[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/common/src/dbdrivers _dbsig/DBdriver.py _p...
From: |
James Thompson |
Subject: |
gnue/common/src/dbdrivers _dbsig/DBdriver.py _p... |
Date: |
Fri, 04 Jan 2002 14:51:14 -0500 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: James Thompson <address@hidden> 02/01/04 14:51:14
Modified files:
common/src/dbdrivers/_dbsig: DBdriver.py
common/src/dbdrivers/_pgsql: 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
Log message:
unified postgresql drivers
pypgsql/_pgsql driver has been modified to move code into _pgsql
start of DBSIG class cleanup
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/_dbsig/DBdriver.py.diff?tr1=1.26&tr2=1.27&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/_pgsql/DBdriver.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/popy/DBdriver.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/postgresql/DBdriver.py.diff?tr1=1.29&tr2=1.30&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/psycopg/DBdriver.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/pypgsql/DBdriver.py.diff?tr1=1.18&tr2=1.19&r1=text&r2=text
Patches:
Index: gnue/common/src/dbdrivers/_dbsig/DBdriver.py
diff -c gnue/common/src/dbdrivers/_dbsig/DBdriver.py:1.26
gnue/common/src/dbdrivers/_dbsig/DBdriver.py:1.27
*** gnue/common/src/dbdrivers/_dbsig/DBdriver.py:1.26 Thu Jan 3 22:17:00 2002
--- gnue/common/src/dbdrivers/_dbsig/DBdriver.py Fri Jan 4 14:51:14 2002
***************
*** 299,306 ****
self._beginTransaction()
! def _buildQuery(self, conditions={}):
! return None
# Used to convert a condition tree to an sql where clause
--- 299,306 ----
self._beginTransaction()
! # def _buildQuery(self, conditions={}):
! # return None
# Used to convert a condition tree to an sql where clause
***************
*** 374,380 ****
pass
! class DBSIG_DataObject_Object(DBSIG_DataObject):
def _buildQuery(self, conditions={}):
GDebug.printMesg(7,'Implicit Fields: %s' % self._fieldReferences)
if len(self._fieldReferences):
--- 374,385 ----
pass
! 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)
if len(self._fieldReferences):
***************
*** 393,399 ****
! class DBSIG_DataObject_SQL(DBSIG_DataObject):
def _buildQuery(self, conditions={}):
# Obviously, this is in a pre-alpha state :)
return "select zipcode, city, state from zipcode order by zipcode desc"
--- 398,404 ----
! 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"
Index: gnue/common/src/dbdrivers/_pgsql/DBdriver.py
diff -c gnue/common/src/dbdrivers/_pgsql/DBdriver.py:1.2
gnue/common/src/dbdrivers/_pgsql/DBdriver.py:1.3
*** gnue/common/src/dbdrivers/_pgsql/DBdriver.py:1.2 Fri Jan 4 00:36:25 2002
--- gnue/common/src/dbdrivers/_pgsql/DBdriver.py Fri Jan 4 14:51:14 2002
***************
*** 33,43 ****
import sys
from gnue.common import GDebug, GDataObjects
from gnue.common.dbdrivers._dbsig.DBdriver \
! import DBSIG_RecordSet, DBSIG_ResultSet, DBSIG_DataObject, \
! DBSIG_DataObject_SQL, DBSIG_DataObject_Object
! import _dbsig.DBSIG_DataObject_Object as PGSQL_DataObject_Object
! import _dbsig.DBSIG_DataObject_SQL as PGSQL_DataObject_SQL
class PGSQL_RecordSet(DBSIG_RecordSet):
pass
--- 33,42 ----
import sys
from gnue.common import GDebug, GDataObjects
from gnue.common.dbdrivers._dbsig.DBdriver \
! import DBSIG_RecordSet, DBSIG_ResultSet, DBSIG_DataObject
! from gnue.common.dbdrivers._dbsig.DBdriver import DBSIG_DataObject_Object as
PGSQL_DataObject_Object
! from gnue.common.dbdrivers._dbsig.DBdriver import DBSIG_DataObject_SQL as
PGSQL_DataObject_SQL
class PGSQL_RecordSet(DBSIG_RecordSet):
pass
***************
*** 49,69 ****
self._recordSetClass = PGSQL_RecordSet
class PGSQL_DataObject(DBSIG_DataObject):
! def __init__(self):
DBSIG_DataObject.__init__(self)
! #self._DatabaseError = pgdriver.DatabaseError
! #self._resultSetClass = PG_ResultSet
def connect(self, connectData={}):
pass
- # TODO: leaving hear as placeholder for a common connect function for std
postgresql drivers
GDebug.printMesg(1,"Postgresql database driver initializing")
try:
! self._dataConnection = pgdriver.connect("%s::%s:%s:%s::" % \
! (connectData['host'],
! connectData['dbname'],
! connectData['_username'],
! connectData['_password']))
self.triggerExtensions = PGSQL_TriggerExtensions(self._dataConnection)
except self._DatabaseError, value:
GDebug.printMesg(1,"%s::%s:%s:***::" % \
--- 48,74 ----
self._recordSetClass = PGSQL_RecordSet
class PGSQL_DataObject(DBSIG_DataObject):
! def __init__(self, pgdriver=None, pgresultset=None):
DBSIG_DataObject.__init__(self)
! if pgdriver:
! self._pgdriver = pgdriver
! self._DatabaseError = self._pgdriver.DatabaseError
! if pgresultset:
! self._resultSetClass = pgresultset
+
+ # TODO: leaving here as placeholder for a common connect function for std
postgresql drivers
def connect(self, connectData={}):
pass
GDebug.printMesg(1,"Postgresql database driver initializing")
try:
! #self._dataConnection = self._pgdriver.connect("%s::%s:%s:%s::" % \
! # (connectData['host'],
! # connectData['dbname'],
! # connectData['_username'],
! # connectData['_password']))
! self._dataConnection = self._pgdriver.connect('user=%s password=%s
host=%s dbname=%s' %
! (connectData['_username'],
connectData['_password'], connectData['host'], connectData['dbname']))
self.triggerExtensions = PGSQL_TriggerExtensions(self._dataConnection)
except self._DatabaseError, value:
GDebug.printMesg(1,"%s::%s:%s:***::" % \
***************
*** 224,227 ****
try:
return rv[0]
except:
! return None
--- 229,232 ----
try:
return rv[0]
except:
! return None
\ No newline at end of file
Index: gnue/common/src/dbdrivers/popy/DBdriver.py
diff -c gnue/common/src/dbdrivers/popy/DBdriver.py:1.8
gnue/common/src/dbdrivers/popy/DBdriver.py:1.9
*** gnue/common/src/dbdrivers/popy/DBdriver.py:1.8 Tue Nov 20 21:12:53 2001
--- gnue/common/src/dbdrivers/popy/DBdriver.py Fri Jan 4 14:51:14 2002
***************
*** 28,66 ****
# NOTES:
#
-
- from string import lower, join
- import sys
from gnue.common import GDebug, GDataObjects
- from gnue.common.dbdrivers._dbsig.DBdriver \
- import DBSIG_RecordSet, DBSIG_ResultSet, DBSIG_DataObject, \
- DBSIG_DataObject_SQL, DBSIG_DataObject_Object
-
- try:
- import PoPy
- except ImportError, mesg:
- GDebug.printMesg(1,mesg)
- print "-"*79
- print "\nCould not load PoPy. For PostgreSQL support, please install \n" \
- + "PoPy " \
- + "from http://sourceforge.net/projects/popy\n"
- print "Error: %s" % mesg
- print "-"*79
- sys.exit()
! class PG_RecordSet(DBSIG_RecordSet):
pass
! class PG_ResultSet(DBSIG_ResultSet):
! def __init__(self, dataObject, cursor=None, defaultValues={},
masterRecordSet=None):
! DBSIG_ResultSet.__init__(self, dataObject, \
! cursor, defaultValues, masterRecordSet)
! self._recordSetClass = PG_RecordSet
! class PG_DataObject(DBSIG_DataObject):
def __init__(self):
! DBSIG_DataObject.__init__(self)
self._DatabaseError = PoPy.DatabaseError
self._resultSetClass = PG_ResultSet
--- 28,51 ----
# NOTES:
#
from gnue.common import GDebug, GDataObjects
+ from gnue.common.dbdrivers._pgsql.DBdriver \
+ import PGSQL_RecordSet, PGSQL_ResultSet, PGSQL_DataObject, \
+ PGSQL_DataObject_SQL, PGSQL_DataObject_Object, \
+ PGSQL_TriggerExtensions
+
+ import PoPy
! class PG_RecordSet(PGSQL_RecordSet):
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
***************
*** 87,262 ****
except:
pass
-
-
self._postConnect()
-
- def _postConnect(self):
- self.triggerExtensions = TriggerExtensions(self._dataConnection)
-
-
- #
- # Schema (metadata) functions
- #
-
- # Return a list of the types of Schema objects this driver provides
- def getSchemaTypes(self):
- return [('view','View',1), ('table','Table',1)]
-
- # Return a list of Schema objects
- def getSchemaList(self, type=None):
- includeTables = (type in ('table','sources', None))
- includeViews = (type in ('view','sources', None))
-
- inClause = []
- if includeTables:
- inClause.append ("'r'")
- if includeViews:
- inClause.append ("'v'")
-
- # TODO: This excludes any system tables and views. Should it?
- statement = "select relname, relkind from pg_class " + \
- "where relkind in (%s) " % (join(inClause,',')) + \
- "and relname not like 'pg_%' " + \
- "order by relname"
-
- cursor = self._dataConnection.cursor()
- cursor.execute(statement)
-
- list = []
- for rs in cursor.fetchall():
- list.append(GDataObjects.Schema(attrs={'id':lower(rs[0]), 'name':rs[0],
- 'type':rs[1] == 'v' and 'view' or 'table'},
- getChildSchema=self.__getFieldSchema))
-
- cursor.close()
- return list
-
-
- # Find a schema object with specified name
- def getSchemaByName(self, name, type=None):
- statement = "select relname, relkind, oid from pg_class " + \
- "where relname = '%s'" % (name)
-
- cursor = self._dataConnection.cursor()
- cursor.execute(statement)
-
- rs = cursor.fetchone()
- schema = GDataObjects.Schema(attrs={'id':rs[2], 'name':rs[0],
- 'type':rs[1] == 'v' and 'view' or 'table'},
- getChildSchema=self.__getFieldSchema)
-
- cursor.close()
- return schema
-
- # Get fields for a table
- def __getFieldSchema(self, parent):
-
- statement = "select attname, pg_attribute.oid, typname, " + \
- " attnotnull, atthasdef, atttypmod " + \
- "from pg_attribute, pg_type " + \
- "where attrelid = %d and " % (parent.id) + \
- "pg_type.oid = atttypid and attnum >= 0" + \
- "order by attnum"
-
- cursor = self._dataConnection.cursor()
- cursor.execute(statement)
-
- list = []
- for rs in cursor.fetchall():
-
- attrs={'id': rs[1], 'name': rs[0],
- 'type':'field', 'nativetype': rs[2],
- 'required': rs[3] and not rs[4]}
-
- if rs[2] in ('int8','int2','int4','numeric',
- 'float4','float8','money','bool'):
- attrs['datatype']='number'
- elif rs[2] in ('date','time','timestamp','abstime','reltime'):
- attrs['datatype']='date'
- else:
- attrs['datatype']='text'
-
- if rs[5] != -1:
- attrs['length'] = rs[5]
-
- list.append(GDataObjects.Schema(attrs=attrs))
-
- cursor.close()
- return list
-
-
-
class PG_DataObject_Object(PG_DataObject, \
! DBSIG_DataObject_Object):
def __init__(self):
! # Call DBSIG init first because PG_DataObject needs to overwrite
# some of its values
! DBSIG_DataObject_Object.__init__(self)
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
! return DBSIG_DataObject_Object._buildQuery(self, conditions)
class PG_DataObject_SQL(PG_DataObject, \
! DBSIG_DataObject_SQL):
def __init__(self):
! # Call DBSIG init first because PG_DataObject needs to overwrite
# some of its values
! DBSIG_DataObject_SQL.__init__(self)
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
! return DBSIG_DataObject_SQL._buildQuery(self, conditions)
#
# Extensions to Trigger Namespaces
#
! class TriggerExtensions:
!
! def __init__(self, connection):
! self.__connection = connection
!
! # Return the current date, according to database
! def getTimeStamp(self):
! return self.__singleQuery("select current_timestamp")
!
! # Return a sequence number from sequence 'name'
! def getSequence(self, name):
! return self.__singleQuery("select nextval('%s')" % name)
!
! # Run the SQL statement 'statement'
! def sql(self, statement):
! cursor = self.__connection.cursor()
! try:
! cursor.execute(statement)
! cursor.close()
! except:
! cursor.close()
! raise
!
! # Used internally
! def __singleQuery(self, statement):
! cursor = self.__connection.cursor()
! try:
! cursor.execute(statement)
! rv = cursor.fetchone()
! cursor.close()
! except mesg:
! GDebug.printMesg(1,"**** Unable to execute extension query")
! GDebug.printMesg(1,"**** %s" % mesg)
! cursor.close()
! return None
!
! try:
! return rv[0]
! except:
! return None
!
######################################
--- 72,109 ----
except:
pass
self._postConnect()
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={}):
! return PGSQL_DataObject_Object._buildQuery(self, conditions)
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={}):
! return PGSQL_DataObject_SQL._buildQuery(self, conditions)
#
# Extensions to Trigger Namespaces
#
! class TriggerExtensions(PGSQL_TriggerExtensions):
! pass
######################################
Index: gnue/common/src/dbdrivers/postgresql/DBdriver.py
diff -c gnue/common/src/dbdrivers/postgresql/DBdriver.py:1.29
gnue/common/src/dbdrivers/postgresql/DBdriver.py:1.30
*** gnue/common/src/dbdrivers/postgresql/DBdriver.py:1.29 Fri Jan 4
00:36:25 2002
--- gnue/common/src/dbdrivers/postgresql/DBdriver.py Fri Jan 4 14:51:14 2002
***************
*** 119,121 ****
--- 119,127 ----
'object': PG_DataObject_Object,
'sql': PG_DataObject_SQL
}
+
+
+
+
+
+
Index: gnue/common/src/dbdrivers/psycopg/DBdriver.py
diff -c gnue/common/src/dbdrivers/psycopg/DBdriver.py:1.8
gnue/common/src/dbdrivers/psycopg/DBdriver.py:1.9
*** gnue/common/src/dbdrivers/psycopg/DBdriver.py:1.8 Tue Nov 20 21:12:53 2001
--- gnue/common/src/dbdrivers/psycopg/DBdriver.py Fri Jan 4 14:51:14 2002
***************
*** 29,252 ****
#
! import psycopg
from string import lower, join
import sys
from gnue.common import GDebug, GDataObjects
! from gnue.common.dbdrivers._dbsig.DBdriver \
! import DBSIG_RecordSet, DBSIG_ResultSet, DBSIG_DataObject, \
! DBSIG_DataObject_SQL, DBSIG_DataObject_Object
!
! class PG_RecordSet(DBSIG_RecordSet):
pass
! class PG_ResultSet(DBSIG_ResultSet):
! def __init__(self, dataObject, cursor=None, defaultValues={},
masterRecordSet=None):
! DBSIG_ResultSet.__init__(self, dataObject, \
! cursor, defaultValues, masterRecordSet)
! self._recordSetClass = PG_RecordSet
! class PG_DataObject(DBSIG_DataObject):
def __init__(self):
! DBSIG_DataObject.__init__(self)
! self._DatabaseError = psycopg.DatabaseError
! self._resultSetClass = PG_ResultSet
!
! def connect(self, connectData={}):
! GDebug.printMesg(1,"Postgresql database driver initializing")
! try:
! self._dataConnection = psycopg.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()
!
!
! def _postConnect(self):
! self.triggerExtensions = TriggerExtensions(self._dataConnection)
!
!
! #
! # Schema (metadata) functions
! #
!
! # Return a list of the types of Schema objects this driver provides
! def getSchemaTypes(self):
! return [('view','View',1), ('table','Table',1)]
!
! # Return a list of Schema objects
! def getSchemaList(self, type=None):
! includeTables = (type in ('table','sources', None))
! includeViews = (type in ('view','sources', None))
!
! inClause = []
! if includeTables:
! inClause.append ("'r'")
! if includeViews:
! inClause.append ("'v'")
!
! # TODO: This excludes any system tables and views. Should it?
! statement = "select relname, relkind from pg_class " + \
! "where relkind in (%s) " % (join(inClause,',')) + \
! "and relname not like 'pg_%' " + \
! "order by relname"
!
! cursor = self._dataConnection.cursor()
! cursor.execute(statement)
!
! list = []
! for rs in cursor.fetchall():
! list.append(GDataObjects.Schema(attrs={'id':lower(rs[0]), 'name':rs[0],
! 'type':rs[1] == 'v' and 'view' or 'table'},
! getChildSchema=self.__getFieldSchema))
!
! cursor.close()
! return list
!
!
! # Find a schema object with specified name
! def getSchemaByName(self, name, type=None):
! statement = "select relname, relkind, oid from pg_class " + \
! "where relname = '%s'" % (name)
!
! cursor = self._dataConnection.cursor()
! cursor.execute(statement)
!
! rs = cursor.fetchone()
! schema = GDataObjects.Schema(attrs={'id':rs[2], 'name':rs[0],
! 'type':rs[1] == 'v' and 'view' or 'table'},
! getChildSchema=self.__getFieldSchema)
!
! cursor.close()
! return schema
!
! # Get fields for a table
! def __getFieldSchema(self, parent):
!
! statement = "select attname, pg_attribute.oid, typname, " + \
! " attnotnull, atthasdef, atttypmod " + \
! "from pg_attribute, pg_type " + \
! "where attrelid = %d and " % (parent.id) + \
! "pg_type.oid = atttypid and attnum >= 0" + \
! "order by attnum"
!
! cursor = self._dataConnection.cursor()
! cursor.execute(statement)
!
! list = []
! for rs in cursor.fetchall():
!
! attrs={'id': rs[1], 'name': rs[0],
! 'type':'field', 'nativetype': rs[2],
! 'required': rs[3] and not rs[4]}
!
! if rs[2] in ('int8','int2','int4','numeric',
! 'float4','float8','money','bool'):
! attrs['datatype']='number'
! elif rs[2] in ('date','time','timestamp','abstime','reltime'):
! attrs['datatype']='date'
! else:
! attrs['datatype']='text'
!
! if rs[5] != -1:
! attrs['length'] = rs[5]
!
! list.append(GDataObjects.Schema(attrs=attrs))
!
! cursor.close()
! return list
!
!
class PG_DataObject_Object(PG_DataObject, \
! DBSIG_DataObject_Object):
!
def __init__(self):
! # Call DBSIG init first because PG_DataObject needs to overwrite
# some of its values
! DBSIG_DataObject_Object.__init__(self)
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
! return DBSIG_DataObject_Object._buildQuery(self, conditions)
!
class PG_DataObject_SQL(PG_DataObject, \
! DBSIG_DataObject_SQL):
def __init__(self):
! # Call DBSIG init first because PG_DataObject needs to overwrite
# some of its values
! DBSIG_DataObject_SQL.__init__(self)
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
! return DBSIG_DataObject_SQL._buildQuery(self, conditions)
!
#
# Extensions to Trigger Namespaces
#
! class TriggerExtensions:
!
! def __init__(self, connection):
! self.__connection = connection
!
! # Return the current date, according to database
! def getTimeStamp(self):
! return self.__singleQuery("select current_timestamp")
!
! # Return a sequence number from sequence 'name'
! def getSequence(self, name):
! return self.__singleQuery("select nextval('%s')" % name)
!
! # Run the SQL statement 'statement'
! def sql(self, statement):
! cursor = self.__connection.cursor()
! try:
! cursor.execute(statement)
! cursor.close()
! except:
! cursor.close()
! raise
!
! # Used internally
! def __singleQuery(self, statement):
! cursor = self.__connection.cursor()
! try:
! cursor.execute(statement)
! rv = cursor.fetchone()
! cursor.close()
! except mesg:
! GDebug.printMesg(1,"**** Unable to execute extension query")
! GDebug.printMesg(1,"**** %s" % mesg)
! cursor.close()
! return None
!
! try:
! return rv[0]
! except:
! return None
!
!
######################################
#
--- 29,81 ----
#
! import psycopg as pgdriver
from string import lower, join
import sys
from gnue.common import GDebug, GDataObjects
! from gnue.common.dbdrivers._pgsql.DBdriver \
! import PGSQL_RecordSet, PGSQL_ResultSet, PGSQL_DataObject, \
! PGSQL_DataObject_SQL, PGSQL_DataObject_Object, \
! PGSQL_TriggerExtensions
! class PG_RecordSet(PGSQL_RecordSet):
pass
! class PG_ResultSet(PGSQL_ResultSet):
! pass
! 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={}):
! return PGSQL_DataObject_Object._buildQuery(self, conditions)
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={}):
! return PGSQL_DataObject_SQL._buildQuery(self, conditions)
#
# Extensions to Trigger Namespaces
#
! class TriggerExtensions(PGSQL_TriggerExtensions):
! pass
######################################
#
***************
*** 262,264 ****
--- 91,98 ----
'object': PG_DataObject_Object,
'sql': PG_DataObject_SQL
}
+
+
+
+
+
Index: gnue/common/src/dbdrivers/pypgsql/DBdriver.py
diff -c gnue/common/src/dbdrivers/pypgsql/DBdriver.py:1.18
gnue/common/src/dbdrivers/pypgsql/DBdriver.py:1.19
*** gnue/common/src/dbdrivers/pypgsql/DBdriver.py:1.18 Fri Jan 4 00:36:25 2002
--- gnue/common/src/dbdrivers/pypgsql/DBdriver.py Fri Jan 4 14:51:14 2002
***************
*** 28,40 ****
# NOTES:
#
-
- from string import lower, join
import sys
from gnue.common import GDebug, GDataObjects
! from gnue.common.dbdrivers._dbsig.DBdriver \
! import DBSIG_RecordSet, DBSIG_ResultSet, DBSIG_DataObject, \
! DBSIG_DataObject_SQL, DBSIG_DataObject_Object
try:
from pyPgSQL import PgSQL # pyPgSQL 2.0 support
--- 28,39 ----
# NOTES:
#
import sys
from gnue.common import GDebug, GDataObjects
! from gnue.common.dbdrivers._pgsql.DBdriver \
! import PGSQL_RecordSet, PGSQL_ResultSet, PGSQL_DataObject, \
! PGSQL_DataObject_SQL, PGSQL_DataObject_Object, \
! PGSQL_TriggerExtensions
try:
from pyPgSQL import PgSQL # pyPgSQL 2.0 support
***************
*** 42,57 ****
import PgSQL # pyPgSQL 1.6 support
! class PG_RecordSet(DBSIG_RecordSet):
pass
! class PG_ResultSet(DBSIG_ResultSet):
def __init__(self, dataObject, cursor=None, defaultValues={},
masterRecordSet=None):
! DBSIG_ResultSet.__init__(self, dataObject, \
cursor, defaultValues, masterRecordSet)
self._recordSetClass = PG_RecordSet
! # TODO: Override the base _loadNextRecord as the fetchone() from the cursor
# TODO: returns an exception instead of None. Not sure wazzup with that.
def _loadNextRecord(self):
if self._cursor:
--- 41,56 ----
import PgSQL # pyPgSQL 1.6 support
! class PG_RecordSet(PGSQL_RecordSet):
pass
! class PG_ResultSet(PGSQL_ResultSet):
def __init__(self, dataObject, cursor=None, defaultValues={},
masterRecordSet=None):
! PGSQL_ResultSet.__init__(self, dataObject, \
cursor, defaultValues, masterRecordSet)
self._recordSetClass = PG_RecordSet
! # TODO: Override the base _loadNextRecord as the fetchmany() from the cursor
# TODO: returns an exception instead of None. Not sure wazzup with that.
def _loadNextRecord(self):
if self._cursor:
***************
*** 80,88 ****
else:
return 0
! class PG_DataObject(DBSIG_DataObject):
def __init__(self):
! DBSIG_DataObject.__init__(self)
self._DatabaseError = PgSQL.DatabaseError
self._resultSetClass = PG_ResultSet
--- 79,87 ----
else:
return 0
! class PG_DataObject(PGSQL_DataObject):
def __init__(self):
! PGSQL_DataObject.__init__(self)
self._DatabaseError = PgSQL.DatabaseError
self._resultSetClass = PG_ResultSet
***************
*** 121,292 ****
self._postConnect()
GDebug.printMesg(1,"Post post connect")
- def _postConnect(self):
- self.triggerExtensions = TriggerExtensions(self._dataConnection)
-
-
- #
- # Schema (metadata) functions
- #
-
- # Return a list of the types of Schema objects this driver provides
- def getSchemaTypes(self):
- return [('view','View',1), ('table','Table',1)]
-
- # Return a list of Schema objects
- def getSchemaList(self, type=None):
- includeTables = (type in ('table','sources', None))
- includeViews = (type in ('view','sources', None))
-
- inClause = []
- if includeTables:
- inClause.append ("'r'")
- if includeViews:
- inClause.append ("'v'")
-
- # TODO: This excludes any system tables and views. Should it?
- statement = "select relname, relkind from pg_class " + \
- "where relkind in (%s) " % (join(inClause,',')) + \
- "and relname not like 'pg_%' " + \
- "order by relname"
-
- cursor = self._dataConnection.cursor()
- cursor.execute(statement)
-
- list = []
- for rs in cursor.fetchall():
- list.append(GDataObjects.Schema(attrs={'id':lower(rs[0]), 'name':rs[0],
- 'type':rs[1] == 'v' and 'view' or 'table'},
- getChildSchema=self.__getFieldSchema))
-
- cursor.close()
- return list
-
-
- # Find a schema object with specified name
- def getSchemaByName(self, name, type=None):
- statement = "select relname, relkind, oid from pg_class " + \
- "where relname = '%s'" % (name)
-
- cursor = self._dataConnection.cursor()
- cursor.execute(statement)
-
- rs = cursor.fetchone()
- schema = GDataObjects.Schema(attrs={'id':rs[2], 'name':rs[0],
- 'type':rs[1] == 'v' and 'view' or 'table'},
- getChildSchema=self.__getFieldSchema)
-
- cursor.close()
- return schema
-
- # Get fields for a table
- def __getFieldSchema(self, parent):
-
- statement = "select attname, pg_attribute.oid, typname, " + \
- " attnotnull, atthasdef, atttypmod " + \
- "from pg_attribute, pg_type " + \
- "where attrelid = %d and " % (parent.id) + \
- "pg_type.oid = atttypid and attnum >= 0" + \
- "order by attnum"
-
- cursor = self._dataConnection.cursor()
- cursor.execute(statement)
-
- list = []
- for rs in cursor.fetchall():
-
- attrs={'id': rs[1], 'name': rs[0],
- 'type':'field', 'nativetype': rs[2],
- 'required': rs[3] and not rs[4]}
-
- if rs[2] in ('int8','int2','int4','numeric',
- 'float4','float8','money','bool'):
- attrs['datatype']='number'
- elif rs[2] in ('date','time','timestamp','abstime','reltime'):
- attrs['datatype']='date'
- else:
- attrs['datatype']='text'
-
- if rs[5] != -1:
- attrs['length'] = rs[5]
-
- list.append(GDataObjects.Schema(attrs=attrs))
-
- cursor.close()
- return list
-
-
-
class PG_DataObject_Object(PG_DataObject, \
! DBSIG_DataObject_Object):
def __init__(self):
! # Call DBSIG init first because PG_DataObject needs to overwrite
# some of its values
! DBSIG_DataObject_Object.__init__(self)
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
! return DBSIG_DataObject_Object._buildQuery(self, conditions)
class PG_DataObject_SQL(PG_DataObject, \
! DBSIG_DataObject_SQL):
def __init__(self):
! # Call DBSIG init first because PG_DataObject needs to overwrite
# some of its values
! DBSIG_DataObject_SQL.__init__(self)
PG_DataObject.__init__(self)
def _buildQuery(self, conditions={}):
! return DBSIG_DataObject_SQL._buildQuery(self, conditions)
#
# Extensions to Trigger Namespaces
#
! class TriggerExtensions:
!
! def __init__(self, connection):
! self.__connection = connection
!
! # Return the current date, according to database
! def getTimeStamp(self):
! return self.__singleQuery("select current_timestamp")
!
! # Return a sequence number from sequence 'name'
! def getSequence(self, name):
! return self.__singleQuery("select nextval('%s')" % name)
!
! # Run the SQL statement 'statement'
! def sql(self, statement):
! cursor = self.__connection.cursor()
! try:
! cursor.execute(statement)
! cursor.close()
! except:
! cursor.close()
! raise
!
! # Used internally
! def __singleQuery(self, statement):
! cursor = self.__connection.cursor()
! try:
! cursor.execute(statement)
! rv = cursor.fetchone()
! cursor.close()
! except mesg:
! GDebug.printMesg(1,"**** Unable to execute extension query")
! GDebug.printMesg(1,"**** %s" % mesg)
! cursor.close()
! return None
!
! try:
! return rv[0]
! except:
! return None
!
!
######################################
#
--- 120,155 ----
self._postConnect()
GDebug.printMesg(1,"Post post connect")
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={}):
! return PGSQL_DataObject_Object._buildQuery(self, conditions)
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={}):
! return PGSQL_DataObject_SQL._buildQuery(self, conditions)
#
# Extensions to Trigger Namespaces
#
! class TriggerExtensions(PGSQL_TriggerExtensions):
! pass
######################################
#
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/common/src/dbdrivers _dbsig/DBdriver.py _p...,
James Thompson <=