From beda681b74c9ca4a753388ff14a6ec17b846a20d Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Tue, 25 Oct 2011 11:53:25 -0400 Subject: [PATCH] Provide a QP modifier for sorting NULLS FIRST in the core SQL Signed-off-by: Mike Rylander --- .../OpenILS/Application/Storage/Driver/Pg/QueryParser.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm index f5cb67d916..41ed64c45e 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm @@ -455,6 +455,8 @@ __PACKAGE__->add_search_filter( 'sort' ); # modifies core query, not configurable __PACKAGE__->add_search_modifier( 'descending' ); __PACKAGE__->add_search_modifier( 'ascending' ); +__PACKAGE__->add_search_modifier( 'nullsfirst' ); +__PACKAGE__->add_search_modifier( 'nullslast' ); __PACKAGE__->add_search_modifier( 'metarecord' ); __PACKAGE__->add_search_modifier( 'metabib' ); @@ -549,6 +551,9 @@ sub toSQL { my $desc = 'ASC'; $desc = 'DESC' if ($self->find_modifier('descending')); + my $nullpos = 'NULLS LAST'; + $nullpos = 'NULLS FIRST' if ($self->find_modifier('nullsfirst')); + if (grep {$_ eq $sort_filter} @{$self->QueryParser->dynamic_sorters}) { $rank = "FIRST(mrd.attrs->'$sort_filter')" } elsif ($sort_filter eq 'create_date') { @@ -668,7 +673,7 @@ SELECT $key AS id, $combined_dyn_filters $flat_where GROUP BY 1 - ORDER BY 4 $desc NULLS LAST, 5 DESC NULLS LAST, 3 DESC + ORDER BY 4 $desc $nullpos, 5 DESC $nullpos, 3 DESC LIMIT $core_limit SQL -- 2.43.2