[
http://issues.apache.org/jira/browse/DERBY-1589?page=comments#action_12434592 ]
Bryan Pendleton commented on DERBY-1589:
----------------------------------------
I think that the problem here may be that FKConstraintDefinitionNode, which is
the
compiler implementation code for the "foreign key ... references ... "
constraint
in the compiler, is not properly registering that the statement containing the
foreign key constraint has a dependency on the table being referenced. Due
to the lack of the dependency, when the referenced table (t11ConstraintTest)
is dropped, the statement is not invalidated.
The following diff seems to make the test script pass. More study and testing
is needed, plus the construction of a real patch proposal.
Index: FKConstraintDefinitionNode.java
===================================================================
--- FKConstraintDefinitionNode.java (revision 441800)
+++ FKConstraintDefinitionNode.java (working copy)
@@ -104,6 +104,8 @@
getConstraintMoniker(),
refTableName.getTableName());
+ getCompilerContext().createDependency(td);
+
// Verify if REFERENCES_PRIV is granted to columns referenced
getCompilerContext().pushCurrentPrivType(getPrivType());
> CREATE TABLE throws NullPointerException in Derby SQL Standard Authorization
> after DROPs and REVOKES
> ----------------------------------------------------------------------------------------------------
>
> Key: DERBY-1589
> URL: http://issues.apache.org/jira/browse/DERBY-1589
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Affects Versions: 10.2.1.0
> Reporter: Daniel John Debrunner
> Assigned To: Bryan Pendleton
> Fix For: 10.2.1.0
>
>
> Currently, the last sql statement in following set of sql statements will
> raise a null pointer exception
> connect 'jdbc:derby:c:/dellater/dbmaintest2;create=true' user 'mamta1' as
> mamta1;
> create table t11ConstraintTest (c111 int not null, c112 int not null, primary
> key (c111, c112));
> grant references on t11ConstraintTest to mamta3;
> connect 'jdbc:derby:c:/dellater/dbmaintest2;create=true' user 'mamta3' as
> mamta3;
> drop table t31ConstraintTest;
> -- the following statement should remember that it depends on REFERENCES
> privilege on mamta1.t11ConstraintTest
> create table t31ConstraintTest (c311 int, c312 int, foreign key(c311, c312)
> references mamta1.t11ConstraintTest);
> drop table t31ConstraintTest;
> set connection mamta1;
> -- following should revoke all the privileges granted on it
> drop table t11ConstraintTest;
> create table t11ConstraintTest (c111 int not null, c112 int not null, primary
> key (c111, c112));
> grant references(c111) on t11ConstraintTest to mamta3;
> grant references(c112) on t11ConstraintTest to PUBLIC;
> --connect 'jdbc:derby:c:/dellater/dbmaintest2;create=true' user 'mamta3' as
> mamta3;
> set connection mamta3;
> drop table t31ConstraintTest;
> -- following sql should recompie itself because the earlier plan depended on
> a privilege which doesn't
> -- exist anymore. Instead, new privileges have been granted and the plan for
> following statement should depend
> -- on those new privileges
> create table t31ConstraintTest (c311 int, c312 int, foreign key(c311, c312)
> references mamta1.t11ConstraintTest);
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira