db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mamta A. Satoor (JIRA)" <j...@apache.org>
Subject [jira] Commented: (DERBY-2374) UNION PROBLEM WITH PARENTHESIS
Date Tue, 27 Oct 2009 05:58:00 GMT

    [ https://issues.apache.org/jira/browse/DERBY-2374?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12770400#action_12770400
] 

Mamta A. Satoor commented on DERBY-2374:
----------------------------------------

I am looking at this more, but the root of the problem might be the following piece of code
in sqlgrammar.jj in FromTable tableFactor() throws StandardException method

|
	// There is a grammar ambiguity with nested parentheses here.
	// A series of left parentheses could introduce either a table
	// reference or a derived table.  For example:
	//
	//		(((select c from t) a inner join (select d from s) b ))
	//
	// and:
	//
	//		(((select c from t) a)))
	//
	// To distinguish these two cases, we consider anything that starts
	// with a single parenthesis and either SELECT or VALUES to be
	// a derived table, and anything else to be a table reference.
	// Note that we can't use the subqueryFollows() lookahead method,
	// because it skips over all leading left parentheses to decide
	// whether a subquery follows.
	LOOKAHEAD( {
				getToken(1).kind == LEFT_PAREN &&
				(
					getToken(2).kind == SELECT ||
					getToken(2).kind == VALUES
				)
			} )

I will debug more but it looks like we are not differentiating correctly the first select
inside the parenthese to mean <left paren> <query expression body> <right paren>
select c1 from ((select t1.c1 from t1) union (select t2.c1 from t2)) t1t2;


> UNION PROBLEM WITH PARENTHESIS
> ------------------------------
>
>                 Key: DERBY-2374
>                 URL: https://issues.apache.org/jira/browse/DERBY-2374
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.1.3.3, 10.2.2.0, 10.3.3.1, 10.4.2.1, 10.5.3.1, 10.6.0.0
>            Reporter: Kenneth Gee
>            Priority: Minor
>
> The following query shows the error using the Derby demo toursDB:
> SELECT FLIGHT_ID , SEGMENT_NUMBER , ARRIVE_TIME
>   FROM (
>          (SELECT HW.FLIGHT_ID , HW.SEGMENT_NUMBER , HW.ARRIVE_TIME FROM FLIGHTS HW)
>            UNION
>          (SELECT SW.FLIGHT_ID , SW.SEGMENT_NUMBER , SW.ARRIVE_TIME FROM FLIGHTS SW)
>        ) SRC;
> ERROR 42X01: Syntax error: Encountered "UNION" at line 4, column 12.
> The following query works:
> SELECT FLIGHT_ID , SEGMENT_NUMBER , ARRIVE_TIME
>   FROM (
>          SELECT HW.FLIGHT_ID , HW.SEGMENT_NUMBER , HW.ARRIVE_TIME FROM FLIGHTS HW
>           UNION
>          SELECT SW.FLIGHT_ID , SW.SEGMENT_NUMBER , SW.ARRIVE_TIME FROM FLIGHTS SW
>        )  SRC;

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message