Changeset 92

Show
Ignore:
Timestamp:
10/25/07 20:30:22 (15 months ago)
Author:
steadicat
Message:

Evolve parser now ignores indexes and unique constraints.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • django/trunk/contrib/evolve.py

    r87 r92  
    1717class Table(object): 
    1818    name_line = re.compile(r'CREATE TABLE "(.+)" \(') 
    19     field_line = re.compile(r'"(.+)".*') 
     19    field_line = re.compile(r'^"([^"]+)".*') 
    2020 
    2121    def __init__(self, sql): 
     
    3131        self.new_fields = [line.strip().strip(',') for line in sql.splitlines()[1:-1]] # remove create table and closing bracket 
    3232 
     33 
    3334    def getTableName(self, sql): 
    3435        return self.name_line.search(sql).groups()[0] 
    3536    def getFieldName(self, sql): 
    36         return self.field_line.search(sql).groups()[0] 
     37        s = self.field_line.search(sql) 
     38        if not s: 
     39            return None 
     40        else: 
     41            return s.groups()[0] 
    3742    def getFieldOption(self, field, option): 
    3843        a, m = self.name.split('_', 1) 
     
    5560        for field_sql in self.new_fields: 
    5661            field_name = self.getFieldName(field_sql) 
     62            if not field_name: continue 
    5763            new_fields.append(field_sql) 
    5864            if field_name not in self.old_fields: 
     
    6571                    old_fields.append('"%s"' % field_name) 
    6672                    default = self.getFieldDefault(field_name) 
    67                     if default: 
     73                    if default is not None: 
    6874                        new_columns.append('ALTER TABLE "%s__temp__" ADD COLUMN %s DEFAULT "%s";' % (self.name, field_sql, default)) 
    6975 
     
    98104    new_tables_sql = new_tables_sql.split(';')[1:-2] # remove begin, commit and empty ; at the end 
    99105    old_tables_sql = old_tables_sql.split(';')[:-1] # remove empty ; at the end 
    100      
     106 
    101107    tables = {} 
    102108 
    103109    for sql in old_tables_sql: 
     110        if 'CREATE INDEX' in sql: continue 
    104111        t = Table(sql.strip()) 
    105112        tables[t.name] = t 
    106113 
    107114    for sql in new_tables_sql: 
     115        if 'CREATE INDEX' in sql: continue 
    108116        t = Table(sql.strip()) 
    109117        tables[t.name].new(sql.strip())