[ http://issues.apache.org/jira/browse/DERBY-551?page=all ]

Deepa Remesh updated DERBY-551:
-------------------------------

    Attachment: derby-551-patch3-v1.diff
                derby-551-patch3-v1.status

Attaching a patch 'derby-551-patch3-v1.diff' which disallows creation of before 
triggers which contain calls to procedures that modify SQL data. Changes are:

* Adds a new reliability bit mask(PROCEDURE_CALL_ILLEGAL) to CompilerContext.

* Sets the above reliability for before triggers before binding the actionNode 
in CreateTrigger Node.

* Checks the above reliability in CallStatementNode. After the called procedure 
is resolved, the sql allowed by the procedure is checked and if it is "modifies 
sql data" and if we have set the reliability to PROCEDURE_CALL_ILLEGAL, it 
means we are calling a procedure that modifies sql data in the action statement 
of a before trigger. In this case, an exception is thrown and trigger creation 
fails. When I was making this change, I was not sure if this reliability 
setting will interfere with any other checks. After going through other places 
it is used, I think we are making specific checks to reliability and this 
setting will not interfere with other cases. Also, I did not see failures in 
any of the tests. Can someone please confirm this usage is correct? 

* Reverts the modified check added in 
InternalTriggerExecutionContext.validateStatement to catch the above case at 
runtime. With the addition of the above compile time check, there is no need 
for the check at runtime. 

* Adds a new message. Reuses the same SQLSatate as for invalid statement in 
triggers.

* Modifies procedureInTrigger.sql test to handle this change.

Ran derbyall with the changes and did not see any failures. However, I made few 
minor changes and re-running derbyall now. 

Meantime, I would like to get feedback on this patch mainly to see if the usage 
of CompilerContext is correct. 

> Allow invoking java stored procedures from inside a trigger. Make CALL a 
> valid statement in the trigger body.
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-551
>                 URL: http://issues.apache.org/jira/browse/DERBY-551
>             Project: Derby
>          Issue Type: New Feature
>          Components: SQL
>    Affects Versions: 10.1.1.0
>         Environment: All platforms
>            Reporter: Satheesh Bandaram
>         Assigned To: Deepa Remesh
>             Fix For: 10.2.0.0
>
>         Attachments: derby-551-draft1.diff, derby-551-draft1.status, 
> derby-551-draft2.status, derby-551-draft3.diff, derby-551-draft3.status, 
> derby-551-patch1-v1.diff, derby-551-patch1-v1.status, 
> derby-551-patch2-v1.diff, derby-551-patch3-v1.diff, 
> derby-551-patch3-v1.status, derby-551draft2.diff, 
> ProcedureInTrigger_Tests_v1.html
>
>
> Derby currently doesn't allow CALL statement to be used in a trigger body. It 
> would be great to allow java stored procedure invocation inside a trigger. 
> Since Derby doesn't have SQL procedure language, triggers can only execute a 
> single SQL statement. If we allow stored procedures in triggers, it would be 
> possible to write a trigger that involves more than just one SQL statement. 
> Functions are currently allowed, but they are read-only.
> I believe it is fairly easy to support this enhancement. Need good amount of 
> testing though.

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