Show
Ignore:
Timestamp:
05/12/08 01:21:15 (4 years ago)
Author:
dom
Message:

Add more pieces to support schema upgrade testing (including support for
setting up version 8 schemas) and add actual test script

Files:
1 modified

Legend:

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

    r438 r440  
    1616 
    1717my $create_sql = { 
     18    8 => { 
     19        schema_info => [ qq| 
     20CREATE TABLE schema_info ( 
     21  version   integer      NOT NULL default 0 
     22) 
     23|, qq| 
     24INSERT INTO schema_info VALUES (8) 
     25| ], 
     26 
     27        node => [ qq| 
     28CREATE SEQUENCE node_seq 
     29|, qq| 
     30CREATE TABLE node ( 
     31  id        integer      NOT NULL DEFAULT NEXTVAL('node_seq'), 
     32  name      varchar(200) NOT NULL DEFAULT '', 
     33  version   integer      NOT NULL default 0, 
     34  text      text         NOT NULL default '', 
     35  modified  timestamp without time zone    default NULL, 
     36  CONSTRAINT pk_id PRIMARY KEY (id) 
     37) 
     38|, qq| 
     39CREATE UNIQUE INDEX node_name ON node (name) 
     40| ], 
     41 
     42        content => [ qq| 
     43CREATE TABLE content ( 
     44  node_id   integer      NOT NULL, 
     45  version   integer      NOT NULL default 0, 
     46  text      text         NOT NULL default '', 
     47  modified  timestamp without time zone    default NULL, 
     48  comment   text         NOT NULL default '', 
     49  CONSTRAINT pk_node_id PRIMARY KEY (node_id,version), 
     50  CONSTRAINT fk_node_id FOREIGN KEY (node_id) REFERENCES node (id) 
     51) 
     52| ], 
     53 
     54        internal_links => [ qq| 
     55CREATE TABLE internal_links ( 
     56  link_from varchar(200) NOT NULL default '', 
     57  link_to   varchar(200) NOT NULL default '' 
     58) 
     59|, qq| 
     60CREATE UNIQUE INDEX internal_links_pkey ON internal_links (link_from, link_to) 
     61| ], 
     62 
     63        metadata => [ qq| 
     64CREATE TABLE metadata ( 
     65  node_id        integer      NOT NULL, 
     66  version        integer      NOT NULL default 0, 
     67  metadata_type  varchar(200) NOT NULL DEFAULT '', 
     68  metadata_value text         NOT NULL DEFAULT '', 
     69  CONSTRAINT fk_node_id FOREIGN KEY (node_id) REFERENCES node (id) 
     70) 
     71|, qq| 
     72CREATE INDEX metadata_index ON metadata (node_id, version, metadata_type, metadata_value) 
     73| ] 
     74 
     75    }, 
    1876    9 => { 
    1977        schema_info => [ qq| 
     
    113171ALTER TABLE metadata ADD CONSTRAINT fk_node_id FOREIGN KEY (node_id) REFERENCES node (id); 
    114172CREATE INDEX metadata_index ON metadata (node_id, version, metadata_type, metadata_value) 
     173|, 
     174 
     175qq| 
     176CREATE TABLE schema_info (version integer NOT NULL default 0); 
     177INSERT INTO schema_info VALUES (8) 
    115178| 
    116179], 
     
    126189ALTER TABLE content ALTER COLUMN moderated SET DEFAULT '1'; 
    127190ALTER TABLE content ALTER COLUMN moderated SET NOT NULL; 
     191UPDATE schema_info SET version = 9; 
    128192| 
    129193], 
     
    185249    my $wanted_schema = _get_wanted_schema( @args ) || $SCHEMA_VERSION; 
    186250 
     251    die "No schema information for requested schema version $wanted_schema\n" 
     252        unless $create_sql->{$wanted_schema}; 
     253 
    187254    # Check whether tables exist 
    188255    my $sql = "SELECT tablename FROM pg_tables 
    189256               WHERE tablename in (" 
    190             . join( ",", map { $dbh->quote($_) } keys %{$create_sql->{$SCHEMA_VERSION}} ) . ")"; 
     257            . join( ",", map { $dbh->quote($_) } keys %{$create_sql->{$wanted_schema}} ) . ")"; 
    191258    my $sth = $dbh->prepare($sql) or croak $dbh->errstr; 
    192259    $sth->execute; 
    193260    my %tables; 
    194261    while ( my $table = $sth->fetchrow_array ) { 
    195         exists $create_sql->{$SCHEMA_VERSION}->{$table} and $tables{$table} = 1; 
     262        exists $create_sql->{$wanted_schema}->{$table} and $tables{$table} = 1; 
    196263    } 
    197264 
     
    206273 
    207274    # Set up tables if not found 
    208     foreach my $required ( reverse sort keys %{$create_sql->{$SCHEMA_VERSION}} ) { 
     275    foreach my $required ( reverse sort keys %{$create_sql->{$wanted_schema}} ) { 
    209276        if ( $tables{$required} ) { 
    210277            print "Table $required already exists... skipping...\n"; 
    211278        } else { 
    212279            print "Creating table $required... done\n"; 
    213             foreach my $sql ( @{ $create_sql->{$SCHEMA_VERSION}->{$required} } ) { 
     280            foreach my $sql ( @{ $create_sql->{$wanted_schema}->{$required} } ) { 
    214281                $dbh->do($sql) or croak $dbh->errstr; 
    215282            } 
     
    329396        return $args{wanted_schema}; 
    330397    } 
    331  
    332     # Args passed as list of connection details. 
    333     return $_[1]; 
    334398} 
    335399