commit-gnue
[Top][All Lists]
Advanced

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



reply via email to

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