[ 
http://issues.apache.org/jira/browse/DERBY-630?page=comments#action_12439569 ] 
            
Yip Ng commented on DERBY-630:
------------------------------

Hi Bryan.  An implicit schema is not the same as a null compilation schema that 
I described.  An implicit schema or current schema, as we see in DERBY-85:

<snip>
ij> connect 'jdbc:derby:firstDB;create=true;user=someUser;password=somePwd';
ij> create table itko.t1 (i int);
0 rows inserted/updated/deleted
ij> create trigger trig1 after update on itko.t1 for each row mode db2sql 
select * from sys.systables; 
</snip>

will have a compilation schema 'someUser' (the trigger name is not qualified 
with a schema name, so it will use the current schema, 'someUser' which will be 
implicitly created at execution time).

DERBY-630 poses a different problem where the current schema is not explicitly 
or implicitly created.  

<snip>
ij> connect 'jdbc:derby:myDB;create=true;user=someUser;password=somePwd';
ij> create table itko.t1 (i int);
0 rows inserted/updated/deleted
ij> create trigger itko.trig1 after update on itko.t1 for each row mode db2sql 
select * from sys.systables; 
</snip>

So this is one edge case where the compilation schema can be null since the 
current schema is not physically created yet, so the spsCompSchemaId is null.  
At the CREATE TRIGGER execution time, it
attempts to locate the CURRENT SCHEMA via the data dictionary but this will 
ultimately return null.  
Hence, when attempting to retrieve its UUID, NPE occurs. 

A compilation schema can also be set to null if the statement text does not 
have dependencies on the CURRENT SCHEMA but this logic does not seem to be 
implemented yet in Derby.  There are some
comments in the code but the actual implementation logic is incomplete.  The 
latter case can benefit statement cache plan sharing across connections in 
different schema.  The compilation schema is
used as an identity part for the statement.



> create trigger fails with null pointer exception
> ------------------------------------------------
>
>                 Key: DERBY-630
>                 URL: http://issues.apache.org/jira/browse/DERBY-630
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.1.1.0
>         Environment: windows 2000, sun jdk 1.5.0
>            Reporter: mardacay
>         Assigned To: Yip Ng
>         Attachments: derby630-trunk-diff01.txt, derby630-trunk-stat01.txt
>
>
> When i create a brand new database, and execute the following statements all 
> in one transaction or each of them in their own transaction, then it fails at 
> trigger creation with null pointer exception. if i exclude the schema names 
> from statement, then it runs fine. (If S1 is ommited from every statement 
> then it runs fine). Once the version without the schema names run fine, i can 
> run the version that has schema names, fine also. 
> create schema S1;
> create table
>   S1.PRODUCT(
>     PRODUCT_ID VARCHAR(255) unique not null,
>     VERSION BIGINT
>   );
>   
> create table
>   S1.CATEGORY(
>     CAT_ID VARCHAR(255),
>     NAME varchar(255) not null,
>     VERSION BIGINT
>   );
> create table
>   S1.PROD_IN_CAT(
>     CAT_ID VARCHAR(255) not null,
>     PRODUCT_ID VARCHAR(255) not null,
>     VERSION BIGINT
>   );
>   
> create trigger S1.product_v 
> after update of version on S1.product
> referencing new as n
> for each row
> mode db2sql
>       update S1.prod_in_cat set version = n.version where 
> S1.prod_in_cat.product_id=n.product_id;
> java.lang.NullPointerException
>       at 
> org.apache.derby.impl.sql.catalog.SYSSTATEMENTSRowFactory.makeSYSSTATEMENTSrow(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.addSPSDescriptor(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.execute.CreateTriggerConstantAction.createSPS(Unknown
>  Source)
>       at 
> org.apache.derby.impl.sql.execute.CreateTriggerConstantAction.executeConstantAction(Unknown
>  Source)Stopping progress indicator for: Executing SQL
>       at org.apache.derby.impl.sql.execute.MiscResultSet.open(Unknown Source)
>       at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
>       at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)

-- 
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

        

Reply via email to