[Rt-commit] rt branch, 4.4/columns-as-values-in-ticket-search, updated. rt-4.4.4-24-ge6f26b4610
? sunnavy
sunnavy at bestpractical.com
Mon Mar 15 15:40:12 EDT 2021
The branch, 4.4/columns-as-values-in-ticket-search has been updated
via e6f26b46100b539827f2c5e43ad0b427de413750 (commit)
via a8956daba22b7e09b8823e0479928fcdd0bfe79c (commit)
via b419da95308f1c09e0739b7800431b96a160d4ec (commit)
from 771ee67205471a8d68717684e5e87a16913271c8 (commit)
Summary of changes:
lib/RT/SQL.pm | 7 +++++++
lib/RT/Tickets.pm | 3 +++
t/api/tickets.t | 10 ++++++++++
3 files changed, 20 insertions(+)
- Log -----------------------------------------------------------------
commit b419da95308f1c09e0739b7800431b96a160d4ec
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Mar 16 02:02:08 2021 +0800
Support quoted custom fields as values
As custom fields with spaces need to be quoted at the field side, e.g.
'CF.{Last Detected}' > Due
It's natural to support quotes at the value side too, i.e.
Due < 'CF.{Last Detected}'
It's quite rare that people want to search raw strings like "CF.{Last
Detected}", so this change should be safe enough.
diff --git a/lib/RT/SQL.pm b/lib/RT/SQL.pm
index 3d81047dc9..9599375a06 100644
--- a/lib/RT/SQL.pm
+++ b/lib/RT/SQL.pm
@@ -180,6 +180,13 @@ sub Parse {
my $quote_value;
if ( $match =~ /$re_delim/o ) {
$quote_value = 1;
+
+ # It's really rare to search strings like "CF.foo", to DWIM,
+ # automatically convert to columns
+ if ( $value =~ /^CF\.(?:\{(.*)\}|(.*?))(?:\.(Content|LargeContent))?$/i ) {
+ RT->Logger->debug("Unquote value($match) to search custom field instead");
+ $quote_value = 0;
+ }
}
elsif ( $match =~ /^[a-z]/i ) {
# Value is a column
commit a8956daba22b7e09b8823e0479928fcdd0bfe79c
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Mar 16 02:26:23 2021 +0800
Test quoted custom fields as values
diff --git a/t/api/tickets.t b/t/api/tickets.t
index 2955bf2875..6ca845d222 100644
--- a/t/api/tickets.t
+++ b/t/api/tickets.t
@@ -199,6 +199,11 @@ ok( $unlimittickets->Count > 0, "UnLimited tickets object should return tickets"
$count = $tickets->Count();
is( $count, 1, 'Found 1 ticket' );
+ ( $ret, $msg ) = $tickets->FromSQL('CF.foo = "CF.{bar}"');
+ ok( $ret, 'Ran query with CF.foo = "CF.bar"' );
+ $count = $tickets->Count();
+ is( $count, 1, 'Found 1 ticket' );
+
( $ret, $msg ) = $tickets->FromSQL('CF.foo = Owner');
ok( $ret, 'Ran query with CF.foo = Owner' );
$count = $tickets->Count();
@@ -258,6 +263,11 @@ ok( $unlimittickets->Count > 0, "UnLimited tickets object should return tickets"
$count = $tickets->Count();
is( $count, 1, 'Found 1 ticket' );
+ ( $ret, $msg ) = $tickets->FromSQL('CF.{IPRange 1}.Content = "CF.{IPRange 2}.Content"');
+ ok( $ret, 'Ran query with CF.{IPRange 1}.Content = "CF.{IPRange 2}.Content"' );
+ $count = $tickets->Count();
+ is( $count, 1, 'Found 1 ticket' );
+
( $ret, $msg ) = $tickets->FromSQL('CF.{IPRange 1} = CF.{IPRange 2}');
ok( $ret, 'Ran query with CF.{IPRange 1} = CF.{IPRange 2}' );
$count = $tickets->Count();
commit e6f26b46100b539827f2c5e43ad0b427de413750
Author: sunnavy <sunnavy at bestpractical.com>
Date: Tue Mar 16 02:39:50 2021 +0800
Prefix "main." to main columns to avoid "ambiguous column name" error
This is to fix TicketSQL like:
CF.{Beta Date} < LastUpdated
As there are multiple tables that have LastUpdated column involved,
above SQL could cause errors like "ambiguous column name"
diff --git a/lib/RT/Tickets.pm b/lib/RT/Tickets.pm
index 4532c02b58..7bf0f2414a 100644
--- a/lib/RT/Tickets.pm
+++ b/lib/RT/Tickets.pm
@@ -3223,6 +3223,9 @@ sub _parser {
die $self->loc( "Wrong query, no such column '[_1]' in '[_2]'", $value, $string ) unless $valid;
+ # In case the column(e.g. LastUpdated) is defined in multiple tables
+ $value = "main.$value" if $class eq 'RT::Tickets' && $value =~ /^\w+$/;
+
if ( $class eq 'RT::ObjectCustomFieldValues' ) {
if ( RT->Config->Get('DatabaseType') eq 'Pg' ) {
my $cast_to;
-----------------------------------------------------------------------
More information about the rt-commit
mailing list