[hibernate-commits] Hibernate SVN: r17869 - in core/trunk: core/src/main/java/org/hibernate/hql/ast and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Oct 28 12:54:00 EDT 2009


Author: steve.ebersole at jboss.com
Date: 2009-10-28 12:54:00 -0400 (Wed, 28 Oct 2009)
New Revision: 17869

Modified:
   core/trunk/core/src/main/java/org/hibernate/dialect/Dialect.java
   core/trunk/core/src/main/java/org/hibernate/dialect/Oracle8iDialect.java
   core/trunk/core/src/main/java/org/hibernate/dialect/Sybase11Dialect.java
   core/trunk/core/src/main/java/org/hibernate/dialect/TimesTenDialect.java
   core/trunk/core/src/main/java/org/hibernate/hql/ast/SqlGenerator.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/hql/HQLTest.java
Log:
HHH-1480 - JOIN precendence rules per SQL-99


Modified: core/trunk/core/src/main/java/org/hibernate/dialect/Dialect.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/dialect/Dialect.java	2009-10-28 16:05:29 UTC (rev 17868)
+++ core/trunk/core/src/main/java/org/hibernate/dialect/Dialect.java	2009-10-28 16:54:00 UTC (rev 17869)
@@ -1578,7 +1578,20 @@
 		return "";
 	}
 
+	/**
+	 * Get the separator to use for definining cross joins when translating HQL queries.
+	 * <p/>
+	 * Typically this will be either [<tt> cross join </tt>] or [<tt>, </tt>]
+	 * <p/>
+	 * Note that the spaces are important!
+	 *
+	 * @return
+	 */
+	public String getCrossJoinSeparator() {
+		return " cross join ";
+	}
 
+
 	// Informational metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 	/**

Modified: core/trunk/core/src/main/java/org/hibernate/dialect/Oracle8iDialect.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/dialect/Oracle8iDialect.java	2009-10-28 16:05:29 UTC (rev 17868)
+++ core/trunk/core/src/main/java/org/hibernate/dialect/Oracle8iDialect.java	2009-10-28 16:54:00 UTC (rev 17869)
@@ -211,6 +211,13 @@
 	}
 
 	/**
+	 * {@inheritDoc}
+	 */
+	public String getCrossJoinSeparator() {
+		return ", ";
+	}
+
+	/**
 	 * Map case support to the Oracle DECODE function.  Oracle did not
 	 * add support for CASE until 9i.
 	 *

Modified: core/trunk/core/src/main/java/org/hibernate/dialect/Sybase11Dialect.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/dialect/Sybase11Dialect.java	2009-10-28 16:05:29 UTC (rev 17868)
+++ core/trunk/core/src/main/java/org/hibernate/dialect/Sybase11Dialect.java	2009-10-28 16:54:00 UTC (rev 17869)
@@ -40,4 +40,7 @@
 		return new Sybase11JoinFragment();
 	}
 
+	public String getCrossJoinSeparator() {
+		return ", ";
+	}
 }

Modified: core/trunk/core/src/main/java/org/hibernate/dialect/TimesTenDialect.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/dialect/TimesTenDialect.java	2009-10-28 16:05:29 UTC (rev 17868)
+++ core/trunk/core/src/main/java/org/hibernate/dialect/TimesTenDialect.java	2009-10-28 16:54:00 UTC (rev 17869)
@@ -139,6 +139,10 @@
 		return new OracleJoinFragment();
 	}
 
+	public String getCrossJoinSeparator() {
+		return ", ";
+	}
+
 	// new methods in dialect3
 	/*public boolean supportsForUpdateNowait() {
 		return false;

Modified: core/trunk/core/src/main/java/org/hibernate/hql/ast/SqlGenerator.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/hql/ast/SqlGenerator.java	2009-10-28 16:05:29 UTC (rev 17868)
+++ core/trunk/core/src/main/java/org/hibernate/hql/ast/SqlGenerator.java	2009-10-28 16:54:00 UTC (rev 17869)
@@ -58,6 +58,8 @@
 public class SqlGenerator extends SqlGeneratorBase implements ErrorReporter {
 	private static final Logger log = LoggerFactory.getLogger( SqlGenerator.class );
 
+	public static boolean REGRESSION_STYLE_CROSS_JOINS = false;
+
 	/**
 	 * all append invocations on the buf should go through this Output instance variable.
 	 * The value of this variable may be temporarily substitued by sql function processing code
@@ -301,7 +303,7 @@
 			// right represents a joins originating from left; or
 			// both right and left reprersent joins originating from the same FromElement
 			if ( right.getJoinSequence() != null && right.getJoinSequence().isThetaStyle() ) {
-				out( ", " );
+				writeCrossJoinSeparator();
 			}
 			else {
 				out( " " );
@@ -309,8 +311,17 @@
 		}
 		else {
 			// these are just two unrelated table references
+			writeCrossJoinSeparator();
+		}
+	}
+
+	private void writeCrossJoinSeparator() {
+		if ( REGRESSION_STYLE_CROSS_JOINS ) {
 			out( ", " );
 		}
+		else {
+			out( sessionFactory.getDialect().getCrossJoinSeparator() );
+		}
 	}
 
 	protected void nestedFromFragment(AST d, AST parent) {

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/HQLTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/HQLTest.java	2009-10-28 16:05:29 UTC (rev 17868)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/HQLTest.java	2009-10-28 16:54:00 UTC (rev 17869)
@@ -34,6 +34,7 @@
 import org.hibernate.hql.ast.DetailedSemanticException;
 import org.hibernate.hql.ast.QuerySyntaxException;
 import org.hibernate.hql.ast.QueryTranslatorImpl;
+import org.hibernate.hql.ast.SqlGenerator;
 import org.hibernate.hql.ast.tree.ConstructorNode;
 import org.hibernate.hql.ast.tree.DotNode;
 import org.hibernate.hql.ast.tree.FromReferenceNode;
@@ -73,12 +74,14 @@
 				throw new QueryException( "illegal syntax near collection: " + propertyName );
 			}
 		};
+		SqlGenerator.REGRESSION_STYLE_CROSS_JOINS = true;
 	}
 
 	protected void cleanupTest() throws Exception {
 		SelectClause.VERSION2_SQL = false;
 		DotNode.REGRESSION_STYLE_JOIN_SUPPRESSION = false;
 		DotNode.ILLEGAL_COLL_DEREF_EXCP_BUILDER = DotNode.DEF_ILLEGAL_COLL_DEREF_EXCP_BUILDER;
+		SqlGenerator.REGRESSION_STYLE_CROSS_JOINS = false;
 		super.cleanupTest();
 	}
 



More information about the hibernate-commits mailing list