[hibernate-dev] Various "row value construct" alike syntax and Dialect class
Steve Ebersole
steve at hibernate.org
Tue May 29 10:48:24 EDT 2012
On Sun 27 May 2012 02:52:23 AM CDT, Łukasz Antoniak wrote:
> The initial question here is how to distinguish dialects that support
> statements like:
> update ParentEntity_AUD set REVEND=? where (id, REV) IN (select id,
> REV from HT_ChildEntity_AUD)
Ok. And this form comes about because of the multi-table HQL splitting
to use temp tables right?
As an alternative suggestion, why don't we just have envers directly
perform an SQL UPDATE? Its really just the ParentEntity_AUD table you
want to update right? And this is really just to lock the table right?
> > 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.
> I can see that people name this type of SQL queries ("where (a1, b1)
> IN (select c1, d1 from another_table)") as row value constructor, for
> example here:
> http://connect.microsoft.com/SQLServer/feedback/details/299231/add-support-for-ansi-standard-row-value-constructors.
> Maybe the name "supportsRowValueConstructorSyntaxInSubquery" would be
> more accurate.
Ok, then the issue is naming. See the issue is not the subquery. The
subquery does not even have a row value constructor; "select c1, d1" is
just a simple select list. The problem is that the dialect does not
support the use of a subquery as the predicate of a logical expression
where the other predicate is a tuple. Basically they are doing too
simplistic of type checking on the 2 predicates. So maybe
supportsRowValueConstructorPredicateAndSubqueryPredicateInLogicalExpression().
I assume it is the same problem with all forms of logical expressions
(=, !=, >, etc), not just IN? Could you verify that?
We might want to consider consolidating these together as well into a
composite class that reports the dialects level of tuple support. That
unfortunately would have to wait for the next major rev.
>
> > Why would the third query fall into
> > supportsRowValueConstructorSyntaxInInList?
> Taken into consideration the grow of Dialect class and based on the
> table posted here:
> http://lists.jboss.org/pipermail/hibernate-dev/2012-May/008511.html.
My point is just that the third query does not involve an IN
expression. So why would it fall under
supportsRowValueConstructorSyntax*InInList*?
--
steve at hibernate.org
http://hibernate.org
More information about the hibernate-dev
mailing list