Changeset 4426
- Timestamp:
- 04/04/09 15:33:31 (4 years ago)
- Location:
- branch/merger
- Files:
-
- 2 modified
-
sqlitedb.py (modified) (5 diffs)
-
tests/test_sqlitemerge.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branch/merger/sqlitedb.py
r4425 r4426 24 24 # XXX Missing: 25 25 # Index merging (read copying) 26 # Proper foreign key merging 26 27 27 VALID_NAME_PATTERN = ( 28 28 """ … … 135 135 self._fromcursor = None 136 136 self._tocursor = None 137 self._reference = None # updated when merging tables138 137 139 138 self._merge() … … 219 218 "not happen.") 220 219 return 221 222 res = new_cursor.execute("pragma foreign_key_list(%s)" % tablename)223 self._reference = {}224 for ref in res.fetchall():225 self._reference[ref['from']] = (ref['table'], ref['to'])226 220 227 221 res = old_cursor.execute("pragma table_info(%s)" % tablename) … … 252 246 if new_by_col: 253 247 print "Adding new columns in table '%s'" % tablename 248 # Get the full column definitions for this table 249 res = self._fromcursor.execute( 250 "SELECT sql FROM sqlite_master " 251 "WHERE type='table' and name=?", (tablename, )).fetchone() 252 coldef = column_definitions(res['sql']) 254 253 for cname, cinfo in new_by_col.iteritems(): 255 254 if cinfo['pk']: … … 265 264 continue 266 265 267 self._merge_column(tablename, cname, c info)266 self._merge_column(tablename, cname, coldef[cname]) 268 267 269 268 270 269 def _merge_column(self, tablename, cname, cinfo): 271 reference = self._reference or {} 272 273 cursor = self._tocursor 274 query = "ALTER TABLE %s ADD COLUMN %s %s" % ( 275 tablename, cname, cinfo['type']) 276 277 if cinfo['notnull']: 278 query += " NOT NULL" 279 if cinfo['dflt_value']: 280 query += " DEFAULT %s" % cinfo['dflt_value'] 281 if cname in reference: 282 query += " REFERENCES %s(%s)" % reference[cname] 283 284 cursor.execute(query) 270 query = "ALTER TABLE %s ADD COLUMN %s %s" % (tablename, cname, cinfo) 271 self._tocursor.execute(query) 285 272 286 273 -
branch/merger/tests/test_sqlitemerge.py
r4425 r4426 106 106 "b INTEGER") 107 107 108 # XXX not fully supported yet109 108 self._verify_merge( 110 109 "a INTEGER, b INTEGER CONSTRAINT fk REFERENCES d(id)",
