Changeset 3500

Show
Ignore:
Timestamp:
05/20/09 10:27:33 (13 years ago)
Author:
jerome
Message:

Backported from @3498, fixes #43.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/branches/1.26_fixes/pykota/storages/pgstorage.py

    r3184 r3500  
    1414# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1515# GNU General Public License for more details. 
    16 #  
     16# 
    1717# You should have received a copy of the GNU General Public License 
    1818# along with this program; if not, write to the Free Software 
     
    3333try : 
    3434    import pg 
    35 except ImportError :     
     35except ImportError : 
    3636    import sys 
    3737    # TODO : to translate or not to translate ? 
    3838    raise PyKotaStorageError, "This python version (%s) doesn't seem to have the PygreSQL module installed correctly." % sys.version.split()[0] 
    39 else :     
     39else : 
    4040    try : 
    4141        PGError = pg.Error 
    42     except AttributeError :     
     42    except AttributeError : 
    4343        PGError = pg.error 
    4444 
     
    5050            (host, port) = host.split(":") 
    5151            port = int(port) 
    52         except ValueError :     
     52        except ValueError : 
    5353            port = 5432         # Use PostgreSQL's default tcp/ip port (5432). 
    54          
     54 
    5555        self.tool.logdebug("Trying to open database (host=%s, port=%s, dbname=%s, user=%s)..." % (host, port, dbname, user)) 
    5656        try : 
    57             self.database = pg.connect(host=host, port=port, dbname=dbname, user=user, passwd=passwd) 
    58         except PGError, msg :     
     57            self.database = pg.DB(host=host, port=port, dbname=dbname, user=user, passwd=passwd) 
     58        except PGError, msg : 
    5959            msg = "%(msg)s --- the most probable cause of your problem is that PostgreSQL is down, or doesn't accept incoming connections because you didn't configure it as explained in PyKota's documentation." % locals() 
    6060            raise PGError, msg 
    6161        self.closed = 0 
    6262        try : 
     63            self.quote = self.database._quote 
     64        except AttributeError : # pg <v4.x 
     65            self.quote = pg._quote 
     66        try : 
    6367            self.database.query("SET CLIENT_ENCODING TO 'UTF-8';") 
    64         except PGError, msg :     
     68        except PGError, msg : 
    6569            self.tool.logdebug("Impossible to set database client encoding to UTF-8 : %s" % msg) 
    6670        self.tool.logdebug("Database opened (host=%s, port=%s, dbname=%s, user=%s)" % (host, port, dbname, user)) 
    67              
    68     def close(self) :     
     71 
     72    def close(self) : 
    6973        """Closes the database connection.""" 
    7074        if not self.closed : 
     
    7276            self.closed = 1 
    7377            self.tool.logdebug("Database closed.") 
    74          
    75     def beginTransaction(self) :     
     78 
     79    def beginTransaction(self) : 
    7680        """Starts a transaction.""" 
    7781        self.before = time.time() 
    7882        self.database.query("BEGIN;") 
    7983        self.tool.logdebug("Transaction begins...") 
    80          
    81     def commitTransaction(self) :     
     84 
     85    def commitTransaction(self) : 
    8286        """Commits a transaction.""" 
    8387        self.database.query("COMMIT;") 
     
    8589        self.tool.logdebug("Transaction committed.") 
    8690        #self.tool.logdebug("Transaction duration : %.4f seconds" % (after - self.before)) 
    87          
    88     def rollbackTransaction(self) :      
     91 
     92    def rollbackTransaction(self) : 
    8993        """Rollbacks a transaction.""" 
    9094        self.database.query("ROLLBACK;") 
     
    9296        self.tool.logdebug("Transaction aborted.") 
    9397        #self.tool.logdebug("Transaction duration : %.4f seconds" % (after - self.before)) 
    94          
     98 
    9599    def doRawSearch(self, query) : 
    96100        """Does a raw search query.""" 
    97         query = query.strip()     
    98         if not query.endswith(';') :     
     101        query = query.strip() 
     102        if not query.endswith(';') : 
    99103            query += ';' 
    100104        try : 
     
    102106            self.tool.logdebug("QUERY : %s" % query) 
    103107            result = self.database.query(query) 
    104         except PGError, msg :     
     108        except PGError, msg : 
    105109            raise PyKotaStorageError, str(msg) 
    106         else :     
     110        else : 
    107111            after = time.time() 
    108112            #self.tool.logdebug("Query Duration : %.4f seconds" % (after - before)) 
    109113            return result 
    110              
    111     def doSearch(self, query) :         
     114 
     115    def doSearch(self, query) : 
    112116        """Does a search query.""" 
    113117        result = self.doRawSearch(query) 
    114         if (result is not None) and (result.ntuples() > 0) :  
     118        if (result is not None) and (result.ntuples() > 0) : 
    115119            return result.dictresult() 
    116          
     120 
    117121    def doModify(self, query) : 
    118122        """Does a (possibly multiple) modify query.""" 
    119         query = query.strip()     
    120         if not query.endswith(';') :     
     123        query = query.strip() 
     124        if not query.endswith(';') : 
    121125            query += ';' 
    122126        try : 
     
    124128            self.tool.logdebug("QUERY : %s" % query) 
    125129            result = self.database.query(query) 
    126         except PGError, msg :     
     130        except PGError, msg : 
    127131            self.tool.logdebug("Query failed : %s" % repr(msg)) 
    128132            raise PyKotaStorageError, str(msg) 
    129         else :     
     133        else : 
    130134            after = time.time() 
    131135            #self.tool.logdebug("Query Duration : %.4f seconds" % (after - before)) 
    132136            return result 
    133              
     137 
    134138    def doQuote(self, field) : 
    135139        """Quotes a field for use as a string in SQL queries.""" 
    136         if type(field) == type(0.0) :  
     140        if type(field) == type(0.0) : 
    137141            typ = "decimal" 
    138         elif type(field) == type(0) :     
     142        elif type(field) == type(0) : 
    139143            typ = "int" 
    140         elif type(field) == type(0L) :     
     144        elif type(field) == type(0L) : 
    141145            typ = "int" 
    142         else :     
     146        else : 
    143147            typ = "text" 
    144         return pg._quote(field, typ) 
    145          
     148        return self.quote(field, typ) 
     149 
    146150    def prepareRawResult(self, result) : 
    147151        """Prepares a raw result by including the headers.""" 
     
    155159                    field = fields[j] 
    156160                    if type(field) == StringType : 
    157                         fields[j] = self.databaseToUserCharset(field)  
    158                 entries[i] = tuple(fields)     
     161                        fields[j] = self.databaseToUserCharset(field) 
     162                entries[i] = tuple(fields) 
    159163            return entries 
    160          
     164