db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kahat...@apache.org
Subject svn commit: r812387 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/sql/compile/ testing/org/apache/derbyTesting/functionTests/master/
Date Tue, 08 Sep 2009 08:34:40 GMT
Author: kahatlen
Date: Tue Sep  8 08:34:40 2009
New Revision: 812387

URL: http://svn.apache.org/viewvc?rev=812387&view=rev
Log:
DERBY-4369: Give a more useful error message when join specification is missing

Made the join specification optional in the grammar. This makes the
parser go further before failing because of a missing ON clause, and
existing code that emits a more useful error message can be reached.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/db2Compatibility.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/innerjoin.out
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/outerjoin.out

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj?rev=812387&r1=812386&r2=812387&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj Tue Sep
 8 08:34:40 2009
@@ -9202,19 +9202,12 @@
 	TableOperatorNode	ton = null;
 	Object[]			onOrUsingClause = null;
 	ResultColumnList	usingClause = null;
-	ValueNode			onClause;
+	ValueNode			onClause = null;
 }
 {
-	/* RESOLVE - If we ever support NATURAL JOIN then we will need to break up
-	 * this rule.  Right now the joinSpecification() is non-optional.  This
-	 * allows us to build the Join tree from left to right. With NATURAL JOINS
-	 * there is no joinSpecification() and we would want to build the tree from
-	 * right to left.
-	 */
-	//[ <NATURAL> ] 
 		[ joinType = joinType() ] <JOIN>
 		rightRSN = tableReferenceTypes(nestedInParens) 
-		onOrUsingClause = joinSpecification(leftRSN, rightRSN)
+		[ onOrUsingClause = joinSpecification(leftRSN, rightRSN) ]
 	{
 		/* If NATURAL OR UNION is specified, then no joinSpecification()
 		 * is required, otherwise it is required.
@@ -9226,8 +9219,11 @@
 		 */
 
 		/* Figure out whether an ON or USING clause was used */
-		onClause = (ValueNode) onOrUsingClause[ON_CLAUSE];
-		usingClause = (ResultColumnList) onOrUsingClause[USING_CLAUSE];
+		if (onOrUsingClause != null)
+		{
+			onClause = (ValueNode) onOrUsingClause[ON_CLAUSE];
+			usingClause = (ResultColumnList) onOrUsingClause[USING_CLAUSE];
+		}
 
 		if (onClause == null && usingClause == null)
 		{

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/db2Compatibility.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/db2Compatibility.out?rev=812387&r1=812386&r2=812387&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/db2Compatibility.out
(original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/db2Compatibility.out
Tue Sep  8 08:34:40 2009
@@ -1192,28 +1192,16 @@
 ij> -- CROSS JOIN not supported in both Cloudscape and DB2 mode and that is why rather
than getting feature not implemented, we will get syntax error
 -- (1) CROSS JOIN should be disabled in FROM clause of SELECT statement
 SELECT * FROM t1 CROSS JOIN t2;
-ERROR 42X01: Syntax error: Encountered "<EOF>" at line 3, column 30.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'INNER JOIN' clause.
 ij> -- (2) USING should be disabled in INNER JOIN of SELECT statement
 SELECT * FROM t1 INNER JOIN t2 USING (col1);
-ERROR 42X01: Syntax error: Encountered "USING" at line 2, column 32.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'INNER JOIN' clause.
 ij> -- (3) USING should be disabled in INNER JOIN of SELECT statement
 SELECT * FROM t1 LEFT OUTER JOIN t2 USING (col1);
-ERROR 42X01: Syntax error: Encountered "USING" at line 2, column 37.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'LEFT OUTER JOIN' clause.
 ij> -- (4) USING should be disabled in INNER JOIN of SELECT statement
 SELECT * FROM t1 RIGHT OUTER JOIN t2 USING (col1);
-ERROR 42X01: Syntax error: Encountered "USING" at line 2, column 38.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'RIGHT OUTER JOIN' clause.
 ij> -- (5) TRUE and FALSE constants should be disabled in WHERE clause of SELECT statement
 SELECT * FROM t1 INNER JOIN t2 ON t1.col1 = t2.col1 WHERE true;
 ERROR 42X01: Syntax error: true.

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/innerjoin.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/innerjoin.out?rev=812387&r1=812386&r2=812387&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/innerjoin.out
(original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/innerjoin.out
Tue Sep  8 08:34:40 2009
@@ -40,21 +40,12 @@
 
 -- no join clause
 select * from t1 join t2;
-ERROR 42X01: Syntax error: Encountered "<EOF>" at line 4, column 24.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'INNER JOIN' clause.
 ij> select * from t1 inner join t2;
-ERROR 42X01: Syntax error: Encountered "<EOF>" at line 1, column 30.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'INNER JOIN' clause.
 ij> -- empty column list
 select * from t1 join t2 using ();
-ERROR 42X01: Syntax error: Encountered "using" at line 2, column 26.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'INNER JOIN' clause.
 ij> -- non-boolean join clause
 select * from t1 join t2 on 1;
 ERROR 42Y12: The ON clause of a JOIN is a 'INTEGER' expression.  It must be a BOOLEAN expression.

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/outerjoin.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/outerjoin.out?rev=812387&r1=812386&r2=812387&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/outerjoin.out
(original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/outerjoin.out
Tue Sep  8 08:34:40 2009
@@ -62,15 +62,9 @@
 Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
 ij> -- no join clause
 select * from t1 left outer join t2;
-ERROR 42X01: Syntax error: Encountered "<EOF>" at line 2, column 35.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'LEFT OUTER JOIN' clause.
 ij> select * from t1 right outer join t2;
-ERROR 42X01: Syntax error: Encountered "<EOF>" at line 1, column 36.
-Issue the 'help' command for general information on IJ command syntax.
-Any unrecognized commands are treated as potential SQL commands and executed directly.
-Consult your DBMS server reference documentation for details of the SQL syntax supported
by your server.
+ERROR 42Y11: A join specification is required with the 'RIGHT OUTER JOIN' clause.
 ij> -- positive tests
 select t1.c1 from t1 left outer join t2 on t1.c1 = t2.c1;
 C1         



Mime
View raw message