View | Details | Raw Unified | Return to bug 21281
Collapse All | Expand All

(-)a/C4/Creators/Lib.pm (-16 / +17 lines)
Lines 67-77 C4::Creators::Lib Link Here
67
67
68
sub _SELECT {
68
sub _SELECT {
69
    my @params = @_;
69
    my @params = @_;
70
    my $fields_list = $params[0];
70
    my $fieldname = _add_backtics($params[0]);
71
    if (index($fields_list, ' ')==-1 && index($fields_list,',')==-1 && $fields_list ne '*') {
71
    my $query = "SELECT $fieldname FROM $params[1]";
72
        $fields_list = "`$fields_list`";
73
    }
74
    my $query = "SELECT $fields_list FROM $params[1]";
75
    $params[2] ? $query .= " WHERE $params[2];" : $query .= ';';
72
    $params[2] ? $query .= " WHERE $params[2];" : $query .= ';';
76
    my $sth = C4::Context->dbh->prepare($query);
73
    my $sth = C4::Context->dbh->prepare($query);
77
#    $sth->{'TraceLevel'} = 3;
74
#    $sth->{'TraceLevel'} = 3;
Lines 87-92 sub _SELECT { Link Here
87
    return $record_set;
84
    return $record_set;
88
}
85
}
89
86
87
sub _add_backtics {
88
    my ( @args ) = @_;
89
    s/(?:^|\b)(\w+)(?:\b|$)/`$1`/g for @args;
90
    # Too bad that we need to correct a few exceptions: aggregate functions
91
    my @aggregates = ( 'COUNT', 'MAX', 'MIN', 'SUM' ); # add when needed..
92
    foreach my $aggr (@aggregates) {
93
        s/`$aggr`\(/$aggr\(/gi for @args;
94
    }
95
    # And correct aliases
96
    s/(`|\))\s+`AS`\s+`/$1 AS `/gi for @args;
97
    return wantarray ? @args : $args[0];
98
}
99
90
my $barcode_types = [
100
my $barcode_types = [
91
    {type => 'CODE39',          name => 'Code 39',              desc => 'Translates the characters 0-9, A-Z, \'-\', \'*\', \'+\', \'$\', \'%\', \'/\', \'.\' and \' \' to a barcode pattern.',                                  selected => 0},
101
    {type => 'CODE39',          name => 'Code 39',              desc => 'Translates the characters 0-9, A-Z, \'-\', \'*\', \'+\', \'$\', \'%\', \'/\', \'.\' and \' \' to a barcode pattern.',                                  selected => 0},
92
    {type => 'CODE39MOD',       name => 'Code 39 + Modulo43',   desc => 'Translates the characters 0-9, A-Z, \'-\', \'*\', \'+\', \'$\', \'%\', \'/\', \'.\' and \' \' to a barcode pattern. Encodes Mod 43 checksum.',         selected => 0},
102
    {type => 'CODE39MOD',       name => 'Code 39 + Modulo43',   desc => 'Translates the characters 0-9, A-Z, \'-\', \'*\', \'+\', \'$\', \'%\', \'/\', \'.\' and \' \' to a barcode pattern. Encodes Mod 43 checksum.',         selected => 0},
Lines 148-164 my $output_formats = [ Link Here
148
158
149
sub _build_query {
159
sub _build_query {
150
    my ( $params, $table ) = @_;
160
    my ( $params, $table ) = @_;
151
    my @fields = exists $params->{fields} ? @{ $params->{fields} } : ();
161
    my @fields = exists $params->{fields} ? _add_backtics( @{ $params->{fields} } ) : ('*');
152
    my @fields2 = ();
162
    my $query = "SELECT " . join(', ', @fields ) . " FROM $table";
153
    foreach my $field_name (@fields) {
154
        if (index($field_name,' ')==-1 && $field_name ne '*') {
155
            push @fields2, "`$field_name`";
156
        } else {
157
            push @fields2, $field_name;
158
        }
159
    }
160
    @fields = @fields2;
161
    my $query = "SELECT " . ( @fields ? join(', ', @fields ) : '*' ) . " FROM $table";
162
    my @where_args;
163
    my @where_args;
163
    if ( exists $params->{filters} ) {
164
    if ( exists $params->{filters} ) {
164
        $query .= ' WHERE 1 ';
165
        $query .= ' WHERE 1 ';
(-)a/t/db_dependent/Creators/Lib.t (-2 / +11 lines)
Lines 18-24 Link Here
18
18
19
use Modern::Perl;
19
use Modern::Perl;
20
use Graphics::Magick;
20
use Graphics::Magick;
21
use Test::More tests => 645;
21
use Test::More tests => 646;
22
use Test::MockModule;
22
use Test::MockModule;
23
use t::lib::Mocks;
23
use t::lib::Mocks;
24
use t::lib::TestBuilder;
24
use t::lib::TestBuilder;
Lines 1437-1442 is( $records->[0]->{cardnumber}, $cardnumber1, 'cardnumber is good' ); Link Here
1437
is( $records->[0]->{branchcode},   $branchcode,   'branchcode   is good' );
1437
is( $records->[0]->{branchcode},   $branchcode,   'branchcode   is good' );
1438
is( $records->[0]->{categorycode}, $categorycode, 'categorycode is good' );
1438
is( $records->[0]->{categorycode}, $categorycode, 'categorycode is good' );
1439
1439
1440
subtest '_add_backtics' => sub {
1441
    plan tests => 7;
1442
    my @a = ( 'rows', 'rows ', ' rows ', 'table.rows,field2', 'table.field1, table.field_2_a', 'table1.*, *', 'COUNT(id) AS mycount, count(*) as mycount2' );
1443
    my @a_exp = ( '`rows`', '`rows` ', ' `rows` ', '`table`.`rows`,`field2`', '`table`.`field1`, `table`.`field_2_a`', '`table1`.*, *', 'COUNT(`id`) AS `mycount`, COUNT(*) AS `mycount2`' ); # expected results
1444
    my @b = C4::Creators::Lib::_add_backtics(@a);
1445
    while( my $f = shift @a_exp ) {
1446
        is( shift @b, $f, (shift @a). ' became '. $f );
1447
    }
1448
};
1449
1440
# ---------- Sub ------------------------------------------
1450
# ---------- Sub ------------------------------------------
1441
my %preferences;
1451
my %preferences;
1442
1452
1443
- 

Return to bug 21281