commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnue/common/src/dbdrivers/interbase DBdriver.py


From: James Thompson
Subject: gnue/common/src/dbdrivers/interbase DBdriver.py
Date: Tue, 12 Mar 2002 20:12:48 -0500

CVSROOT:        /cvsroot/gnue
Module name:    gnue
Changes by:     James Thompson <address@hidden> 02/03/12 20:12:48

Modified files:
        common/src/dbdrivers/interbase: DBdriver.py 

Log message:
        Added contributed interbase driver updates from Bajusz Tamás

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/common/src/dbdrivers/interbase/DBdriver.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text

Patches:
Index: gnue/common/src/dbdrivers/interbase/DBdriver.py
diff -c gnue/common/src/dbdrivers/interbase/DBdriver.py:1.5 
gnue/common/src/dbdrivers/interbase/DBdriver.py:1.6
*** gnue/common/src/dbdrivers/interbase/DBdriver.py:1.5 Thu Jan 10 15:59:18 2002
--- gnue/common/src/dbdrivers/interbase/DBdriver.py     Tue Mar 12 20:12:47 2002
***************
*** 23,29 ****
  #
  # DESCRIPTION:
  # Driver to provide access to data via the Kinterbasdb Interbase/Python Driver
! # Requires Kinterbasdb 2.x (http://kinterbasdb.sourceforge.net/)
  #
  # NOTES:
  #
--- 23,29 ----
  #
  # DESCRIPTION:
  # Driver to provide access to data via the Kinterbasdb Interbase/Python Driver
! # Requires Kinterbasdb 3.0_rc3 (http://kinterbasdb.sourceforge.net/)
  #
  # NOTES:
  #
***************
*** 33,43 ****
  #     dbame=      This is the Interbase database to use (required)
  #
  
- #### THIS IS AN UNTESTED DRIVER ####
- ####      Any volunteers?       ####
  
  
! from string import lower
  import sys
  from gnue.common import GDebug, GDataObjects, GConnections
  from gnue.common.dbdrivers._dbsig.DBdriver \
--- 33,41 ----
  #     dbame=      This is the Interbase database to use (required)
  #
  
  
  
! from string import lower, rstrip
  import sys
  from gnue.common import GDebug, GDataObjects, GConnections
  from gnue.common.dbdrivers._dbsig.DBdriver \
***************
*** 61,66 ****
--- 59,94 ----
              cursor, defaultValues, masterRecordSet)
      self._recordSetClass = Interbase_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:
+       rs = None
+ 
+       try:
+         rsets = self._cursor.fetchmany()
+       except self._dataObject._DatabaseError, err:
+         rsets = None
+       except:
+         rsets = None
+ 
+       if rsets and len(rsets):
+         for rs in(rsets):
+           if rs:
+             i = 0
+             dict = {}
+             for f in (rs):
+               dict[lower(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 Interbase_DataObject(DBSIG_DataObject):
***************
*** 97,107 ****
  
    # Return a list of Schema objects
    def getSchemaList(self, type=None):
!     return []
  
    # Find a schema object with specified name
    def getSchemaByName(self, name, type=None):
!     return None
  
    def _postConnect(self):
      self.triggerExtensions = TriggerExtensions(self._dataConnection)
--- 125,208 ----
  
    # Return a list of Schema objects
    def getSchemaList(self, type=None):
! 
!   # This excludes any system tables and views.
!     statement = "select rdb$relation_name, rdb$view_source "+\
!                       "from rdb$relations " + \
!                       "where rdb$system_flag=0 " + \
!                       "order by rdb$relation_name"
! 
!     cursor = self._dataConnection.cursor()
!     cursor.execute(statement)
! 
!   # TODO: rdb$view_source is null for table and rdb$view_source is not null 
for view
!     list = []
!     for rs in cursor.fetchall():
!       list.append(GDataObjects.Schema(attrs={'id':rs[0], 'name':rstrip(rs[0]),
!                          'type':'table'},
!                          getChildSchema=self.__getFieldSchema))
! 
!     cursor.close()
!     return list
  
    # Find a schema object with specified name
    def getSchemaByName(self, name, type=None):
! 
!     statement = "select rdb$relation_name, rdb$view_source "+\
!                       "from rdb$relations " + \
!                       "where rdb$relation_name = '%s'" % (name)
! 
!     cursor = self._dataConnection.cursor()
!     cursor.execute(statement)
! 
!     rs = cursor.fetchone()
!     if rs:
!       schema = GDataObjects.Schema(attrs={'id':rs[0], 'name':rstrip(rs[0]),
!                            'type':'table'},
!                            getChildSchema=self.__getFieldSchema)
!     else:
!       schema = None
! 
!     cursor.close()
!     return schema
! 
!   # Get fields for a table
!   def __getFieldSchema(self, parent):
! 
!     statement = "select a.rdb$field_name,a.rdb$null_flag,"+\
!                       "c.rdb$type_name,"+\
!                       "b.rdb$field_length, "+\
!                       "b.rdb$field_scale "+\
!                       "from rdb$relation_fields a, rdb$fields b, rdb$types c 
"+\
!                       "where c.rdb$field_name='RDB$FIELD_TYPE' and "+\
!                       "c.rdb$type=b.rdb$field_type and "+\
!                       "b.rdb$field_name=a.rdb$field_source and "+\
!                       "a.rdb$relation_name= '%s'"%(parent.name)
! 
!     cursor = self._dataConnection.cursor()
!     cursor.execute(statement)
! 
!     list = []
!     for rs in cursor.fetchall():
! 
!       nativetype = rstrip(rs[2])
!       
!       attrs={'id': rs[0], 'name': lower(rstrip(rs[0])),
!              'type':'field', 'nativetype': nativetype,
!              'required': rs[1]==1, 'length': rs[3] }
!       
!       if nativetype in ('SHORT','LONG','QUAD','FLOAT','DOUBLE'):
!         attrs['datatype']='number'
!         attrs['precision'] = rs[4]
!       elif nativetype in ('DATE','TIME','TIMESTAMP'):
!         attrs['datatype']='date'
!       else:
!         attrs['datatype']='text'
! 
!       list.append(GDataObjects.Schema(attrs=attrs))
! 
!     cursor.close()
!     return list
  
    def _postConnect(self):
      self.triggerExtensions = TriggerExtensions(self._dataConnection)



reply via email to

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