Massive rewrite of bind handling, and overall simplification of ::Storage::DBI
[dbsrgits/DBIx-Class.git] / t / sqlmaker / limit_dialects / rno.t
CommitLineData
a5f843e3 1use strict;
2use warnings;
3
4use Test::More;
5use lib qw(t/lib);
6use DBICTest;
7use DBIC::SqlMakerTest;
8
9my $schema = DBICTest->init_schema;
10
a5f843e3 11$schema->storage->_sql_maker->limit_dialect ('RowNumberOver');
12
41eac664 13my $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 20is_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
46my $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
53is_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 92done_testing;