On Fri 25 May 2012 02:19:29 PM CDT, Ćukasz Antoniak wrote:
Hello Community,
Really quick question. There are quite few SQL syntax tricks similar to "row value
construct".
CREATE TABLE test ( a1 NUMBER, b1 NUMBER );
SELECT * FROM test WHERE (a1, b1) = ( 1, 1 ); -- Fails on Oracle
SELECT * FROM test WHERE (a1, b1) IN ( ( 1, 1 ), ( 2, 2 ) ); -- Passes on Oracle
SELECT * FROM test WHERE (a1, b1) = ( SELECT 1, 1 FROM dual ); -- Passes on Oracle
SELECT * FROM test WHERE (a1, b1) IN ( SELECT 1, 1 FROM dual ); -- Passes on Oracle
Oracle does not support "row value syntax" as shown in the first query
(Dialect#supportsRowValueConstructorSyntax() has to return
false).
Should I assume that second, third and fourth query ought to pass when
Dialect#supportsRowValueConstructorSyntaxInInList() returns
positive?
Why would the third query fall into
supportsRowValueConstructorSyntaxInInList?
Or shall I add another method to Dialect class like
supportsRowValueConstructorSyntaxInSelectList()?
I am not understanding the need for
supportsRowValueConstructorSyntaxInSelectList. What exactly is the
purpose of grouping the values together in a select list? And in fact
you are not even using tuple (row value constructor) syntax in any of
the selects.
Please advise. I
just do not want the Dialect class to grow and grow.
Nor do I :) The problem is all the variation in support for tuple
syntax in different scenarios across the different databases.
--
steve(a)hibernate.org
http://hibernate.org