Author: blafond
Date: 2010-01-07 14:11:34 -0500 (Thu, 07 Jan 2010)
New Revision: 1553
Added:
trunk/dna-integration-tests/src/test/resources/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/create_procedure_statements.ddl
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd
trunk/extensions/dna-sequencer-ddl/src/test/resources/ddl/dialect/oracle/create_procedure_statements.ddl
Removed:
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd
Modified:
trunk/dna-integration-tests/src/test/java/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/OracleDdlSequencerIntegrationTest.java
trunk/dna-integration-tests/src/test/resources/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/OracleDdl.cnd
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlLexicon.java
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/DdlSequencerI18n.properties
trunk/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParserTest.java
trunk/extensions/dna-sequencer-ddl/src/test/resources/ddl/dialect/oracle/oracle_test_statements_2.ddl
Log:
DNA-49 Oracle Sequencer/Parser fixes/changes. Cleaned up COMMIT statements & added
Create Materialized View
Modified:
trunk/dna-integration-tests/src/test/java/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/OracleDdlSequencerIntegrationTest.java
===================================================================
---
trunk/dna-integration-tests/src/test/java/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/OracleDdlSequencerIntegrationTest.java 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/dna-integration-tests/src/test/java/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/OracleDdlSequencerIntegrationTest.java 2010-01-07
19:11:34 UTC (rev 1553)
@@ -24,7 +24,6 @@
package org.jboss.dna.test.integration.sequencer.ddl.dialect.oracle;
import static org.junit.Assert.assertEquals;
-import java.net.URL;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import org.jboss.dna.graph.connector.inmemory.InMemoryRepositorySource;
@@ -39,7 +38,6 @@
import org.junit.Test;
/**
- * @author blafond
*
*/
public class OracleDdlSequencerIntegrationTest extends DdlIntegrationTestUtil {
@@ -86,10 +84,6 @@
}
- private URL getUrl(String urlStr) {
- return this.getClass().getClassLoader().getResource(urlStr);
- }
-
@After
public void afterEach() throws Exception {
if (this.session != null) {
@@ -103,9 +97,8 @@
@Test
public void shouldSequenceOracleDdlFile() throws Exception {
- System.out.println("STARTED:
shouldSequenceOracleDdlFile(oracle_test_statements.ddl)");
- URL url = getUrl(resourceFolder + "oracle_test_statements.ddl");
- uploadFile(url);
+
+ uploadFile(resourceFolder, "oracle_test_statements.ddl",
"shouldSequenceOracleDdlFile");
waitUntilSequencedNodesIs(1);
@@ -134,7 +127,77 @@
}
}
}
+ }
+
+ @Test
+ public void shouldSequenceOracleCreateProceduresAndFunctions() throws Exception {
+
+ uploadFile(resourceFolder, "create_procedure_statements.ddl",
"shouldSequenceOracleCreateProceduresAndFunctions");
- System.out.println("FINISHED:
shouldSequenceOracleDdlFile(oracle_test_statements.ddl)");
+ waitUntilSequencedNodesIs(1);
+
+ // Find the node ...
+ Node root = session.getRootNode();
+
+ if (root.hasNode("ddls") ) {
+ if (root.hasNode("ddls")) {
+ Node ddlsNode = root.getNode("ddls");
+ //System.out.println(" | NAME: " + ddlsNode.getName() +
" PATH: " + ddlsNode.getPath());
+ for (NodeIterator iter = ddlsNode.getNodes(); iter.hasNext();) {
+ Node ddlNode = iter.nextNode();
+
+ long numStatements =
ddlNode.getNodes().nextNode().getNodes().getSize();
+ assertEquals(4, numStatements);
+
+ //printNodeProperties(ddlNode);
+ //remove_emp <ns001:startLineNumber = 1, jcr:primaryType =
nt:unstructured, ns001:startColumnNumber = 1, jcr:mixinTypes =
ns002:createProcedureStatement, ns001:expression =
+ // CREATE PROCEDURE remove_emp (employee_id NUMBER) AS tot_emps
NUMBER;
+ // BEGIN
+ // DELETE FROM employees
+ // WHERE employees.employee_id = remove_emp.employee_id;
+ // tot_emps := tot_emps - 1;
+ // END;
+ // /, ns001:startCharIndex = 0>
+ // employee_id <ns001:datatypeName = NUMBER, jcr:primaryType =
nt:unstructured, ns001:datatypePrecision = 0, jcr:mixinTypes = ns002:functionParameter,
ns001:datatypeScale = 0>
+
+ Node node = assertNode(ddlNode, "remove_emp",
"oracleddl:createProcedureStatement");
+ assertEquals(1, node.getNodes().getSize());
+ Node paramNode = assertNode(node, "employee_id",
"oracleddl:functionParameter");
+ verifySimpleStringProperty(paramNode, "ddl:datatypeName",
"NUMBER");
+
+ //find_root <ns001:startLineNumber = 9, jcr:primaryType =
nt:unstructured, ns001:startColumnNumber = 1, jcr:mixinTypes =
ns002:createProcedureStatement, ns001:expression =
+ // CREATE PROCEDURE find_root ( x IN REAL )
+ // IS LANGUAGE C
+ // NAME c_find_root
+ // LIBRARY c_utils
+ // PARAMETERS ( x BY REFERENCE );, ns001:startCharIndex = 211>
+ // x <ns001:datatypeName = REAL, jcr:primaryType =
nt:unstructured, ns002:inOutNoCopy = IN, jcr:mixinTypes = ns002:functionParameter>
+ node = assertNode(ddlNode, "find_root",
"oracleddl:createProcedureStatement");
+ assertEquals(1, node.getNodes().getSize());
+ paramNode = assertNode(node, "x",
"oracleddl:functionParameter");
+ verifySimpleStringProperty(paramNode, "ddl:datatypeName",
"REAL");
+ verifySimpleStringProperty(paramNode,
"oracleddl:inOutNoCopy", "IN");
+
+ //CREATE FUNCTION SecondMax (input NUMBER) RETURN NUMBER
+ // PARALLEL_ENABLE AGGREGATE USING SecondMaxImpl;
+ node = assertNode(ddlNode, "SecondMax",
"oracleddl:createFunctionStatement");
+ assertEquals(1, node.getNodes().getSize());
+ paramNode = assertNode(node, "input",
"oracleddl:functionParameter");
+ verifySimpleStringProperty(paramNode, "ddl:datatypeName",
"NUMBER");
+
+ //CREATE OR REPLACE FUNCTION text_length(a CLOB)
+ // RETURN NUMBER DETERMINISTIC IS
+ // BEGIN
+ // RETURN DBMS_LOB.GETLENGTH(a);
+ // END;
+ ///
+ node = assertNode(ddlNode, "text_length",
"oracleddl:createFunctionStatement");
+ assertEquals(1, node.getNodes().getSize());
+ verifySimpleStringProperty(node, "ddl:datatypeName",
"NUMBER");
+ paramNode = assertNode(node, "a",
"oracleddl:functionParameter");
+ verifySimpleStringProperty(paramNode, "ddl:datatypeName",
"CLOB");
+ }
+ }
+ }
}
}
Modified:
trunk/dna-integration-tests/src/test/resources/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/OracleDdl.cnd
===================================================================
---
trunk/dna-integration-tests/src/test/resources/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/OracleDdl.cnd 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/dna-integration-tests/src/test/resources/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/OracleDdl.cnd 2010-01-07
19:11:34 UTC (rev 1553)
@@ -51,6 +51,7 @@
[oracleddl:operatorOperand] > ddl:operand abstract
[oracleddl:outlineOperand] > ddl:operand abstract
[oracleddl:packageOperand] > ddl:operand abstract
+[oracleddl:parameterOperand] > ddl:operand abstract
[oracleddl:pfileOperand] > ddl:operand abstract
[oracleddl:procedureOperand] > ddl:operand abstract
[oracleddl:profileOperand] > ddl:operand abstract
@@ -72,7 +73,18 @@
// =============================================================================
[oracleddl:columnDefinition] > ddl:columnDefinition
- oracleddl:dropDefault (boolean)
-
+
+//
+
+[oracleddl:functionParameter] > oracleddl:parameterOperand mixin
+ - ddl:datatypeName (STRING) mandatory
+ - ddl:datatypeLength (LONG)
+ - ddl:datatypePrecision (LONG)
+ - ddl:datatypeScale (LONG)
+ - oracleddl:default (STRING)
+ - oracleddl:defaultExpresssion (STRING)
+ - oracleddl:inOutNoCopy (STRING)
+
// =============================================================================
// ALTER STATEMENTS
// =============================================================================
@@ -119,6 +131,11 @@
[oracleddl:createDirectoryStatement] > ddl:creatable, ddl:statement,
oracleddl:directoryOperand mixin
[oracleddl:createDiskgroupStatement] > ddl:creatable, ddl:statement,
oracleddl:diskgroupOperand mixin
[oracleddl:createFunctionStatement] > ddl:creatable, ddl:statement,
oracleddl:functionOperand mixin
+ - ddl:datatypeName (STRING) mandatory
+ - ddl:datatypeLength (LONG)
+ - ddl:datatypePrecision (LONG)
+ - ddl:datatypeScale (LONG)
+ + oracleddl:parameter (oracleddl:functionParameter) = oracleddl:functionParameter
multiple
[oracleddl:createIndexStatement] > ddl:creatable, ddl:statement,
oracleddl:indexOperand mixin
- oracleddl:tableName (string) mandatory
- oracleddl:unique (boolean)
@@ -133,6 +150,7 @@
[oracleddl:createPackageStatement] > ddl:creatable, ddl:statement,
oracleddl:packageOperand mixin
[oracleddl:createPfileStatement] > ddl:creatable, ddl:statement,
oracleddl:pfileOperand mixin
[oracleddl:createProcedureStatement] > ddl:creatable, ddl:statement,
oracleddl:procedureOperand mixin
+ + oracleddl:parameter (oracleddl:functionParameter) = oracleddl:functionParameter
multiple
[oracleddl:createRoleStatement] > ddl:creatable, ddl:statement,
oracleddl:roleOperand mixin
[oracleddl:createRollbackStatement] > ddl:creatable, ddl:statement,
oracleddl:rollbackOperand mixin
[oracleddl:createSequenceStatement] > ddl:creatable, ddl:statement,
oracleddl:sequenceOperand mixin
Added:
trunk/dna-integration-tests/src/test/resources/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/create_procedure_statements.ddl
===================================================================
---
trunk/dna-integration-tests/src/test/resources/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/create_procedure_statements.ddl
(rev 0)
+++
trunk/dna-integration-tests/src/test/resources/org/jboss/dna/test/integration/sequencer/ddl/dialect/oracle/create_procedure_statements.ddl 2010-01-07
19:11:34 UTC (rev 1553)
@@ -0,0 +1,24 @@
+CREATE PROCEDURE remove_emp (employee_id NUMBER) AS tot_emps NUMBER;
+ BEGIN
+ DELETE FROM employees
+ WHERE employees.employee_id = remove_emp.employee_id;
+ tot_emps := tot_emps - 1;
+ END;
+/
+
+CREATE PROCEDURE find_root
+ ( x IN REAL )
+ IS LANGUAGE C
+ NAME c_find_root
+ LIBRARY c_utils
+ PARAMETERS ( x BY REFERENCE );
+
+CREATE FUNCTION SecondMax (input NUMBER) RETURN NUMBER
+ PARALLEL_ENABLE AGGREGATE USING SecondMaxImpl;
+
+CREATE OR REPLACE FUNCTION text_length(a CLOB)
+ RETURN NUMBER DETERMINISTIC IS
+ BEGIN
+ RETURN DBMS_LOB.GETLENGTH(a);
+ END;
+/
\ No newline at end of file
Modified:
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java 2010-01-07
19:11:34 UTC (rev 1553)
@@ -84,7 +84,28 @@
static final String[] STMT_ANALYZE = {"ANALYZE"};
static final String[] STMT_ASSOCIATE_STATISTICS = {"ASSOCIATE",
"STATISTICS"};
static final String[] STMT_AUDIT = {"AUDIT"};
- static final String[] STMT_COMMIT = {"COMMIT"};
+
+ /*
+ COMMIT [ WORK ] [ [ COMMENT string ]
+ | [ WRITE [ IMMEDIATE | BATCH ] [ WAIT | NOWAIT ] ]
+ | FORCE string [, integer ] ] ;
+
+ COMMIT WORK COMMENT "some comment"
+
+ COMMIT COMMENT "some comment"
+
+ COMMIT WORK WRITE [ IMMEDIATE | BATCH ] [ WAIT | NOWAIT ]
+
+ COMMIT WRITE IMMEDIATE NOWAIT;
+
+ COMMIT WORK WRITE IMMEDIATE NOWAIT;
+
+ COMMIT FORCE "some string", 10;
+ */
+ static final String[] STMT_COMMIT_WORK = {"COMMIT", "WORK"};
+ static final String[] STMT_COMMIT_WRITE = {"COMMIT", "WRITE"};
+ static final String[] STMT_COMMIT_FORCE = {"COMMIT", "FORCE"};
+ static final String[] STMT_COMMIT = {"COMMIT"}; // DON"T REGISTER
THIS STMT
static final String[] STMT_COMMENT_ON = {"COMMENT", "ON"};
static final String[] STMT_CREATE_CLUSTER = {CREATE, "CLUSTER"};
@@ -99,7 +120,8 @@
static final String[] STMT_CREATE_INDEXTYPE = {CREATE, "INDEXTYPE"};
static final String[] STMT_CREATE_JAVA = {CREATE, "JAVA"};
static final String[] STMT_CREATE_LIBRARY = {CREATE, "LIBRARY"}; // PARSE
UNTIL '/'
- static final String[] STMT_CREATE_MATERIALIZED = {CREATE, "MATERIALIZED"};
+ static final String[] STMT_CREATE_MATERIALIZED_VIEW = {CREATE,
"MATERIALIZED", "VIEW"};
+ static final String[] STMT_CREATE_MATERIALIZED_VEIW_LOG = {CREATE,
"MATERIALIZED", "VIEW", "LOG"};
static final String[] STMT_CREATE_OPERATOR = {CREATE, "OPERATOR"};
static final String[] STMT_CREATE_OR_REPLACE_DIRECTORY = {CREATE, "OR",
"REPLACE", "DIRECTORY"}; // PARSE UNTIL '/'
static final String[] STMT_CREATE_OR_REPLACE_FUNCTION = {CREATE, "OR",
"REPLACE", "FUNCTION"}; // PARSE UNTIL '/'
@@ -108,6 +130,7 @@
static final String[] STMT_CREATE_OR_REPLACE_PUBLIC_OUTLINE = {CREATE,"OR",
"REPLACE", "PUBLIC", "OUTLINE"}; // TODO: BML
static final String[] STMT_CREATE_OR_REPLACE_PRIVATE_OUTLINE = {CREATE,"OR",
"REPLACE", "PRIVATE", "OUTLINE"}; // TODO: BML
static final String[] STMT_CREATE_OR_REPLACE_PACKAGE = {CREATE,"OR",
"REPLACE", "PACKAGE"};
+ static final String[] STMT_CREATE_OR_REPLACE_PROCEDURE = {CREATE,"OR",
"REPLACE", "PROCEDURE"}; // PARSE UNTIL '/'
static final String[] STMT_CREATE_OR_REPLACE_PUBLIC_SYNONYM = {CREATE, "OR",
"REPLACE", "PUBLIC", "SYNONYM"};
static final String[] STMT_CREATE_OR_REPLACE_SYNONYM = {CREATE, "OR",
"REPLACE", "SYNONYM"};
static final String[] STMT_CREATE_OR_REPLACE_TRIGGER = {CREATE, "OR",
"REPLACE", "TRIGGER"}; // PARSE UNTIL '/
@@ -135,24 +158,29 @@
public static final String[][] CREATE_PHRASES = {
STMT_CREATE_CLUSTER, STMT_CREATE_CONTEXT, STMT_CREATE_CONTROLFILE,
STMT_CREATE_DATABASE, STMT_CREATE_DIMENSION,
STMT_CREATE_DIRECTORY, STMT_CREATE_DISKGROUP, STMT_CREATE_FUNCTION, STMT_CREATE_INDEX,
STMT_CREATE_INDEXTYPE,
- STMT_CREATE_JAVA, STMT_CREATE_MATERIALIZED, STMT_CREATE_OPERATOR,
STMT_CREATE_OR_REPLACE_DIRECTORY,
- STMT_CREATE_OR_REPLACE_OUTLINE,
- STMT_CREATE_OR_REPLACE_PUBLIC_SYNONYM, STMT_CREATE_OR_REPLACE_SYNONYM,
+ STMT_CREATE_JAVA, STMT_CREATE_MATERIALIZED_VIEW, STMT_CREATE_MATERIALIZED_VEIW_LOG,
STMT_CREATE_OPERATOR,
+ STMT_CREATE_OR_REPLACE_DIRECTORY, STMT_CREATE_OR_REPLACE_FUNCTION,
STMT_CREATE_LIBRARY,
+ STMT_CREATE_OR_REPLACE_LIBRARY, STMT_CREATE_OR_REPLACE_OUTLINE,
STMT_CREATE_OR_REPLACE_PROCEDURE,
+ STMT_CREATE_OR_REPLACE_PUBLIC_SYNONYM, STMT_CREATE_OR_REPLACE_SYNONYM,
STMT_CREATE_OR_REPLACE_PACKAGE, STMT_CREATE_OR_REPLACE_TRIGGER,
STMT_CREATE_OR_REPLACE_TYPE, STMT_CREATE_OUTLINE, STMT_CREATE_PACKAGE,
STMT_CREATE_PFILE, STMT_CREATE_PROCEDURE,
STMT_CREATE_PROFILE, STMT_CREATE_PUBLIC_DATABASE, STMT_CREATE_PUBLIC_ROLLBACK,
STMT_CREATE_PUBLIC_SYNONYM, STMT_CREATE_ROLE,
- STMT_CREATE_ROLLBACK, STMT_CREATE_SEQUENCE, STMT_CREATE_SPFILE, STMT_CREATE_SYNONYM,
STMT_CREATE_TABLESPACE,
+ STMT_CREATE_ROLLBACK, STMT_CREATE_SEQUENCE, STMT_CREATE_SPFILE, STMT_CREATE_SYNONYM,
STMT_CREATE_TABLESPACE, STMT_CREATE_TRIGGER,
STMT_CREATE_TYPE, STMT_CREATE_USER, STMT_CREATE_UNIQUE_INDEX,
STMT_CREATE_BITMAP_INDEX,
STMT_CREATE_TABLESPACE, STMT_CREATE_PROCEDURE
};
- public static final String[][] IGNORABLE_CREATE_PHRASES_WITH_SLASHES = {
- STMT_CREATE_LIBRARY, STMT_CREATE_OR_REPLACE_FUNCTION,
- STMT_CREATE_OR_REPLACE_LIBRARY,
- STMT_CREATE_OR_REPLACE_PACKAGE, STMT_CREATE_OR_REPLACE_TRIGGER,
- STMT_CREATE_TRIGGER
- };
+ static final String[][] SLASHED_STMT_PHRASES = {
+ STMT_CREATE_FUNCTION,
+ STMT_CREATE_LIBRARY,
+ STMT_CREATE_OR_REPLACE_DIRECTORY,
+ STMT_CREATE_OR_REPLACE_FUNCTION,
+ STMT_CREATE_OR_REPLACE_LIBRARY,
+ STMT_CREATE_OR_REPLACE_PROCEDURE,
+ STMT_CREATE_OR_REPLACE_TRIGGER,
+ STMT_CREATE_PACKAGE,
+ STMT_CREATE_PROCEDURE
+ };
-
static final String[] STMT_DISASSOCIATE_STATISTICS = {"DISASSOCIATE",
"STATISTICS"};
static final String[] STMT_DROP_CLUSTER = {DROP, "CLUSTER"};
@@ -214,7 +242,8 @@
};
static final String[][] MISC_PHRASES = {
- STMT_ANALYZE, STMT_ASSOCIATE_STATISTICS, STMT_AUDIT, STMT_COMMIT, STMT_COMMENT_ON,
STMT_DISASSOCIATE_STATISTICS,
+ STMT_ANALYZE, STMT_ASSOCIATE_STATISTICS, STMT_AUDIT, STMT_COMMIT_WORK,
STMT_COMMIT_WRITE, STMT_COMMIT_FORCE,
+ STMT_COMMENT_ON, STMT_DISASSOCIATE_STATISTICS,
STMT_EXPLAIN_PLAN, STMT_FLASHBACK, STMT_LOCK_TABLE, STMT_MERGE, STMT_NOAUDIT,
STMT_PURGE,
STMT_RENAME, STMT_ROLLBACK_TO_SAVEPOINT, STMT_ROLLBACK_WORK, STMT_ROLLBACK,
STMT_SAVEPOINT, STMT_TRUNCATE
};
Modified:
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlLexicon.java
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlLexicon.java 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlLexicon.java 2010-01-07
19:11:34 UTC (rev 1553)
@@ -51,7 +51,8 @@
public static final Name TYPE_CREATE_INDEXTYPE_STATEMENT = new
BasicName(Namespace.URI, "createIndextypeStatement");
public static final Name TYPE_CREATE_JAVA_STATEMENT = new BasicName(Namespace.URI,
"createJavaStatement");
public static final Name TYPE_CREATE_LIBRARY_STATEMENT = new
BasicName(Namespace.URI, "createLibraryStatement");
- public static final Name TYPE_CREATE_MATERIALIZED_STATEMENT = new
BasicName(Namespace.URI, "createMaterializedStatement");
+ public static final Name TYPE_CREATE_MATERIALIZED_VIEW_STATEMENT = new
BasicName(Namespace.URI, "createMaterializedViewStatement");
+ public static final Name TYPE_CREATE_MATERIALIZED_VIEW_LOG_STATEMENT = new
BasicName(Namespace.URI, "createMaterializedViewLogStatement");
public static final Name TYPE_CREATE_OPERATOR_STATEMENT = new
BasicName(Namespace.URI, "createOperatorStatement");
public static final Name TYPE_CREATE_OUTLINE_STATEMENT = new
BasicName(Namespace.URI, "createOutlineStatement");
public static final Name TYPE_CREATE_PACKAGE_STATEMENT = new
BasicName(Namespace.URI, "createPackageStatement");
@@ -149,13 +150,19 @@
public static final Name TYPE_RENAME_COLUMN = new BasicName(Namespace.URI,
"renameColumn");
public static final Name TYPE_RENAME_CONSTRAINT = new BasicName(Namespace.URI,
"renameConstraint");
+ public static final Name TYPE_FUNCTION_PARAMETER = new
BasicName(Namespace.URI, "functionParameter");
// PROPERTY NAMES
public static final Name TARGET_OBJECT_TYPE = new BasicName(Namespace.URI,
"targetObjectType");
public static final Name TARGET_OBJECT_NAME = new BasicName(Namespace.URI,
"targetObjectName");
- public static final Name COMMENT = new BasicName(Namespace.URI,
"comment");
- public static final Name UNIQUE_INDEX = new BasicName(Namespace.URI,
"unique");
- public static final Name BITMAP_INDEX = new BasicName(Namespace.URI,
"bitmap");
- public static final Name TABLE_NAME = new BasicName(Namespace.URI,
"tableName");
+ public static final Name COMMENT = new BasicName(Namespace.URI,
"comment");
+ public static final Name UNIQUE_INDEX = new BasicName(Namespace.URI,
"unique");
+ public static final Name BITMAP_INDEX = new BasicName(Namespace.URI,
"bitmap");
+ public static final Name TABLE_NAME = new BasicName(Namespace.URI,
"tableName");
+ public static final Name DEFAULT = new BasicName(Namespace.URI,
"default");
+ public static final Name DEFAULT_EXPRESSION = new BasicName(Namespace.URI,
"defaultExpression");
+ public static final Name IN_OUT_NO_COPY = new BasicName(Namespace.URI,
"inOutNoCopy");
+ public static final Name AUTHID_VALUE = new BasicName(Namespace.URI,
"authIdValue");
+
}
Modified:
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java 2010-01-07
19:11:34 UTC (rev 1553)
@@ -24,20 +24,18 @@
package org.jboss.dna.sequencer.ddl.dialect.oracle;
import static
org.jboss.dna.sequencer.ddl.StandardDdlLexicon.CREATE_VIEW_QUERY_EXPRESSION;
-import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_COLUMN_REFERENCE;
-import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_CREATE_VIEW_STATEMENT;
import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.DROP_BEHAVIOR;
import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.DROP_OPTION_TYPE;
import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.NEW_NAME;
import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_ALTER_TABLE_STATEMENT;
+import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_COLUMN_REFERENCE;
+import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_CREATE_VIEW_STATEMENT;
import static
org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_DROP_COLUMN_DEFINITION;
import static
org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_DROP_TABLE_CONSTRAINT_DEFINITION;
import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_DROP_TABLE_STATEMENT;
import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_GRANT_STATEMENT;
-import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_MISSING_TERMINATOR;
import static org.jboss.dna.sequencer.ddl.StandardDdlLexicon.TYPE_UNKNOWN_STATEMENT;
import static org.jboss.dna.sequencer.ddl.dialect.oracle.OracleDdlLexicon.*;
-import static
org.jboss.dna.sequencer.ddl.dialect.postgres.PostgresDdlLexicon.TYPE_PREPARE_STATEMENT;
import java.util.ArrayList;
import java.util.List;
import org.jboss.dna.common.text.ParsingException;
@@ -101,7 +99,6 @@
registerStatementStartPhrase(ALTER_PHRASES);
registerStatementStartPhrase(CREATE_PHRASES);
registerStatementStartPhrase(DROP_PHRASES);
- registerStatementStartPhrase(IGNORABLE_CREATE_PHRASES_WITH_SLASHES);
registerStatementStartPhrase(MISC_PHRASES);
registerStatementStartPhrase(SET_PHRASES);
}
@@ -112,29 +109,17 @@
assert tokens != null;
assert rootNode != null;
- // We may hava a prepare statement that is followed by a missing terminator node
+ // We may have a prepare statement that is followed by a missing terminator node
// We also may have nodes that have an extra terminator node representing the
'/' backslash
// These nodes will have type "TYPE_BACKSLASH_TERMINATOR".
List<AstNode> copyOfNodes = new
ArrayList<AstNode>(rootNode.getChildren());
- AstNode prepareNode = null;
+
AstNode complexNode = null;
- boolean mergeNextStatement = false;
+
for (AstNode child : copyOfNodes) {
- if (prepareNode != null && mergeNextStatement) {
- mergeNodes(tokens, prepareNode, child);
- rootNode.removeChild(child);
- prepareNode = null;
- }
- if (prepareNode != null && nodeFactory().hasMixinType(child,
TYPE_MISSING_TERMINATOR)) {
- mergeNextStatement = true;
- } else {
- prepareNode = null;
- mergeNextStatement = false;
- }
-
if ((complexNode != null && nodeFactory().hasMixinType(child,
TYPE_UNKNOWN_STATEMENT))
|| (complexNode != null && nodeFactory().hasMixinType(child,
TYPE_BACKSLASH_TERMINATOR))) {
mergeNodes(tokens, complexNode, child);
@@ -143,16 +128,13 @@
complexNode = null;
}
- if (nodeFactory().hasMixinType(child, TYPE_PREPARE_STATEMENT)) {
- prepareNode = child;
- complexNode = null;
- } else if (nodeFactory().hasMixinType(child, TYPE_CREATE_FUNCTION_STATEMENT)
+
+ if (nodeFactory().hasMixinType(child, TYPE_CREATE_FUNCTION_STATEMENT)
|| nodeFactory().hasMixinType(child,
TYPE_CREATE_TRIGGER_STATEMENT)
|| nodeFactory().hasMixinType(child,
TYPE_CREATE_LIBRARY_STATEMENT)
|| nodeFactory().hasMixinType(child,
TYPE_CREATE_PACKAGE_STATEMENT)
|| nodeFactory().hasMixinType(child,
TYPE_CREATE_PROCEDURE_STATEMENT)) {
complexNode = child;
- prepareNode = null;
}
}
@@ -249,7 +231,7 @@
return parseStatement(tokens, STMT_ASSOCIATE_STATISTICS, parentNode,
TYPE_ASSOCIATE_STATISTICS_STATEMENT);
} else if (tokens.matches(STMT_AUDIT)) {
return parseStatement(tokens, STMT_AUDIT, parentNode, TYPE_AUDIT_STATEMENT);
- } else if (tokens.matches(STMT_COMMIT)) {
+ } else if (tokens.matches(STMT_COMMIT_FORCE) || tokens.matches(STMT_COMMIT_WORK)
|| tokens.matches(STMT_COMMIT_WRITE)) {
return parseStatement(tokens, STMT_COMMIT, parentNode,
TYPE_COMMIT_STATEMENT);
} else if (tokens.matches(STMT_DISASSOCIATE_STATISTICS)) {
return parseStatement(tokens, STMT_DISASSOCIATE_STATISTICS, parentNode,
TYPE_DISASSOCIATE_STATISTICS_STATEMENT);
@@ -314,10 +296,10 @@
return parseStatement(tokens, STMT_CREATE_DISKGROUP, parentNode,
TYPE_CREATE_DISKGROUP_STATEMENT);
} else if (tokens.matches(STMT_CREATE_FUNCTION)) {
// ============ > PARSE UNTIL '/' for STMT_CREATE_FUNCTION
- return parseStatement(tokens, STMT_CREATE_FUNCTION, parentNode,
TYPE_CREATE_FUNCTION_STATEMENT);
+ return parseCreateFunctionStatement(tokens, parentNode);
} else if (tokens.matches(STMT_CREATE_OR_REPLACE_FUNCTION)) {
// ============ > PARSE UNTIL '/' for
STMT_CREATE_OR_REPLACE_FUNCTION
- return parseStatement(tokens, STMT_CREATE_OR_REPLACE_FUNCTION, parentNode,
TYPE_CREATE_FUNCTION_STATEMENT);
+ return parseCreateFunctionStatement(tokens, parentNode);
} else if (tokens.matches(STMT_CREATE_INDEXTYPE)) {
return parseStatement(tokens, STMT_CREATE_INDEXTYPE, parentNode,
TYPE_CREATE_INDEXTYPE_STATEMENT);
} else if (tokens.matches(STMT_CREATE_JAVA)) {
@@ -328,8 +310,8 @@
} else if (tokens.matches(STMT_CREATE_OR_REPLACE_LIBRARY)) {
// ============ > PARSE UNTIL '/' STMT_CREATE_OR_REPLACE_LIBRARY
return parseStatement(tokens, STMT_CREATE_OR_REPLACE_LIBRARY, parentNode,
TYPE_CREATE_LIBRARY_STATEMENT);
- } else if (tokens.matches(STMT_CREATE_MATERIALIZED)) {
- return parseStatement(tokens, STMT_CREATE_MATERIALIZED, parentNode,
TYPE_CREATE_MATERIALIZED_STATEMENT);
+ } else if (tokens.matches(STMT_CREATE_MATERIALIZED_VIEW)) {
+ return parseMaterializedViewStatement(tokens, parentNode);
} else if (tokens.matches(STMT_CREATE_OPERATOR)) {
return parseStatement(tokens, STMT_CREATE_OPERATOR, parentNode,
TYPE_CREATE_OPERATOR_STATEMENT);
} else if (tokens.matches(STMT_CREATE_OUTLINE)) {
@@ -346,7 +328,10 @@
return parseStatement(tokens, STMT_CREATE_PFILE, parentNode,
TYPE_CREATE_PFILE_STATEMENT);
} else if (tokens.matches(STMT_CREATE_PROCEDURE)) {
// ============ > PARSE UNTIL '/' for STMT_CREATE_PROCEDURE
- return parseStatement(tokens, STMT_CREATE_PROCEDURE, parentNode,
TYPE_CREATE_PROCEDURE_STATEMENT);
+ return parseCreateProcedureStatement(tokens, parentNode);
+ } else if (tokens.matches(STMT_CREATE_OR_REPLACE_PROCEDURE)) {
+ // ============ > PARSE UNTIL '/' for STMT_CREATE_PROCEDURE
+ return parseCreateProcedureStatement(tokens, parentNode);
} else if (tokens.matches(STMT_CREATE_PROFILE)) {
return parseStatement(tokens, STMT_CREATE_PROFILE, parentNode,
TYPE_CREATE_PROFILE_STATEMENT);
} else if (tokens.matches(STMT_CREATE_ROLE)) {
@@ -413,7 +398,263 @@
return node;
}
+
+ /**
+ * Parses DDL CREATE FUNCTION statement
+ *
+ * @param tokens the tokenized {@link DdlTokenStream} of the DDL input content; may
not be null
+ * @param parentNode the parent {@link AstNode} node; may not be null
+ * @return the parsed CREATE FUNCTION statement node
+ * @throws ParsingException
+ */
+ protected AstNode parseCreateFunctionStatement( DdlTokenStream tokens,
+ AstNode parentNode ) throws ParsingException {
+ assert tokens != null;
+ assert parentNode != null;
+ markStartOfStatement(tokens);
+
+ /* ----------------------------------------------------------------------
+ CREATE [ OR REPLACE ] FUNCTION [ schema. ] function_name
+ [ ( parameter_declaration [, parameter_declaration] )
+ ]
+ RETURN datatype
+ [ { invoker_rights_clause
+ | DETERMINISTIC
+ | parallel_enable_clause
+ | result_cache_clause
+ }...
+ ]
+ { { AGGREGATE | PIPELINED }
+ USING [ schema. ] implementation_type
+ | [ PIPELINED ] { IS | AS } { [ declare_section ] body | call_spec }
+ } ;
+
+ parameter_declaration = parameter_name [ IN | { { OUT | { IN OUT }} [ NOCOPY
] } ] datatype [ { := | DEFAULT } expression ]
+ ---------------------------------------------------------------------- */
+
+ boolean isReplace = tokens.canConsume(STMT_CREATE_OR_REPLACE_FUNCTION);
+
+ tokens.canConsume(STMT_CREATE_FUNCTION);
+
+ String name = parseName(tokens);
+
+ AstNode node = nodeFactory().node(name, parentNode,
TYPE_CREATE_FUNCTION_STATEMENT);
+
+ if (isReplace) {
+ // TODO: SET isReplace = TRUE to node (possibly a cnd mixin of
"replaceable"
+ }
+
+ boolean ok = parseParameters(tokens, node);
+
+ if( ok ) {
+ if( tokens.canConsume("RETURN")) {
+ DataType dType = getDatatypeParser().parse(tokens);
+ if( dType != null ) {
+ getDatatypeParser().setPropertiesOnNode(node, dType);
+ }
+ }
+ }
+
+ parseUntilFwdSlash(tokens, false);
+
+ tokens.canConsume("/");
+
+ markEndOfStatement(tokens, node);
+
+ return node;
+ }
+
+ /**
+ * Parses DDL CREATE PROCEDURE statement
+ *
+ * @param tokens the tokenized {@link DdlTokenStream} of the DDL input content; may
not be null
+ * @param parentNode the parent {@link AstNode} node; may not be null
+ * @return the parsed CREATE PROCEDURE statement node
+ * @throws ParsingException
+ */
+ protected AstNode parseCreateProcedureStatement( DdlTokenStream tokens,
+ AstNode parentNode ) throws ParsingException {
+ assert tokens != null;
+ assert parentNode != null;
+
+ markStartOfStatement(tokens);
+ /* ----------------------------------------------------------------------
+ CREATE [ OR REPLACE ] PROCEDURE [ schema. ] procedure_name
+ [ ( parameter_declaration [, parameter_declaration ] ) ]
+ [ AUTHID { CURRENT_USER | DEFINER ]
+ { IS | AS }
+ { [ declare_section ] body | call_spec | EXTERNAL} ;
+
+ call_spec = LANGUAGE { Java_declaration | C_declaration }
+
+ Java_declaration = JAVA NAME string
+
+ C_declaration =
+ C [ NAME name ]
+ LIBRARY lib_name
+ [ AGENT IN (argument[, argument ]...) ]
+ [ WITH CONTEXT ]
+ [ PARAMETERS (parameter[, parameter ]...) ]
+
+ parameter_declaration = parameter_name [ IN | { { OUT | { IN OUT }} [ NOCOPY
] } ] datatype [ { := | DEFAULT } expression ]
+ ---------------------------------------------------------------------- */
+
+ boolean isReplace = tokens.canConsume(STMT_CREATE_OR_REPLACE_PROCEDURE);
+
+ tokens.canConsume(STMT_CREATE_PROCEDURE);
+
+ String name = parseName(tokens);
+
+ AstNode node = nodeFactory().node(name, parentNode,
TYPE_CREATE_PROCEDURE_STATEMENT);
+
+ if (isReplace) {
+ // TODO: SET isReplace = TRUE to node (possibly a cnd mixin of
"replaceable"
+ }
+
+ boolean ok = parseParameters(tokens, node);
+
+ if( ok ) {
+ if( tokens.canConsume("AUTHID")) {
+ if( tokens.canConsume("CURRENT_USER")) {
+ node.setProperty(AUTHID_VALUE, "AUTHID CURRENT_USER");
+ } else {
+ tokens.consume("DEFINER");
+ node.setProperty(AUTHID_VALUE, "DEFINER");
+ }
+ }
+ }
+
+ parseUntilFwdSlash(tokens, false);
+
+ tokens.canConsume("/");
+
+ markEndOfStatement(tokens, node);
+
+ return node;
+ }
+
+
+ private boolean parseParameters( DdlTokenStream tokens, AstNode procedureNode) throws
ParsingException {
+ assert tokens != null;
+ assert procedureNode != null;
+
+ // parameter_declaration = parameter_name [ IN | { { OUT | { IN OUT }} [ NOCOPY
] } ] datatype [ { := | DEFAULT } expression ]
+ // Assume we start with open parenthesis '(', then we parse comma
separated list of function parameters
+ // which have the form: [ parameter-Name ] DataType
+ // So, try getting datatype, if datatype == NULL, then parseName() & parse
datatype, then repeat as long as next token is ","
+
+ tokens.consume(L_PAREN); // EXPECTED
+
+ while (!tokens.canConsume(R_PAREN)) {
+
+ String paramName = parseName(tokens);
+ String inOutStr = null;
+ if( tokens.matches("IN")) {
+ if( tokens.canConsume("IN", "OUT")){
+ if( tokens.canConsume("NOCOPY")) {
+ inOutStr = "IN OUT NOCOPY";
+ } else {
+ inOutStr = "IN OUT";
+ }
+ } else {
+ tokens.consume("IN");
+ inOutStr = "IN";
+ }
+
+ } else if( tokens.matches("OUT")) {
+ if( tokens.canConsume("OUT", "NOCOPY")) {
+ inOutStr = "OUT NOCOPY";
+ } else {
+ tokens.consume("OUT");
+ inOutStr = "OUT";
+ }
+ }
+
+ DataType datatype = getDatatypeParser().parse(tokens);
+ AstNode paramNode = nodeFactory().node(paramName, procedureNode,
TYPE_FUNCTION_PARAMETER);
+ if( datatype != null ) {
+ getDatatypeParser().setPropertiesOnNode(paramNode, datatype);
+ }
+
+ if( tokens.matchesAnyOf(":=", "DEFAULT") ||
!tokens.matchesAnyOf(COMMA, R_PAREN)) {
+ String msg =
DdlSequencerI18n.unsupportedProcedureParameterDeclaration.text(procedureNode.getProperty(StandardDdlLexicon.NAME));
+ DdlParserProblem problem = new DdlParserProblem(Problems.WARNING,
getCurrentMarkedPosition(), msg);
+ addProblem(problem, procedureNode);
+ return false;
+ }
+
+ if( inOutStr != null ) {
+ paramNode.setProperty(IN_OUT_NO_COPY, inOutStr);
+ }
+
+ tokens.canConsume(COMMA);
+ }
+
+ return true;
+ }
+
+ /**
+ * Parses DDL CREATE MATERIALIZED VIEW statement
+ *
+ * This could either be a standard view or a VIEW LOG ON statement.
+ *
+ * @param tokens the tokenized {@link DdlTokenStream} of the DDL input content; may
not be null
+ * @param parentNode the parent {@link AstNode} node; may not be null
+ * @return the parsed CREATE MATERIALIZED VIEW statement node
+ * @throws ParsingException
+ */
+ protected AstNode parseMaterializedViewStatement( DdlTokenStream tokens,
+ AstNode parentNode ) throws ParsingException {
+ assert tokens != null;
+ assert parentNode != null;
+
+ markStartOfStatement(tokens);
+
+ /* ----------------------------------------------------------------------
+ CREATE MATERIALIZED VIEW
+ [ schema. ]materialized_view
+ [ column_alias [, column_alias]... ]
+ [ OF [ schema. ]object_type ] .................... (MORE...)
+
+ EXAMPLES:
+
+ CREATE MATERIALIZED VIEW LOG ON products
+ WITH ROWID, SEQUENCE (prod_id)
+ INCLUDING NEW VALUES;
+
+ CREATE MATERIALIZED VIEW sales_mv
+ BUILD IMMEDIATE
+ REFRESH FAST ON COMMIT
+ AS SELECT t.calendar_year, p.prod_id,
+ SUM(s.amount_sold) AS sum_sales
+ FROM times t, products p, sales s
+ WHERE t.time_id = s.time_id AND p.prod_id = s.prod_id
+ GROUP BY t.calendar_year, p.prod_id;
+ ---------------------------------------------------------------------- */
+
+ boolean isLog = tokens.canConsume(STMT_CREATE_MATERIALIZED_VEIW_LOG);
+
+ tokens.canConsume(STMT_CREATE_MATERIALIZED_VIEW);
+
+ String name = parseName(tokens);
+
+ AstNode node = null;
+
+ if( isLog ) {
+ node = nodeFactory().node(name, parentNode,
TYPE_CREATE_MATERIALIZED_VIEW_LOG_STATEMENT);
+ } else {
+ node = nodeFactory().node(name, parentNode,
TYPE_CREATE_MATERIALIZED_VIEW_STATEMENT);
+ }
+
+ parseUntilTerminator(tokens);
+
+ markEndOfStatement(tokens, node);
+
+ return node;
+ }
+
+
@Override
protected AstNode parseGrantStatement( DdlTokenStream tokens,
AstNode parentNode ) throws ParsingException
{
@@ -1192,7 +1433,7 @@
// TODO: Oracle has changed some things between versions 9i, and 10/11,
// Basically they've added column properties (i.e. SORT option, ENCRYPT
encryption_spec)
- // Need to 1) Override parseColumnDefinition to handle these.
+ // Need to 1) Override parseColumnDefinition
shouldParseOracleProceduresAndFunctionsto handle these.
String tableElementString = getTableElementsString(tokens, false);
@@ -1265,17 +1506,32 @@
boolean stopAtStatementStart ) throws
ParsingException {
StringBuffer sb = new StringBuffer();
if (stopAtStatementStart) {
- while (tokens.hasNext() &&
!tokens.matches(DdlTokenizer.STATEMENT_KEY) && !tokens.matches('/')) { //
!tokens.matches(DdlTokenizer.STATEMENT_KEY)
+ while (tokens.hasNext()
+
+ && !tokens.matches(DdlTokenizer.STATEMENT_KEY)
+ && !tokens.matches('/')) { //
!tokens.matches(DdlTokenizer.STATEMENT_KEY)
// &&
sb.append(SPACE).append(tokens.consume());
}
} else {
- while (tokens.hasNext() && !tokens.matches('/')) { //
!tokens.matches(DdlTokenizer.STATEMENT_KEY) &&
+ while (tokens.hasNext()
+ && !isFwdSlashedStatement(tokens)
+ && !tokens.matches('/')) { //
!tokens.matches(DdlTokenizer.STATEMENT_KEY) &&
sb.append(SPACE).append(tokens.consume());
}
}
return sb.toString();
}
+
+ private boolean isFwdSlashedStatement( DdlTokenStream tokens ) throws
ParsingException {
+ for(int i=0; i< SLASHED_STMT_PHRASES.length; i++ ) {
+ if( tokens.matches(SLASHED_STMT_PHRASES[i])) {
+ return true;
+ }
+ }
+
+ return false;
+ }
private void consumeSlash( DdlTokenStream tokens ) throws ParsingException {
tokens.canConsume("/");
Modified:
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/DdlSequencerI18n.properties
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/DdlSequencerI18n.properties 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/DdlSequencerI18n.properties 2010-01-07
19:11:34 UTC (rev 1553)
@@ -30,4 +30,5 @@
unusedTokensParsingColumnDefinition = The following unused tokens were found parsing a
column definition for table: {0}.
alterTableOptionNotFound = ALTER TABLE Option not found. Check your DDL for incomplete
statement near line {0}, column {1}
unusedTokensParsingCreateIndex = The following unused tokens were found parsing a create
index statement: {0}.
-missingReturnTypeForFunction = The function {0} is missing a return data type.
\ No newline at end of file
+missingReturnTypeForFunction = The function {0} is missing a return data type.
+unsupportedProcedureParameterDeclaration = The procedure {0} contains parameters with
unsupported expression info.
\ No newline at end of file
Deleted:
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd 2010-01-07
19:11:34 UTC (rev 1553)
@@ -1,202 +0,0 @@
-/*
- * JBoss DNA (
http://www.jboss.org/dna)
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership. Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- * See the AUTHORS.txt file in the distribution for a full listing of
- * individual contributors.
- *
- * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
- * is licensed to you under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * JBoss DNA is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
- //------------------------------------------------------------------------------
-// N A M E S P A C E S
-//------------------------------------------------------------------------------
-<jcr='http://www.jcp.org/jcr/1.0'>
-<nt='http://www.jcp.org/jcr/nt/1.0'>
-<mix='http://www.jcp.org/jcr/mix/1.0'>
-<ddl='http://www.jboss.org/dna/ddl/1.0'>
-<oracleddl='http://www.jboss.org/dna/ddl/oracle/1.0'>
-
-// =============================================================================
-// OPERANDS
-// =============================================================================
-[oracleddl:clusterOperand] > ddl:operand abstract
-[oracleddl:commentOperand] > ddl:operand abstract
-[oracleddl:contextOperand] > ddl:operand abstract
-[oracleddl:controlfileOperand] > ddl:operand abstract
-[oracleddl:databaseOperand] > ddl:operand abstract
-[oracleddl:dimensionOperand] > ddl:operand abstract
-[oracleddl:directoryOperand] > ddl:operand abstract
-[oracleddl:diskgroupOperand] > ddl:operand abstract
-[oracleddl:functionOperand] > ddl:operand abstract
-[oracleddl:indexOperand] > ddl:operand abstract
-[oracleddl:indextypeOperand] > ddl:operand abstract
-[oracleddl:javaOperand] > ddl:operand abstract
-[oracleddl:libraryOperand] > ddl:operand abstract
-[oracleddl:materializedOperand] > ddl:operand abstract
-[oracleddl:operatorOperand] > ddl:operand abstract
-[oracleddl:outlineOperand] > ddl:operand abstract
-[oracleddl:packageOperand] > ddl:operand abstract
-[oracleddl:pfileOperand] > ddl:operand abstract
-[oracleddl:procedureOperand] > ddl:operand abstract
-[oracleddl:profileOperand] > ddl:operand abstract
-[oracleddl:resourceOperand] > ddl:operand abstract
-[oracleddl:roleOperand] > ddl:operand abstract
-[oracleddl:rollbackOperand] > ddl:operand abstract
-[oracleddl:sequenceOperand] > ddl:operand abstract
-[oracleddl:sessionOperand] > ddl:operand abstract
-[oracleddl:spfileOperand] > ddl:operand abstract
-[oracleddl:systemOperand] > ddl:operand abstract
-[oracleddl:synonymOperand] > ddl:operand abstract
-[oracleddl:tablespaceOperand] > ddl:operand abstract
-[oracleddl:triggerOperand] > ddl:operand abstract
-[oracleddl:typeOperand] > ddl:operand abstract
-[oracleddl:userOperand] > ddl:operand abstract
-
-// =============================================================================
-// COLUMN
-// =============================================================================
-[oracleddl:columnDefinition] > ddl:columnDefinition
- - oracleddl:dropDefault (boolean)
-
-// =============================================================================
-// ALTER STATEMENTS
-// =============================================================================
-[oracleddl:alterClusterStatement] > ddl:alterable, ddl:statement,
oracleddl:clusterOperand mixin
-[oracleddl:alterDatabaseStatement] > ddl:alterable, ddl:statement,
oracleddl:databaseOperand mixin
-[oracleddl:alterDimensionStatement] > ddl:alterable, ddl:statement,
oracleddl:dimensionOperand mixin
-[oracleddl:alterDiskgroupStatement] > ddl:alterable, ddl:statement,
oracleddl:diskgroupOperand mixin
-[oracleddl:alterFunctionStatement] > ddl:alterable, ddl:statement,
oracleddl:functionOperand mixin
-[oracleddl:alterIndexStatement] > ddl:alterable, ddl:statement,
oracleddl:indexOperand mixin
-[oracleddl:alterIndextypeStatement] > ddl:alterable, ddl:statement,
oracleddl:indextypeOperand mixin
-[oracleddl:alterJavaStatement] > ddl:alterable, ddl:statement,
oracleddl:javaOperand mixin
-[oracleddl:alterMaterializedStatement] > ddl:alterable, ddl:statement,
oracleddl:materializedOperand mixin
-[oracleddl:alterOperatorStatement] > ddl:alterable, ddl:statement,
oracleddl:operatorOperand mixin
-[oracleddl:alterOutlineStatement] > ddl:alterable, ddl:statement,
oracleddl:outlineOperand mixin
-[oracleddl:alterPackageStatement] > ddl:alterable, ddl:statement,
oracleddl:packageOperand mixin
-[oracleddl:alterProcedureStatement] > ddl:alterable, ddl:statement,
oracleddl:procedureOperand mixin
-[oracleddl:alterProfileStatement] > ddl:alterable, ddl:statement,
oracleddl:profileOperand mixin
-[oracleddl:alterResourceStatement] > ddl:alterable, ddl:statement,
oracleddl:resourceOperand mixin
-[oracleddl:alterRoleStatement] > ddl:alterable, ddl:statement,
oracleddl:roleOperand mixin
-[oracleddl:alterRollbackStatement] > ddl:alterable, ddl:statement,
oracleddl:rollbackOperand mixin
-[oracleddl:alterSequenceStatement] > ddl:alterable, ddl:statement,
oracleddl:sequenceOperand mixin
-[oracleddl:alterSessionStatement] > ddl:alterable, ddl:statement,
oracleddl:sessionOperand mixin
-[oracleddl:alterSystemStatement] > ddl:alterable, ddl:statement,
oracleddl:systemOperand mixin
-[oracleddl:alterTablespaceStatement] > ddl:alterable, ddl:statement,
oracleddl:tablespaceOperand mixin
-[oracleddl:alterTriggerStatement] > ddl:alterable, ddl:statement,
oracleddl:triggerOperand mixin
-[oracleddl:alterTypeStatement] > ddl:alterable, ddl:statement,
oracleddl:typeOperand mixin
-[oracleddl:alterUserStatement] > ddl:alterable, ddl:statement,
oracleddl:userOperand mixin
-[oracleddl:alterViewStatement] > ddl:alterable, ddl:statement,
ddl:viewOperand mixin
-
-[oracleddl:alterTableStatement] > ddl:alterTableStatement mixin
- - oracleddl:newTableName (STRING)
- + oracleddl:renameColumn (ddl:renamable) = ddl:renamable multiple
- + oracleddl:renameConstraint (ddl:renamable) = ddl:renamable multiple
-
-// =============================================================================
-// CREATE STATEMENTS
-// =============================================================================
-
-[oracleddl:createClusterStatement] > ddl:creatable, ddl:statement,
oracleddl:clusterOperand mixin
-[oracleddl:createContextStatement] > ddl:creatable, ddl:statement,
oracleddl:contextOperand mixin
-[oracleddl:createControlfileStatement] > ddl:creatable, ddl:statement,
oracleddl:controlfileOperand mixin
-[oracleddl:createDatabaseStatement] > ddl:creatable, ddl:statement,
oracleddl:databaseOperand mixin
-[oracleddl:createDimensionStatement] > ddl:creatable, ddl:statement,
oracleddl:dimensionOperand mixin
-[oracleddl:createDirectoryStatement] > ddl:creatable, ddl:statement,
oracleddl:directoryOperand mixin
-[oracleddl:createDiskgroupStatement] > ddl:creatable, ddl:statement,
oracleddl:diskgroupOperand mixin
-[oracleddl:createFunctionStatement] > ddl:creatable, ddl:statement,
oracleddl:functionOperand mixin
-[oracleddl:createIndexStatement] > ddl:creatable, ddl:statement,
oracleddl:indexOperand mixin
- - oracleddl:tableName (string) mandatory
- - oracleddl:unique (boolean)
- - oracleddl:bitmap (boolean)
- + * (ddl:columnReference) = ddl:columnReference multiple
-[oracleddl:createIndexTypeStatement] > ddl:creatable, ddl:statement,
oracleddl:indextypeOperand mixin
-[oracleddl:createJavaStatement] > ddl:creatable, ddl:statement,
oracleddl:javaOperand mixin
-[oracleddl:createLibraryStatement] > ddl:creatable, ddl:statement,
oracleddl:libraryOperand mixin
-[oracleddl:createMaterializedStatement] > ddl:creatable, ddl:statement,
oracleddl:materializedOperand mixin
-[oracleddl:createOperatorStatement] > ddl:creatable, ddl:statement,
oracleddl:operatorOperand mixin
-[oracleddl:createOutlineStatement] > ddl:creatable, ddl:statement,
oracleddl:outlineOperand mixin
-[oracleddl:createPackageStatement] > ddl:creatable, ddl:statement,
oracleddl:packageOperand mixin
-[oracleddl:createPfileStatement] > ddl:creatable, ddl:statement,
oracleddl:pfileOperand mixin
-[oracleddl:createProcedureStatement] > ddl:creatable, ddl:statement,
oracleddl:procedureOperand mixin
-[oracleddl:createRoleStatement] > ddl:creatable, ddl:statement,
oracleddl:roleOperand mixin
-[oracleddl:createRollbackStatement] > ddl:creatable, ddl:statement,
oracleddl:rollbackOperand mixin
-[oracleddl:createSequenceStatement] > ddl:creatable, ddl:statement,
oracleddl:sequenceOperand mixin
-[oracleddl:createSpfileStatement] > ddl:creatable, ddl:statement,
oracleddl:spfileOperand mixin
-[oracleddl:createSynonymStatement] > ddl:creatable, ddl:statement,
oracleddl:synonymOperand mixin
-[oracleddl:createTablespaceStatement] > ddl:creatable, ddl:statement,
oracleddl:tablespaceOperand mixin
-[oracleddl:createTriggerStatement] > ddl:creatable, ddl:statement,
oracleddl:triggerOperand mixin
-[oracleddl:createTypeStatement] > ddl:creatable, ddl:statement,
oracleddl:typeOperand mixin
-[oracleddl:createUserStatement] > ddl:creatable, ddl:statement,
oracleddl:userOperand mixin
-
-// =============================================================================
-// DROP STATEMENTS
-// =============================================================================
-
-[oracleddl:dropClusterStatement] > ddl:droppable, ddl:statement,
oracleddl:clusterOperand mixin
-[oracleddl:dropContextStatement] > ddl:droppable, ddl:statement,
oracleddl:contextOperand mixin
-[oracleddl:dropDatabaseStatement] > ddl:droppable, ddl:statement,
oracleddl:databaseOperand mixin
-[oracleddl:dropDimensionStatement] > ddl:droppable, ddl:statement,
oracleddl:dimensionOperand mixin
-[oracleddl:dropDirectoryStatement] > ddl:droppable, ddl:statement,
oracleddl:directoryOperand mixin
-[oracleddl:dropDiskgroupStatement] > ddl:droppable, ddl:statement,
oracleddl:diskgroupOperand mixin
-[oracleddl:dropFunctionStatement] > ddl:droppable, ddl:statement,
oracleddl:functionOperand mixin
-[oracleddl:dropIndexStatement] > ddl:droppable, ddl:statement,
oracleddl:indexOperand mixin
-[oracleddl:dropIndextypeStatement] > ddl:droppable, ddl:statement,
oracleddl:indextypeOperand mixin
-[oracleddl:dropJavaStatement] > ddl:droppable, ddl:statement,
oracleddl:javaOperand mixin
-[oracleddl:dropLibraryStatement] > ddl:droppable, ddl:statement,
oracleddl:libraryOperand mixin
-[oracleddl:dropMaterializedStatement] > ddl:droppable, ddl:statement,
oracleddl:materializedOperand mixin
-[oracleddl:dropOperatorStatement] > ddl:droppable, ddl:statement,
oracleddl:operatorOperand mixin
-[oracleddl:dropOutlineStatement] > ddl:droppable, ddl:statement,
oracleddl:outlineOperand mixin
-[oracleddl:dropPackageStatement] > ddl:droppable, ddl:statement,
oracleddl:packageOperand mixin
-[oracleddl:dropProcedureStatement] > ddl:droppable, ddl:statement,
oracleddl:procedureOperand mixin
-[oracleddl:dropProfileStatement] > ddl:droppable, ddl:statement,
oracleddl:profileOperand mixin
-[oracleddl:dropRoleStatement] > ddl:droppable, ddl:statement,
oracleddl:roleOperand mixin
-[oracleddl:dropRollbackStatement] > ddl:droppable, ddl:statement,
oracleddl:rollbackOperand mixin
-[oracleddl:dropSequenceStatement] > ddl:droppable, ddl:statement,
oracleddl:sequenceOperand mixin
-[oracleddl:dropSynonymStatement] > ddl:droppable, ddl:statement,
oracleddl:synonymOperand mixin
-[oracleddl:dropTablespaceStatement] > ddl:droppable, ddl:statement,
oracleddl:tablespaceOperand mixin
-[oracleddl:dropTriggerStatement] > ddl:droppable, ddl:statement,
oracleddl:triggerOperand mixin
-[oracleddl:dropTypeStatement] > ddl:droppable, ddl:statement,
oracleddl:typeOperand mixin
-[oracleddl:dropUserStatement] > ddl:droppable, ddl:statement,
oracleddl:userOperand mixin
-
-// =============================================================================
-// MISC STATEMENTS
-// =============================================================================
-
-[oracleddl:analyzeStatement] > ddl:statement mixin
-[oracleddl:associateStatisticsStatement] > ddl:statement mixin
-[oracleddl:auditStatement] > ddl:statement mixin
-[oracleddl:commitStatement] > ddl:statement mixin
-[oracleddl:commentOnStatement] > ddl:statement, oracleddl:commentOperand mixin
- - oracleddl:targetObjectType (STRING) mandatory
- - oracleddl:targetObjectName (STRING)
- - oracleddl:comment (STRING) mandatory
-[oracleddl:disassociateStatisticsStatement] > ddl:statement mixin
-[oracleddl:explainPlanStatement] > ddl:statement mixin
-[oracleddl:flashbackStatement] > ddl:statement mixin
-[oracleddl:lockTableStatement] > ddl:statement mixin
-[oracleddl:mergeStatement] > ddl:statement mixin
-[oracleddl:nestedTableStatement] > ddl:statement mixin
-[oracleddl:noauditStatement] > ddl:statement mixin
-[oracleddl:purgeStatement] > ddl:statement mixin
-[oracleddl:renameStatement] > ddl:statement mixin
-[oracleddl:revokeStatement] > ddl:statement mixin
-[oracleddl:rollbackStatement] > ddl:statement mixin
-[oracleddl:setConstraintsStatement] > ddl:statement, ddl:settable mixin
-[oracleddl:setRoleStatement] > ddl:statement, ddl:settable mixin
-[oracleddl:setTransactionStatement] > ddl:statement, ddl:settable mixin
-[oracleddl:truncateStatement] > ddl:statement mixin
Added:
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd
(rev 0)
+++
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd 2010-01-07
19:11:34 UTC (rev 1553)
@@ -0,0 +1,220 @@
+/*
+ * JBoss DNA (
http://www.jboss.org/dna)
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership. Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * See the AUTHORS.txt file in the distribution for a full listing of
+ * individual contributors.
+ *
+ * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
+ * is licensed to you under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * JBoss DNA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+ //------------------------------------------------------------------------------
+// N A M E S P A C E S
+//------------------------------------------------------------------------------
+<jcr='http://www.jcp.org/jcr/1.0'>
+<nt='http://www.jcp.org/jcr/nt/1.0'>
+<mix='http://www.jcp.org/jcr/mix/1.0'>
+<ddl='http://www.jboss.org/dna/ddl/1.0'>
+<oracleddl='http://www.jboss.org/dna/ddl/oracle/1.0'>
+
+// =============================================================================
+// OPERANDS
+// =============================================================================
+[oracleddl:clusterOperand] > ddl:operand abstract
+[oracleddl:commentOperand] > ddl:operand abstract
+[oracleddl:contextOperand] > ddl:operand abstract
+[oracleddl:controlfileOperand] > ddl:operand abstract
+[oracleddl:databaseOperand] > ddl:operand abstract
+[oracleddl:dimensionOperand] > ddl:operand abstract
+[oracleddl:directoryOperand] > ddl:operand abstract
+[oracleddl:diskgroupOperand] > ddl:operand abstract
+[oracleddl:functionOperand] > ddl:operand abstract
+[oracleddl:indexOperand] > ddl:operand abstract
+[oracleddl:indextypeOperand] > ddl:operand abstract
+[oracleddl:javaOperand] > ddl:operand abstract
+[oracleddl:libraryOperand] > ddl:operand abstract
+[oracleddl:materializedOperand] > ddl:operand abstract
+[oracleddl:operatorOperand] > ddl:operand abstract
+[oracleddl:outlineOperand] > ddl:operand abstract
+[oracleddl:packageOperand] > ddl:operand abstract
+[oracleddl:parameterOperand] > ddl:operand abstract
+[oracleddl:pfileOperand] > ddl:operand abstract
+[oracleddl:procedureOperand] > ddl:operand abstract
+[oracleddl:profileOperand] > ddl:operand abstract
+[oracleddl:resourceOperand] > ddl:operand abstract
+[oracleddl:roleOperand] > ddl:operand abstract
+[oracleddl:rollbackOperand] > ddl:operand abstract
+[oracleddl:sequenceOperand] > ddl:operand abstract
+[oracleddl:sessionOperand] > ddl:operand abstract
+[oracleddl:spfileOperand] > ddl:operand abstract
+[oracleddl:systemOperand] > ddl:operand abstract
+[oracleddl:synonymOperand] > ddl:operand abstract
+[oracleddl:tablespaceOperand] > ddl:operand abstract
+[oracleddl:triggerOperand] > ddl:operand abstract
+[oracleddl:typeOperand] > ddl:operand abstract
+[oracleddl:userOperand] > ddl:operand abstract
+
+// =============================================================================
+// COLUMN
+// =============================================================================
+[oracleddl:columnDefinition] > ddl:columnDefinition
+ - oracleddl:dropDefault (boolean)
+
+//
+
+[oracleddl:functionParameter] > oracleddl:parameterOperand mixin
+ - ddl:datatypeName (STRING) mandatory
+ - ddl:datatypeLength (LONG)
+ - ddl:datatypePrecision (LONG)
+ - ddl:datatypeScale (LONG)
+ - oracleddl:default (STRING)
+ - oracleddl:defaultExpresssion (STRING)
+ - oracleddl:inOutNoCopy (STRING)
+
+// =============================================================================
+// ALTER STATEMENTS
+// =============================================================================
+[oracleddl:alterClusterStatement] > ddl:alterable, ddl:statement,
oracleddl:clusterOperand mixin
+[oracleddl:alterDatabaseStatement] > ddl:alterable, ddl:statement,
oracleddl:databaseOperand mixin
+[oracleddl:alterDimensionStatement] > ddl:alterable, ddl:statement,
oracleddl:dimensionOperand mixin
+[oracleddl:alterDiskgroupStatement] > ddl:alterable, ddl:statement,
oracleddl:diskgroupOperand mixin
+[oracleddl:alterFunctionStatement] > ddl:alterable, ddl:statement,
oracleddl:functionOperand mixin
+[oracleddl:alterIndexStatement] > ddl:alterable, ddl:statement,
oracleddl:indexOperand mixin
+[oracleddl:alterIndextypeStatement] > ddl:alterable, ddl:statement,
oracleddl:indextypeOperand mixin
+[oracleddl:alterJavaStatement] > ddl:alterable, ddl:statement,
oracleddl:javaOperand mixin
+[oracleddl:alterMaterializedStatement] > ddl:alterable, ddl:statement,
oracleddl:materializedOperand mixin
+[oracleddl:alterOperatorStatement] > ddl:alterable, ddl:statement,
oracleddl:operatorOperand mixin
+[oracleddl:alterOutlineStatement] > ddl:alterable, ddl:statement,
oracleddl:outlineOperand mixin
+[oracleddl:alterPackageStatement] > ddl:alterable, ddl:statement,
oracleddl:packageOperand mixin
+[oracleddl:alterProcedureStatement] > ddl:alterable, ddl:statement,
oracleddl:procedureOperand mixin
+[oracleddl:alterProfileStatement] > ddl:alterable, ddl:statement,
oracleddl:profileOperand mixin
+[oracleddl:alterResourceStatement] > ddl:alterable, ddl:statement,
oracleddl:resourceOperand mixin
+[oracleddl:alterRoleStatement] > ddl:alterable, ddl:statement,
oracleddl:roleOperand mixin
+[oracleddl:alterRollbackStatement] > ddl:alterable, ddl:statement,
oracleddl:rollbackOperand mixin
+[oracleddl:alterSequenceStatement] > ddl:alterable, ddl:statement,
oracleddl:sequenceOperand mixin
+[oracleddl:alterSessionStatement] > ddl:alterable, ddl:statement,
oracleddl:sessionOperand mixin
+[oracleddl:alterSystemStatement] > ddl:alterable, ddl:statement,
oracleddl:systemOperand mixin
+[oracleddl:alterTablespaceStatement] > ddl:alterable, ddl:statement,
oracleddl:tablespaceOperand mixin
+[oracleddl:alterTriggerStatement] > ddl:alterable, ddl:statement,
oracleddl:triggerOperand mixin
+[oracleddl:alterTypeStatement] > ddl:alterable, ddl:statement,
oracleddl:typeOperand mixin
+[oracleddl:alterUserStatement] > ddl:alterable, ddl:statement,
oracleddl:userOperand mixin
+[oracleddl:alterViewStatement] > ddl:alterable, ddl:statement,
ddl:viewOperand mixin
+
+[oracleddl:alterTableStatement] > ddl:alterTableStatement mixin
+ - oracleddl:newTableName (STRING)
+ + oracleddl:renameColumn (ddl:renamable) = ddl:renamable multiple
+ + oracleddl:renameConstraint (ddl:renamable) = ddl:renamable multiple
+
+// =============================================================================
+// CREATE STATEMENTS
+// =============================================================================
+
+[oracleddl:createClusterStatement] > ddl:creatable, ddl:statement,
oracleddl:clusterOperand mixin
+[oracleddl:createContextStatement] > ddl:creatable, ddl:statement,
oracleddl:contextOperand mixin
+[oracleddl:createControlfileStatement] > ddl:creatable, ddl:statement,
oracleddl:controlfileOperand mixin
+[oracleddl:createDatabaseStatement] > ddl:creatable, ddl:statement,
oracleddl:databaseOperand mixin
+[oracleddl:createDimensionStatement] > ddl:creatable, ddl:statement,
oracleddl:dimensionOperand mixin
+[oracleddl:createDirectoryStatement] > ddl:creatable, ddl:statement,
oracleddl:directoryOperand mixin
+[oracleddl:createDiskgroupStatement] > ddl:creatable, ddl:statement,
oracleddl:diskgroupOperand mixin
+[oracleddl:createFunctionStatement] > ddl:creatable, ddl:statement,
oracleddl:functionOperand mixin
+ - ddl:datatypeName (STRING) mandatory
+ - ddl:datatypeLength (LONG)
+ - ddl:datatypePrecision (LONG)
+ - ddl:datatypeScale (LONG)
+ + oracleddl:parameter (oracleddl:functionParameter) = oracleddl:functionParameter
multiple
+[oracleddl:createIndexStatement] > ddl:creatable, ddl:statement,
oracleddl:indexOperand mixin
+ - oracleddl:tableName (string) mandatory
+ - oracleddl:unique (boolean)
+ - oracleddl:bitmap (boolean)
+ + * (ddl:columnReference) = ddl:columnReference multiple
+[oracleddl:createIndexTypeStatement] > ddl:creatable, ddl:statement,
oracleddl:indextypeOperand mixin
+[oracleddl:createJavaStatement] > ddl:creatable, ddl:statement,
oracleddl:javaOperand mixin
+[oracleddl:createLibraryStatement] > ddl:creatable, ddl:statement,
oracleddl:libraryOperand mixin
+[oracleddl:createMaterializedStatement] > ddl:creatable, ddl:statement,
oracleddl:materializedOperand mixin
+[oracleddl:createOperatorStatement] > ddl:creatable, ddl:statement,
oracleddl:operatorOperand mixin
+[oracleddl:createOutlineStatement] > ddl:creatable, ddl:statement,
oracleddl:outlineOperand mixin
+[oracleddl:createPackageStatement] > ddl:creatable, ddl:statement,
oracleddl:packageOperand mixin
+[oracleddl:createPfileStatement] > ddl:creatable, ddl:statement,
oracleddl:pfileOperand mixin
+[oracleddl:createProcedureStatement] > ddl:creatable, ddl:statement,
oracleddl:procedureOperand mixin
+ + oracleddl:parameter (oracleddl:functionParameter) = oracleddl:functionParameter
multiple
+[oracleddl:createRoleStatement] > ddl:creatable, ddl:statement,
oracleddl:roleOperand mixin
+[oracleddl:createRollbackStatement] > ddl:creatable, ddl:statement,
oracleddl:rollbackOperand mixin
+[oracleddl:createSequenceStatement] > ddl:creatable, ddl:statement,
oracleddl:sequenceOperand mixin
+[oracleddl:createSpfileStatement] > ddl:creatable, ddl:statement,
oracleddl:spfileOperand mixin
+[oracleddl:createSynonymStatement] > ddl:creatable, ddl:statement,
oracleddl:synonymOperand mixin
+[oracleddl:createTablespaceStatement] > ddl:creatable, ddl:statement,
oracleddl:tablespaceOperand mixin
+[oracleddl:createTriggerStatement] > ddl:creatable, ddl:statement,
oracleddl:triggerOperand mixin
+[oracleddl:createTypeStatement] > ddl:creatable, ddl:statement,
oracleddl:typeOperand mixin
+[oracleddl:createUserStatement] > ddl:creatable, ddl:statement,
oracleddl:userOperand mixin
+
+// =============================================================================
+// DROP STATEMENTS
+// =============================================================================
+
+[oracleddl:dropClusterStatement] > ddl:droppable, ddl:statement,
oracleddl:clusterOperand mixin
+[oracleddl:dropContextStatement] > ddl:droppable, ddl:statement,
oracleddl:contextOperand mixin
+[oracleddl:dropDatabaseStatement] > ddl:droppable, ddl:statement,
oracleddl:databaseOperand mixin
+[oracleddl:dropDimensionStatement] > ddl:droppable, ddl:statement,
oracleddl:dimensionOperand mixin
+[oracleddl:dropDirectoryStatement] > ddl:droppable, ddl:statement,
oracleddl:directoryOperand mixin
+[oracleddl:dropDiskgroupStatement] > ddl:droppable, ddl:statement,
oracleddl:diskgroupOperand mixin
+[oracleddl:dropFunctionStatement] > ddl:droppable, ddl:statement,
oracleddl:functionOperand mixin
+[oracleddl:dropIndexStatement] > ddl:droppable, ddl:statement,
oracleddl:indexOperand mixin
+[oracleddl:dropIndextypeStatement] > ddl:droppable, ddl:statement,
oracleddl:indextypeOperand mixin
+[oracleddl:dropJavaStatement] > ddl:droppable, ddl:statement,
oracleddl:javaOperand mixin
+[oracleddl:dropLibraryStatement] > ddl:droppable, ddl:statement,
oracleddl:libraryOperand mixin
+[oracleddl:dropMaterializedStatement] > ddl:droppable, ddl:statement,
oracleddl:materializedOperand mixin
+[oracleddl:dropOperatorStatement] > ddl:droppable, ddl:statement,
oracleddl:operatorOperand mixin
+[oracleddl:dropOutlineStatement] > ddl:droppable, ddl:statement,
oracleddl:outlineOperand mixin
+[oracleddl:dropPackageStatement] > ddl:droppable, ddl:statement,
oracleddl:packageOperand mixin
+[oracleddl:dropProcedureStatement] > ddl:droppable, ddl:statement,
oracleddl:procedureOperand mixin
+[oracleddl:dropProfileStatement] > ddl:droppable, ddl:statement,
oracleddl:profileOperand mixin
+[oracleddl:dropRoleStatement] > ddl:droppable, ddl:statement,
oracleddl:roleOperand mixin
+[oracleddl:dropRollbackStatement] > ddl:droppable, ddl:statement,
oracleddl:rollbackOperand mixin
+[oracleddl:dropSequenceStatement] > ddl:droppable, ddl:statement,
oracleddl:sequenceOperand mixin
+[oracleddl:dropSynonymStatement] > ddl:droppable, ddl:statement,
oracleddl:synonymOperand mixin
+[oracleddl:dropTablespaceStatement] > ddl:droppable, ddl:statement,
oracleddl:tablespaceOperand mixin
+[oracleddl:dropTriggerStatement] > ddl:droppable, ddl:statement,
oracleddl:triggerOperand mixin
+[oracleddl:dropTypeStatement] > ddl:droppable, ddl:statement,
oracleddl:typeOperand mixin
+[oracleddl:dropUserStatement] > ddl:droppable, ddl:statement,
oracleddl:userOperand mixin
+
+// =============================================================================
+// MISC STATEMENTS
+// =============================================================================
+
+[oracleddl:analyzeStatement] > ddl:statement mixin
+[oracleddl:associateStatisticsStatement] > ddl:statement mixin
+[oracleddl:auditStatement] > ddl:statement mixin
+[oracleddl:commitStatement] > ddl:statement mixin
+[oracleddl:commentOnStatement] > ddl:statement, oracleddl:commentOperand mixin
+ - oracleddl:targetObjectType (STRING) mandatory
+ - oracleddl:targetObjectName (STRING)
+ - oracleddl:comment (STRING) mandatory
+[oracleddl:disassociateStatisticsStatement] > ddl:statement mixin
+[oracleddl:explainPlanStatement] > ddl:statement mixin
+[oracleddl:flashbackStatement] > ddl:statement mixin
+[oracleddl:lockTableStatement] > ddl:statement mixin
+[oracleddl:mergeStatement] > ddl:statement mixin
+[oracleddl:nestedTableStatement] > ddl:statement mixin
+[oracleddl:noauditStatement] > ddl:statement mixin
+[oracleddl:purgeStatement] > ddl:statement mixin
+[oracleddl:renameStatement] > ddl:statement mixin
+[oracleddl:revokeStatement] > ddl:statement mixin
+[oracleddl:rollbackStatement] > ddl:statement mixin
+[oracleddl:setConstraintsStatement] > ddl:statement, ddl:settable mixin
+[oracleddl:setRoleStatement] > ddl:statement, ddl:settable mixin
+[oracleddl:setTransactionStatement] > ddl:statement, ddl:settable mixin
+[oracleddl:truncateStatement] > ddl:statement mixin
Property changes on:
trunk/extensions/dna-sequencer-ddl/src/main/resources/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdl.cnd
___________________________________________________________________
Name: svn:executable
+ *
Modified:
trunk/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParserTest.java
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParserTest.java 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParserTest.java 2010-01-07
19:11:34 UTC (rev 1553)
@@ -303,6 +303,95 @@
assertTrue(hasMixinType(childNode.getProperty(JcrLexicon.MIXIN_TYPES),
TYPE_CREATE_FUNCTION_STATEMENT));
}
+ @Test
+ public void shouldParseCreateProcedure_1() {
+ printTest("shouldParseCreateProcedure_1()");
+ String content = "CREATE PROCEDURE remove_emp (employee_id NUMBER) AS
tot_emps NUMBER;" + NEWLINE
+ + "BEGIN" + NEWLINE
+ + " DELETE FROM employees" + NEWLINE
+ + " WHERE employees.employee_id =
remove_emp.employee_id;" + NEWLINE
+ + "tot_emps := tot_emps - 1;" + NEWLINE
+ + "END;" + NEWLINE
+ + "/";
+
+ boolean success = parser.parse(content, rootNode);
+
+ assertEquals(true, success);
+ assertEquals(1, rootNode.getChildCount());
+ AstNode childNode = rootNode.getChildren().get(0);
+ assertTrue(hasMixinType(childNode.getProperty(JcrLexicon.MIXIN_TYPES),
TYPE_CREATE_PROCEDURE_STATEMENT));
+ }
+
+ @Test
+ public void shouldParseCreateProcedure_2() {
+ printTest("shouldParseCreateProcedure_2()");
+ String content = "CREATE OR REPLACE PROCEDURE add_emp (employee_id NUMBER,
employee_age NUMBER) AS tot_emps NUMBER;" + NEWLINE
+ + "BEGIN" + NEWLINE
+ + " INSERT INTO employees" + NEWLINE
+ + " WHERE employees.employee_id =
remove_emp.employee_id;" + NEWLINE
+ + "tot_emps := tot_emps + 1;" + NEWLINE
+ + "END;" + NEWLINE
+ + "/";
+
+ boolean success = parser.parse(content, rootNode);
+
+ assertEquals(true, success);
+ assertEquals(1, rootNode.getChildCount());
+ AstNode childNode = rootNode.getChildren().get(0);
+ assertTrue(hasMixinType(childNode.getProperty(JcrLexicon.MIXIN_TYPES),
TYPE_CREATE_PROCEDURE_STATEMENT));
+ assertEquals(2, childNode.getChildCount());
+ }
+
+ @Test
+ public void shouldParseOracleProceduresAndFunctions() {
+ printTest("shouldParseOracleProceduresAndFunctions()");
+ String content = getFileContent(DDL_FILE_PATH +
"create_procedure_statements.ddl");
+
+ boolean success = parser.parse(content, rootNode);
+
+ assertEquals(true, success);
+ assertEquals(4, rootNode.getChildCount());
+ }
+
+ @Test
+ public void shouldParseCreateMaterializedView() {
+ setPrintToConsole(true);
+ parser.setTestMode(isPrintToConsole());
+ printTest("shouldParseCreateMaterializedView()");
+ String content = " CREATE MATERIALIZED VIEW sales_mv" + NEWLINE
+ + "BUILD IMMEDIATE" + NEWLINE
+ + "REFRESH FAST ON COMMIT" + NEWLINE
+ + "AS SELECT t.calendar_year, p.prod_id, " +
NEWLINE
+ + " SUM(s.amount_sold) AS sum_sales" +
NEWLINE
+ + " FROM times t, products p, sales s" +
NEWLINE
+ + " WHERE t.time_id = s.time_id AND p.prod_id =
s.prod_id" + NEWLINE
+ + " GROUP BY t.calendar_year, p.prod_id;" +
NEWLINE;
+
+ boolean success = parser.parse(content, rootNode);
+
+ assertEquals(true, success);
+ assertEquals(1, rootNode.getChildCount());
+ AstNode childNode = rootNode.getChildren().get(0);
+ assertTrue(hasMixinType(childNode.getProperty(JcrLexicon.MIXIN_TYPES),
TYPE_CREATE_MATERIALIZED_VIEW_STATEMENT));
+ }
+
+ @Test
+ public void shouldParseCreateMaterializedViewLog() {
+ setPrintToConsole(true);
+ parser.setTestMode(isPrintToConsole());
+ printTest("shouldParseCreateMaterializedViewLog()");
+ String content = "CREATE MATERIALIZED VIEW LOG ON products" + NEWLINE
+ + "WITH ROWID, SEQUENCE (prod_id)" + NEWLINE
+ + "INCLUDING NEW VALUES;";
+
+ boolean success = parser.parse(content, rootNode);
+
+ assertEquals(true, success);
+ assertEquals(1, rootNode.getChildCount());
+ AstNode childNode = rootNode.getChildren().get(0);
+ assertTrue(hasMixinType(childNode.getProperty(JcrLexicon.MIXIN_TYPES),
TYPE_CREATE_MATERIALIZED_VIEW_LOG_STATEMENT));
+ }
+
@Test
public void shouldParseOracleStatements_1() {
printTest("shouldParseOracleStatements_1()");
Added:
trunk/extensions/dna-sequencer-ddl/src/test/resources/ddl/dialect/oracle/create_procedure_statements.ddl
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/test/resources/ddl/dialect/oracle/create_procedure_statements.ddl
(rev 0)
+++
trunk/extensions/dna-sequencer-ddl/src/test/resources/ddl/dialect/oracle/create_procedure_statements.ddl 2010-01-07
19:11:34 UTC (rev 1553)
@@ -0,0 +1,24 @@
+CREATE PROCEDURE remove_emp (employee_id NUMBER) AS tot_emps NUMBER;
+ BEGIN
+ DELETE FROM employees
+ WHERE employees.employee_id = remove_emp.employee_id;
+ tot_emps := tot_emps - 1;
+ END;
+/
+
+CREATE PROCEDURE find_root
+ ( x IN REAL )
+ IS LANGUAGE C
+ NAME c_find_root
+ LIBRARY c_utils
+ PARAMETERS ( x BY REFERENCE );
+
+CREATE FUNCTION SecondMax (input NUMBER) RETURN NUMBER
+ PARALLEL_ENABLE AGGREGATE USING SecondMaxImpl;
+
+CREATE OR REPLACE FUNCTION text_length(a CLOB)
+ RETURN NUMBER DETERMINISTIC IS
+ BEGIN
+ RETURN DBMS_LOB.GETLENGTH(a);
+ END;
+/
\ No newline at end of file
Modified:
trunk/extensions/dna-sequencer-ddl/src/test/resources/ddl/dialect/oracle/oracle_test_statements_2.ddl
===================================================================
---
trunk/extensions/dna-sequencer-ddl/src/test/resources/ddl/dialect/oracle/oracle_test_statements_2.ddl 2010-01-07
18:24:39 UTC (rev 1552)
+++
trunk/extensions/dna-sequencer-ddl/src/test/resources/ddl/dialect/oracle/oracle_test_statements_2.ddl 2010-01-07
19:11:34 UTC (rev 1553)
@@ -72,7 +72,7 @@
COMMIT WORK;
-COMMIT COMMENT 'In-doubt transaction Code 36, Call (415) 555-2637';
+COMMIT COMMENT 'In-doubt transaction Code 36, Call (415) 555-2637';
CREATE CLUSTER personnel
(department NUMBER(4))