Bug 7902 - Adding Function to Check for Existence of Tables

This patch adds a function TableExists which checks for the existence
of a given table and returns 1 or 0 accordingly. This allows us to
check for the existence of a given table when doing operations on
tables which may not exist in a given database which, in turn, will
reduce the number of red errors which show up after an upgrade.

An example of its use is included in this patch.

Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
This commit is contained in:
Chris Nighswonger 2012-04-05 09:38:52 -04:00 committed by Paul Poulain
parent 3827973408
commit 012c6df001

View file

@ -4893,19 +4893,21 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
$DBversion = "3.07.00.025";
if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
$dbh->do( q|DROP TABLE bibliocoverimage;| );
$dbh->do(
q|CREATE TABLE biblioimages (
imagenumber int(11) NOT NULL AUTO_INCREMENT,
biblionumber int(11) NOT NULL,
mimetype varchar(15) NOT NULL,
imagefile mediumblob NOT NULL,
thumbnail mediumblob NOT NULL,
PRIMARY KEY (imagenumber),
CONSTRAINT bibliocoverimage_fk1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
);
print "Upgrade to $DBversion done (Correct table name for local cover images [please disregard the following error messages: \"Unknown table 'bibliocoverimage'...\" and \"Table 'biblioimages' already exists...\"])\n";
if (TableExists('bibliocoverimage')) {
$dbh->do( q|DROP TABLE bibliocoverimage;| );
$dbh->do(
q|CREATE TABLE biblioimages (
imagenumber int(11) NOT NULL AUTO_INCREMENT,
biblionumber int(11) NOT NULL,
mimetype varchar(15) NOT NULL,
imagefile mediumblob NOT NULL,
thumbnail mediumblob NOT NULL,
PRIMARY KEY (imagenumber),
CONSTRAINT bibliocoverimage_fk1 FOREIGN KEY (biblionumber) REFERENCES biblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;|
);
}
print "Upgrade to $DBversion done (Correct table name for local cover images if needed. )\n";
SetVersion($DBversion);
}
@ -5133,7 +5135,7 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
$dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTDetailsDisplay\" WHERE variable='OPACXSLTDetailsDisplay'");
$dbh->do("UPDATE systempreferences SET type='Free', value=\"$valueOPACXSLTResultsDisplay\" WHERE variable='OPACXSLTResultsDisplay'");
}
print "XSLT systempreference takes a path to file rather than YesNo\n";
print "Upgrade to $DBversion done (XSLT systempreference takes a path to file rather than YesNo)\n";
SetVersion($DBversion);
}
@ -5199,6 +5201,21 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
=head1 FUNCTIONS
=head2 TableExists($table)
=cut
sub TableExists {
my $table = shift;
eval {
local $dbh->{PrintError} = 0;
local $dbh->{RaiseError} = 1;
$dbh->do(qq{SELECT * FROM $table WHERE 1 = 0 });
};
return 1 unless $@;
return 0;
}
=head2 DropAllForeignKeys($table)
Drop all foreign keys of the table $table