commit-gnue
[Top][All Lists]
Advanced

[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
  
  ######################################
  #



reply via email to

[Prev in Thread] Current Thread [Next in Thread]