Changeset 3933

Show
Ignore:
Timestamp:
07/02/08 06:35:36 (5 months ago)
Author:
vnaum
Message:

Intermediate revision

A bit more portable table creation code

Added some debug code.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tracunreadplugin/0.10/trac_unread/env_setup.py

    r3534 r3933  
    22from trac.env import IEnvironmentSetupParticipant 
    33from trac.core import Component, implements 
     4from trac.db import Table, Column, Index, DatabaseManager 
    45 
    56class TracUnreadSetupParticipant(Component): 
     
    5556        if self.db_installed_version < 1: 
    5657            print "Creating trac_unread table" 
    57             sql = """ 
    58             CREATE TABLE trac_unread ( 
    59             username text, 
    60             last_read_on integer, 
    61             type text, 
    62             id text, 
    63             UNIQUE (type, id, username) 
    64             ); 
    65             """ 
     58             
     59            unread_table = Table('trac_unread', key=('type', 'id', 'username'))[ 
     60                Column('username'), 
     61                Column('last_read_on', type='int'), 
     62                Column('type'), 
     63                Column('id'), 
     64                Index(['type']), 
     65                Index(['id']), 
     66                Index(['username'])] 
     67             
     68            db_backend, _ = DatabaseManager(self.env)._get_connector() 
     69             
     70            for stmt in db_backend.to_sql(unread_table): 
     71                try: 
     72                    cur.execute(stmt) 
     73                except Exception, e: 
     74                    print "Upgrade failed\nSQL:\n%s\nError message: %s" % (stmt, e) 
     75                    db.rollback(); 
     76                    return 
     77             
     78            # This statement block always goes at the end this method 
    6679            try: 
    67                 cur.execute(sql) 
    68                  
    69                 # This statement block always goes at the end this method 
    70                 try: 
    71                     cur.execute("UPDATE system SET value=%s WHERE name=%s", 
    72                         (self.db_version, self.db_version_key)) 
    73                 except: 
    74                     cur.execute("INSERT INTO system (value, name) VALUES (%s, %s)", 
    75                         (self.db_version, self.db_version_key)) 
     80                cur.execute("UPDATE system SET value=%s WHERE name=%s", 
     81                    (self.db_version, self.db_version_key)) 
     82            except: 
     83                cur.execute("INSERT INTO system (value, name) VALUES (%s, %s)", 
     84                    (self.db_version, self.db_version_key)) 
    7685 
    77                 self.db_installed_version = self.db_version 
    78                  
    79                 db.commit() 
    80             except Exception, e: 
    81                 print "Upgrade failed\nSQL:\n%s\nError message: %s" % (sql, e) 
    82                 db.rollback(); 
     86            self.db_installed_version = self.db_version 
     87             
     88            db.commit() 
     89 
     90if __name__ == '__main__': 
     91 
     92    from trac.core import ComponentManager 
     93    import trac.db.mysql_backend 
     94    import trac.db.sqlite_backend 
     95    import trac.db.postgres_backend 
     96     
     97    unread_table = Table('trac_unread', key=('type', 'id', 'username'))[ 
     98        Column('username'), 
     99        Column('last_read_on', type='int'), 
     100        Column('type'), 
     101        Column('id'), 
     102        Index(['type']), 
     103        Index(['id']), 
     104        Index(['username'])] 
     105    cman = ComponentManager() 
     106    c_mysql  = trac.db.mysql_backend.MySQLConnector(cman); 
     107    c_psql   = trac.db.postgres_backend.PostgreSQLConnector(cman); 
     108    c_sqlite = trac.db.sqlite_backend.SQLiteConnector(cman); 
     109     
     110    for stmt in c_mysql.to_sql(unread_table): 
     111      print "mysql: ", stmt 
     112     
     113    for stmt in c_psql.to_sql(unread_table): 
     114      print "psql: ", stmt 
     115     
     116    for stmt in c_sqlite.to_sql(unread_table): 
     117      print "sqlite: ", stmt