Changeset 437 for wiki-toolkit/trunk/lib/Wiki/Toolkit/Setup/SQLite.pm
- Timestamp:
- 05/11/08 20:24:34 (4 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
wiki-toolkit/trunk/lib/Wiki/Toolkit/Setup/SQLite.pm
r431 r437 13 13 use Carp; 14 14 15 my %create_sql = ( 16 schema_info => " 15 my $SCHEMA_VERSION = $VERSION*100; 16 17 my $create_sql = { 18 9 => { 19 schema_info => [ qq| 17 20 CREATE TABLE schema_info ( 18 21 version integer NOT NULL default 0 19 22 ); 20 ", 21 22 node => " 23 |, qq| 24 INSERT INTO schema_info VALUES (9) 25 | ], 26 27 node => [ qq| 23 28 CREATE TABLE node ( 24 29 id integer NOT NULL PRIMARY KEY AUTOINCREMENT, … … 29 34 moderate boolean NOT NULL default '0' 30 35 ) 31 ",32 content => "36 | ], 37 content => [ qq| 33 38 CREATE TABLE content ( 34 39 node_id integer NOT NULL, … … 40 45 PRIMARY KEY (node_id, version) 41 46 ) 42 ",43 internal_links => "47 | ], 48 internal_links => [ qq| 44 49 CREATE TABLE internal_links ( 45 50 link_from varchar(200) NOT NULL default '', … … 47 52 PRIMARY KEY (link_from, link_to) 48 53 ) 49 ",50 metadata => "54 | ], 55 metadata => [ qq| 51 56 CREATE TABLE metadata ( 52 57 node_id integer NOT NULL, … … 55 60 metadata_value mediumtext NOT NULL DEFAULT '' 56 61 ) 57 " 58 ); 62 | ] 63 }, 64 }; 59 65 60 66 =head1 NAME … … 94 100 again with a fresh database, run C<cleardb> first. 95 101 102 An optional second argument may be passed specifying the schema version 103 to use; this is B<ONLY> intended to be used during unit testing and should 104 not normally be specified. 105 96 106 =cut 97 107 … … 100 110 my $dbh = _get_dbh( @args ); 101 111 my $disconnect_required = _disconnect_required( @args ); 112 my $wanted_schema = _get_wanted_schema( @args ) || $SCHEMA_VERSION; 102 113 103 114 # Check whether tables exist, set them up if not. … … 109 120 my @cur_data; 110 121 if(scalar keys %tables > 0) { 111 $upgrade_schema = Wiki::Toolkit::Setup::Database::get_database_upgrade_required($dbh,$ VERSION);122 $upgrade_schema = Wiki::Toolkit::Setup::Database::get_database_upgrade_required($dbh,$wanted_schema); 112 123 } 113 124 if($upgrade_schema) { … … 124 135 125 136 # Set up tables if not found 126 foreach my $required ( keys % create_sql) {137 foreach my $required ( keys %{$create_sql->{$SCHEMA_VERSION}} ) { 127 138 if ( $tables{$required} ) { 128 139 print "Table $required already exists... skipping...\n"; 129 140 } else { 130 141 print "Creating table $required... done\n"; 131 $dbh->do($create_sql{$required}) or croak $dbh->errstr; 142 foreach my $sql (@{$create_sql->{$SCHEMA_VERSION}->{$required}} ) { 143 $dbh->do($sql) or croak $dbh->errstr; 144 } 132 145 } 133 146 } 134 135 # Schema version136 $dbh->do("DELETE FROM schema_info");137 $dbh->do("INSERT INTO schema_info VALUES (". ($VERSION*100) .")");138 147 139 148 # If upgrading, load in the new data … … 153 162 my $sql = "SELECT name FROM sqlite_master 154 163 WHERE type='table' AND name in (" 155 . join( ",", map { $dbh->quote($_) } keys % create_sql) . ")";164 . join( ",", map { $dbh->quote($_) } keys %{$create_sql->{$SCHEMA_VERSION}} ) . ")"; 156 165 my $sth = $dbh->prepare($sql) or croak $dbh->errstr; 157 166 $sth->execute; … … 195 204 my $sql = "SELECT name FROM sqlite_master 196 205 WHERE type='table' AND name in (" 197 . join( ",", map { $dbh->quote($_) } keys % create_sql) . ")";206 . join( ",", map { $dbh->quote($_) } keys %{$create_sql->{$SCHEMA_VERSION}} ) . ")"; 198 207 foreach my $tableref (@{$dbh->selectall_arrayref($sql)}) { 199 208 $dbh->do("DROP TABLE $tableref->[0]") or croak $dbh->errstr; … … 216 225 if ( $args{dbh} ) { 217 226 return $args{dbh}; 218 } else {227 } else { 219 228 return _make_dbh( %args ); 220 229 } … … 223 232 # Args passed as list of connection details. 224 233 return _make_dbh( dbname => $_[0] ); 234 } 235 236 sub _get_wanted_schema { 237 # Database handle passed in. 238 if ( ref $_[0] and ref $_[0] eq 'DBI::db' ) { 239 return undef; 240 } 241 242 # Args passed as hashref. 243 if ( ref $_[0] and ref $_[0] eq 'HASH' ) { 244 my %args = %{$_[0]}; 245 return $args{wanted_schema}; 246 } 247 248 # Args passed as list of connection details. 249 return $_[1]; 225 250 } 226 251 … … 236 261 if ( $args{dbh} ) { 237 262 return 0; 238 } else {263 } else { 239 264 return 1; 240 265 }
