[ 
http://issues.apache.org/jira/browse/DERBY-1718?page=comments#action_12436076 ] 
            
A B commented on DERBY-1718:
----------------------------

> Any one know if the new format id will cause any errors when building the 
> stored
> prepared statement descriptors list or when the trigger gets executed on 10.1 
>  ?

I don't really know all of the details on how SPS descriptors are "built" or 
what is/is not written to disk for triggers, but I did run the following 
scenario and everything appears to be working as expected:

  - Create a 10.1 database
  - Create tables t1 and t2 as shown in the description for this issue
  - Disconnect/shutdown 10.1 database.
  - Connect to 10.1 database with Derby 10.3 codeline, effectively doing a soft 
upgrade.
  - Create the trigger trigxml as shown in the description for this issue
  - Disconnect/shutdown the database.
  - Reconnect to the database using Derby 10.1 codeline (effectively "soft 
downgrade")
  - Execute an insert statement that fires the trigger.  The insert statement 
was successful,
    as was the trigger statement action.

I admit I was a bit surprised to see this work at first.  However, I then 
looked at the SYS.SYSSTATEMENTs table and I noticed that when I first create 
the trigger in 10.3, the "VALID" column is set to "true".  But when I reconnect 
with 10.1, the "VALID" column becomes "false".  My understanding is that the 
"false" value means that when the trigger is fired, it will first be 
RE-compiled before getting executed.  This would in turn mean that the new 
format id for the 10.3 SqlXmlUtil class will never actually be read when 
running in 10.1--instead, the trigger statement will be recompiled using 10.1 
and thus we don't see any failures.

I don't know for sure what the mechanism is, but based on this behavior it 
appears that any attempts to boot a database from a version that is different 
from the most-recently-booted version causes all stored prepared statements to 
be marked invalid and thus forces recompilation.  It is this recompilation of 
the trigger statements which allows the 10.3 trigxml to execute successfully 
against a 10.1 database after a "soft downgrade" back to 10.1.

That's my understanding based on the tests I ran; if anyone knows otherwise or 
would like to add more, please feel free...

And thanks Suresh for taking the time to review the patch.  I wasn't even 
thinking about upgrade issues when I did my review.  Definitely true that more 
eyes are better...

> creating an after insert trigger with trigger action involving  xml datatype 
> throws  java.io.NottSerializableException
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-1718
>                 URL: http://issues.apache.org/jira/browse/DERBY-1718
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.3.0.0, 10.2.2.0
>         Environment: Java Version:    1.4.2
> Java Vendor:     IBM Corporation
>            Reporter: Suresh Thalamati
>         Assigned To: Yip Ng
>             Fix For: 10.2.1.0
>
>         Attachments: derby1718-trunk-diff01.txt, derby1718-trunk-diff02.txt, 
> derby1718-trunk-stat01.txt, derby1718-trunk-stat02.txt, stk.txt
>
>
> creating an after insert trigger with trigger action involving  xml datatype 
> throws following error :
> ij> create trigger trigxml after insert on t1 for each statement mode db2sql
> insert into t2 values (1,
> xmlparse(document '<name> ram </name>' preserve whitespace));
> ERROR XSDAJ: Exception during write of a serializable or SQLData object
> ERROR XJ001: Java exception: 'org.apache.derby.iapi.types.SqlXmlUtil: 
> java.io.No
> ton'.SerializableExcepti
> ij>
> repro:
> connect 'jdbc:derby:wombat;create=true';
> create table t1 (i int, x xml);
> create table t2 (i int, x xml);
> insert into t2 values (1, 
> xmlparse(document '<name> suresh </name>' preserve whitespace));
> --- following trigger creation is failing ,. 
> create trigger trigxml after insert on t1 for each statement mode db2sql 
> insert into t2 values (1, 
> xmlparse(document '<name> ram </name>' preserve whitespace));

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