Commit | Line | Data |
a5f843e3 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | use lib qw(t/lib); |
6 | use DBICTest; |
7 | use DBIC::SqlMakerTest; |
8 | |
9 | my $schema = DBICTest->init_schema; |
10 | |
a5f843e3 |
11 | $schema->storage->_sql_maker->limit_dialect ('RowNumberOver'); |
12 | |
41eac664 |
13 | my $rs_selectas_col = $schema->resultset ('BooksInLibrary')->search ({}, { |
14 | '+select' => ['owner.name'], |
15 | '+as' => ['owner.name'], |
16 | join => 'owner', |
17 | rows => 1, |
18 | }); |
a5f843e3 |
19 | |
41eac664 |
20 | is_same_sql_bind( |
21 | $rs_selectas_col->as_query, |
22 | '( |
760545fa |
23 | SELECT id, source, owner, title, price, |
24 | owner__name |
41eac664 |
25 | FROM ( |
760545fa |
26 | SELECT id, source, owner, title, price, |
27 | owner__name, |
41eac664 |
28 | ROW_NUMBER() OVER( ) AS rno__row__index |
29 | FROM ( |
30 | SELECT me.id, me.source, me.owner, me.title, me.price, |
760545fa |
31 | owner.name AS owner__name |
41eac664 |
32 | FROM books me |
33 | JOIN owners owner ON owner.id = me.owner |
34 | WHERE ( source = ? ) |
35 | ) me |
36 | ) me |
41eac664 |
37 | WHERE rno__row__index BETWEEN 1 AND 1 |
38 | )', |
0e773352 |
39 | [ [ { sqlt_datatype => 'varchar', sqlt_size => 100, dbic_colname => 'source' } |
40 | => 'Library' ] ], |
41eac664 |
41 | ); |
42 | |
760545fa |
43 | $schema->storage->_sql_maker->quote_char ([qw/ [ ] /]); |
44 | $schema->storage->_sql_maker->name_sep ('.'); |
41eac664 |
45 | |
46 | my $rs_selectas_rel = $schema->resultset ('BooksInLibrary')->search ({}, { |
47 | '+select' => ['owner.name'], |
48 | '+as' => ['owner_name'], |
49 | join => 'owner', |
760545fa |
50 | rows => 1, |
41eac664 |
51 | }); |
52 | |
53 | is_same_sql_bind( |
54 | $rs_selectas_rel->as_query, |
55 | '( |
760545fa |
56 | SELECT [id], [source], [owner], [title], [price], |
57 | [owner_name] |
41eac664 |
58 | FROM ( |
760545fa |
59 | SELECT [id], [source], [owner], [title], [price], |
60 | [owner_name], |
61 | ROW_NUMBER() OVER( ) AS [rno__row__index] |
41eac664 |
62 | FROM ( |
760545fa |
63 | SELECT [me].[id], [me].[source], [me].[owner], [me].[title], [me].[price], |
64 | [owner].[name] AS [owner_name] |
65 | FROM [books] [me] |
66 | JOIN [owners] [owner] ON [owner].[id] = [me].[owner] |
67 | WHERE ( [source] = ? ) |
68 | ) [me] |
69 | ) [me] |
70 | WHERE [rno__row__index] BETWEEN 1 AND 1 |
41eac664 |
71 | )', |
0e773352 |
72 | [ [ { sqlt_datatype => 'varchar', sqlt_size => 100, dbic_colname => 'source' } |
73 | => 'Library' ] ], |
41eac664 |
74 | ); |
a5f843e3 |
75 | |
d7632687 |
76 | { |
77 | my $rs = $schema->resultset('Artist')->search({}, { |
78 | columns => 'name', |
79 | offset => 1, |
80 | order_by => 'name', |
81 | }); |
82 | local $rs->result_source->{name} = "weird \n newline/multi \t \t space containing \n table"; |
83 | |
84 | like ( |
85 | ${$rs->as_query}->[0], |
86 | qr| weird \s \n \s newline/multi \s \t \s \t \s space \s containing \s \n \s table|x, |
87 | 'Newlines/spaces preserved in final sql', |
88 | ); |
89 | } |
90 | |
91 | |
a5f843e3 |
92 | done_testing; |