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
546b2df2
Commit
546b2df2
authored
Jul 12, 2010
by
Max Kanat-Alexander
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 578266: Clean up the SPECIAL_ORDER code and make it into an accessor,
in Search.pm r=mkanat, a=mkanat (module owner)
parent
2ca9968d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
48 additions
and
32 deletions
+48
-32
Search.pm
Bugzilla/Search.pm
+48
-32
No files found.
Bugzilla/Search.pm
View file @
546b2df2
...
...
@@ -278,17 +278,17 @@ use constant EMPTY_COLUMN => '-1';
# Some fields are not sorted on themselves, but on other fields.
# We need to have a list of these fields and what they map to.
# Each field points to an array that contains the fields mapped
# to, in order.
use
constant
SPECIAL_ORDER
=>
{
'target_milestone'
=>
[
'ms_order.sortkey'
,
'ms_order.value'
],
};
# When we add certain fields to the ORDER BY, we need to then add a
# table join to the FROM statement. This hash maps input fields to
# the join statements that need to be added.
use
constant
SPECIAL_ORDER_JOIN
=>
{
'target_milestone'
=>
'LEFT JOIN milestones AS ms_order ON ms_order.value = bugs.target_milestone AND ms_order.product_id = bugs.product_id'
,
'target_milestone'
=>
{
order
=>
[
'map_target_milestone.sortkey'
,
'map_target_milestone.value'
],
join
=>
{
table
=>
'milestones'
,
from
=>
'target_milestone'
,
to
=>
'value'
,
extra
=>
' AND bugs.product_id = map_target_milestone.product_id'
,
join
=>
'INNER'
,
}
},
};
# Certain columns require other columns to come before them
...
...
@@ -556,6 +556,33 @@ sub _display_column_joins {
return
@
{
$self
->
{
display_column_joins
}
};
}
sub
_special_order
{
my
(
$self
)
=
@_
;
return
$self
->
{
special_order
}
if
$self
->
{
special_order
};
my
%
special_order
=
%
{
SPECIAL_ORDER
()
};
my
$select_fields
=
Bugzilla
->
fields
({
type
=>
FIELD_TYPE_SINGLE_SELECT
});
foreach
my
$field
(
@$select_fields
)
{
next
if
$field
->
is_abnormal
;
my
$name
=
$field
->
name
;
$special_order
{
$name
}
=
{
order
=>
[
"map_$name.sortkey"
,
"map_$name.value"
],
join
=>
{
table
=>
$name
,
from
=>
"bugs.$name"
,
to
=>
"value"
,
join
=>
'INNER'
,
}
};
}
$self
->
{
special_order
}
=
\%
special_order
;
return
$self
->
{
special_order
};
}
##################################
# Helpers for Internal Accessors #
##################################
sub
_build_display_column_joins
{
my
(
$self
)
=
@_
;
my
@joins
;
...
...
@@ -637,18 +664,6 @@ sub init {
my
@specialchart
;
my
@andlist
;
my
%
special_order
=
%
{
SPECIAL_ORDER
()};
my
%
special_order_join
=
%
{
SPECIAL_ORDER_JOIN
()};
my
$select_fields
=
Bugzilla
->
fields
({
type
=>
FIELD_TYPE_SINGLE_SELECT
});
foreach
my
$field
(
@$select_fields
)
{
next
if
$field
->
is_abnormal
;
my
$name
=
$field
->
name
;
$special_order
{
$name
}
=
[
"$name.sortkey"
,
"$name.value"
],
$special_order_join
{
$name
}
=
"LEFT JOIN $name ON $name.value = bugs.$name"
;
}
my
$dbh
=
Bugzilla
->
dbh
;
# All items that are in the ORDER BY must be in the SELECT.
...
...
@@ -1143,7 +1158,7 @@ sub init {
# to other parts of the query, so we want to create it before we
# write the FROM clause.
foreach
my
$orderitem
(
@inputorder
)
{
BuildOrderBy
(
\%
special_order
,
$orderitem
,
\
@orderby
);
$self
->
BuildOrderBy
(
$orderitem
,
\
@orderby
);
}
# Now JOIN the correct tables in the FROM clause.
# This is done separately from the above because it's
...
...
@@ -1151,8 +1166,9 @@ sub init {
foreach
my
$orderitem
(
@inputorder
)
{
# Grab the part without ASC or DESC.
my
$column_name
=
split_order_term
(
$orderitem
);
if
(
$special_order_join
{
$column_name
})
{
push
(
@supptables
,
$special_order_join
{
$column_name
});
if
(
my
$join_info
=
$self
->
_special_order
->
{
$column_name
}
->
{
join
})
{
my
@join_sql
=
$self
->
_translate_join
(
$column_name
,
$join_info
);
push
(
@supptables
,
@join_sql
);
}
}
...
...
@@ -1234,8 +1250,8 @@ sub init {
# doesn't catch items that were put into the ORDER BY from SPECIAL_ORDER.
foreach
my
$item
(
@inputorder
)
{
my
$column_name
=
split_order_term
(
$item
);
if
(
$special_order
{
$column_name
})
{
push
(
@groupby
,
@
{
$special_order
{
$column_name
}
}
);
if
(
my
$order
=
$self
->
_special_order
->
{
$column_name
}
->
{
order
})
{
push
(
@groupby
,
$order
);
}
}
$query
.=
") "
.
$dbh
->
sql_group_by
(
"bugs.bug_id"
,
join
(
', '
,
@groupby
));
...
...
@@ -1502,7 +1518,7 @@ sub IsValidQueryType
# BuildOrderBy recursively, to let it know that we're "reversing" the
# order. That is, that we wanted "A DESC", not "A".
sub
BuildOrderBy
{
my
(
$s
pecial_order
,
$orderitem
,
$stringlist
,
$reverseorder
)
=
(
@_
);
my
(
$s
elf
,
$orderitem
,
$stringlist
,
$reverseorder
)
=
(
@_
);
my
(
$orderfield
,
$orderdirection
)
=
split_order_term
(
$orderitem
);
...
...
@@ -1518,12 +1534,12 @@ sub BuildOrderBy {
}
# Handle fields that have non-standard sort orders, from $specialorder.
if
(
$special_order
->
{
$orderfield
})
{
foreach
my
$subitem
(
@
{
$s
pecial_order
->
{
$orderfield
}})
{
if
(
$s
elf
->
_s
pecial_order
->
{
$orderfield
})
{
foreach
my
$subitem
(
@
{
$s
elf
->
_special_order
->
{
$orderfield
}
->
{
order
}})
{
# DESC on a field with non-standard sort order means
# "reverse the normal order for each field that we map to."
BuildOrderBy
(
$special_order
,
$subitem
,
$stringlist
,
$orderdirection
=~
m/desc/i
);
$self
->
BuildOrderBy
(
$subitem
,
$stringlist
,
$orderdirection
=~
m/desc/i
);
}
return
;
}
...
...
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