File: 21op_ident.t

package info (click to toggle)
libsql-abstract-perl 2.000001-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 744 kB
  • sloc: perl: 3,443; makefile: 8
file content (68 lines) | stat: -rw-r--r-- 1,723 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use strict;
use warnings;

use Test::More;
use Test::Exception;
use SQL::Abstract;
use SQL::Abstract::Test import => [qw/is_same_sql_bind/];


for my $q ('', '"') {
  my $sql_maker = SQL::Abstract->new(
    quote_char => $q,
    name_sep => $q ? '.' : '',
  );

  throws_ok {
    $sql_maker->where({ foo => { -ident => undef } })
  } qr/-ident requires a single plain scalar argument/;

  throws_ok {
    local $sql_maker->{disable_old_special_ops} = 1;
    $sql_maker->where({'-or' => [{'-ident' => 'foo'},'foo']})
  } qr/Illegal.*top-level/;

  throws_ok {
    local $sql_maker->{disable_old_special_ops} = 1;
    $sql_maker->where({'-or' => [{'-ident' => 'foo'},{'=' => \'bozz'}]})
  } qr/Illegal.*top-level/;

  my ($sql, @bind) = $sql_maker->select('artist', '*', { 'artist.name' => { -ident => 'artist.pseudonym' } } );
  is_same_sql_bind (
    $sql,
    \@bind,
    "SELECT *
      FROM ${q}artist${q}
      WHERE ${q}artist${q}.${q}name${q} = ${q}artist${q}.${q}pseudonym${q}
    ",
    [],
  );

  ($sql, @bind) = $sql_maker->update('artist',
    { 'artist.name' => { -ident => 'artist.pseudonym' } },
    { 'artist.name' => { '!=' => { -ident => 'artist.pseudonym' } } },
  );
  is_same_sql_bind (
    $sql,
    \@bind,
    "UPDATE ${q}artist${q}
      SET ${q}artist${q}.${q}name${q} = ${q}artist${q}.${q}pseudonym${q}
      WHERE ${q}artist${q}.${q}name${q} != ${q}artist${q}.${q}pseudonym${q}
    ",
    [],
  );

  ($sql) = $sql_maker->select(
    \(my $from = 'foo JOIN bar ON foo.bar_id = bar.id'),
    [ { -ident => [ 'foo', 'name' ] }, { -ident => [ 'bar', '*' ] } ]
  );

  is_same_sql_bind(
    $sql,
    undef,
    "SELECT ${q}foo${q}.${q}name${q}, ${q}bar${q}.*
     FROM $from"
  );
}

done_testing;