Hi Thomas,
How do you like this example. It's very simple. Basically you copy and paste
Java code and call it a "MODULE". The class can then be called from whatever
wants it (and I can easily implement my simpler trigger idea just by putting
in a "SimpleTrigger" class that I can extend in another module. Note there
is no need to name a module, as we can just use the class name:
CREATE MODULE AS
$$
import java.sql.*;
import org.h2.api.Trigger;
public abstract class SimpleTrigger implements Trigger {
public void init(Connection conn, String schemaName, String
triggerName, String tableName, boolean before, int type) throws SQLException
{
}
public abstract void fire(Connection conn, Object[] oldRow,
Object[] newRow) throws SQLException;
public void close() throws SQLException {
}
public void remove() throws SQLException {
}
}
$$
CREATE MODULE AS
$$
import java.sql.*;
public class MyTrigger extends SimpleTrigger {
public void fire(Connection conn, Object[] oldRow, Object[] newRow)
throws SQLException {
newRow[0] = ((String)newRow[0]).toUpperCase();
}
}
$$
CREATE TRIGGER TRIG_INS BEFORE INSERT ON TEST FOR EACH ROW CALL "MyTrigger"
DROP TRIGGER TRIG_INS
DROP MODULE MyTrigger
DROP MODULE SimpleTrigger
What do you think?
Cheers
Kerry
On Thu, Jul 22, 2010 at 8:02 AM, Thomas Mueller <
[email protected]> wrote:
> Hi,
>
> I think the
> CREATE CODE MyTriggerCode LANGUAGE JAVA FOR TRIGGER AS
> is very verbose. What about:
> CREATE TRIGGER ... AS?
> That's similar syntax as CREATE ALIAS ... AS.
>
> H2 only supports Java currently, so there is no reason to require
> "JAVA". Once other languages are supported it can still be added as an
> option.
>
> However I'm not sure if it makes sense to provide shortcut to directly
> register a trigger as source code *snippet* (that is, only the fire
> method). I think it's no problem to require the source code of the
> *complete* class in this case. If you write short static function,
> then the current CREATE ALIAS ... AS source is handy (I used it many
> times). But if you write a trigger, you anyway do that in the IDE,
> meaning you anyway have the source code of the complete class
> somewhere. Because you want to use auto-complete of the IDE, and so
> forth. Triggers are almost never as simple as a Java function.
>
> I think if we want to support CREATE CODE then this should be only
> used to add classes to the "internal classpath" of H2. Independent of
> for what those classes are used (trigger, aggregate, function
> alias,...), and therefore without any magic to adopt to the right type
> / add missing glue code. Even without automatically adding import
> statements. Those classes can then be used for many things. For
> example a class that contains multiple public static methods plus a
> trigger (or even multiple triggers using inner classes). Or it could
> even contain multiple classes, or a jar file (which would be stored in
> the database). Instead of CREATE CODE what about CREATE MODULE or
> CREATE LIBRARY? There could be a module / library for MySQL helper
> functions, for PostgreSQL helper functions, and so on. Like a Apache
> HTTP module. There should be an way to "auto-start", maybe using a
> method in the loaded library.
>
> Existing features could then be retro-fitted as modules / libraries.
> For example fulltext search.
>
> Regards,
> Thomas
>
> --
> You received this message because you are subscribed to the Google Groups
> "H2 Database" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<h2-database%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/h2-database?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/h2-database?hl=en.