| | 116 | 10 => { |
| | 117 | schema_info => [ qq| |
| | 118 | CREATE TABLE schema_info ( |
| | 119 | version int(10) NOT NULL default 0 |
| | 120 | ) |
| | 121 | |, qq| |
| | 122 | INSERT INTO schema_info VALUES (10) |
| | 123 | | ], |
| | 124 | |
| | 125 | node => [ qq| |
| | 126 | CREATE TABLE node ( |
| | 127 | id integer NOT NULL AUTO_INCREMENT, |
| | 128 | name varchar(200) NOT NULL DEFAULT '', |
| | 129 | version int(10) NOT NULL default 0, |
| | 130 | text mediumtext NOT NULL default '', |
| | 131 | modified datetime default NULL, |
| | 132 | moderate bool NOT NULL default '0', |
| | 133 | deleted bool NOT NULL default '0', |
| | 134 | PRIMARY KEY (id) |
| | 135 | ) |
| | 136 | |, qq| |
| | 137 | CREATE UNIQUE INDEX node_name ON node (name) |
| | 138 | |, qq| |
| | 139 | CREATE INDEX node_deleted_index ON node (deleted) |
| | 140 | | ], |
| | 141 | |
| | 142 | content => [ qq| |
| | 143 | CREATE TABLE content ( |
| | 144 | node_id integer NOT NULL, |
| | 145 | version int(10) NOT NULL default 0, |
| | 146 | text mediumtext NOT NULL default '', |
| | 147 | modified datetime default NULL, |
| | 148 | comment mediumtext NOT NULL default '', |
| | 149 | moderated bool NOT NULL default '1', |
| | 150 | deleted bool NOT NULL DEFAULT '0', |
| | 151 | verified datetime default NULL, |
| | 152 | PRIMARY KEY (node_id, version) |
| | 153 | ) |
| | 154 | |, qq| |
| | 155 | CREATE INDEX content_deleted_index ON content (deleted) |
| | 156 | | ], |
| | 157 | internal_links => [ qq| |
| | 158 | CREATE TABLE internal_links ( |
| | 159 | link_from varchar(200) NOT NULL default '', |
| | 160 | link_to varchar(200) NOT NULL default '', |
| | 161 | deleted bool NOT NULL default '0', |
| | 162 | PRIMARY KEY (link_from, link_to) |
| | 163 | ) |
| | 164 | |, qq| |
| | 165 | CREATE INDEX internal_links_deleted_index ON internal_links (deleted) |
| | 166 | | ], |
| | 167 | metadata => [ qq| |
| | 168 | CREATE TABLE metadata ( |
| | 169 | node_id integer NOT NULL, |
| | 170 | version int(10) NOT NULL default 0, |
| | 171 | metadata_type varchar(200) NOT NULL DEFAULT '', |
| | 172 | metadata_value mediumtext NOT NULL DEFAULT '', |
| | 173 | deleted bool NOT NULL DEFAULT '0' |
| | 174 | ) |
| | 175 | |, qq| |
| | 176 | CREATE INDEX metadata_index ON metadata(node_id, version, metadata_type, metadata_value(10)) |
| | 177 | |, qq| |
| | 178 | CREATE INDEX metadata_deleted_index ON metadata (deleted) |
| | 179 | | ] |
| | 180 | }, |
| | 182 | |
| | 183 | my %fetch_upgrades = ( |
| | 184 | old_to_8 => 1, |
| | 185 | old_to_9 => 1, |
| | 186 | old_to_10 => 1, |
| | 187 | '8_to_9' => 1, |
| | 188 | '8_to_10' => 1, |
| | 189 | ); |
| | 190 | |
| | 191 | my %upgrades = ( |
| | 192 | '9_to_10' => [ qq| |
| | 193 | CREATE UNIQUE INDEX node_name ON node (name) |
| | 194 | |, qq| |
| | 195 | ALTER TABLE node ADD COLUMN deleted boolean |
| | 196 | |, qq| |
| | 197 | UPDATE node SET deleted = '0' |
| | 198 | |, qq| |
| | 199 | ALTER TABLE node MODIFY COLUMN deleted bool NOT NULL DEFAULT '0' |
| | 200 | |, qq| |
| | 201 | CREATE INDEX node_deleted_index ON node (deleted) |
| | 202 | |, qq| |
| | 203 | ALTER TABLE content ADD COLUMN deleted boolean |
| | 204 | |, qq| |
| | 205 | UPDATE content SET deleted = '0' |
| | 206 | |, qq| |
| | 207 | ALTER TABLE content MODIFY COLUMN deleted bool NOT NULL DEFAULT '0' |
| | 208 | |, qq| |
| | 209 | CREATE INDEX content_deleted_index ON content (deleted) |
| | 210 | |, qq| |
| | 211 | ALTER TABLE internal_links ADD COLUMN deleted boolean |
| | 212 | |, qq| |
| | 213 | UPDATE internal_links SET deleted = '0' |
| | 214 | |, qq| |
| | 215 | ALTER TABLE internal_links MODIFY COLUMN deleted bool NOT NULL DEFAULT '0' |
| | 216 | |, qq| |
| | 217 | CREATE INDEX internal_links_deleted_index ON internal_links (deleted) |
| | 218 | |, qq| |
| | 219 | ALTER TABLE metadata ADD COLUMN deleted boolean |
| | 220 | |, qq| |
| | 221 | UPDATE metadata SET deleted = '0' |
| | 222 | |, qq| |
| | 223 | ALTER TABLE metadata MODIFY COLUMN deleted bool NOT NULL DEFAULT '0' |
| | 224 | |, qq| |
| | 225 | CREATE INDEX metadata_deleted_index ON metadata (deleted) |
| | 226 | |, qq| |
| | 227 | ALTER TABLE content ADD COLUMN verified datetime default NULL |
| | 228 | |, qq| |
| | 229 | UPDATE schema_info SET version = 10 |
| | 230 | | |
| | 231 | ], |
| | 232 | ); |
| 183 | | # Grab current data |
| 184 | | print "Upgrading: $upgrade_schema\n"; |
| 185 | | @cur_data = eval("&Wiki::Toolkit::Setup::Database::fetch_upgrade_".$upgrade_schema."(\$dbh)"); |
| 186 | | if($@) { warn $@; } |
| 187 | | |
| 188 | | # Check to make sure we can create, index and drop tables |
| 189 | | # before doing any more |
| 190 | | my $perm_check = Wiki::Toolkit::Setup::Database::perm_check($dbh); |
| 191 | | if ($perm_check) { |
| 192 | | die "Unable to create/drop database tables as required by upgrade: $perm_check"; |
| | 299 | if ($fetch_upgrades{$upgrade_schema}) { |
| | 300 | # Grab current data |
| | 301 | print "Upgrading: $upgrade_schema\n"; |
| | 302 | @cur_data = eval("&Wiki::Toolkit::Setup::Database::fetch_upgrade_".$upgrade_schema."(\$dbh)"); |
| | 303 | if($@) { warn $@; } |
| | 304 | |
| | 305 | # Check to make sure we can create, index and drop tables |
| | 306 | # before doing any more |
| | 307 | my $perm_check = Wiki::Toolkit::Setup::Database::perm_check($dbh); |
| | 308 | if ($perm_check) { |
| | 309 | die "Unable to create/drop database tables as required by upgrade: $perm_check"; |
| | 310 | } |
| | 311 | |
| | 312 | # Drop the current tables |
| | 313 | cleardb($dbh); |
| | 314 | |
| | 315 | # Grab new list of tables |
| | 316 | %tables = fetch_tables_listing($dbh, $wanted_schema); |
| 216 | | Wiki::Toolkit::Setup::Database::bulk_data_insert($dbh,@cur_data); |
| | 334 | if ($fetch_upgrades{$upgrade_schema}) { |
| | 335 | Wiki::Toolkit::Setup::Database::bulk_data_insert($dbh,@cur_data); |
| | 336 | } else { |
| | 337 | print "Upgrading schema: $upgrade_schema\n"; |
| | 338 | my @updates = @{$upgrades{$upgrade_schema}}; |
| | 339 | foreach my $update (@updates) { |
| | 340 | if(ref($update) eq "CODE") { |
| | 341 | &$update($dbh); |
| | 342 | } elsif(ref($update) eq "ARRAY") { |
| | 343 | foreach my $nupdate (@$update) { |
| | 344 | $dbh->do($nupdate); |
| | 345 | } |
| | 346 | } else { |
| | 347 | $dbh->do($update); |
| | 348 | } |
| | 349 | } |
| | 350 | } |