[Dbix-class] Cross product joins
Gavin Carr
gavin at openfusion.com.au
Sun Jan 11 11:24:43 GMT 2009
On Sun, Jan 11, 2009 at 09:47:17PM +1100, Gavin Carr wrote:
> generates a hanging ON clause:
>
> ERROR: syntax error at or near "WHERE" at character 239 [for Statement
> "SELECT [...] FROM store s JOIN postcode p ON WHERE ( p.postcode = ? )"
> with ParamValues: 1='12345']
Digging further, the following patch to DBIx::Class::Storage::DBI
seems to fix the hanging ON issue:
--- Storage/DBI.pm.dist 2009-01-11 21:31:53.000000000 +1100
+++ Storage/DBI.pm 2009-01-11 21:48:51.000000000 +1100
@@ -227,7 +227,9 @@
} else {
push(@sqlf, $self->_make_as($to));
}
- push(@sqlf, ' ON ', $self->_join_condition($on));
+ if (my $join_condition = $self->_join_condition($on)) {
+ push(@sqlf, ' ON ', $join_condition);
+ }
}
return join('', @sqlf);
}
and cross joins are now working with that explicit 'from' I
posted, which is great.
We should perhaps add the 'cross' -join_type to the 'from'
pod in DBIx::Class::ResultSet, if the list there is supposed to
be definitive (?):
--- ResultSet.pm.dist 2009-01-11 22:24:05.000000000 +1100
+++ ResultSet.pm 2009-01-11 22:24:34.000000000 +1100
@@ -2519,7 +2519,7 @@
[
{ <alias1> => <table1> },
[
- { <alias2> => <table2>, -join_type => 'inner|left|right' },
+ { <alias2> => <table2>, -join_type => 'inner|left|right|cross' },
[], # nested JOIN (optional)
{ <table1.column1> => <table2.column2>, ... (more conditions) },
],
Cheers,
Gavin
More information about the DBIx-Class
mailing list