Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[dtp-dev] Re: generic ddl generator patch


Max,

One of our engineers reviewed the patch and had the following concerns.  The major issue is whether the DDL is truly generic and of any value in the generic DDL support.  It seems that the DDL for at least Routines and Events should only appear in the vendor specific DDL generators and really is not of much value in the generic generator as it probably will not execute successfully anyway.  Can you explain what value you think is derived from having routines and events in the generic DLL generator?

--------------------------------------------------------------------
The code looks good except the sequence of script in GenericDdlScript should be:
                scriptVec.addAll(dropTriggerStatements);
                scriptVec.addAll(dropEventStatements);
                scriptVec.addAll(dropRoutineStatements);
                ...
                scriptVec.addAll(createRoutineStatements);
                scriptVec.addAll(createEventStatements);
                scriptVec.addAll(createTriggerStatements);
Because trigger may have the reference to routine/event.

I have a concern about routine/event support in generic ddl generator: generic ddl generator is for
sql 92/99 standard. the generated ddl should work for all database which compatible with sql 92/99.

As I know, DBMS(s) (Oracle, db2, sql server..) have different syntax for routine. So the generated script for routine won't work for most of the database.

-------------------------------------------------------------------------------------------------------------------------

Larry Dunnell
RAD Data Tools, DB2 Tooling,  Eclipse WTP Project and Eclipse DTP Project
IBM DB2 Information Management Software

Notes address: Lawrence E Dunnell/Redmond/IBM@IBMUS
Internet address: ledunnel@xxxxxxxxxx
tel: 206 587 5957
tie line: 277 5957



Hui.Cao@xxxxxxxxxx

09/05/2006 01:11 AM

To
Lawrence E Dunnell/Redmond/IBM@IBMUS, dtp-dev@xxxxxxxxxxx
cc
Subject
generic ddl generator patch






Hi Larry,

       To support all 4 types of procedural objects: stored procedure, udf, trigger and event, sql dev tools needs to modify the generic ddl generator. Basically the attached patch just added "create" and "drop" support for these sql objects. Can you please have a review? Thanks in advance!



Best Regards!

Max ( Hui ) Cao
Sybase, Inc. Shanghai, China

Index: src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionID.java
===================================================================
RCS file: /cvsroot/datatools/org.eclipse.datatools.connectivity/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionID.java,v
retrieving revision 1.1
diff -u -r1.1 EngineeringOptionID.java
--- src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionID.java	9 Dec 2005 21:13:17 -0000	1.1
+++ src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/EngineeringOptionID.java	1 Sep 2006 14:35:48 -0000
@@ -21,6 +21,7 @@
 	public final static String GENERATE_TABLESPACES = "GENERATE_TABLESPACES"; //$NON-NLS-1$
 	public final static String GENERATE_INDICES = "GENERATE_INDICES"; //$NON-NLS-1$
 	public final static String GENERATE_STOREDPROCEDURES = "GENERATE_STOREDPROCEDURES"; //$NON-NLS-1$
+	public final static String GENERATE_EVENTS = "GENERATE_EVENTS"; //$NON-NLS-1$
 	public final static String GENERATE_FUNCTIONS = "GENERATE_FUNCTIONS"; //$NON-NLS-1$
 	public final static String GENERATE_VIEWS = "GENERATE_VIEWS"; //$NON-NLS-1$
 	public final static String GENERATE_TRIGGERS = "GENERATE_TRIGGERS"; //$NON-NLS-1$
Index: src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlScript.java
===================================================================
RCS file: /cvsroot/datatools/org.eclipse.datatools.connectivity/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlScript.java,v
retrieving revision 1.2
diff -u -r1.2 GenericDdlScript.java
--- src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlScript.java	6 Apr 2006 16:21:58 -0000	1.2
+++ src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlScript.java	1 Sep 2006 14:35:49 -0000
@@ -54,9 +54,28 @@
     public void addAlterTableAddConstraintStatement(String statement) {
     	addConstraintStatements.addElement(statement);
     }
+
+    public void addDropRoutineStatement(String statement) {
+        this.dropRoutineStatements.add(statement);
+    }
+
+    public void addCreateRoutineStatement(String statement) {
+        this.createRoutineStatements.add(statement);
+    }
+
+    public void addDropEventStatement(String statement) {
+        this.dropEventStatements.add(statement);
+    }
+
+    public void addCreateEventStatement(String statement) {
+        this.createEventStatements.add(statement);
+    }
+
 	
 	public String[] getStatements(){
 		Vector scriptVec = new Vector();
+		scriptVec.addAll(dropEventStatements);
+		scriptVec.addAll(dropRoutineStatements);
 		scriptVec.addAll(dropTriggerStatements);
 		scriptVec.addAll(dropForeignKeyStatements);
 		scriptVec.addAll(dropConstraintStatements);
@@ -70,6 +89,8 @@
 		scriptVec.addAll(addConstraintStatements);
 		scriptVec.addAll(addForeignKeyStatements);
 		scriptVec.addAll(createTriggerStatements);
+		scriptVec.addAll(createRoutineStatements);
+		scriptVec.addAll(createEventStatements);
 		
 		String[] scripts = new String[scriptVec.size()];
 		scriptVec.copyInto(scripts);
@@ -89,4 +110,9 @@
     protected Vector createIndexStatements                  = new Vector();
     protected Vector createTriggerStatements                = new Vector();
     protected Vector addConstraintStatements                = new Vector();
+    protected Vector dropRoutineStatements                  = new Vector();
+    protected Vector createRoutineStatements                = new Vector();
+    protected Vector dropEventStatements                    = new Vector();
+    protected Vector createEventStatements                  = new Vector();
+    
 }
Index: src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerator.java
===================================================================
RCS file: /cvsroot/datatools/org.eclipse.datatools.connectivity/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerator.java,v
retrieving revision 1.2
diff -u -r1.2 GenericDdlGenerator.java
--- src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerator.java	6 Apr 2006 16:21:58 -0000	1.2
+++ src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerator.java	1 Sep 2006 14:35:49 -0000
@@ -12,12 +12,15 @@
 import org.eclipse.datatools.modelbase.sql.constraints.ForeignKey;
 import org.eclipse.datatools.modelbase.sql.constraints.Index;
 import org.eclipse.datatools.modelbase.sql.constraints.UniqueConstraint;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
+import org.eclipse.datatools.modelbase.sql.schema.Event;
 import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
 import org.eclipse.datatools.modelbase.sql.tables.PersistentTable;
 import org.eclipse.datatools.modelbase.sql.tables.Trigger;
 import org.eclipse.datatools.modelbase.sql.tables.ViewTable;
 
-public final class GenericDdlGenerator implements DDLGenerator {
+public class GenericDdlGenerator implements DDLGenerator {
     public String[] generateDDL(SQLObject[] elements, IProgressMonitor progressMonitor) {
     	String[] statements = new String[0];
 
@@ -53,10 +56,10 @@
         return statements;
     }
     
-    private String[] createStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+    protected String[] createStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
         GenericDdlScript script = new GenericDdlScript();
         if(this.builder == null) {
-            this.builder = new GenericDdlBuilder();
+            this.builder = createBuilder();
         }
         Iterator it = this.getAllContainedDisplayableElementSet(elements).iterator();
         while(it.hasNext()) {
@@ -93,14 +96,30 @@
                 String statement = builder.createIndex((Index) o, quoteIdentifiers, qualifyNames);
                 if(statement != null) script.addCreateIndexStatement(statement);
             }
+            else if(o instanceof Event) {
+            	if (!this.generateEvents()) continue;
+            	String statement = builder.createEvent((Event) o, quoteIdentifiers, qualifyNames);
+            	if(statement != null) script.addCreateEventStatement(statement);
+            }
+            else if(o instanceof Procedure) {
+            	if (!this.generateStoredProcedures()) continue;
+            	String statement = builder.createProcedure((Procedure) o, quoteIdentifiers, qualifyNames);
+            	if(statement != null) script.addCreateRoutineStatement(statement);
+            }
+            else if(o instanceof UserDefinedFunction) {
+            	if (!this.generateFunctions()) continue;
+            	String statement = builder.createFunction((UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+            	if(statement != null) script.addCreateRoutineStatement(statement);
+            }
+            //TODO generic sql objects
         }
         return script.getStatements();
     }
     
-    private String[] dropStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
+    protected String[] dropStatements(SQLObject[] elements, boolean quoteIdentifiers, boolean qualifyNames, IProgressMonitor progressMonitor, int task) {
         GenericDdlScript script = new GenericDdlScript();
         if(this.builder == null) {
-            this.builder = new GenericDdlBuilder();
+            this.builder = createBuilder();
         }
         Iterator it = this.getAllContainedDisplayableElementSet(elements).iterator();
         while(it.hasNext()) {
@@ -137,9 +156,35 @@
                 String statement = builder.dropIndex((Index) o, quoteIdentifiers, qualifyNames);
                 if(statement != null) script.addDropIndexStatement(statement);
             }
+            else if(o instanceof Event) {
+            	if (!this.generateEvents()) continue;
+            	String statement = builder.dropEvent((Event) o, quoteIdentifiers, qualifyNames);
+            	if(statement != null) script.addDropEventStatement(statement);
+            }
+            else if(o instanceof Procedure) {
+            	if (!this.generateStoredProcedures()) continue;
+            	String statement = builder.dropProcedure((Procedure) o, quoteIdentifiers, qualifyNames);
+            	if(statement != null) script.addDropRoutineStatement(statement);
+            }
+            else if(o instanceof UserDefinedFunction) {
+            	if (!this.generateFunctions()) continue;
+            	String statement = builder.dropFunction((UserDefinedFunction) o, quoteIdentifiers, qualifyNames);
+            	if(statement != null) script.addDropRoutineStatement(statement);
+            }
+            //TODO generic sql objects
         }
         return script.getStatements();
     }
+
+    /**
+	 * Creates a GenericDdlBuilder. Subclass can provide a particular
+	 * GenericDdlBuilder to customize the ddl generating process.
+	 * 
+	 * @return
+	 */
+	protected GenericDdlBuilder createBuilder() {
+		return new GenericDdlBuilder();
+	}
     
     public EngineeringOption[] getOptions() {
         if(this.options == null) {
@@ -156,19 +201,19 @@
         return this.categories;
     }
     
-    private boolean generateDropStatement() {
+    protected  boolean generateDropStatement() {
         return this.getOptions()[GenericDdlGenerationOptions.GENERATE_DROP_STATEMENTS].getBoolean();
     }
 
-    private boolean generateCreateStatement() {
+    protected  boolean generateCreateStatement() {
         return this.getOptions()[GenericDdlGenerationOptions.GENERATE_CREATE_STATEMENTS].getBoolean();
     }
     
-    private final boolean generateQuotedIdentifiers() {
+    protected  final boolean generateQuotedIdentifiers() {
         return this.getOptions()[GenericDdlGenerationOptions.GENERATE_QUOTED_IDENTIFIER].getBoolean();
     }
 
-    private final boolean generateFullyQualifiedNames() {
+    protected  final boolean generateFullyQualifiedNames() {
         return this.getOptions()[GenericDdlGenerationOptions.GENERATE_FULLY_QUALIFIED_NAME].getBoolean();
     }
 
@@ -188,7 +233,19 @@
 		return this.getOptions()[GenericDdlGenerationOptions.GENERATE_TRIGGERS].getBoolean();
 	}
     
-	private Set getAllContainedDisplayableElementSet(SQLObject[] elements) {
+	public boolean generateEvents(){
+		return this.getOptions()[GenericDdlGenerationOptions.GENERATE_EVENTS].getBoolean();
+	}
+	
+	public boolean generateStoredProcedures(){
+		return this.getOptions()[GenericDdlGenerationOptions.GENERATE_STOREDPROCEDURES].getBoolean();
+	}
+	
+	public boolean generateFunctions(){
+		return this.getOptions()[GenericDdlGenerationOptions.GENERATE_FUNCTIONS].getBoolean();
+	}
+	
+	protected  Set getAllContainedDisplayableElementSet(SQLObject[] elements) {
         Set s = new HashSet();
         for(int i=0; i<elements.length; ++i) {
             s.add(elements[i]);
@@ -196,8 +253,10 @@
         }
         return s;
     }
+	
+
 
-    private EngineeringOption[] options = null;
-    private EngineeringOptionCategory[] categories = null;
-	private GenericDdlBuilder builder = null;
+	protected  EngineeringOption[] options = null;
+	protected  EngineeringOptionCategory[] categories = null;
+	protected  GenericDdlBuilder builder = null;
 }
Index: src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerationOptions.java
===================================================================
RCS file: /cvsroot/datatools/org.eclipse.datatools.connectivity/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerationOptions.java,v
retrieving revision 1.3
diff -u -r1.3 GenericDdlGenerationOptions.java
--- src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerationOptions.java	6 Apr 2006 16:21:58 -0000	1.3
+++ src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGenerationOptions.java	1 Sep 2006 14:35:48 -0000
@@ -17,6 +17,9 @@
 	public final static byte GENERATE_INDICES = 5;
 	public final static byte GENERATE_VIEWS = 6;
 	public final static byte GENERATE_TRIGGERS = 7;
+	public final static byte GENERATE_STOREDPROCEDURES = 8;
+	public final static byte GENERATE_EVENTS = 9;
+	public final static byte GENERATE_FUNCTIONS = 10;
 	
 
 	public static EngineeringOption[] createDDLGenerationOptions(EngineeringOptionCategory[] categories) {
@@ -41,6 +44,9 @@
         optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_INDICES,resource.getString("GENERATE_INDEX"), resource.getString("GENERATE_INDEX_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
         optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_VIEWS,resource.getString("GENERATE_VIEW"), resource.getString("GENERATE_VIEW_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
         optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_TRIGGERS,resource.getString("GENERATE_TIGGER"), resource.getString("GENERATE_TIGGER_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_STOREDPROCEDURES,resource.getString("GENERATE_STOREDPROCEDURE"), resource.getString("GENERATE_STOREDPROCEDURE_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_EVENTS,resource.getString("GENERATE_EVENTS"), resource.getString("GENERATE_EVENTS_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
+        optionVec.add(new EngineeringOption(EngineeringOptionID.GENERATE_FUNCTIONS,resource.getString("GENERATE_FUNCTION"), resource.getString("GENERATE_FUNCTION_DES"),true,additional_element)); //$NON-NLS-1$ //$NON-NLS-2$
         
         EngineeringOption[] options = new EngineeringOption[optionVec.size()];
         optionVec.copyInto(options);
Index: src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGeneration.properties
===================================================================
RCS file: /cvsroot/datatools/org.eclipse.datatools.connectivity/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGeneration.properties,v
retrieving revision 1.1
diff -u -r1.1 GenericDdlGeneration.properties
--- src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGeneration.properties	9 Dec 2005 21:13:18 -0000	1.1
+++ src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlGeneration.properties	1 Sep 2006 14:35:48 -0000
@@ -20,6 +20,8 @@
 GENERATE_STOREDPROCEDURE_DES =	Generate stored procedures
 GENERATE_FUNCTION 		=	Function&s
 GENERATE_FUNCTION_DES 	=	Generate functions
+GENERATE_EVENTS 		=	&Events
+GENERATE_EVENTS_DES 	=	Generate events
 GENERATION_OPTIONS = Generation options
 GENERATION_OPTIONS_DES = Options for generation
 ADDITIONAL_ELEMENTS = Additional elements
Index: src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlBuilder.java
===================================================================
RCS file: /cvsroot/datatools/org.eclipse.datatools.connectivity/plugins/org.eclipse.datatools.connectivity.sqm.core/src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlBuilder.java,v
retrieving revision 1.3
diff -u -r1.3 GenericDdlBuilder.java
--- src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlBuilder.java	6 Apr 2006 16:21:58 -0000	1.3
+++ src/org/eclipse/datatools/connectivity/sqm/internal/core/rte/fe/GenericDdlBuilder.java	1 Sep 2006 14:35:48 -0000
@@ -19,9 +19,16 @@
 import org.eclipse.datatools.modelbase.sql.datatypes.PredefinedDataType;
 import org.eclipse.datatools.modelbase.sql.datatypes.SQLDataType;
 import org.eclipse.datatools.modelbase.sql.datatypes.UserDefinedType;
+import org.eclipse.datatools.modelbase.sql.routines.Parameter;
+import org.eclipse.datatools.modelbase.sql.routines.ParameterMode;
+import org.eclipse.datatools.modelbase.sql.routines.Procedure;
 import org.eclipse.datatools.modelbase.sql.routines.Routine;
+import org.eclipse.datatools.modelbase.sql.routines.Source;
+import org.eclipse.datatools.modelbase.sql.routines.UserDefinedFunction;
 import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.Event;
 import org.eclipse.datatools.modelbase.sql.schema.ReferentialActionType;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
 import org.eclipse.datatools.modelbase.sql.schema.Schema;
 import org.eclipse.datatools.modelbase.sql.schema.Sequence;
 import org.eclipse.datatools.modelbase.sql.schema.TypedElement;
@@ -70,6 +77,7 @@
     protected final static String INDEX                = "INDEX"; //$NON-NLS-1$
     protected final static String PROCEDURE            = "PROCEDURE"; //$NON-NLS-1$
     protected final static String FUNCTION             = "FUNCTION"; //$NON-NLS-1$
+    protected final static String EVENT                = "EVENT"; //$NON-NLS-1$
     protected final static String CONSTRAINT           = "CONSTRAINT"; //$NON-NLS-1$
     protected final static String UNIQUE               = "UNIQUE"; //$NON-NLS-1$
     protected final static String CHECK                = "CHECK"; //$NON-NLS-1$
@@ -108,6 +116,9 @@
     protected final static String ROW                  = "ROW"; //$NON-NLS-1$
     protected final static String STATEMENT            = "STATEMENT"; //$NON-NLS-1$
     protected final static String WHEN                 = "WHEN"; //$NON-NLS-1$
+    protected final static String IN                   = "IN"; //$NON-NLS-1$
+    protected final static String OUT                  = "OUT"; //$NON-NLS-1$
+    protected final static String INOUT                = "INOUT"; //$NON-NLS-1$
 
     
     public String dropTrigger(Trigger trigger, boolean quoteIdentifiers, boolean qualifyNames) {
@@ -323,6 +334,58 @@
         return statement;
     }
 
+	public String addSQLObject(SQLObject sqlObject, boolean quoteIdentifiers, boolean qualifyNames) {
+		throw new UnsupportedOperationException(sqlObject.getClass().getName());
+	}
+
+	public String createEvent(Event event, boolean quoteIdentifiers, boolean qualifyNames) {
+		throw new UnsupportedOperationException(event.getClass().getName());
+	}
+
+	public String createProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+        String text = CREATE + SPACE + PROCEDURE + SPACE + getName(procedure, quoteIdentifiers, qualifyNames)
+    	+ SPACE + LEFT_PARENTHESIS + getParameters(procedure) + RIGHT_PARENTHESIS + AS + NEWLINE;
+
+    	Source source = procedure.getSource();
+    	if (source != null) {
+    		text += source.getBody();
+    	}
+    	
+        return text;      
+	}
+
+	public String createSQLObject(SQLObject sqlObject, boolean quoteIdentifiers, boolean qualifyNames) {
+		throw new UnsupportedOperationException(sqlObject.getClass().getName());
+	}
+
+	public String createFunction(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+    	String text = CREATE + SPACE + FUNCTION + SPACE + getName(function, quoteIdentifiers, qualifyNames);
+    	
+    	Source source = function.getSource();
+    	if (source != null) {
+    		text += source.getBody();
+    	}
+        return text;      
+	}
+
+	public String dropEvent(Event event, boolean quoteIdentifiers, boolean qualifyNames) {
+		String text = DROP + SPACE + EVENT + SPACE + getName(event, quoteIdentifiers, qualifyNames);
+        return text;      
+	}
+
+	public String dropProcedure(Procedure procedure, boolean quoteIdentifiers, boolean qualifyNames) {
+        String text = DROP + SPACE + PROCEDURE + SPACE + getName(procedure, quoteIdentifiers, qualifyNames);
+        return text;      
+	}
+
+	public String dropSQLObject(SQLObject sqlObject, boolean quoteIdentifiers, boolean qualifyNames) {
+		throw new UnsupportedOperationException(sqlObject.getClass().getName());
+	}
+
+	public String dropFunction(UserDefinedFunction function, boolean quoteIdentifiers, boolean qualifyNames) {
+   		return DROP + SPACE + FUNCTION + SPACE + getName(function, quoteIdentifiers, qualifyNames);
+	}
+	
     protected String getDeferrableClause(Constraint constraint) {
         String clause = null;
         if(constraint.isDeferrable()) {
@@ -545,6 +608,15 @@
         return name;
     }
 
+    protected String getName(Event event, boolean quoteIdentifiers, boolean qualifyNames) {
+    	String name = event.getName();
+    	
+    	if(quoteIdentifiers) {
+    		name = this.getDoubleQuotedString(name);
+    	}
+    	return name;
+    }
+    
     protected String getName(Routine routine, boolean quoteIdentifiers, boolean qualifyNames) {
         String name = routine.getName();
         String schemaName = routine.getSchema().getName();
@@ -653,4 +725,30 @@
         }
         return DOUBLE_QUOTE + result + DOUBLE_QUOTE;
     }
+
+    protected String getParameters(Routine routine) {
+        String parameters = EMPTY_STRING;
+        Iterator it = routine.getParameters().iterator();
+        while(it.hasNext()) {
+            Parameter p = (Parameter) it.next();
+            ParameterMode mode = p.getMode();
+            if(mode == ParameterMode.INOUT_LITERAL) {
+                parameters += INOUT + SPACE;
+            }
+            else if(mode == ParameterMode.OUT_LITERAL) {
+                parameters += OUT + SPACE;
+            }
+            String name = p.getName();
+            if(name != null && name.length() != 0) {
+                parameters += p.getName() + SPACE;
+            }
+            parameters += this.getDataTypeString(p, routine.getSchema());
+            if(it.hasNext()) {
+                parameters += COMMA + NEWLINE + TAB + TAB;                
+            }
+        }
+        return parameters;
+    }
+    
+
 }

Back to the top