diff --git a/bin/pt-duplicate-key-checker b/bin/pt-duplicate-key-checker index a51f6910..f361c362 100755 --- a/bin/pt-duplicate-key-checker +++ b/bin/pt-duplicate-key-checker @@ -3297,58 +3297,63 @@ sub _iterate_dbh { $self->{dbs} = \@dbs; } - if ( !$self->{db} ) { - $self->{db} = shift @{$self->{dbs}}; - PTDEBUG && _d('Next database:', $self->{db}); - return unless $self->{db}; - } - - if ( !defined $self->{tbls} ) { - my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); - PTDEBUG && _d($sql); - my @tbls = map { - $_->[0]; # (tbl, type) + DATABASE: + while ( $self->{db} || defined(my $db = shift @{$self->{dbs}}) ) { + if ( !$self->{db} ) { + PTDEBUG && _d('Next database:', $db); + $self->{db} = $db; } - grep { - my ($tbl, $type) = @$_; - (!$type || ($type ne 'VIEW')) - && $self->_resume_from_table($tbl) - && $self->table_is_allowed($self->{db}, $tbl); - } - @{$dbh->selectall_arrayref($sql)}; - PTDEBUG && _d('Found', scalar @tbls, 'tables in database', $self->{db}); - $self->{tbls} = \@tbls; - } - while ( my $tbl = shift @{$self->{tbls}} ) { - my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; - if ( my $e = $EVAL_ERROR ) { - my $table_name = "$self->{db}.$tbl"; - if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { - PTDEBUG && _d("Skipping $table_name because it no longer exists"); + if ( !$self->{tbls} ) { + my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); + PTDEBUG && _d($sql); + my @tbls = map { + $_->[0]; # (tbl, type) } - else { - warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + grep { + my ($tbl, $type) = @$_; + (!$type || ($type ne 'VIEW')) + && $self->_resume_from_table($tbl) + && $self->table_is_allowed($self->{db}, $tbl); } - next; + @{$dbh->selectall_arrayref($sql)}; + PTDEBUG && _d('Found', scalar @tbls, 'tables in database',$self->{db}); + $self->{tbls} = \@tbls; } - my $tbl_struct = $tp->parse($ddl); - if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { - return { - db => $self->{db}, - tbl => $tbl, - name => $q->quote($self->{db}, $tbl), - ddl => $ddl, - tbl_struct => $tbl_struct, - }; + + TABLE: + while ( my $tbl = shift @{$self->{tbls}} ) { + my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; + if ( my $e = $EVAL_ERROR ) { + my $table_name = "$self->{db}.$tbl"; + if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { + PTDEBUG && _d("$table_name no longer exists"); + } + else { + warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + } + next TABLE; + } + + my $tbl_struct = $tp->parse($ddl); + if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { + return { + db => $self->{db}, + tbl => $tbl, + name => $q->quote($self->{db}, $tbl), + ddl => $ddl, + tbl_struct => $tbl_struct, + }; + } } - } - PTDEBUG && _d('No more tables in database', $self->{db}); - $self->{db} = undef; - $self->{tbls} = undef; + PTDEBUG && _d('No more tables in database', $self->{db}); + $self->{db} = undef; + $self->{tbls} = undef; + } # DATABASE - return $self->_iterate_dbh(); + PTDEBUG && _d('No more databases'); + return; } sub database_is_allowed { diff --git a/bin/pt-index-usage b/bin/pt-index-usage index c3f2d98d..daeaff27 100755 --- a/bin/pt-index-usage +++ b/bin/pt-index-usage @@ -4131,58 +4131,63 @@ sub _iterate_dbh { $self->{dbs} = \@dbs; } - if ( !$self->{db} ) { - $self->{db} = shift @{$self->{dbs}}; - PTDEBUG && _d('Next database:', $self->{db}); - return unless $self->{db}; - } - - if ( !defined $self->{tbls} ) { - my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); - PTDEBUG && _d($sql); - my @tbls = map { - $_->[0]; # (tbl, type) + DATABASE: + while ( $self->{db} || defined(my $db = shift @{$self->{dbs}}) ) { + if ( !$self->{db} ) { + PTDEBUG && _d('Next database:', $db); + $self->{db} = $db; } - grep { - my ($tbl, $type) = @$_; - (!$type || ($type ne 'VIEW')) - && $self->_resume_from_table($tbl) - && $self->table_is_allowed($self->{db}, $tbl); - } - @{$dbh->selectall_arrayref($sql)}; - PTDEBUG && _d('Found', scalar @tbls, 'tables in database', $self->{db}); - $self->{tbls} = \@tbls; - } - while ( my $tbl = shift @{$self->{tbls}} ) { - my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; - if ( my $e = $EVAL_ERROR ) { - my $table_name = "$self->{db}.$tbl"; - if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { - PTDEBUG && _d("Skipping $table_name because it no longer exists"); + if ( !$self->{tbls} ) { + my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); + PTDEBUG && _d($sql); + my @tbls = map { + $_->[0]; # (tbl, type) } - else { - warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + grep { + my ($tbl, $type) = @$_; + (!$type || ($type ne 'VIEW')) + && $self->_resume_from_table($tbl) + && $self->table_is_allowed($self->{db}, $tbl); } - next; + @{$dbh->selectall_arrayref($sql)}; + PTDEBUG && _d('Found', scalar @tbls, 'tables in database',$self->{db}); + $self->{tbls} = \@tbls; } - my $tbl_struct = $tp->parse($ddl); - if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { - return { - db => $self->{db}, - tbl => $tbl, - name => $q->quote($self->{db}, $tbl), - ddl => $ddl, - tbl_struct => $tbl_struct, - }; + + TABLE: + while ( my $tbl = shift @{$self->{tbls}} ) { + my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; + if ( my $e = $EVAL_ERROR ) { + my $table_name = "$self->{db}.$tbl"; + if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { + PTDEBUG && _d("$table_name no longer exists"); + } + else { + warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + } + next TABLE; + } + + my $tbl_struct = $tp->parse($ddl); + if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { + return { + db => $self->{db}, + tbl => $tbl, + name => $q->quote($self->{db}, $tbl), + ddl => $ddl, + tbl_struct => $tbl_struct, + }; + } } - } - PTDEBUG && _d('No more tables in database', $self->{db}); - $self->{db} = undef; - $self->{tbls} = undef; + PTDEBUG && _d('No more tables in database', $self->{db}); + $self->{db} = undef; + $self->{tbls} = undef; + } # DATABASE - return $self->_iterate_dbh(); + PTDEBUG && _d('No more databases'); + return; } sub database_is_allowed { diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 10aafd5a..007be182 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -7344,58 +7344,63 @@ sub _iterate_dbh { $self->{dbs} = \@dbs; } - if ( !$self->{db} ) { - $self->{db} = shift @{$self->{dbs}}; - PTDEBUG && _d('Next database:', $self->{db}); - return unless $self->{db}; - } - - if ( !defined $self->{tbls} ) { - my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); - PTDEBUG && _d($sql); - my @tbls = map { - $_->[0]; # (tbl, type) + DATABASE: + while ( $self->{db} || defined(my $db = shift @{$self->{dbs}}) ) { + if ( !$self->{db} ) { + PTDEBUG && _d('Next database:', $db); + $self->{db} = $db; } - grep { - my ($tbl, $type) = @$_; - (!$type || ($type ne 'VIEW')) - && $self->_resume_from_table($tbl) - && $self->table_is_allowed($self->{db}, $tbl); - } - @{$dbh->selectall_arrayref($sql)}; - PTDEBUG && _d('Found', scalar @tbls, 'tables in database', $self->{db}); - $self->{tbls} = \@tbls; - } - while ( my $tbl = shift @{$self->{tbls}} ) { - my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; - if ( my $e = $EVAL_ERROR ) { - my $table_name = "$self->{db}.$tbl"; - if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { - PTDEBUG && _d("Skipping $table_name because it no longer exists"); + if ( !$self->{tbls} ) { + my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); + PTDEBUG && _d($sql); + my @tbls = map { + $_->[0]; # (tbl, type) } - else { - warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + grep { + my ($tbl, $type) = @$_; + (!$type || ($type ne 'VIEW')) + && $self->_resume_from_table($tbl) + && $self->table_is_allowed($self->{db}, $tbl); } - next; + @{$dbh->selectall_arrayref($sql)}; + PTDEBUG && _d('Found', scalar @tbls, 'tables in database',$self->{db}); + $self->{tbls} = \@tbls; } - my $tbl_struct = $tp->parse($ddl); - if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { - return { - db => $self->{db}, - tbl => $tbl, - name => $q->quote($self->{db}, $tbl), - ddl => $ddl, - tbl_struct => $tbl_struct, - }; + + TABLE: + while ( my $tbl = shift @{$self->{tbls}} ) { + my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; + if ( my $e = $EVAL_ERROR ) { + my $table_name = "$self->{db}.$tbl"; + if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { + PTDEBUG && _d("$table_name no longer exists"); + } + else { + warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + } + next TABLE; + } + + my $tbl_struct = $tp->parse($ddl); + if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { + return { + db => $self->{db}, + tbl => $tbl, + name => $q->quote($self->{db}, $tbl), + ddl => $ddl, + tbl_struct => $tbl_struct, + }; + } } - } - PTDEBUG && _d('No more tables in database', $self->{db}); - $self->{db} = undef; - $self->{tbls} = undef; + PTDEBUG && _d('No more tables in database', $self->{db}); + $self->{db} = undef; + $self->{tbls} = undef; + } # DATABASE - return $self->_iterate_dbh(); + PTDEBUG && _d('No more databases'); + return; } sub database_is_allowed { diff --git a/bin/pt-table-sync b/bin/pt-table-sync index dfc91a91..db96a8d9 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -7690,58 +7690,63 @@ sub _iterate_dbh { $self->{dbs} = \@dbs; } - if ( !$self->{db} ) { - $self->{db} = shift @{$self->{dbs}}; - PTDEBUG && _d('Next database:', $self->{db}); - return unless $self->{db}; - } - - if ( !defined $self->{tbls} ) { - my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); - PTDEBUG && _d($sql); - my @tbls = map { - $_->[0]; # (tbl, type) + DATABASE: + while ( $self->{db} || defined(my $db = shift @{$self->{dbs}}) ) { + if ( !$self->{db} ) { + PTDEBUG && _d('Next database:', $db); + $self->{db} = $db; } - grep { - my ($tbl, $type) = @$_; - (!$type || ($type ne 'VIEW')) - && $self->_resume_from_table($tbl) - && $self->table_is_allowed($self->{db}, $tbl); - } - @{$dbh->selectall_arrayref($sql)}; - PTDEBUG && _d('Found', scalar @tbls, 'tables in database', $self->{db}); - $self->{tbls} = \@tbls; - } - while ( my $tbl = shift @{$self->{tbls}} ) { - my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; - if ( my $e = $EVAL_ERROR ) { - my $table_name = "$self->{db}.$tbl"; - if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { - PTDEBUG && _d("Skipping $table_name because it no longer exists"); + if ( !$self->{tbls} ) { + my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); + PTDEBUG && _d($sql); + my @tbls = map { + $_->[0]; # (tbl, type) } - else { - warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + grep { + my ($tbl, $type) = @$_; + (!$type || ($type ne 'VIEW')) + && $self->_resume_from_table($tbl) + && $self->table_is_allowed($self->{db}, $tbl); } - next; + @{$dbh->selectall_arrayref($sql)}; + PTDEBUG && _d('Found', scalar @tbls, 'tables in database',$self->{db}); + $self->{tbls} = \@tbls; } - my $tbl_struct = $tp->parse($ddl); - if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { - return { - db => $self->{db}, - tbl => $tbl, - name => $q->quote($self->{db}, $tbl), - ddl => $ddl, - tbl_struct => $tbl_struct, - }; + + TABLE: + while ( my $tbl = shift @{$self->{tbls}} ) { + my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; + if ( my $e = $EVAL_ERROR ) { + my $table_name = "$self->{db}.$tbl"; + if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { + PTDEBUG && _d("$table_name no longer exists"); + } + else { + warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + } + next TABLE; + } + + my $tbl_struct = $tp->parse($ddl); + if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { + return { + db => $self->{db}, + tbl => $tbl, + name => $q->quote($self->{db}, $tbl), + ddl => $ddl, + tbl_struct => $tbl_struct, + }; + } } - } - PTDEBUG && _d('No more tables in database', $self->{db}); - $self->{db} = undef; - $self->{tbls} = undef; + PTDEBUG && _d('No more tables in database', $self->{db}); + $self->{db} = undef; + $self->{tbls} = undef; + } # DATABASE - return $self->_iterate_dbh(); + PTDEBUG && _d('No more databases'); + return; } sub database_is_allowed { diff --git a/lib/SchemaIterator.pm b/lib/SchemaIterator.pm index 901ce76f..debbb9e2 100644 --- a/lib/SchemaIterator.pm +++ b/lib/SchemaIterator.pm @@ -334,64 +334,67 @@ sub _iterate_dbh { $self->{dbs} = \@dbs; } - if ( !$self->{db} ) { - $self->{db} = shift @{$self->{dbs}}; - PTDEBUG && _d('Next database:', $self->{db}); - return unless $self->{db}; - } - - if ( !defined $self->{tbls} ) { - my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); - PTDEBUG && _d($sql); - my @tbls = map { - $_->[0]; # (tbl, type) + DATABASE: + while ( $self->{db} || defined(my $db = shift @{$self->{dbs}}) ) { + if ( !$self->{db} ) { + PTDEBUG && _d('Next database:', $db); + $self->{db} = $db; } - grep { - my ($tbl, $type) = @$_; - (!$type || ($type ne 'VIEW')) - && $self->_resume_from_table($tbl) - && $self->table_is_allowed($self->{db}, $tbl); - } - @{$dbh->selectall_arrayref($sql)}; - PTDEBUG && _d('Found', scalar @tbls, 'tables in database', $self->{db}); - $self->{tbls} = \@tbls; - } - while ( my $tbl = shift @{$self->{tbls}} ) { - my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; - if ( my $e = $EVAL_ERROR ) { - my $table_name = "$self->{db}.$tbl"; - # SHOW CREATE TABLE failed. This is a bit puzzling; - # maybe the table got dropped, or crashed. Not much we can - # do about it; If the table is missing, just PTDEBUG it, but - # otherwise, warn with the error. - if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { - PTDEBUG && _d("Skipping $table_name because it no longer exists"); + if ( !$self->{tbls} ) { + my $sql = 'SHOW /*!50002 FULL*/ TABLES FROM ' . $q->quote($self->{db}); + PTDEBUG && _d($sql); + my @tbls = map { + $_->[0]; # (tbl, type) } - else { - warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + grep { + my ($tbl, $type) = @$_; + (!$type || ($type ne 'VIEW')) + && $self->_resume_from_table($tbl) + && $self->table_is_allowed($self->{db}, $tbl); } - next; + @{$dbh->selectall_arrayref($sql)}; + PTDEBUG && _d('Found', scalar @tbls, 'tables in database',$self->{db}); + $self->{tbls} = \@tbls; } - my $tbl_struct = $tp->parse($ddl); - if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { - return { - db => $self->{db}, - tbl => $tbl, - name => $q->quote($self->{db}, $tbl), - ddl => $ddl, - tbl_struct => $tbl_struct, - }; + + TABLE: + while ( my $tbl = shift @{$self->{tbls}} ) { + my $ddl = eval { $tp->get_create_table($dbh, $self->{db}, $tbl) }; + if ( my $e = $EVAL_ERROR ) { + my $table_name = "$self->{db}.$tbl"; + # SHOW CREATE TABLE failed. This is a bit puzzling; + # maybe the table got dropped, or crashed. Not much we can + # do about it; If the table is missing, just PTDEBUG it, but + # otherwise, warn with the error. + if ( $e =~ /\QTable '$table_name' doesn't exist/ ) { + PTDEBUG && _d("$table_name no longer exists"); + } + else { + warn "Skipping $table_name because SHOW CREATE TABLE failed: $e"; + } + next TABLE; + } + + my $tbl_struct = $tp->parse($ddl); + if ( $self->engine_is_allowed($tbl_struct->{engine}) ) { + return { + db => $self->{db}, + tbl => $tbl, + name => $q->quote($self->{db}, $tbl), + ddl => $ddl, + tbl_struct => $tbl_struct, + }; + } } - } - PTDEBUG && _d('No more tables in database', $self->{db}); - $self->{db} = undef; - $self->{tbls} = undef; + PTDEBUG && _d('No more tables in database', $self->{db}); + $self->{db} = undef; + $self->{tbls} = undef; + } # DATABASE - # Recurse to get the next database. If there's no next db, then the - # call will return undef and we'll return undef, too. - return $self->_iterate_dbh(); + PTDEBUG && _d('No more databases'); + return; } sub database_is_allowed { diff --git a/t/lib/SchemaIterator.t b/t/lib/SchemaIterator.t index b58cb0a5..8544fc1f 100644 --- a/t/lib/SchemaIterator.t +++ b/t/lib/SchemaIterator.t @@ -547,10 +547,24 @@ eval { diag(`$trunk/sandbox/stop-sandbox $master3_port >/dev/null`); +# ############################################################################# +# Bug 1136559: Deep recursion on subroutine "SchemaIterator::_iterate_dbh" +# ############################################################################# + +$sb->wipe_clean($dbh); +diag(`/tmp/12345/use < $trunk/t/lib/samples/100-dbs.sql`); + +test_so( + filters => [], + result => "foo001.bar001 ", + lives_ok => 1, + test_name => "Bug 1136559: Deep recursion on subroutine SchemaIterator::_iterate_dbh", +); + +diag(`/tmp/12345/use < $trunk/t/lib/samples/100-dbs-drop.sql`); + # ############################################################################# # Done. # ############################################################################# ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox"); - done_testing; -exit; diff --git a/t/lib/samples/100-dbs-drop.sql b/t/lib/samples/100-dbs-drop.sql new file mode 100644 index 00000000..df3caca2 --- /dev/null +++ b/t/lib/samples/100-dbs-drop.sql @@ -0,0 +1,100 @@ +DROP DATABASE IF EXISTS foo001; +DROP DATABASE IF EXISTS foo002; +DROP DATABASE IF EXISTS foo003; +DROP DATABASE IF EXISTS foo004; +DROP DATABASE IF EXISTS foo005; +DROP DATABASE IF EXISTS foo006; +DROP DATABASE IF EXISTS foo007; +DROP DATABASE IF EXISTS foo008; +DROP DATABASE IF EXISTS foo009; +DROP DATABASE IF EXISTS foo010; +DROP DATABASE IF EXISTS foo011; +DROP DATABASE IF EXISTS foo012; +DROP DATABASE IF EXISTS foo013; +DROP DATABASE IF EXISTS foo014; +DROP DATABASE IF EXISTS foo015; +DROP DATABASE IF EXISTS foo016; +DROP DATABASE IF EXISTS foo017; +DROP DATABASE IF EXISTS foo018; +DROP DATABASE IF EXISTS foo019; +DROP DATABASE IF EXISTS foo020; +DROP DATABASE IF EXISTS foo021; +DROP DATABASE IF EXISTS foo022; +DROP DATABASE IF EXISTS foo023; +DROP DATABASE IF EXISTS foo024; +DROP DATABASE IF EXISTS foo025; +DROP DATABASE IF EXISTS foo026; +DROP DATABASE IF EXISTS foo027; +DROP DATABASE IF EXISTS foo028; +DROP DATABASE IF EXISTS foo029; +DROP DATABASE IF EXISTS foo030; +DROP DATABASE IF EXISTS foo031; +DROP DATABASE IF EXISTS foo032; +DROP DATABASE IF EXISTS foo033; +DROP DATABASE IF EXISTS foo034; +DROP DATABASE IF EXISTS foo035; +DROP DATABASE IF EXISTS foo036; +DROP DATABASE IF EXISTS foo037; +DROP DATABASE IF EXISTS foo038; +DROP DATABASE IF EXISTS foo039; +DROP DATABASE IF EXISTS foo040; +DROP DATABASE IF EXISTS foo041; +DROP DATABASE IF EXISTS foo042; +DROP DATABASE IF EXISTS foo043; +DROP DATABASE IF EXISTS foo044; +DROP DATABASE IF EXISTS foo045; +DROP DATABASE IF EXISTS foo046; +DROP DATABASE IF EXISTS foo047; +DROP DATABASE IF EXISTS foo048; +DROP DATABASE IF EXISTS foo049; +DROP DATABASE IF EXISTS foo050; +DROP DATABASE IF EXISTS foo051; +DROP DATABASE IF EXISTS foo052; +DROP DATABASE IF EXISTS foo053; +DROP DATABASE IF EXISTS foo054; +DROP DATABASE IF EXISTS foo055; +DROP DATABASE IF EXISTS foo056; +DROP DATABASE IF EXISTS foo057; +DROP DATABASE IF EXISTS foo058; +DROP DATABASE IF EXISTS foo059; +DROP DATABASE IF EXISTS foo060; +DROP DATABASE IF EXISTS foo061; +DROP DATABASE IF EXISTS foo062; +DROP DATABASE IF EXISTS foo063; +DROP DATABASE IF EXISTS foo064; +DROP DATABASE IF EXISTS foo065; +DROP DATABASE IF EXISTS foo066; +DROP DATABASE IF EXISTS foo067; +DROP DATABASE IF EXISTS foo068; +DROP DATABASE IF EXISTS foo069; +DROP DATABASE IF EXISTS foo070; +DROP DATABASE IF EXISTS foo071; +DROP DATABASE IF EXISTS foo072; +DROP DATABASE IF EXISTS foo073; +DROP DATABASE IF EXISTS foo074; +DROP DATABASE IF EXISTS foo075; +DROP DATABASE IF EXISTS foo076; +DROP DATABASE IF EXISTS foo077; +DROP DATABASE IF EXISTS foo078; +DROP DATABASE IF EXISTS foo079; +DROP DATABASE IF EXISTS foo080; +DROP DATABASE IF EXISTS foo081; +DROP DATABASE IF EXISTS foo082; +DROP DATABASE IF EXISTS foo083; +DROP DATABASE IF EXISTS foo084; +DROP DATABASE IF EXISTS foo085; +DROP DATABASE IF EXISTS foo086; +DROP DATABASE IF EXISTS foo087; +DROP DATABASE IF EXISTS foo088; +DROP DATABASE IF EXISTS foo089; +DROP DATABASE IF EXISTS foo090; +DROP DATABASE IF EXISTS foo091; +DROP DATABASE IF EXISTS foo092; +DROP DATABASE IF EXISTS foo093; +DROP DATABASE IF EXISTS foo094; +DROP DATABASE IF EXISTS foo095; +DROP DATABASE IF EXISTS foo096; +DROP DATABASE IF EXISTS foo097; +DROP DATABASE IF EXISTS foo098; +DROP DATABASE IF EXISTS foo099; +DROP DATABASE IF EXISTS foo100; diff --git a/t/lib/samples/100-dbs.sql b/t/lib/samples/100-dbs.sql new file mode 100644 index 00000000..602e7c63 --- /dev/null +++ b/t/lib/samples/100-dbs.sql @@ -0,0 +1,105 @@ +CREATE DATABASE IF NOT EXISTS foo001; +CREATE DATABASE IF NOT EXISTS foo002; +CREATE DATABASE IF NOT EXISTS foo003; +CREATE DATABASE IF NOT EXISTS foo004; +CREATE DATABASE IF NOT EXISTS foo005; +CREATE DATABASE IF NOT EXISTS foo006; +CREATE DATABASE IF NOT EXISTS foo007; +CREATE DATABASE IF NOT EXISTS foo008; +CREATE DATABASE IF NOT EXISTS foo009; +CREATE DATABASE IF NOT EXISTS foo010; +CREATE DATABASE IF NOT EXISTS foo011; +CREATE DATABASE IF NOT EXISTS foo012; +CREATE DATABASE IF NOT EXISTS foo013; +CREATE DATABASE IF NOT EXISTS foo014; +CREATE DATABASE IF NOT EXISTS foo015; +CREATE DATABASE IF NOT EXISTS foo016; +CREATE DATABASE IF NOT EXISTS foo017; +CREATE DATABASE IF NOT EXISTS foo018; +CREATE DATABASE IF NOT EXISTS foo019; +CREATE DATABASE IF NOT EXISTS foo020; +CREATE DATABASE IF NOT EXISTS foo021; +CREATE DATABASE IF NOT EXISTS foo022; +CREATE DATABASE IF NOT EXISTS foo023; +CREATE DATABASE IF NOT EXISTS foo024; +CREATE DATABASE IF NOT EXISTS foo025; +CREATE DATABASE IF NOT EXISTS foo026; +CREATE DATABASE IF NOT EXISTS foo027; +CREATE DATABASE IF NOT EXISTS foo028; +CREATE DATABASE IF NOT EXISTS foo029; +CREATE DATABASE IF NOT EXISTS foo030; +CREATE DATABASE IF NOT EXISTS foo031; +CREATE DATABASE IF NOT EXISTS foo032; +CREATE DATABASE IF NOT EXISTS foo033; +CREATE DATABASE IF NOT EXISTS foo034; +CREATE DATABASE IF NOT EXISTS foo035; +CREATE DATABASE IF NOT EXISTS foo036; +CREATE DATABASE IF NOT EXISTS foo037; +CREATE DATABASE IF NOT EXISTS foo038; +CREATE DATABASE IF NOT EXISTS foo039; +CREATE DATABASE IF NOT EXISTS foo040; +CREATE DATABASE IF NOT EXISTS foo041; +CREATE DATABASE IF NOT EXISTS foo042; +CREATE DATABASE IF NOT EXISTS foo043; +CREATE DATABASE IF NOT EXISTS foo044; +CREATE DATABASE IF NOT EXISTS foo045; +CREATE DATABASE IF NOT EXISTS foo046; +CREATE DATABASE IF NOT EXISTS foo047; +CREATE DATABASE IF NOT EXISTS foo048; +CREATE DATABASE IF NOT EXISTS foo049; +CREATE DATABASE IF NOT EXISTS foo050; +CREATE DATABASE IF NOT EXISTS foo051; +CREATE DATABASE IF NOT EXISTS foo052; +CREATE DATABASE IF NOT EXISTS foo053; +CREATE DATABASE IF NOT EXISTS foo054; +CREATE DATABASE IF NOT EXISTS foo055; +CREATE DATABASE IF NOT EXISTS foo056; +CREATE DATABASE IF NOT EXISTS foo057; +CREATE DATABASE IF NOT EXISTS foo058; +CREATE DATABASE IF NOT EXISTS foo059; +CREATE DATABASE IF NOT EXISTS foo060; +CREATE DATABASE IF NOT EXISTS foo061; +CREATE DATABASE IF NOT EXISTS foo062; +CREATE DATABASE IF NOT EXISTS foo063; +CREATE DATABASE IF NOT EXISTS foo064; +CREATE DATABASE IF NOT EXISTS foo065; +CREATE DATABASE IF NOT EXISTS foo066; +CREATE DATABASE IF NOT EXISTS foo067; +CREATE DATABASE IF NOT EXISTS foo068; +CREATE DATABASE IF NOT EXISTS foo069; +CREATE DATABASE IF NOT EXISTS foo070; +CREATE DATABASE IF NOT EXISTS foo071; +CREATE DATABASE IF NOT EXISTS foo072; +CREATE DATABASE IF NOT EXISTS foo073; +CREATE DATABASE IF NOT EXISTS foo074; +CREATE DATABASE IF NOT EXISTS foo075; +CREATE DATABASE IF NOT EXISTS foo076; +CREATE DATABASE IF NOT EXISTS foo077; +CREATE DATABASE IF NOT EXISTS foo078; +CREATE DATABASE IF NOT EXISTS foo079; +CREATE DATABASE IF NOT EXISTS foo080; +CREATE DATABASE IF NOT EXISTS foo081; +CREATE DATABASE IF NOT EXISTS foo082; +CREATE DATABASE IF NOT EXISTS foo083; +CREATE DATABASE IF NOT EXISTS foo084; +CREATE DATABASE IF NOT EXISTS foo085; +CREATE DATABASE IF NOT EXISTS foo086; +CREATE DATABASE IF NOT EXISTS foo087; +CREATE DATABASE IF NOT EXISTS foo088; +CREATE DATABASE IF NOT EXISTS foo089; +CREATE DATABASE IF NOT EXISTS foo090; +CREATE DATABASE IF NOT EXISTS foo091; +CREATE DATABASE IF NOT EXISTS foo092; +CREATE DATABASE IF NOT EXISTS foo093; +CREATE DATABASE IF NOT EXISTS foo094; +CREATE DATABASE IF NOT EXISTS foo095; +CREATE DATABASE IF NOT EXISTS foo096; +CREATE DATABASE IF NOT EXISTS foo097; +CREATE DATABASE IF NOT EXISTS foo098; +CREATE DATABASE IF NOT EXISTS foo099; +CREATE DATABASE IF NOT EXISTS foo100; +CREATE TABLE IF NOT EXISTS foo001.bar001 ( + `id` int unsigned NOT NULL AUTO_INCREMENT, + `value` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8;