diff options
Diffstat (limited to 'Bugzilla')
-rw-r--r-- | Bugzilla/DB/Schema/Sqlite.pm | 17 | ||||
-rw-r--r-- | Bugzilla/DB/Sqlite.pm | 41 |
2 files changed, 58 insertions, 0 deletions
diff --git a/Bugzilla/DB/Schema/Sqlite.pm b/Bugzilla/DB/Schema/Sqlite.pm index 4730c4f9f..aad1f17bc 100644 --- a/Bugzilla/DB/Schema/Sqlite.pm +++ b/Bugzilla/DB/Schema/Sqlite.pm @@ -162,6 +162,23 @@ sub get_create_database_sql { die "Reached an unreachable point"; } +sub _get_create_table_ddl { + my $self = shift; + my ($table) = @_; + my $ddl = $self->SUPER::_get_create_table_ddl(@_); + + # TheSchwartz uses its own driver to access its tables, meaning + # that it doesn't understand "COLLATE bugzilla" and in fact + # SQLite throws an error when TheSchwartz tries to access its + # own tables, if COLLATE bugzilla is on them. We don't have + # to fix this elsewhere currently, because we only create + # TheSchwartz's tables, we never modify them. + if ($table =~ /^ts_/) { + $ddl =~ s/ COLLATE bugzilla//g; + } + return $ddl; +} + sub get_type_ddl { my $self = shift; my $def = dclone($_[0]); diff --git a/Bugzilla/DB/Sqlite.pm b/Bugzilla/DB/Sqlite.pm index fab1e3c87..fb6aaba97 100644 --- a/Bugzilla/DB/Sqlite.pm +++ b/Bugzilla/DB/Sqlite.pm @@ -25,6 +25,7 @@ use base qw(Bugzilla::DB); use Bugzilla::Constants; use Bugzilla::Error; +use Bugzilla::Install::Util qw(install_string); use DateTime; use POSIX (); @@ -246,6 +247,46 @@ sub sql_string_until { # bz_ methods # ############### +sub bz_setup_database { + my $self = shift; + $self->SUPER::bz_setup_database(@_); + + # If we created TheSchwartz tables with COLLATE bugzilla (during the + # 4.1.x development series) re-create them without it. + my @tables = $self->bz_table_list(); + my @ts_tables = grep { /^ts_/ } @tables; + my $drop_ok; + foreach my $table (@ts_tables) { + my $create_table = + $self->_bz_real_schema->_sqlite_create_table($table); + if ($create_table =~ /COLLATE bugzilla/) { + if (!$drop_ok) { + _sqlite_jobqueue_drop_message(); + $drop_ok = 1; + } + $self->bz_drop_table($table); + $self->bz_add_table($table); + } + } +} + +sub _sqlite_jobqueue_drop_message { + # This is not translated because this situation will only happen if + # you are updating from a 4.1.x development version of Bugzilla using + # SQLite, and we don't want to maintain this string in strings.txt.pl + # forever for just this one uncommon circumstance. + print <<END; +WARNING: We have to re-create all the database tables used by jobqueue.pl. +If there are any pending jobs in the database (that is, emails that +haven't been sent), they will be deleted. + +END + unless (Bugzilla->installation_answers->{NO_PAUSE}) { + print install_string('enter_or_ctrl_c'); + getc; + } +} + # XXX This needs to be implemented. sub bz_explain { } |