[interchange] New "rawsort" attribute, fixed sort attribute whitespace problem.

Peter Ajamian interchange-cvs at icdevgroup.org
Thu Dec 15 09:08:28 UTC 2011


commit a0cf98858c613303984fb3f20765cf520a45f5c4
Author: Peter Ajamian <peter at pajamian.dhs.org>
Date:   Thu Dec 15 22:01:37 2011 +1300

    New "rawsort" attribute, fixed sort attribute whitespace problem.
    
    New "rawsort" attribute allows you to pass a verbatim sort to the SQL database
    without any parsing by Interchange.  This allows you to do things like this:
    
    Options Simple sort CAST(o_sort AS int)
    Options Simple rawsort 1
    
    ...the above would sort option widgets based on teh o_sort attribute and force
    a numeric sort.  There are numerous other possibilities of how you might want
    to use this as well.
    
    The existing find_sort routine returned the "ORDER BY ..." without any leading
    whitespace, and was tacked onto the end of the sql query in Simple.pm without
    any trailing whitespace thus causing a syntax error in the generated SQL.  This
    is now fixed by adding a leading space onto the returned value of find_sort().

 lib/Vend/Options.pm |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
---
diff --git a/lib/Vend/Options.pm b/lib/Vend/Options.pm
index 827d99c..3d0d898 100644
--- a/lib/Vend/Options.pm
+++ b/lib/Vend/Options.pm
@@ -165,6 +165,7 @@ sub find_sort {
 #::logDebug("called find_sort from " . scalar(caller()) . ", opt=" . ::uneval($opt));
 	$opt->{sort} = defined $opt->{sort} ? $opt->{sort} : $loc->{sort};
 	return '' unless $opt->{sort};
+	return " ORDER BY $opt->{sort}" if $opt->{rawsort} || $loc->{rawsort};
 	my @fields = split /\s*,\s*/, $opt->{sort};
 	my $map = $loc->{map} ||= {};
 	for(@fields) {
@@ -182,7 +183,7 @@ sub find_sort {
 		$_ .= $extra if $extra;
 	}
 
-	return "ORDER BY " . join(",", @fields);
+	return " ORDER BY " . join(",", @fields);
 }
 
 sub tag_options {



More information about the interchange-cvs mailing list