Bug 21281: Correct t/db_dependent/Creators/Lib.t failures
authorMark Tompsett <mtompset@hotmail.com>
Wed, 5 Sep 2018 18:41:32 +0000 (18:41 +0000)
committerNick Clemens <nick@bywatersolutions.com>
Wed, 26 Sep 2018 15:22:56 +0000 (15:22 +0000)
TEST PLAN
---------
1) apply first patch
2) kshell kohadev
3) prove -r -v t/db_dependent/Creators/
   -- failures
4) apply this patch
5) repeat 2,3
   -- no failures
6) run koha qa test tools

Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

C4/Creators/Lib.pm
t/db_dependent/Creators/Lib.t

index 46ae21a..f5616a5 100644 (file)
@@ -67,7 +67,11 @@ C4::Creators::Lib
 
 sub _SELECT {
     my @params = @_;
-    my $query = "SELECT `$params[0]` FROM $params[1]";
+    my $fields_list = $params[0];
+    if (index($fields_list, ' ')==-1 && index($fields_list,',')==-1 && $fields_list ne '*') {
+        $fields_list = "`$fields_list`";
+    }
+    my $query = "SELECT $fields_list FROM $params[1]";
     $params[2] ? $query .= " WHERE $params[2];" : $query .= ';';
     my $sth = C4::Context->dbh->prepare($query);
 #    $sth->{'TraceLevel'} = 3;
@@ -145,16 +149,25 @@ my $output_formats = [
 sub _build_query {
     my ( $params, $table ) = @_;
     my @fields = exists $params->{fields} ? @{ $params->{fields} } : ();
-    my $query = "SELECT " . ( @fields ? join(', ', map {"`$_`"} @fields ) : '*' ) . " FROM $table";
+    my @fields2 = ();
+    foreach my $field_name (@fields) {
+        if (index($field_name,' ')==-1 && $field_name ne '*') {
+            push @fields2, "`$field_name`";
+        } else {
+            push @fields2, $field_name;
+        }
+    }
+    @fields = @fields2;
+    my $query = "SELECT " . ( @fields ? join(', ', @fields ) : '*' ) . " FROM $table";
     my @where_args;
     if ( exists $params->{filters} ) {
         $query .= ' WHERE 1 ';
         while ( my ( $field, $values ) = each %{ $params->{filters} } ) {
             if ( ref( $values ) ) {
-                $query .= " AND $field IN ( " . ( ('?,') x (@$values-1) ) . "? ) "; # a comma separates elements in a list...
+                $query .= " AND `$field` IN ( " . ( ('?,') x (@$values-1) ) . "? ) "; # a comma separates elements in a list...
                 push @where_args, @$values;
             } else {
-                $query .= " AND $field = ? ";
+                $query .= " AND `$field` = ? ";
                 push @where_args, $values;
             }
         }
index 7a981de..d180850 100644 (file)
@@ -398,7 +398,7 @@ is( $templates->[0]->{creator},          'Labels',     'creator          is good
 $templates = get_all_templates( { filters => { rows => [-42, 7]} } );
 is( @$templates, $count, 'There is 1 template matching' );
 # With orderby param ------------------
-$templates = get_all_templates( { orderby => 'rows DESC' } );
+$templates = get_all_templates( { orderby => '`rows` DESC' } );
 
 $query = '
   SELECT    count(*)