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
d4d6011c
Commit
d4d6011c
authored
Jul 29, 2006
by
mkanat%bugzilla.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 346410: Move enum-table population code into Bugzilla::DB
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=justdave
parent
3dcfda49
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
72 additions
and
82 deletions
+72
-82
DB.pm
Bugzilla/DB.pm
+68
-12
Mysql.pm
Bugzilla/DB/Mysql.pm
+2
-2
checksetup.pl
checksetup.pl
+2
-68
No files found.
Bugzilla/DB.pm
View file @
d4d6011c
...
@@ -43,12 +43,35 @@ use Bugzilla::Util;
...
@@ -43,12 +43,35 @@ use Bugzilla::Util;
use
Bugzilla::
Error
;
use
Bugzilla::
Error
;
use
Bugzilla::DB::
Schema
;
use
Bugzilla::DB::
Schema
;
use
List::
Util
qw(max)
;
#####################################################################
#####################################################################
# Constants
# Constants
#####################################################################
#####################################################################
use
constant
BLOB_TYPE
=>
DBI::
SQL_BLOB
;
use
constant
BLOB_TYPE
=>
DBI::
SQL_BLOB
;
# Set default values for what used to be the enum types. These values
# are no longer stored in localconfig. If we are upgrading from a
# Bugzilla with enums to a Bugzilla without enums, we use the
# enum values.
#
# The values that you see here are ONLY DEFAULTS. They are only used
# the FIRST time you run checksetup.pl, IF you are NOT upgrading from a
# Bugzilla with enums. After that, they are either controlled through
# the Bugzilla UI or through the DB.
use
constant
ENUM_DEFAULTS
=>
{
bug_severity
=>
[
'blocker'
,
'critical'
,
'major'
,
'normal'
,
'minor'
,
'trivial'
,
'enhancement'
],
priority
=>
[
"P1"
,
"P2"
,
"P3"
,
"P4"
,
"P5"
],
op_sys
=>
[
"All"
,
"Windows"
,
"Mac OS"
,
"Linux"
,
"Other"
],
rep_platform
=>
[
"All"
,
"PC"
,
"Macintosh"
,
"Other"
],
bug_status
=>
[
"UNCONFIRMED"
,
"NEW"
,
"ASSIGNED"
,
"REOPENED"
,
"RESOLVED"
,
"VERIFIED"
,
"CLOSED"
],
resolution
=>
[
""
,
"FIXED"
,
"INVALID"
,
"WONTFIX"
,
"LATER"
,
"REMIND"
,
"DUPLICATE"
,
"WORKSFORME"
,
"MOVED"
],
};
#####################################################################
#####################################################################
# Connection Methods
# Connection Methods
#####################################################################
#####################################################################
...
@@ -368,11 +391,18 @@ sub bz_setup_database {
...
@@ -368,11 +391,18 @@ sub bz_setup_database {
}
}
}
}
# The default implementation just returns what you passed-in. This function
# This really just exists to get overridden in Bugzilla::DB::Mysql.
# really exists just to be overridden in Bugzilla::DB::Mysql.
sub
bz_enum_initial_values
{
sub
bz_enum_initial_values
{
my
(
$self
,
$enum_defaults
)
=
@_
;
return
ENUM_DEFAULTS
;
return
$enum_defaults
;
}
sub
bz_populate_enum_tables
{
my
(
$self
)
=
@_
;
my
$enum_values
=
$self
->
bz_enum_initial_values
();
while
(
my
(
$table
,
$values
)
=
each
%
$enum_values
)
{
$self
->
_bz_populate_enum_table
(
$table
,
$values
);
}
}
}
#####################################################################
#####################################################################
...
@@ -952,6 +982,30 @@ sub _bz_store_real_schema {
...
@@ -952,6 +982,30 @@ sub _bz_store_real_schema {
$sth
->
execute
();
$sth
->
execute
();
}
}
# For bz_populate_enum_tables
sub
_bz_populate_enum_table
{
my
(
$self
,
$table
,
$valuelist
)
=
@_
;
my
$sql_table
=
$self
->
quote_identifier
(
$table
);
# Check if there are any table entries
my
$table_size
=
$self
->
selectrow_array
(
"SELECT COUNT(*) FROM $sql_table"
);
# If the table is empty...
if
(
!
$table_size
)
{
my
$insert
=
$self
->
prepare
(
"INSERT INTO $sql_table (value,sortkey) VALUES (?,?)"
);
print
"Inserting values into the '$table' table:\n"
;
my
$sortorder
=
0
;
my
$maxlen
=
max
(
map
(
length
(
$_
),
@$valuelist
))
+
2
;
foreach
my
$value
(
@$valuelist
)
{
$sortorder
+=
100
;
printf
"%-${maxlen}s sortkey: $sortorder\n"
,
"'$value'"
;
$insert
->
execute
(
$value
,
$sortorder
);
}
}
}
1
;
1
;
__END__
__END__
...
@@ -1331,15 +1385,17 @@ the database.
...
@@ -1331,15 +1385,17 @@ the database.
=over 4
=over 4
=item C<bz_enum_initial_values(\%enum_defaults)>
=item C<bz_populate_enum_tables()>
Description: For an upgrade or an initial installation, populates
the tables that hold the legal values for the old
"enum" fields: C<bug_severity>, C<resolution>, etc.
Prints out information if it inserts anything into the
DB.
Description: For an upgrade or an initial installation, provides
Params: none
what the values should be for the "enum"-type fields,
such as version, op_sys, rep_platform, etc.
Returns: nothing
Params: \%enum_defaults - The default initial list of values for
each enum field. A hash, with the field
names pointing to an arrayref of values.
Returns: A hashref with the correct initial values for the enum fields.
=back
=back
...
...
Bugzilla/DB/Mysql.pm
View file @
d4d6011c
...
@@ -532,8 +532,8 @@ sub bz_setup_database {
...
@@ -532,8 +532,8 @@ sub bz_setup_database {
sub
bz_enum_initial_values
{
sub
bz_enum_initial_values
{
my
(
$self
,
$enum_defaults
)
=
@_
;
my
(
$self
)
=
@_
;
my
%
enum_values
=
%
$enum_defaults
;
my
%
enum_values
=
%
{
$self
->
ENUM_DEFAULTS
}
;
# Get a complete description of the 'bugs' table; with DBD::MySQL
# Get a complete description of the 'bugs' table; with DBD::MySQL
# there isn't a column-by-column way of doing this. Could use
# there isn't a column-by-column way of doing this. Could use
# $dbh->column_info, but it would go slower and we would have to
# $dbh->column_info, but it would go slower and we would have to
...
...
checksetup.pl
View file @
d4d6011c
...
@@ -339,74 +339,8 @@ my $dbh = Bugzilla->dbh;
...
@@ -339,74 +339,8 @@ my $dbh = Bugzilla->dbh;
# Note: table definitions are now in Bugzilla::DB::Schema.
# Note: table definitions are now in Bugzilla::DB::Schema.
$dbh
->
bz_setup_database
();
$dbh
->
bz_setup_database
();
###########################################################################
# Populate the tables that hold the values for the <select> fields.
# Detect changed local settings
$dbh
->
bz_populate_enum_tables
();
###########################################################################
# Nick Barnes nb+bz@ravenbrook.com 2005-10-05
#
# PopulateEnumTable($table, @values): if the table $table has no
# entries, fill it with the entries in the list @values, in the same
# order as that list.
sub
PopulateEnumTable
{
my
(
$table
,
@valuelist
)
=
@_
;
# If we encounter any of the keys in this hash, they are
# automatically set to isactive=0
my
%
defaultinactive
=
(
'---'
=>
1
);
# Check if there are any table entries
my
$query
=
"SELECT COUNT(id) FROM $table"
;
my
$sth
=
$dbh
->
prepare
(
$query
);
$sth
->
execute
();
# If the table is empty...
if
(
!
$sth
->
fetchrow_array
()
)
{
my
$insert
=
$dbh
->
prepare
(
"INSERT INTO $table"
.
" (value,sortkey,isactive) VALUES (?,?,?)"
);
my
$sortorder
=
0
;
foreach
my
$value
(
@valuelist
)
{
$sortorder
=
$sortorder
+
100
;
# Not active if the value exists in $defaultinactive
my
$isactive
=
exists
(
$defaultinactive
{
$value
})
?
0
:
1
;
print
"Inserting value '$value' in table $table"
.
" with sortkey $sortorder...\n"
;
$insert
->
execute
(
$value
,
$sortorder
,
$isactive
);
}
}
}
# Set default values for what used to be the enum types. These values
# are no longer stored in localconfig. If we are upgrading from a
# Bugzilla with enums to a Bugzilla without enums, we use the
# enum values.
#
# The values that you see here are ONLY DEFAULTS. They are only used
# the FIRST time you run checksetup, IF you are NOT upgrading from a
# Bugzilla with enums. After that, they are either controlled through
# the Bugzilla UI or through the DB.
my
$enum_defaults
=
{
bug_severity
=>
[
'blocker'
,
'critical'
,
'major'
,
'normal'
,
'minor'
,
'trivial'
,
'enhancement'
],
priority
=>
[
"P1"
,
"P2"
,
"P3"
,
"P4"
,
"P5"
],
op_sys
=>
[
"All"
,
"Windows"
,
"Mac OS"
,
"Linux"
,
"Other"
],
rep_platform
=>
[
"All"
,
"PC"
,
"Macintosh"
,
"Other"
],
bug_status
=>
[
"UNCONFIRMED"
,
"NEW"
,
"ASSIGNED"
,
"REOPENED"
,
"RESOLVED"
,
"VERIFIED"
,
"CLOSED"
],
resolution
=>
[
""
,
"FIXED"
,
"INVALID"
,
"WONTFIX"
,
"LATER"
,
"REMIND"
,
"DUPLICATE"
,
"WORKSFORME"
,
"MOVED"
],
};
# Get all the enum column values for the existing database, or the
# defaults if the columns are not enums.
my
$enum_values
=
$dbh
->
bz_enum_initial_values
(
$enum_defaults
);
# Populate the enum tables.
while
(
my
(
$table
,
$values
)
=
each
%
$enum_values
)
{
PopulateEnumTable
(
$table
,
@$values
);
}
###########################################################################
###########################################################################
# Check data directory
# Check data directory
...
...
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