Skip to content

Commit 72197b1

Browse files
committed
prefix AS only for column aliases
1 parent 99361bc commit 72197b1

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

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: 9 additions & 5 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

@@ -186,7 +190,7 @@ FROM blog,
186190
SELECT entry.id, entry.blog_id, entry.text
187191
FROM entry
188192
WHERE (entry.text = ?)
189-
) AS sub
193+
) sub
190194
WHERE ((blog.id = sub.blog_id)) AND ((blog.id IN (?,?)))
191195
EOF
192196

@@ -224,7 +228,7 @@ FROM blog,
224228
SELECT entry.id, entry.blog_id
225229
FROM entry
226230
WHERE (entry.text = ?)
227-
) AS sub
231+
) sub
228232
WHERE ((blog.id = sub.blog_id)) AND ((blog.id IN (?,?)))
229233
EOF
230234

@@ -353,7 +357,7 @@ SELECT
353357
(SELECT max(id) FROM entry WHERE (entry.blog_id = blog.id) AND (entry.id < ?)) AS sub1
354358
FROM
355359
blog,
356-
(SELECT entry.id FROM entry WHERE (entry.text = ?)) AS sub2
360+
(SELECT entry.id FROM entry WHERE (entry.text = ?)) sub2
357361
WHERE
358362
(blog.id IN (SELECT entry.blog_id FROM entry WHERE (entry.text = ?)))
359363
ORDER BY blog.id ASC, sub1 ASC

0 commit comments

Comments
 (0)