|
[
Permlink
| « Hide
]
Rick Hillegas added a comment - 19/Nov/08 04:49 PM
Attaching zz.sql, a script which demonstrates the problem.
Attaching derby-3945-01-aa-functionSchema.diff. This patch forces Derby to use the current schema at DDL time (rather than DML time) to resolve unqualified function references in generation clauses. Running tests now.
There are two pieces to this fix: 1) The persisted default descriptor now stores the current schema which was in effect when the generation clause was defined. 2) At INSERT/UPDATE time, that saved schema temporarily becomes the current schema when we bind the generation clause. A similar approach could be used for the related bugs having to do with unqualified function names in CHECK constraints (DERBY-3944) and VIEWS (DERBY-3953). Note that this approach does not address the related issues with dblook (DERBY-3954). Touches the following files: M java/engine/org/apache/derby/catalog/DefaultInfo.java M java/engine/org/apache/derby/catalog/types/DefaultInfoImpl.java Adds the DDL-time current schema to the default descriptor. M java/engine/org/apache/derby/impl/sql/compile/TableElementList.java Stuffs the current schema into the default descriptor at CREATE/ALTER time. M java/engine/org/apache/derby/impl/sql/compile/DMLModStatementNode.java Temporarily sets the current schema to the schema stored in the default when we bind generation clauses. M java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsPermsTest.java Adds tests. Regression tests ran cleanly for me except for two errors which look like they were introduced by someone else's checkin today. Committed at subversion revision revision 719123. The two errors were:
There were 2 errors: 1) testDefaultValues(org.apache.derbyTesting.unitTests.junit.CharacterStreamDescriptorTest)java.lang.NoClassDefFoundError: org/apache/derby/iapi/jdbc/CharacterStreamDescriptor$Builder at org.apache.derbyTesting.unitTests.junit.CharacterStreamDescriptorTest.testDefaultValues(CharacterStreamDescriptorTest.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:105) 2) testSetValues(org.apache.derbyTesting.unitTests.junit.CharacterStreamDescriptorTest)java.lang.NoClassDefFoundError: org/apache/derby/iapi/jdbc/CharacterStreamDescriptor$Builder at org.apache.derbyTesting.unitTests.junit.CharacterStreamDescriptorTest.testSetValues(CharacterStreamDescriptorTest.java:67) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:105) FAILURES!!! Tests run: 8900, Failures: 0, Errors: 2 Similar problem and possibly solution as
Patch looks good!
Note: The constructor of DefaultInfoImpl now lacks some @params in its javadoc. Thanks for the review, Dag. Attaching derby-3945-02-aa-javadoc.diff, which address the javadoc issue. Committed at subversion revision 722177.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||