Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
bugzilla
Commits
3dcfda49
Commit
3dcfda49
authored
Jul 29, 2006
by
mkanat%bugzilla.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 346375: Move the code that gets the initial $dbh into Bugzilla::DB
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=justdave
parent
6ad8e7d4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
168 additions
and
85 deletions
+168
-85
Config.pm
Bugzilla/Config.pm
+2
-1
DB.pm
Bugzilla/DB.pm
+158
-4
Requirements.pm
Bugzilla/Install/Requirements.pm
+0
-3
checksetup.pl
checksetup.pl
+8
-77
No files found.
Bugzilla/Config.pm
View file @
3dcfda49
...
@@ -41,7 +41,8 @@ use Bugzilla::Constants;
...
@@ -41,7 +41,8 @@ use Bugzilla::Constants;
%
Bugzilla::Config::
EXPORT_TAGS
=
%
Bugzilla::Config::
EXPORT_TAGS
=
(
(
admin
=>
[
qw(UpdateParams SetParam WriteParams)
],
admin
=>
[
qw(UpdateParams SetParam WriteParams)
],
db
=>
[
qw($db_driver $db_host $db_port $db_name $db_user $db_pass $db_sock)
],
db
=>
[
qw($db_driver $db_host $db_port $db_name $db_user $db_pass $db_sock
$db_check)
],
localconfig
=>
[
qw($cvsbin $interdiffbin $diffpath $webservergroup)
],
localconfig
=>
[
qw($cvsbin $interdiffbin $diffpath $webservergroup)
],
);
);
Exporter::
export_ok_tags
(
'admin'
,
'db'
,
'localconfig'
);
Exporter::
export_ok_tags
(
'admin'
,
'db'
,
'localconfig'
);
...
...
Bugzilla/DB.pm
View file @
3dcfda49
...
@@ -37,6 +37,8 @@ use base qw(DBI::db);
...
@@ -37,6 +37,8 @@ use base qw(DBI::db);
use
Bugzilla::
Config
qw(:db)
;
use
Bugzilla::
Config
qw(:db)
;
use
Bugzilla::
Constants
;
use
Bugzilla::
Constants
;
use
Bugzilla::Install::
Requirements
;
use
Bugzilla::Install::
Localconfig
;
use
Bugzilla::
Util
;
use
Bugzilla::
Util
;
use
Bugzilla::
Error
;
use
Bugzilla::
Error
;
use
Bugzilla::DB::
Schema
;
use
Bugzilla::DB::
Schema
;
...
@@ -62,10 +64,7 @@ sub connect_shadow {
...
@@ -62,10 +64,7 @@ sub connect_shadow {
}
}
sub
connect_main
{
sub
connect_main
{
my
(
$no_db_name
)
=
@_
;
return
_connect
(
$db_driver
,
$db_host
,
$db_name
,
$db_port
,
my
$connect_to_db
=
$db_name
;
$connect_to_db
=
""
if
$no_db_name
;
return
_connect
(
$db_driver
,
$db_host
,
$connect_to_db
,
$db_port
,
$db_sock
,
$db_user
,
$db_pass
);
$db_sock
,
$db_user
,
$db_pass
);
}
}
...
@@ -95,6 +94,134 @@ sub _handle_error {
...
@@ -95,6 +94,134 @@ sub _handle_error {
return
0
;
# Now let DBI handle raising the error
return
0
;
# Now let DBI handle raising the error
}
}
sub
bz_check_requirements
{
my
(
$output
)
=
@_
;
my
$db
=
DB_MODULE
->
{
lc
(
$db_driver
)};
# Only certain values are allowed for $db_driver.
if
(
!
defined
$db
)
{
die
"$db_driver is not a valid choice for \$db_driver in"
.
bz_locations
()
->
{
'localconfig'
};
}
# Check the existence and version of the DBD that we need.
my
$dbd
=
$db
->
{
dbd
};
my
$dbd_ver
=
$db
->
{
dbd_version
};
my
$sql_server
=
$db
->
{
name
};
my
$sql_want
=
$db
->
{
db_version
};
unless
(
have_vers
(
$dbd
,
$dbd_ver
,
$output
))
{
my
$command
=
install_command
(
$dbd
);
my
$root
=
ROOT_USER
;
my
$version
=
$dbd_ver
?
" $dbd_ver or higher"
:
''
;
print
<<EOT;
For $sql_server, Bugzilla requires that perl's ${dbd}${version} be
installed. To install this module, run the following command (as $root):
$command
EOT
exit
;
}
# We don't try to connect to the actual database if $db_check is
# disabled.
return
unless
$db_check
;
# And now check the version of the database server itself.
my
$dbh
=
_get_no_db_connection
();
printf
(
"Checking for %15s %-9s "
,
$sql_server
,
"(v$sql_want)"
)
if
$output
;
my
$sql_vers
=
$dbh
->
bz_server_version
;
$dbh
->
disconnect
;
# Check what version of the database server is installed and let
# the user know if the version is too old to be used with Bugzilla.
if
(
vers_cmp
(
$sql_vers
,
$sql_want
)
>
-
1
)
{
print
"ok: found v$sql_vers\n"
if
$output
;
}
else
{
print
<<EOT;
Your $sql_server v$sql_vers is too old. Bugzilla requires version
$sql_want or later of $sql_server. Please download and install a
newer version.
EOT
exit
;
}
}
# Note that this function requires that localconfig exist and
# be valid.
sub
bz_create_database
{
my
$dbh
;
# See if we can connect to the actual Bugzilla database.
my
$conn_success
=
eval
{
$dbh
=
connect_main
();
};
if
(
!
$conn_success
)
{
$dbh
=
_get_no_db_connection
();
print
"\nCreating database $db_name...\n"
;
# Try to create the DB, and if we fail print a friendly error.
if
(
!
eval
{
$dbh
->
do
(
"CREATE DATABASE $db_name"
)
})
{
my
$error
=
$dbh
->
errstr
;
chomp
(
$error
);
print
STDERR
"The '$db_name' database could not be created."
,
" The error returned was:\n\n $error\n\n"
,
_bz_connect_error_reasons
();
exit
;
}
}
$dbh
->
disconnect
;
}
# A helper for bz_create_database and bz_check_requirements.
sub
_get_no_db_connection
{
my
(
$sql_server
)
=
@_
;
my
$dbh
;
my
$conn_success
=
eval
{
$dbh
=
_connect
(
$db_driver
,
$db_host
,
''
,
$db_port
,
$db_sock
,
$db_user
,
$db_pass
);
};
if
(
!
$conn_success
)
{
my
$sql_server
=
DB_MODULE
->
{
lc
(
$db_driver
)}
->
{
name
};
# Can't use $dbh->errstr because $dbh is undef.
my
$error
=
$
DBI::
errstr
;
chomp
(
$error
);
print
STDERR
"There was an error connecting to $sql_server:\n\n"
,
" $error\n\n"
,
_bz_connect_error_reasons
();
exit
;
}
return
$dbh
;
}
# Just a helper because we have to re-use this text.
# We don't use this in db_new because it gives away the database
# username, and db_new errors can show up on CGIs.
sub
_bz_connect_error_reasons
{
my
$lc_file
=
bz_locations
()
->
{
'localconfig'
};
my
$db
=
DB_MODULE
->
{
lc
(
$db_driver
)};
my
$server
=
$db
->
{
name
};
return
<<EOT;
This might have several reasons:
* $server is not running.
* $server is running, but there is a problem either in the
server configuration or the database access rights. Read the Bugzilla
Guide in the doc directory. The section about database configuration
should help.
* Your password for the '$db_user' user, specified in \$db_pass, is
incorrect, in '$lc_file'.
* There is a subtle problem with Perl, DBI, or $server. Make
sure all settings in '$lc_file' are correct. If all else fails, set
'\$db_check' to 0.
EOT
}
# List of abstract methods we are checking the derived class implements
# List of abstract methods we are checking the derived class implements
our
@_abstract_methods
=
qw(REQUIRED_VERSION PROGRAM_NAME DBD_VERSION
our
@_abstract_methods
=
qw(REQUIRED_VERSION PROGRAM_NAME DBD_VERSION
new sql_regexp sql_not_regexp sql_limit sql_to_days
new sql_regexp sql_not_regexp sql_limit sql_to_days
...
@@ -923,6 +1050,33 @@ should not be called from anywhere else.
...
@@ -923,6 +1050,33 @@ should not be called from anywhere else.
Params: none
Params: none
Returns: new instance of the DB class
Returns: new instance of the DB class
=item C<bz_check_requirements($output)>
Description: Checks to make sure that you have the correct
DBD and database version installed for the
database that Bugzilla will be using.
Prints a message and exits if you don't
pass the requirements.
If C<$db_check> is true (from F<localconfig>), we won't
check the database version.
Params: C<$output> - C<true> if the function should display
informational output about what it's doing, such
as versions found.
Returns: nothing
=item C<bz_create_database()>
Description: Creates an empty database with the name
C<$db_name>, if that database doesn't
already exist. Prints an error message and
exits if we can't create the database.
Params: none
Returns: nothing
=item C<_connect>
=item C<_connect>
Description: Internal function, creates and returns a new, connected
Description: Internal function, creates and returns a new, connected
...
...
Bugzilla/Install/Requirements.pm
View file @
3dcfda49
...
@@ -33,9 +33,6 @@ our @EXPORT = qw(
...
@@ -33,9 +33,6 @@ our @EXPORT = qw(
check_requirements
check_requirements
have_vers
have_vers
vers_cmp
vers_cmp
)
;
our
@EXPORT_OK
=
qw(
install_command
install_command
)
;
)
;
...
...
checksetup.pl
View file @
3dcfda49
...
@@ -304,6 +304,8 @@ import Bugzilla::Bug qw(is_open_state);
...
@@ -304,6 +304,8 @@ import Bugzilla::Bug qw(is_open_state);
require
Bugzilla::Install::
Localconfig
;
require
Bugzilla::Install::
Localconfig
;
import
Bugzilla::Install::
Localconfig
qw(read_localconfig update_localconfig)
;
import
Bugzilla::Install::
Localconfig
qw(read_localconfig update_localconfig)
;
require
Bugzilla::
DB
;
###########################################################################
###########################################################################
# Check and update --LOCAL-- configuration
# Check and update --LOCAL-- configuration
###########################################################################
###########################################################################
...
@@ -312,94 +314,23 @@ print "Reading " . bz_locations()->{'localconfig'} . "...\n" unless $silent;
...
@@ -312,94 +314,23 @@ print "Reading " . bz_locations()->{'localconfig'} . "...\n" unless $silent;
update_localconfig
({
output
=>
!
$silent
,
answer
=>
\%
answer
});
update_localconfig
({
output
=>
!
$silent
,
answer
=>
\%
answer
});
my
$lc_hash
=
read_localconfig
();
my
$lc_hash
=
read_localconfig
();
# XXX Eventually th
ese two variables can be eliminated, but they are
# XXX Eventually th
is variable can be eliminated, but it is
# used more than once throughout checksetup right now.
# used more than once throughout checksetup right now.
my
$my_db_driver
=
$lc_hash
->
{
'db_driver'
};
my
$my_webservergroup
=
$lc_hash
->
{
'webservergroup'
};
my
$my_webservergroup
=
$lc_hash
->
{
'webservergroup'
};
###########################################################################
###########################################################################
# Check
Database
setup
# Check
--DATABASE--
setup
###########################################################################
###########################################################################
#
# Check if we have access to the --DATABASE--
#
# At this point, localconfig is defined and is readable. So we know
# At this point, localconfig is defined and is readable. So we know
# everything we need to create the DB. We have to create it early,
# everything we need to create the DB. We have to create it early,
# because some data required to populate data/params are stored in the DB.
# because some data required to populate data/params is stored in the DB.
if
(
$lc_hash
->
{
'db_check'
})
{
# Only certain values are allowed for $db_driver.
if
(
!
exists
DB_MODULE
->
{
lc
(
$my_db_driver
)})
{
die
"$my_db_driver is not a valid choice for \$db_driver in"
,
" localconfig"
;
}
# Check the existence and version of the DBD that we need.
my
$actual_dbd
=
DB_MODULE
->
{
lc
(
$my_db_driver
)}
->
{
dbd
};
my
$actual_dbd_ver
=
DB_MODULE
->
{
lc
(
$my_db_driver
)}
->
{
dbd_version
};
my
$sql_server
=
DB_MODULE
->
{
lc
(
$my_db_driver
)}
->
{
name
};
my
$sql_want
=
DB_MODULE
->
{
lc
(
$my_db_driver
)}
->
{
db_version
};
unless
(
have_vers
(
$actual_dbd
,
$actual_dbd_ver
,
!
$silent
))
{
print
"For $sql_server, Bugzilla requires that perl's"
.
" $actual_dbd be installed.\nTo install this module,"
.
" you can do:\n "
.
install_command
(
$actual_dbd
)
.
"\n"
;
exit
;
}
# And now check the version of the database server itself.
my
$dbh
=
Bugzilla::DB::
connect_main
(
"no database connection"
);
printf
(
"Checking for %15s %-9s "
,
$sql_server
,
"(v$sql_want)"
)
unless
$silent
;
my
$sql_vers
=
$dbh
->
bz_server_version
;
# Check what version of the database server is installed and let
Bugzilla::DB::
bz_check_requirements
(
!
$silent
);
# the user know if the version is too old to be used with Bugzilla.
Bugzilla::DB::
bz_create_database
()
if
$lc_hash
->
{
'db_check'
};
if
(
vers_cmp
(
$sql_vers
,
$sql_want
)
>
-
1
)
{
print
"ok: found v$sql_vers\n"
unless
$silent
;
}
else
{
die
"\nYour $sql_server v$sql_vers is too old.\n"
.
" Bugzilla requires version $sql_want or later of $sql_server.\n"
.
" Please download and install a newer version.\n"
;
}
# See if we can connect to the database.
my
$conn_success
=
eval
{
my
$check_dbh
=
Bugzilla::DB::
connect_main
();
$check_dbh
->
disconnect
;
};
if
(
!
$conn_success
)
{
my
$my_db_name
=
$lc_hash
->
{
'db_name'
};
print
"Creating database $my_db_name ...\n"
;
# Try to create the DB, and if we fail print an error.
if
(
!
eval
{
$dbh
->
do
(
"CREATE DATABASE $my_db_name"
)
})
{
my
$error
=
$dbh
->
errstr
;
my
$localconfig
=
bz_locations
()
->
{
'localconfig'
};
die
<<"EOF"
The '$my_db_name' database could not be created. The error returned was:
$error
This might have several reasons:
* $sql_server is not running.
* $sql_server is running, but there is a problem either in the
server configuration or the database access rights. Read the Bugzilla
Guide in the doc directory. The section about database configuration
should help.
* There is a subtle problem with Perl, DBI, or $sql_server. Make
sure all settings in '$localconfig' are correct. If all else fails, set
'\$db_check' to zero.\n
EOF
}
}
$dbh
->
disconnect
if
$dbh
;
}
# now get a handle to the database:
# now get a handle to the database:
my
$dbh
=
Bugzilla::DB::
connect_main
();
my
$dbh
=
Bugzilla
->
dbh
;
END
{
$dbh
->
disconnect
if
$dbh
}
###########################################################################
###########################################################################
# Create tables
# Create tables
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment