You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2013/12/05 14:17:54 UTC

svn commit: r1548128 - in /db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile: TableName.java sqlgrammar.jj

Author: kahatlen
Date: Thu Dec  5 13:17:54 2013
New Revision: 1548128

URL: http://svn.apache.org/r1548128
Log:
DERBY-6362: CHECK constraint uses wrong schema for unqualified routine invocations

Part 2: Fix offset of qualified table names. Their begin offset
pointed to the beginning of the table name token, but should point to
the beginning of the schema name token if they have one.

Also leave begin and end offset unspecified (-1 implied) for some
synthetic table name nodes that previously set the offsets to 0
explicitly. This makes it easier to tell whether they are synthetic
later.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableName.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableName.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableName.java?rev=1548128&r1=1548127&r2=1548128&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableName.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TableName.java Thu Dec  5 13:17:54 2013
@@ -81,10 +81,7 @@ public class TableName extends QueryTree
         int tokEndOffset,
         ContextManager cm)
 	{
-        super(cm);
-        hasSchema = schemaName != null;
-        this.schemaName = schemaName;
-        this.tableName = tableName;
+        this(schemaName, tableName, cm);
         this.setBeginOffset(tokBeginOffset);
         this.setEndOffset(tokEndOffset);
 	}

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=1548128&r1=1548127&r2=1548128&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 Thu Dec  5 13:17:54 2013
@@ -179,6 +179,7 @@ public class SQLParser
 	*/	
 	private Token	lastIdentifierToken;
 	private Token	nextToLastIdentifierToken;
+    private Token   thirdToLastIdentifierToken;
 
 	static final String SINGLEQUOTES = "\'\'";
 	static final String DOUBLEQUOTES = "\"\"";
@@ -4902,6 +4903,7 @@ qualifiedName(int id_length_limit) throw
 	String	qualifiedId;
 	String	firstName = null;
 	String	secondName = null;
+    Token firstNameToken = null;
 }
 {
 	firstName = identifier(Limits.MAX_IDENTIFIER_LENGTH, false)
@@ -4918,11 +4920,13 @@ qualifiedName(int id_length_limit) throw
 		if (secondName == null)
 		{
 			qualifiedId = firstName;
+            firstNameToken = lastIdentifierToken;
 		}
 		else
 		{
 			schemaName = firstName;
 			qualifiedId = secondName;
+            firstNameToken = nextToLastIdentifierToken;
 		}
 
 		//limit the qualifiedId to the id length limit passed to this method
@@ -4933,7 +4937,7 @@ qualifiedName(int id_length_limit) throw
         return new TableName(
             schemaName,
             qualifiedId,
-            lastIdentifierToken.beginOffset,
+            firstNameToken.beginOffset,
             lastIdentifierToken.endOffset,
             getContextManager());
 	}
@@ -6257,8 +6261,6 @@ escapedSYSFUNFunction() throws StandardE
         TableName functionName = new TableName(
                                 SchemaDescriptor.IBM_SYSTEM_FUN_SCHEMA_NAME,
 								sysFunName,
-                                Integer.valueOf(0),
-                                Integer.valueOf(0),
 								getContextManager());
 	   
         MethodCallNode methodNode = new StaticMethodCallNode(
@@ -7980,8 +7982,10 @@ columnNameForInvocation() throws Standar
             tabName = new TableName(
                     schemaName,
                     tableName,
-                    Integer.valueOf(nextToLastIdentifierToken.beginOffset),
-                    Integer.valueOf(nextToLastIdentifierToken.endOffset),
+                    (thirdName == null
+                         ? nextToLastIdentifierToken
+                         : thirdToLastIdentifierToken).beginOffset,
+                    nextToLastIdentifierToken.endOffset,
                     getContextManager());
 		}
 
@@ -8068,8 +8072,10 @@ columnReference() throws StandardExcepti
             tabName = new TableName(
                 schemaName,
                 tableName,
-                Integer.valueOf(nextToLastIdentifierToken.beginOffset),
-                Integer.valueOf(nextToLastIdentifierToken.endOffset),
+                (thirdName == null
+                     ? nextToLastIdentifierToken
+                     : thirdToLastIdentifierToken).beginOffset,
+                nextToLastIdentifierToken.endOffset,
                 getContextManager());
 		}
 
@@ -14374,6 +14380,7 @@ internalIdentifier( int id_length_limit,
 		// Remember whether last token was a delimited identifier
 		nextToLastTokenDelimitedIdentifier = lastTokenDelimitedIdentifier;
         lastTokenDelimitedIdentifier = false;
+        thirdToLastIdentifierToken = nextToLastIdentifierToken;
 		nextToLastIdentifierToken = lastIdentifierToken;
 		lastIdentifierToken = tok;
 		return str;
@@ -14423,6 +14430,7 @@ delimitedIdentifier() :
 		// Remember whether last token was a delimited identifier
 		nextToLastTokenDelimitedIdentifier = lastTokenDelimitedIdentifier;
         lastTokenDelimitedIdentifier = true;
+        thirdToLastIdentifierToken = nextToLastIdentifierToken;
 		nextToLastIdentifierToken = lastIdentifierToken;
 		lastIdentifierToken = tok;
 
@@ -14869,6 +14877,7 @@ nonReservedKeyword()  :
 		// Remember whether last token was a delimited identifier
 		nextToLastTokenDelimitedIdentifier = lastTokenDelimitedIdentifier;
         lastTokenDelimitedIdentifier = false;
+        thirdToLastIdentifierToken = nextToLastIdentifierToken;
 		nextToLastIdentifierToken = lastIdentifierToken;
 		lastIdentifierToken = tok;
 		return tok.image;