From d79876999add6677ad71e9279d1ed5311a32847d Mon Sep 17 00:00:00 2001 From: Dan Helfman Date: Wed, 15 Oct 2008 21:14:42 -0700 Subject: [PATCH] If Schema_upgrader encounters a database without a schema_version set, assumes that it's a 1.5.4 schema. --- controller/Schema_upgrader.py | 6 ++++-- controller/test/Test_schema_upgrader.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/controller/Schema_upgrader.py b/controller/Schema_upgrader.py index bd91e5d..e15b7de 100644 --- a/controller/Schema_upgrader.py +++ b/controller/Schema_upgrader.py @@ -48,8 +48,10 @@ class Schema_upgrader: try: from_version = self.__database.select_one( tuple, "select * from schema_version;" ); + # if there's no schema version table, assume the from_version is 1.5.4, which was the last + # version not to include a schema_version table except: - from_version = None + from_version = ( 1, 5, 4 ) if self.__database.backend == Persistent.SQLITE_BACKEND: extension = u"sqlite" @@ -69,7 +71,7 @@ class Schema_upgrader: continue # skip those versions that won't help us upgrade - if from_version and version <= from_version: + if version <= from_version: continue if version > to_version: continue diff --git a/controller/test/Test_schema_upgrader.py b/controller/test/Test_schema_upgrader.py index e98ea24..20acade 100644 --- a/controller/test/Test_schema_upgrader.py +++ b/controller/test/Test_schema_upgrader.py @@ -102,6 +102,23 @@ class Test_schema_upgrader( object ): self.test_upgrade_schema(); + def test_upgrade_schema_default_to_start_version_of_1_5_4( self ): + # test that if no schema_version table exists, then the starting version is assumed to be 1.5.4 + self.fake_files = { + u"model/delta/1.5.3.sqlite": u"invalid sql;", + u"model/delta/1.5.4.sqlite": u"should not be invoked;", + u"model/delta/1.5.5.sqlite": u"create table new_table ( foo text ); insert into new_table values ( 'hi' );", + u"model/delta/1.5.6.sqlite": u"insert into new_table values ( 'bye' );", + } + + self.upgrader.upgrade_schema( u"1.5.6" ); + + result = self.database.select_many( tuple, u"select * from new_table;" ); + assert result == [ ( u"hi", ), ( u"bye", ), ]; + + result = self.database.select_many( tuple, u"select * from schema_version;" ); + assert result == [ ( 1, 5, 6 ) ]; + def test_apply_schema_delta( self ): self.fake_files = { u"model/delta/5.6.5.sqlite": u"insert into new_table values ( 'should not show up' );",