Show
Ignore:
Timestamp:
05/26/08 19:44:26 (4 years ago)
Author:
dom
Message:

Move to new schema version 10, including some missing indexes
and support for deletion flags and verified flags. Note that
the code using these columns has not yet been written (closes #25, #34).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • wiki-toolkit/trunk/lib/Wiki/Toolkit/Setup/MySQL.pm

    r440 r441  
    88 
    99@ISA = qw( Wiki::Toolkit::Setup::Database ); 
    10 $VERSION = '0.09'; 
     10$VERSION = '0.10'; 
    1111 
    1212use DBI; 
     
    114114| ] 
    115115    }, 
     116    10 => { 
     117        schema_info => [ qq| 
     118CREATE TABLE schema_info ( 
     119  version   int(10)      NOT NULL default 0 
     120) 
     121|, qq| 
     122INSERT INTO schema_info VALUES (10) 
     123| ], 
     124 
     125        node => [ qq| 
     126CREATE 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| 
     137CREATE UNIQUE INDEX node_name ON node (name) 
     138|, qq| 
     139CREATE INDEX node_deleted_index ON node (deleted) 
     140| ], 
     141 
     142        content => [ qq| 
     143CREATE 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| 
     155CREATE INDEX content_deleted_index ON content (deleted) 
     156| ], 
     157        internal_links => [ qq| 
     158CREATE 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| 
     165CREATE INDEX internal_links_deleted_index ON internal_links (deleted) 
     166| ], 
     167        metadata => [ qq| 
     168CREATE 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| 
     176CREATE INDEX metadata_index ON metadata(node_id, version, metadata_type, metadata_value(10)) 
     177|, qq| 
     178CREATE INDEX metadata_deleted_index ON metadata (deleted) 
     179| ] 
     180    }, 
    116181}; 
     182 
     183my %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 
     191my %upgrades = ( 
     192'9_to_10' => [ qq| 
     193CREATE UNIQUE INDEX node_name ON node (name) 
     194|, qq| 
     195ALTER TABLE node ADD COLUMN deleted boolean 
     196|, qq| 
     197UPDATE node SET deleted = '0' 
     198|, qq| 
     199ALTER TABLE node MODIFY COLUMN deleted bool NOT NULL DEFAULT '0' 
     200|, qq| 
     201CREATE INDEX node_deleted_index ON node (deleted) 
     202|, qq| 
     203ALTER TABLE content ADD COLUMN deleted boolean 
     204|, qq| 
     205UPDATE content SET deleted = '0' 
     206|, qq| 
     207ALTER TABLE content MODIFY COLUMN deleted bool NOT NULL DEFAULT '0' 
     208|, qq| 
     209CREATE INDEX content_deleted_index ON content (deleted) 
     210|, qq| 
     211ALTER TABLE internal_links ADD COLUMN deleted boolean 
     212|, qq| 
     213UPDATE internal_links SET deleted = '0' 
     214|, qq| 
     215ALTER TABLE internal_links MODIFY COLUMN deleted bool NOT NULL DEFAULT '0' 
     216|, qq| 
     217CREATE INDEX internal_links_deleted_index ON internal_links (deleted) 
     218|, qq| 
     219ALTER TABLE metadata ADD COLUMN deleted boolean 
     220|, qq| 
     221UPDATE metadata SET deleted = '0' 
     222|, qq| 
     223ALTER TABLE metadata MODIFY COLUMN deleted bool NOT NULL DEFAULT '0' 
     224|, qq| 
     225CREATE INDEX metadata_deleted_index ON metadata (deleted) 
     226|, qq| 
     227ALTER TABLE content ADD COLUMN verified datetime default NULL 
     228|, qq| 
     229UPDATE schema_info SET version = 10 
     230| 
     231], 
     232); 
    117233 
    118234=head1 NAME 
     
    181297    } 
    182298    if($upgrade_schema) { 
    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); 
    193317        } 
    194          
    195         # Drop the current tables 
    196         cleardb($dbh); 
    197  
    198         # Grab new list of tables 
    199         %tables = fetch_tables_listing($dbh, $wanted_schema); 
    200318    } 
    201319 
     
    214332    # If upgrading, load in the new data 
    215333    if($upgrade_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        } 
    217351    } 
    218352