Skip to content

Commit 9ecd7ac

Browse files
committed
prefix AS only for column aliases MTC-30899
1 parent d45ec4e commit 9ecd7ac

2 files changed

Lines changed: 16 additions & 11 deletions

File tree

lib/Data/ObjectDriver/SQL.pm

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ sub as_sql {
7979
if (blessed($col) && $col->isa('Data::ObjectDriver::SQL')) {
8080
push @bind_for_select, @{ $col->{bind} };
8181
@{ $col->{bind} } = ();
82-
$col->as_subquery($alias);
82+
$col->as_subquery(1, $alias);
8383
} else {
8484
if ($alias) {
8585
/(?:^|\.)\Q$alias\E$/ ? $col : "$col $alias";
@@ -120,7 +120,7 @@ sub as_sql {
120120
if (blessed($from) && $from->isa('Data::ObjectDriver::SQL')) {
121121
push @bind_for_from, @{$from->{bind}};
122122
@{$from->{bind}} = ();
123-
$from->as_subquery;
123+
$from->as_subquery(0);
124124
} else {
125125
$stmt->_add_index_hint($from);
126126
}
@@ -146,11 +146,12 @@ sub as_sql {
146146
}
147147

148148
sub as_subquery {
149-
my ($stmt, $alias) = @_;
149+
my ($stmt, $use_as, $alias) = @_;
150150
my $subquery = '(' . $stmt->as_sql . ')';
151151
$alias ||= $stmt->as;
152152
if ($alias) {
153-
$subquery .= ' AS ' . $alias;
153+
$subquery .= ' AS' if $use_as;
154+
$subquery .= ' '. $alias;
154155
}
155156
$subquery;
156157
}
@@ -335,7 +336,7 @@ sub _mk_term {
335336
$term = "$c $val->{op} " . $$value;
336337
} elsif (blessed($value) && $value->isa('Data::ObjectDriver::SQL')) {
337338
local $value->{as} = undef;
338-
$term = "$c $val->{op} ". $value->as_subquery;
339+
$term = "$c $val->{op} ". $value->as_subquery(0);
339340
push @bind, @{$value->{bind}};
340341
} else {
341342
$term = "$c $val->{op} ?";

t/11-sql-with-models.t

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,19 @@ $entry22->save;
3939
subtest 'as_subquery' => sub {
4040
my $stmt = Blog->driver->prepare_statement('Blog', { NAME => 'foo' }, { fetchonly => ['ID'] });
4141

42-
is(sql_normalize($stmt->as_subquery), sql_normalize(<<'EOF'), 'right sql');
42+
is(sql_normalize($stmt->as_subquery(1)), sql_normalize(<<'EOF'), 'right sql');
4343
(SELECT BLOG.ID FROM BLOG WHERE (BLOG.NAME = ?))
4444
EOF
4545
is_deeply($stmt->{bind}, ['foo'], 'right bind values');
4646

4747
$stmt->as('mysubquery');
4848

49-
is(sql_normalize($stmt->as_subquery), sql_normalize(<<'EOF'), 'right sql');
49+
is(sql_normalize($stmt->as_subquery(1)), sql_normalize(<<'EOF'), 'right sql');
5050
(SELECT BLOG.ID FROM BLOG WHERE (BLOG.NAME = ?)) AS mysubquery
51+
EOF
52+
53+
is(sql_normalize($stmt->as_subquery(0)), sql_normalize(<<'EOF'), 'right sql');
54+
(SELECT BLOG.ID FROM BLOG WHERE (BLOG.NAME = ?)) mysubquery
5155
EOF
5256
};
5357

@@ -194,8 +198,8 @@ FROM BLOG,
194198
SELECT ENTRY.ID, ENTRY.BLOG_ID, ENTRY.TEXT
195199
FROM ENTRY
196200
WHERE (ENTRY.TEXT = ?)
197-
) AS SUB
198-
WHERE ((BLOG.ID = sub.BLOG_ID)) AND ((BLOG.ID IN (?,?)))
201+
) SUB
202+
WHERE ((BLOG.ID = SUB.BLOG_ID)) AND ((BLOG.ID IN (?,?)))
199203
EOF
200204

201205
is sql_normalize($stmt->as_sql), sql_normalize($expected), 'right sql';
@@ -232,7 +236,7 @@ FROM BLOG,
232236
SELECT ENTRY.ID, ENTRY.BLOG_ID
233237
FROM ENTRY
234238
WHERE (ENTRY.TEXT = ?)
235-
) AS SUB
239+
) SUB
236240
WHERE ((BLOG.ID = SUB.BLOG_ID)) AND ((BLOG.ID IN (?,?)))
237241
EOF
238242

@@ -371,7 +375,7 @@ SELECT
371375
(SELECT max(ID) FROM ENTRY WHERE (ENTRY.BLOG_ID = BLOG.ID) AND (ENTRY.ID < ?)) AS SUB1
372376
FROM
373377
BLOG,
374-
(SELECT ENTRY.ID FROM ENTRY WHERE (ENTRY.TEXT = ?)) AS SUB2
378+
(SELECT ENTRY.ID FROM ENTRY WHERE (ENTRY.TEXT = ?)) SUB2
375379
WHERE
376380
(BLOG.ID IN (SELECT ENTRY.BLOG_ID FROM ENTRY WHERE (ENTRY.TEXT = ?)))
377381
ORDER BY BLOG.ID ASC, SUB1 ASC

0 commit comments

Comments
 (0)