[dna-commits] DNA SVN: r1280 - in branches/ddl_sequencer: extensions and 42 other directories.

dna-commits at lists.jboss.org dna-commits at lists.jboss.org
Fri Oct 2 12:13:43 EDT 2009


Author: blafond
Date: 2009-10-02 12:13:40 -0400 (Fri, 02 Oct 2009)
New Revision: 1280

Added:
   branches/ddl_sequencer/.project
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/.classpath
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/.project
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/.settings/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/pom.xml
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataType.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParser.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/Db2DdlParser.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/PostgresDdlParser.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SqlServerDdlParser.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SybaseDdlParser.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/derby/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/derby/DerbyDdlConstants.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/AlterTable.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Column.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/ForeignKeyReference.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Index.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Statement.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Table.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableConstraint.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableElement.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TypedStatement.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/datatype/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParserTest.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParserTest.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/OracleDdlParserTest.java
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/resources/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/resources/ddl/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/resources/sql2bnf.aug92.txt
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/ddl/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants$DataTypes.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants$StatementStartPhrases.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlTokenStream$DdlTokenizer.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlTokenStream.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/OldDdlTokenizer.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/StandardDdlParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/datatype/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/Db2DdlParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser$DerbyDataTypeParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser$MySqlDataTypeParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/PostgresDdlParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/SqlServerDdlParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/SybaseDdlParser.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/derby/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/oracle/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/statement/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/sql2bnf.aug92.txt
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/logs/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/logs/test/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.BasicDdlParserTest.xml
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.xml
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.xml
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.xml
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.BasicDdlParserTest.txt
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.txt
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.txt
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.txt
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/ddl/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/datatype/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/datatype/DataTypeParserTest.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/dialect/
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParserTest.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/dialect/OracleDdlParserTest.class
   branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/sql2bnf.aug92.txt
Log:
Initial check-in of ddl sequencer and parsing framework

Added: branches/ddl_sequencer/.project
===================================================================
--- branches/ddl_sequencer/.project	                        (rev 0)
+++ branches/ddl_sequencer/.project	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>dna</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>


Property changes on: branches/ddl_sequencer/.project
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/.classpath
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/.classpath	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/.classpath	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry kind="src" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/.classpath
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/.project
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/.project	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/.project	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>dna-sequencer-ddl</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+	</natures>
+</projectDescription>


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/.project
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/pom.xml
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/pom.xml	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/pom.xml	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,88 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.jboss.dna</groupId>
+    <artifactId>dna</artifactId>
+    <version>0.7-SNAPSHOT</version>
+    <relativePath>../..</relativePath>
+  </parent>
+  <!-- The groupId and version values are inherited from parent -->
+  <artifactId>dna-sequencer-ddl</artifactId>
+  <packaging>jar</packaging>
+  <name>JBoss DNA DDL Sequencer</name>
+  <description>JBoss DNA Sequencer that processes DDL files</description>
+  <url>http://labs.jboss.org/dna</url>
+  <dependencies>
+    <!-- 
+    Common
+    -->
+    <dependency>
+      <groupId>org.jboss.dna</groupId>
+      <artifactId>dna-common</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.dna</groupId>
+      <artifactId>dna-graph</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.dna</groupId>
+      <artifactId>dna-common</artifactId>
+      <version>${pom.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.dna</groupId>
+      <artifactId>dna-graph</artifactId>
+      <version>${pom.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <!-- 
+    Testing (note the scope)
+    -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-library</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+    </dependency>
+    <!-- 
+    Logging (require SLF4J API for compiling, but use Log4J and its SLF4J binding for testing) 
+    -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+    </dependency>
+    <!-- 
+    Java Concurrency in Practice annotations
+    -->
+    <dependency>
+      <groupId>net.jcip</groupId>
+      <artifactId>jcip-annotations</artifactId>
+    </dependency>
+  </dependencies>
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-report-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/pom.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataType.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataType.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataType.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,117 @@
+/*
+ * 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.
+ */
+package org.jboss.dna.sequencer.ddl.datatype;
+
+/**
+ * 
+ * @author blafond
+ *
+ */
+public class DataType {
+	private String name;
+	private int length = 0;
+	private int precision = 0;
+	private int scale = 0;
+	private boolean isKMGLength = false;
+	private String kmgValue = null;
+	
+	public DataType (String theName) {
+		super();
+		this.name = theName;
+	}
+	
+	public DataType (String name, int length) {
+		super();
+		this.name = name;
+		this.length = length;
+	}
+	
+	
+	public DataType (String name, int precision, int scale) {
+		super();
+		this.name = name;
+		this.precision = precision;
+		this.scale = scale;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public void setName(String value) {
+		this.name = value;
+	}
+	
+	public void setLength(int value) {
+		this.length = value;
+	}
+	
+	public int getLength() {
+		return this.length;
+	}
+	
+	public void setPrecision(int value) {
+		this.precision = value;
+	}
+	
+	public int getPrecision() {
+		return this.precision;
+	}
+	
+	public int getScale() {
+		return this.scale;
+	}
+	
+	public void setScale(int value) {
+		this.scale = value;
+	}
+
+	@Override
+	public String toString() {
+		StringBuffer result = new StringBuffer(100);
+		result.append("DataType()").append(" ").append(name);
+				
+		return result.toString();
+	}
+
+	public boolean isKMGLength() {
+		return isKMGLength;
+	}
+
+	public void setKMGLength(boolean isKMGLength) {
+		this.isKMGLength = isKMGLength;
+	}
+
+	public String getKMGValue() {
+		return kmgValue;
+	}
+
+	public void setKMGValue(String kmgValue) {
+		this.kmgValue = kmgValue;
+	}
+	
+	
+
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataType.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParser.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParser.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParser.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,593 @@
+/*
+ * 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.
+ */
+package org.jboss.dna.sequencer.ddl.datatype;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.dna.common.text.ParsingException;
+import org.jboss.dna.sequencer.ddl.DdlConstants;
+import org.jboss.dna.sequencer.ddl.DdlTokenStream;
+
+public class DataTypeParser implements DdlConstants {
+	private static List<String[]> basicCharStringTypes 			= new ArrayList<String[]>();
+	private static List<String[]> basicNationalCharStringTypes 	= new ArrayList<String[]>();
+	private static List<String[]> basicBitStringTypes 			= new ArrayList<String[]>();
+	private static List<String[]> basicExactNumericTypes 		= new ArrayList<String[]>();
+	private static List<String[]> basicApproxNumericStringTypes = new ArrayList<String[]>();
+	private static List<String[]> basicDateTimeTypes 			= new ArrayList<String[]>();
+	
+    private int defaultLength = 255;
+    private int defaultPrecision = 0;
+    private int defaultScale = 0;
+
+    public DataTypeParser () {
+    	super();
+    	
+    	initialize();
+    }
+    
+    private void initialize() {
+    	
+    	basicCharStringTypes.add(DataTypes.DTYPE_CHARACTER);
+    	basicCharStringTypes.add(DataTypes.DTYPE_CHAR);
+    	basicCharStringTypes.add(DataTypes.DTYPE_CHARACTER_VARYING);
+    	basicCharStringTypes.add(DataTypes.DTYPE_CHAR_VARYING);
+    	basicCharStringTypes.add(DataTypes.DTYPE_VARCHAR);
+    	
+    	basicNationalCharStringTypes.add(DataTypes.DTYPE_NATIONAL_CHARACTER);
+    	basicNationalCharStringTypes.add(DataTypes.DTYPE_NATIONAL_CHARACTER_VARYING);
+    	basicNationalCharStringTypes.add(DataTypes.DTYPE_NATIONAL_CHAR);
+    	basicNationalCharStringTypes.add(DataTypes.DTYPE_NATIONAL_CHAR_VARYING);
+    	basicNationalCharStringTypes.add(DataTypes.DTYPE_NCHAR_VARYING);
+    	
+    	basicBitStringTypes.add(DataTypes.DTYPE_BIT);
+    	basicBitStringTypes.add(DataTypes.DTYPE_BIT_VARYING);
+    	
+    	basicExactNumericTypes.add(DataTypes.DTYPE_NUMERIC);
+    	basicExactNumericTypes.add(DataTypes.DTYPE_DEC);
+    	basicExactNumericTypes.add(DataTypes.DTYPE_DECIMAL);
+    	basicExactNumericTypes.add(DataTypes.DTYPE_INTEGER);
+    	basicExactNumericTypes.add(DataTypes.DTYPE_INT);
+    	basicExactNumericTypes.add(DataTypes.DTYPE_SMALLINT);
+    	
+    	basicApproxNumericStringTypes.add(DataTypes.DTYPE_FLOAT);
+    	basicApproxNumericStringTypes.add(DataTypes.DTYPE_REAL);
+    	basicApproxNumericStringTypes.add(DataTypes.DTYPE_DOUBLE_PRECISION);
+    	
+    	basicDateTimeTypes.add(DataTypes.DTYPE_DATE);
+    	basicDateTimeTypes.add(DataTypes.DTYPE_TIME);
+    	basicDateTimeTypes.add(DataTypes.DTYPE_TIMESTAMP);
+
+    }
+    
+    /**
+     * Method determines if the next set of tokens matches one of the registered data type token sets.
+     * 
+     * @param tokens
+     * @return is registered data type
+     * @throws ParsingException
+     */
+    public final boolean isDatatype( DdlTokenStream tokens)  throws ParsingException {
+        	// Loop through the registered statement start string arrays and look for exact matches.
+        	
+        	for( String[] stmts : basicCharStringTypes ) {
+        		if( tokens.matches(stmts) ) return true;
+        	}
+
+        	for( String[] stmts : basicNationalCharStringTypes ) {
+        		if( tokens.matches(stmts) ) return true;
+        	}
+
+
+        	for( String[] stmts : basicBitStringTypes ) {
+        		if( tokens.matches(stmts) ) return true;
+        	}
+
+
+        	for( String[] stmts : basicExactNumericTypes) {
+        		if( tokens.matches(stmts) ) return true;
+        	}
+
+
+        	for( String[] stmts : basicApproxNumericStringTypes ) {
+        		if( tokens.matches(stmts) ) return true;
+        	}
+
+
+        	for( String[] stmts : basicDateTimeTypes ) {
+        		if( tokens.matches(stmts) ) return true;
+        	}
+
+	        // If no type is found, assume it's a custom type
+        	return isCustomDataType(tokens);
+    }
+    
+
+    /**
+     * Method determines if the next set of tokens matches one of the registered data type token sets.
+     * @param tokens
+     * @param type
+     * @return is registered data type
+     * @throws ParsingException
+     */
+    private boolean isDatatype( DdlTokenStream tokens, int type)  throws ParsingException {
+    	// Loop through the registered statement start string arrays and look for exact matches.
+    	
+    	switch( type ) {
+	    	case DataTypes.DTYPE_CODE_CHAR_STRING: {
+	        	for( String[] stmts : basicCharStringTypes ) {
+	        		if( tokens.matches(stmts) ) return true;
+	        	}
+	    	} break;
+	    	case DataTypes.DTYPE_CODE_NCHAR_STRING: {
+	        	for( String[] stmts : basicNationalCharStringTypes ) {
+	        		if( tokens.matches(stmts) ) return true;
+	        	}
+	    	} break;
+	    	case DataTypes.DTYPE_CODE_BIT_STRING: {
+	        	for( String[] stmts : basicBitStringTypes ) {
+	        		if( tokens.matches(stmts) ) return true;
+	        	}
+	    	} break;
+	    	case DataTypes.DTYPE_CODE_EXACT_NUMERIC: {
+	        	for( String[] stmts : basicExactNumericTypes ) {
+	        		if( tokens.matches(stmts) ) return true;
+	        	}
+	    	} break;
+	    	case DataTypes.DTYPE_CODE_APROX_NUMERIC: {
+	        	for( String[] stmts : basicApproxNumericStringTypes ) {
+	        		if( tokens.matches(stmts) ) return true;
+	        	}
+	    	} break;
+	    	case DataTypes.DTYPE_CODE_DATE_TIME: {
+	        	for( String[] stmts : basicDateTimeTypes ) {
+	        		if( tokens.matches(stmts) ) return true;
+	        	}
+	    	} break;
+    	}
+    	
+    	return false;
+    }
+    
+    /**
+     * Method to determine of next tokens represent a custom data type. Subclasses should override this method and perform
+     * token checks for any non-SQL92 spec'd data types.
+     * 
+     * @param tokens
+     * @return is custom data type
+     * @throws ParsingException
+     */
+    protected boolean isCustomDataType( DdlTokenStream tokens )  throws ParsingException {
+    	return false;
+    }
+    
+    /**
+     * Method which performs the actual parsing of the data type name and applicable values (i.e. VARCHAR(20)) if data type is
+     * found.
+     * 
+     * @param tokens
+     * @return the {@link DataType}
+     * @throws ParsingException
+     */
+    public DataType parse( DdlTokenStream tokens )  throws ParsingException {
+    	DataType result = null;
+    	
+    	if ( isDatatype(tokens, DataTypes.DTYPE_CODE_CHAR_STRING) ) {
+    		result = parseCharStringType(tokens);
+    	} else if( isDatatype(tokens, DataTypes.DTYPE_CODE_NCHAR_STRING) ) {
+    		result = parseNationalCharStringType(tokens);
+    	} else if( isDatatype(tokens, DataTypes.DTYPE_CODE_BIT_STRING) ) {
+    		result = parseBitStringType(tokens);
+    	} else if( isDatatype(tokens, DataTypes.DTYPE_CODE_EXACT_NUMERIC) ) {
+    		result = parseExactNumericType(tokens);
+    	} else if( isDatatype(tokens, DataTypes.DTYPE_CODE_APROX_NUMERIC) ) {
+    		result = parseApproxNumericType(tokens);
+    	} else if( isDatatype(tokens, DataTypes.DTYPE_CODE_DATE_TIME) ) {
+    		result = parseDateTimeType(tokens);
+    	} else {
+    		result = parseCustomType(tokens);
+    	}
+    	
+    	return result;
+    }
+    
+    /**
+     * Parses SQL-92 Character string data types.
+     * 
+     * <character string type> ::=
+     *	 	  CHARACTER [ <left paren> <length> <right paren> ]
+     *	 	| CHAR [ <left paren> <length> <right paren> ]
+     *	 	| CHARACTER VARYING <left paren> <length> <right paren>
+     *	 	| CHAR VARYING <left paren> <length> <right paren>
+     *	 	| VARCHAR <left paren> <length> <right paren>
+     * 
+     * @param tokens
+     * @return the {@link DataType}
+     * @throws ParsingException
+     */
+    protected DataType parseCharStringType( DdlTokenStream tokens ) throws ParsingException {
+    	DataType result = null;
+    	String typeName = null;
+    	
+    	
+    	if( tokens.matches(DataTypes.DTYPE_VARCHAR)) {
+			typeName = tokens.consume(); // "VARCHAR"
+			int length = parseBracketedInteger(tokens);
+	        
+	        result = new DataType(typeName, length);
+    	} else {
+	    	
+			typeName = tokens.consume(); // "CHARACTER", "CHAR", 
+			
+			if( tokens.matches("VARYING")) {
+				typeName = typeName + SPACE + tokens.consume();
+				int length = parseBracketedInteger(tokens);
+		        
+		        result = new DataType(typeName, length);
+			} else {
+				int length = getDefaultLength();
+				if( tokens.matches('(')) {
+					length = parseBracketedInteger(tokens);
+				}
+				result = new DataType(typeName, length);
+			}
+    	}
+        
+    	return result;
+    }
+    
+    /**
+     * Parses SQL-92 National Character string data types.
+     * 
+     * <national character string type> ::=
+     *	      NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
+     *	 	| NATIONAL CHAR [ <left paren> <length> <right paren> ]
+     *	 	| NCHAR [ <left paren> <length> <right paren> ]
+     *	 	| NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
+     *	 	| NATIONAL CHAR VARYING <left paren> <length> <right paren>
+     *	 	| NCHAR VARYING <left paren> <length> <right paren>
+     * 
+     * @param tokens
+     * @return the {@link DataType}
+     * @throws ParsingException
+     */
+    protected DataType parseNationalCharStringType( DdlTokenStream tokens ) throws ParsingException {
+    	DataType result = null;
+    	String typeName = null;
+    	
+    	if( tokens.matches(DataTypes.DTYPE_NCHAR_VARYING) ) {
+			typeName = tokens.consume() + SPACE + tokens.consume();
+			int length = parseBracketedInteger(tokens);
+            
+            result = new DataType(typeName, length);
+    	} else if( tokens.matches("NATIONAL") ) {
+    		typeName = tokens.consume();
+    		if( tokens.matchesAnyOf("CHAR", "CHARACTER") ) {
+    			typeName = typeName + SPACE + tokens.consume();
+        		if( tokens.matches("VARYING") ) {
+        			typeName = typeName + SPACE + tokens.consume();
+        			int length = parseBracketedInteger(tokens);
+                    
+                    result = new DataType(typeName, length);
+        		} else {
+        			result = new DataType(typeName, getDefaultLength());
+        		}
+    		}
+    	}
+    	
+    	return result;
+    }
+    
+    /**
+     * Parses SQL-92 Bit string data types.
+     * 
+     * <bit string type> ::=
+	 *     BIT [ <left paren> <length> <right paren> ]
+	 *   | BIT VARYING <left paren> <length> <right paren>
+     * 
+     * 
+     * @param tokens
+     * @return the {@link DataType}
+     * @throws ParsingException
+     */
+    protected DataType parseBitStringType( DdlTokenStream tokens ) throws ParsingException {
+    	DataType result = null;
+    	
+		String typeName = tokens.consume(); // "BIT"
+		
+		if( tokens.matches("VARYING") ) {
+			typeName = typeName + SPACE + tokens.consume();
+			int length = parseBracketedInteger(tokens);
+	        
+	        result = new DataType(typeName, length);
+		} else {
+			result = new DataType(typeName, getDefaultLength());
+		}
+
+    	return result;
+    }
+    
+    /**
+     * Parses SQL-92 Exact numeric data types.
+     * 
+     * <exact numeric type> ::=
+	 *     NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+	 *   | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+	 *   | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+	 *   | INTEGER
+	 *   | INT
+     *	 | SMALLINT
+     *
+     * @param tokens
+     * @return the {@link DataType}
+     * @throws ParsingException
+     */
+    protected DataType parseExactNumericType( DdlTokenStream tokens ) throws ParsingException {
+    	DataType result = null;
+    	String typeName = null;
+    	
+    	if( tokens.matchesAnyOf("INTEGER", "INT", "SMALLINT") ) {
+    		typeName = tokens.consume();
+    		result = new DataType(typeName);
+    	} else if( tokens.matchesAnyOf("NUMERIC", "DECIMAL", "DEC")) {
+    		typeName = tokens.consume();
+    		int precision = 0;
+    		int scale = 0;
+        	if( tokens.matches('(')) {
+	            tokens.consume('(');
+	            precision = parseInteger(tokens);
+	            if( tokens.canConsume(',') ) {
+	                scale =  parseInteger(tokens);
+	            } else {
+	            	scale = getDefaultScale();
+	            }
+	            tokens.consume(')');
+        	} else {
+        		precision = getDefaultPrecision();
+        		scale = getDefaultScale();
+        	}
+        	result = new DataType(typeName, precision, scale);
+    	}
+
+    	return result;
+    }
+    
+    /**
+     * Parses SQL-92 Approximate numeric data types.
+     * 
+     * <approximate numeric type> ::=
+	 *     FLOAT [ <left paren> <precision> <right paren> ]
+	 *   | REAL
+	 *   | DOUBLE PRECISION
+     * 
+     * @param tokens
+     * @return the {@link DataType}
+     * @throws ParsingException
+     */
+    protected DataType parseApproxNumericType( DdlTokenStream tokens ) throws ParsingException {
+    	DataType result = null;
+    	String typeName = null;
+    	
+    	if( tokens.matches(DataTypes.DTYPE_REAL) ) {
+    		typeName = tokens.consume();
+    		result = new DataType(typeName);
+    	} else if( tokens.matches(DataTypes.DTYPE_DOUBLE_PRECISION) ) {
+    		typeName = tokens.consume() + SPACE + tokens.consume();
+    		result = new DataType(typeName);
+    	} else if( tokens.matches(DataTypes.DTYPE_FLOAT)) {
+    		typeName = tokens.consume();
+    		int precision = 0;
+        	if( tokens.matches('(')) {
+	            precision = parseBracketedInteger(tokens);
+        	}
+        	result = new DataType(typeName, precision, 0);
+    	}
+
+    	return result;
+    }
+    
+    
+    /**
+     * Parses SQL-92 Date and Time data types.
+     * 
+	 *	<datetime type> ::=
+	 *	      DATE
+	 *	    | TIME [ <left paren> <time precision> <right paren> ]
+	 *	          [ WITH TIME ZONE ]
+	 *	    | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
+	 *	          [ WITH TIME ZONE ]
+     * 
+     * @param tokens
+     * @return the {@link DataType}
+     * @throws ParsingException
+     */
+    protected DataType parseDateTimeType( DdlTokenStream tokens ) throws ParsingException {
+    	DataType result = null;
+    	String typeName = null;
+    	
+    	if( tokens.matches(DataTypes.DTYPE_DATE) ) {
+    		typeName = tokens.consume();
+    		result = new DataType(typeName);
+    	} else if( tokens.matches(DataTypes.DTYPE_TIME)) {
+    		typeName = tokens.consume();
+    		int precision = 0;
+        	if( tokens.matches('(')) {
+	            precision = parseBracketedInteger(tokens);
+        	}
+        	result = new DataType(typeName, precision, 0);
+    	} else if( tokens.matches(DataTypes.DTYPE_TIMESTAMP)) {
+    		typeName = tokens.consume();
+    		int precision = 0;
+        	if( tokens.matches('(')) {
+	            precision = parseBracketedInteger(tokens);
+        	}
+        	result = new DataType(typeName, precision, 0);
+    	}
+
+    	return result;
+    }
+    
+    /**
+     * General catch-all data type parsing method that sub-classes can override to parse database-specific data types.
+     * 
+     * @param tokens
+     * @return the {@link DataType}
+     * @throws ParsingException
+     */
+    protected DataType parseCustomType( DdlTokenStream tokens ) throws ParsingException {
+    	return null;
+    }
+
+    /**
+     * 
+     * @return integer default value for length
+     */
+	public int getDefaultLength() {
+		return defaultLength;
+	}
+
+	/**
+	 * 
+	 * @param defaultLength
+	 */
+	public void setDefaultLength(int defaultLength) {
+		this.defaultLength = defaultLength;
+	}
+
+	/**
+	 * 
+	 * @return integer default value for precision
+	 */
+	public int getDefaultPrecision() {
+		return defaultPrecision;
+	}
+
+	/**
+	 * 
+	 * @param defaultPrecision
+	 */
+	public void setDefaultPrecision(int defaultPrecision) {
+		this.defaultPrecision = defaultPrecision;
+	}
+
+	/**
+	 * 
+	 * @return integer default value for scale
+	 */
+	public int getDefaultScale() {
+		return defaultScale;
+	}
+
+	/**
+	 * 
+	 * @param defaultScale
+	 */
+	public void setDefaultScale(int defaultScale) {
+		this.defaultScale = defaultScale;
+	}
+    
+	/**
+	 * Returns an integer value from the input token stream assuming the integer is not bracketed with parenthesis.
+	 * 
+	 * 
+	 * @param tokens
+	 * @return integer value
+	 */
+    protected int parseInteger( DdlTokenStream tokens ) {
+    	String value = tokens.consume();
+    	
+    	if( isKMGInteger(value) ) {
+    		value = value.substring(0, value.length()-1);
+    	}
+    	
+    	return new BigInteger(value).intValue();
+    }
+    
+    /**
+     * Returns an integer value from the input token stream assuming the integer is bracketed with parenthesis.
+     * 
+     * Example:  (255)
+     * 
+     * @param tokens
+     * @return integer value
+     */
+    protected int parseBracketedInteger( DdlTokenStream tokens ) {
+        tokens.consume('(');
+        int length = parseInteger(tokens);
+        tokens.consume(')');
+        
+        return length;
+    }
+
+    /**
+     * Returns the whether or not a tokenized string is a complex BLOB or CLOB length value ending in K, M or G
+     * 
+     * Example:  BLOB (100M) or CLOB(64K)
+     * 
+     * @param value
+     * @return true if value ends with M, K or G
+     */
+    protected boolean isKMGInteger( String value ) {
+    	return ( value.endsWith("M") || value.endsWith("K") || value.endsWith("G"));
+    }
+    
+    /**
+     * 
+     * Returns the integer value of the input string.
+     * 
+     * Handles both straight integer string or complex KMG (CLOB or BLOB) value.
+     * 
+     * Throws {@link NumberFormatException} if a valid integer is not found.
+     * 
+     * @param value
+     * @return integer value
+     */
+    protected int parseInteger( String value ) {
+    	if( isKMGInteger(value) ) {
+    		value = value.substring(0, value.length()-1);
+    	}
+    	
+    	return new BigInteger(value).intValue();
+    }
+    
+    /**
+     * Returns the K, M or G string value of a tokenized complex BLOB or CLOB length value
+     * 
+     * Example:  BLOB (100M) or CLOB(64K)
+     * 
+     * @param value
+     * @return K, M or G or NULL if not found.
+     */
+    protected String getKMG( String value ) {
+    	if( value.endsWith("M")) return "M";
+    	if( value.endsWith("K")) return "K";
+    	if( value.endsWith("G")) return "G";
+    	
+    	return null;
+    }
+
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/Db2DdlParser.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/Db2DdlParser.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/Db2DdlParser.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,100 @@
+package org.jboss.dna.sequencer.ddl.dialect;
+
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+
+
+
+public class Db2DdlParser extends StandardDdlParser {
+	private static final String[] COMMENT_ON = {"COMMENT", "ON"};
+
+	
+	/*
+	
+	 * ===========================================================================================================================
+	 * Data Types
+
+		|--+-SMALLINT---------------------------------------------------------------+--|
+		   +-+-INTEGER-+------------------------------------------------------------+
+		   | '-INT-----'                                                            |
+		   +-BIGINT-----------------------------------------------------------------+
+		   +-+-FLOAT--+---------------+-+-------------------------------------------+
+		   | |        '-(--integer--)-' |                                           |
+		   | +-REAL---------------------+                                           |
+		   | |         .-PRECISION-.    |                                           |
+		   | '-DOUBLE--+-----------+----'                                           |
+		   +-+-DECIMAL-+--+-----------------------------+---------------------------+
+		   | +-DEC-----+  '-(--integer--+----------+--)-'                           |
+		   | +-NUMERIC-+                '-,integer-'                                |
+		   | '-NUM-----'                                                            |
+		   +-+-+-CHARACTER-+--+-----------+--------------+--+---------------------+-+
+		   | | '-CHAR------'  '-(integer)-'              |  |  (1)                | |
+		   | +-+-VARCHAR----------------+--(--integer--)-+  '--------FOR BIT DATA-' |
+		   | | '-+-CHARACTER-+--VARYING-'                |                          |
+		   | |   '-CHAR------'                           |                          |
+		   | '-LONG VARCHAR------------------------------'                          |
+		   +-+-+-BLOB----------------+---------+--+----------------------+----------+
+		   | | '-BINARY LARGE OBJECT-'         |  '-2 (--2 integer--+---+--2 )-'          |
+		   | +-+-CLOB------------------------+-+                +-2 K-+               |
+		   | | '-+-CHARACTER-+--LARGE OBJECT-' |                +-2 M-+               |
+		   | |   '-CHAR------'                 |                '-2 G-'               |
+		   | '-DBCLOB--------------------------'                                    |
+		   +-GRAPHIC--+-----------+-------------------------------------------------+
+		   |          '-(integer)-'                                                 |
+		   +-VARGRAPHIC--(integer)--------------------------------------------------+
+		   +-LONG VARGRAPHIC--------------------------------------------------------+
+		   +-DATE-------------------------------------------------------------------+
+		   +-TIME-------------------------------------------------------------------+
+		   +-TIMESTAMP--------------------------------------------------------------+
+		   +-DATALINK--+---------------+--------------------------------------------+
+		   |           '-(--integer--)-'                                            |
+		   +-distinct-type-name-----------------------------------------------------+
+		   +-structured-type-name---------------------------------------------------+
+		   '-REF--(type-name2)------------------------------------------------------'
+
+
+	
+	 * ===========================================================================================================================
+	 * Data Definition Statements
+	 ALLOCATE CURSOR
+	 ALTER [BUFFERPON | (DATABASE PARTITION GROUP) | DATABASE | FUNCTION | METHOD | NICKNAME | PROCEDURE | SEQUENCE | SERVER 
+	      | TABLE | TABLESPACE | TYPE | (USER MAPPING) | VIEW | WRAPPER]
+	 ASSOCIATE LOCATORS
+	 CASE
+	 COMMENT ON
+	 COMMIT [WORK]
+	 CREATE [ALIAS | BUFFERPOOL | (DATABASE PARTITION GROUP) | (DISTINCT TYPE) | (EVENT MONITOR) | FUNCTION | (FUNCTION MAPPING) 
+	      | INDEX | METHOD | NICKNAME | PROCEDURE | SCHEMA | SEQUENCE | SERVER | TABLE | TABLESPACE | TRANSFORM | TRIGGER | TYPE
+	      | (TYPE MAPPING) | (USER MAPPING) | VIEW | WRAPPER]
+	 DECLARE GLOBAL TEMPORARY TABLE
+	 DELETE FROM
+	 DROP [ALIAS | BUFFERPOOL | (DATABASE PARTITION GROUP) | (EVENT MONITOR) | FUNCTION | (SPECIFIC FUNCTION) | (FUNCTION MAPPING) 
+	      | INDEX | (INDEX EXTENSION) | METHOD | (SPECIFIC METHOD) | NICKNAME | PACKAGE | PROCEDURE | (SPECIFIC PROCEDURE) | SCHEMA 
+	      | SEQUENCE | SERVER | TABLE | (TABLE HIERARCHY) | TABLESPACE[S] | TRANSFORM[S] | TRIGGER | TYPE | (TYPE MAPPING) 
+	      | (USER MAPPING) | (USER MAPPING FOR) | VIEW | (VIEW HIERARCHY) | WRAPPER]
+	
+	*/
+	
+	private static final String TERMINATOR = "%"; 
+	
+	public Db2DdlParser() {
+		super();
+		initialize();
+	}
+	
+	
+	private void initialize() {
+		registerStatementStartPhrase(COMMENT_ON);
+		setTerminator(TERMINATOR);
+	}
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/Db2DdlParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,630 @@
+package org.jboss.dna.sequencer.ddl.dialect;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.jboss.dna.common.text.ParsingException;
+import org.jboss.dna.sequencer.ddl.DdlTokenStream;
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+import org.jboss.dna.sequencer.ddl.DdlTokenStream.DdlTokenizer;
+import org.jboss.dna.sequencer.ddl.datatype.DataType;
+import org.jboss.dna.sequencer.ddl.datatype.DataTypeParser;
+import org.jboss.dna.sequencer.ddl.dialect.derby.DerbyDdlConstants;
+import org.jboss.dna.sequencer.ddl.statement.AlterTable;
+import org.jboss.dna.sequencer.ddl.statement.Column;
+import org.jboss.dna.sequencer.ddl.statement.Index;
+import org.jboss.dna.sequencer.ddl.statement.Statement;
+import org.jboss.dna.sequencer.ddl.statement.TableConstraint;
+import org.jboss.dna.sequencer.ddl.statement.TypedStatement;
+
+public class DerbyDdlParser extends StandardDdlParser implements DerbyDdlConstants {
+	
+	static List<String[]> derbyDataTypeStrings = new ArrayList<String[]>();
+	
+	private static final String TERMINATOR = DEFAULT_TERMINATOR; 
+	
+	public DerbyDdlParser() {
+		setDatatypeParser(new DerbyDataTypeParser());
+		
+		initialize();
+	}
+	
+	
+	private void initialize() {
+
+		
+		setDoUseTerminator(true);
+		
+		setTerminator(TERMINATOR);
+		
+		derbyDataTypeStrings.addAll(DerbyDataTypes.CUSTOM_DATATYPE_START_PHRASES);
+	}
+
+	
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#registerWords(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected void registerWords(DdlTokenStream tokens) {
+		tokens.registerKeyWords(CUSTOM_KEYWORDS);
+		
+		tokens.registerStatementStartPhrase(DerbyStatementStartPhrases.ALTER_PHRASES);
+		tokens.registerStatementStartPhrase(DerbyStatementStartPhrases.CREATE_PHRASES);
+		tokens.registerStatementStartPhrase(DerbyStatementStartPhrases.DROP_PHRASES);
+		tokens.registerStatementStartPhrase(DerbyStatementStartPhrases.SET_PHRASES);
+		tokens.registerStatementStartPhrase(DerbyStatementStartPhrases.MISC_PHRASES);
+		super.registerWords(tokens);
+	}
+
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseCustomStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Statement parseCustomStatement(DdlTokenStream tokens)
+			throws ParsingException {
+		Statement result = super.parseCustomStatement(tokens);
+		if( result == null ) {
+			if( tokens.canConsume(DerbyStatementStartPhrases.STMT_LOCK_TABLE) ) {
+				result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_LOCK_TABLE));
+			} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_RENAME_TABLE) ) {
+				result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_RENAME_TABLE));
+			} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_RENAME_INDEX) ) {
+				result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_RENAME_INDEX));
+			} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_DECLARE_GLOBAL_TEMP_TABLE) ) {
+	    		result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_DECLARE_GLOBAL_TEMP_TABLE));
+	    	} 
+		}
+		return result;
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseCreateStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream, boolean)
+	 */
+	@Override
+	protected Statement parseCreateStatement(DdlTokenStream tokens, boolean inSchema)
+			throws ParsingException {
+		Statement result = null;
+
+		if( tokens.matches(DerbyStatementStartPhrases.STMT_CREATE_INDEX) 
+	    		|| tokens.matches(DerbyStatementStartPhrases.STMT_CREATE_UNIQUE_INDEX) ) {
+	    		result = parseCreateIndex(tokens);
+	    } else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_CREATE_FUNCTION) ) {
+    		result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_CREATE_FUNCTION));
+    	} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_CREATE_PROCEDURE) ) {
+    		result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_CREATE_PROCEDURE));
+    	} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_CREATE_ROLE) ) {
+    		result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_CREATE_ROLE));
+    	} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_CREATE_SYNONYM) ) {
+    		result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_CREATE_SYNONYM));
+    	} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_CREATE_TRIGGER) ) {
+    		result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_CREATE_TRIGGER));
+    	}
+		
+		if( result == null ) {
+			result = super.parseCreateStatement(tokens, inSchema);
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * Parses DDL CREATE INDEX {@link Statement}
+	 * 
+	 * @param tokens
+	 * @return the parsed CREATE INDEX {@link Statement}
+	 * @throws ParsingException
+	 */
+    protected Statement parseCreateIndex( DdlTokenStream tokens ) throws ParsingException {
+		// CREATE [UNIQUE] INDEX index-Name
+		//    	ON table-Name ( Simple-column-Name [ ASC | DESC ] [ , Simple-column-Name [ ASC | DESC ]] * )
+    	tokens.consume(); // CREATE
+    	boolean isUnique = tokens.canConsume("UNIQUE");
+    	tokens.canConsume("BITMAP");
+    	tokens.consume("INDEX");
+    	String indexName = consumeIdentifier(tokens);
+    	tokens.consume("ON");
+    	tokens.canConsume("CLUSTER");
+    	String tableName = parseName(tokens);
+    	
+    	//System.out.println("  >> PARSING Create INDEX >>  Name = " + indexName + "  For TABLE = " + tableName);
+    	
+    	List<String> columnNameList = new ArrayList<String>();
+		try {
+			if( tokens.matches('(')) {
+				tokens.consume();
+				columnNameList = parseColumnNameList(tokens);
+				tokens.consume(')');
+			}
+		} catch (ParsingException e) {
+			// Give up on parsing, probably a nested function (i.e.   banned (lower(banned_name)); 
+			parseUntilTerminator(tokens);
+		}
+		Index newIndex = new Index(indexName, tableName, columnNameList);
+		newIndex.setUnique(isUnique);
+		
+        consumeTerminator(tokens);
+        
+		return newIndex;
+    }	
+	
+    
+    
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseDropStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Statement parseDropStatement(DdlTokenStream tokens)
+			throws ParsingException {
+		Statement result = null;
+		
+		if( tokens.canConsume(DerbyStatementStartPhrases.STMT_DROP_FUNCTION) ) {
+			result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_DROP_FUNCTION));
+		} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_DROP_INDEX) ) {
+			result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_DROP_INDEX));
+		} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_DROP_PROCEDURE) ) {
+			result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_DROP_PROCEDURE));
+		} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_DROP_ROLE) ) {
+			result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_DROP_ROLE));
+		} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_DROP_SYNONYM) ) {
+			result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_DROP_SYNONYM));
+		} else if( tokens.canConsume(DerbyStatementStartPhrases.STMT_DROP_TRIGGER) ) {
+			result = parseIgnorableStatement(tokens, getStatementTypeName(DerbyStatementStartPhrases.STMT_DROP_TRIGGER));
+		} 
+		
+		if( result == null ) {
+			result = super.parseDropStatement(tokens);
+		}
+
+		return result;
+	}
+
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseGrantStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Statement parseGrantStatement(DdlTokenStream tokens)
+			throws ParsingException {
+		if( tokens.matches(GRANT, DdlTokenStream.ANY_VALUE, "TO")) {
+			tokens.consume(GRANT);
+			String privilege = tokens.consume();
+			tokens.consume("TO");
+			String toValue = tokens.consume();
+			Statement stmt = new TypedStatement();
+			String value = parseUntilTerminator(tokens);
+			stmt.setValue(value);
+			stmt.setType("GRANT" + SPACE + privilege + SPACE + "TO" + SPACE + toValue);
+			consumeTerminator(tokens);
+			return stmt;
+		}
+		if( tokens.matches(GRANT, DdlTokenStream.ANY_VALUE, "ON")) {
+			tokens.consume(GRANT);
+			String privilege = tokens.consume();
+			tokens.consume("ON");
+			String toValue = tokens.consume();
+			Statement stmt = new TypedStatement();
+			String value = parseUntilTerminator(tokens);
+			stmt.setValue(value);
+			stmt.setType("GRANT" + SPACE + privilege + SPACE + "ON" + SPACE + toValue);
+			consumeTerminator(tokens);
+			return stmt;
+		}
+		if( 	tokens.matches(GRANT, CREATE) ||
+				tokens.matches(GRANT, ALTER) || 
+				tokens.matches(GRANT, DROP) || 
+				tokens.matches(GRANT, "EXECUTE") || 
+				tokens.matches(GRANT, "MANAGE") || 
+				tokens.matches(GRANT, "QUERY") || 
+				tokens.matches(GRANT, "ON", "COMMIT") || 
+				tokens.matches(GRANT, "ANY") || 
+				tokens.matches(GRANT, "SELECT") || 
+				tokens.matches(GRANT, "RESTRICTED") || 
+				tokens.matches(GRANT, "FLASHBACK") || 
+				tokens.matches(GRANT, "GLOBAL") || 
+				tokens.matches(GRANT, "DEBUG") ||
+				tokens.matches(GRANT, "GLOBAL") ||
+				tokens.matches(GRANT, "ADVISOR") ||
+				tokens.matches(GRANT, "ADMINISTER") ||
+				tokens.matches(GRANT, "BACKUP") ||
+				tokens.matches(GRANT, "LOCK") ||
+				tokens.matches(GRANT, "UPDATE") || 
+				tokens.matches(GRANT, "DELETE") ||
+				tokens.matches(GRANT, "INSERT") ||
+				tokens.matches(GRANT, "UNLIMITED") ||
+				tokens.matches(GRANT, "UNDER") ||
+				tokens.matches(GRANT, "ANALYZE") ||
+				tokens.matches(GRANT, "AUDIT") ||
+				tokens.matches(GRANT, "COMMENT") ||
+				tokens.matches(GRANT, "EXEMPT") ||
+				tokens.matches(GRANT, "FORCE") ||
+				tokens.matches(GRANT, "RESUMABLE") ||
+				tokens.matches(GRANT, "SYSDBA") ||
+				tokens.matches(GRANT, "REFERENCES") ||
+				tokens.matches(GRANT, "SYSOPER") ||
+				tokens.matches(GRANT, "WRITE") ||
+				tokens.matches(GRANT, "EXECUTE") ) {
+			tokens.consume(GRANT);
+			String nextTok = tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume();
+			Statement stmt = new TypedStatement();
+			String value = parseUntilTerminator(tokens);
+			stmt.setValue(value);
+			stmt.setType("GRANT" + " " + nextTok);
+			consumeTerminator(tokens);
+			return stmt;
+		}
+		
+		
+		return null;
+	}
+
+	
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseAlterTableStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Statement parseAlterTableStatement(DdlTokenStream tokens)
+			throws ParsingException {
+		
+		//		ALTER TABLE table-Name
+		//		{
+		//		    ADD COLUMN column-definition |
+		//		    ADD CONSTRAINT clause |
+		//		    DROP [ COLUMN ] column-name [ CASCADE | RESTRICT ] |
+		//		    DROP { PRIMARY KEY | FOREIGN KEY constraint-name | UNIQUE constraint-name | CHECK constraint-name | CONSTRAINT constraint-name } |
+		//		    ALTER [ COLUMN ] column-alteration |
+		//		    LOCKSIZE { ROW | TABLE }
+		//		}
+		
+    	tokens.consume(); // consumes 'ALTER'
+    	tokens.consume("TABLE");
+    	String tableName = parseName(tokens);
+    	
+    	//System.out.println("  >> PARSING ALTER STATEMENT >>  TABLE Name = " + tableName);
+    	
+    	AlterTable alterTableStatement = new AlterTable(tableName);
+    	
+    	if( tokens.canConsume("ADD") ) {
+    		TableConstraint constraint = parseTableConstraint(tokens);
+    		if( constraint != null ) {
+    			alterTableStatement.addConstraint(constraint);
+    		} else {
+    			// This segment can also be enclosed in "()" brackets to handle multiple Column ADDs
+    			if( tokens.matches('(')) {
+    				List<Column> columns = parseColumns(tokens);
+		    		for( Column newColumn : columns ) {
+		    			alterTableStatement.addColumn(newColumn);
+		    		}
+    			} else {
+    				// Assume single ADD COLUMN
+	    			Column newColumn = parseSingleTerminatedColumnDefinition(tokens);
+	    			
+	    			alterTableStatement.addColumn(newColumn);
+    			}
+    		}
+
+        } else if( tokens.canConsume("DROP")) {
+        	// DROP { PRIMARY KEY | FOREIGN KEY constraint-name | UNIQUE constraint-name | CHECK constraint-name | CONSTRAINT constraint-name }
+        	if( tokens.canConsume("PRIMARY", "KEY") ||
+        		tokens.canConsume("FOREIGN", "KEY") ||
+        		tokens.canConsume("UNIQUE") ||
+        		tokens.canConsume("CHECK") ||
+        		tokens.canConsume("CONSTRAINT") ) {
+        		parseName(tokens); // constraint name
+        	} else {
+				// DROP [ COLUMN ] column-name [ CASCADE | RESTRICT ]
+	        	tokens.canConsume("COLUMN");   // "COLUMN" is optional
+	        	
+	        	String columnName = parseName(tokens);
+	    		alterTableStatement.addDroppedColumnName(columnName);
+	        		
+	        	tokens.canConsume("CASCADE");
+	        	tokens.canConsume("RESTRICT");
+        	}
+    	} else if( tokens.canConsume("ALTER")) {
+    		//		column-alteration
+    		//
+    		//		column-Name SET DATA TYPE VARCHAR(integer) |
+    		//		column-Name SET DATA TYPE VARCHAR FOR BIT DATA(integer) |
+    		//		column-name SET INCREMENT BY integer-constant |
+    		//		column-name RESTART WITH integer-constant |
+    		//		column-name [ NOT ] NULL |
+    		//		column-name [ WITH | SET ] DEFAULT default-value |
+    		//		column-name DROP DEFAULT 
+    		
+    		tokens.canConsume("COLUMN");
+    		parseName(tokens);
+    		if( tokens.matches("DEFAULT") ) {
+    			parseDefaultClause(tokens);
+    		} else if( tokens.canConsume("SET")) {
+    			if( tokens.canConsume("DATA", "TYPE" ) ) {
+    				tokens.consume("VARCHAR");
+    				tokens.canConsume("FOR", "BIT", "DATA");
+    				tokens.consume("(", DdlTokenStream.ANY_VALUE, ")");
+    			} else if( tokens.canConsume("INCREMENT") ) {
+    				tokens.consume("BY", DdlTokenStream.ANY_VALUE); 
+    			}
+    			parseDefaultClause(tokens);
+    		} else if( tokens.canConsume("WITH") ) {
+    			parseDefaultClause(tokens);
+    		} else {
+    			tokens.canConsume("RESTART", "WITH", DdlTokenStream.ANY_VALUE);
+    			tokens.canConsume("DROP", "DEFAULT");
+    			tokens.canConsume("NOT", "NULL");
+    			tokens.canConsume("NULL");
+    		}
+    		
+    	} else if( tokens.canConsume("LOCKSIZE")) {
+    		tokens.canConsume("ROWS");
+    		tokens.canConsume("TABLE");
+    	}
+    	
+    	consumeTerminator(tokens);
+    	
+        return alterTableStatement;
+	}
+
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseColumnDefinition(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Column parseColumnDefinition(DdlTokenStream tokens)  throws ParsingException {
+		// column-definition
+		//
+		// Simple-column-Name DataType
+		//	    [ Column-level-constraint ]*
+		//	    [ [ WITH ] DEFAULT { ConstantExpression | NULL } |generated-column-spec ]
+		//	    [ Column-level-constraint ]*
+		
+		// generated-column-spec
+		//
+		//		[ GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( START WITH IntegerConstant [ ,INCREMENT BY IntegerConstant] ) ]  ]  ]
+		
+		// EXAMPLE COLUMNS
+		// (i INT GENERATED BY DEFAULT AS IDENTITY (START WITH 2, INCREMENT BY 1), 
+		//  ch CHAR(50));
+
+    	tokens.canConsume("COLUMN"); // FOR ALTER TABLE ADD [COLUMN] case
+        String columnName = parseName(tokens);
+        DataType datatype = getDatatypeParser().parse(tokens);
+        
+        Column newColumn = new Column(columnName, datatype);
+        
+        // Now clauses and constraints can be defined in any order, so we need to keep parsing until we get to a comma
+        
+        while( tokens.hasNext() && !tokens.matches(',')) {
+        		String defaultValue = parseDefaultClause(tokens);
+        		if( defaultValue != null ) {
+        			newColumn.setDefaultValue(defaultValue);
+        		} else {
+        			parseGeneratedColumnSpecClause(tokens);
+		        	parseCollateClause(tokens, newColumn);
+		        	parseColumnConstraint(tokens, newColumn);
+        		}
+	        	tokens.canConsume(DdlTokenizer.COMMENT);
+	    }
+
+        return newColumn;
+	}
+
+	private void parseGeneratedColumnSpecClause( DdlTokenStream tokens )  throws ParsingException {
+		// generated-column-spec
+		//
+		//		[ GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( START WITH IntegerConstant [ ,INCREMENT BY IntegerConstant] ) ]  ]  ]
+		if( tokens.canConsume("GENERATED") ) { 
+			tokens.canConsume("ALWAYS");
+			tokens.canConsume("BY", "DEFAULT");
+			tokens.canConsume("AS", "IDENTITY");
+			
+			if( tokens.canConsume("(", "START", "WITH") ) {
+				tokens.consume(); // integer constant
+				tokens.consume(',');
+				if( tokens.canConsume("INCREMENT", "BY")) {
+					tokens.consume(); // integer constant
+				}
+				tokens.consume(")");
+			}
+		}
+		
+	}
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#getDataTypeStartWords()
+	 */
+	@Override
+	protected List<String> getCustomDataTypeStartWords() {
+		return DerbyDataTypes.CUSTOM_DATATYPE_START_WORDS;
+	}
+
+	class DerbyDataTypeParser extends DataTypeParser {
+
+    	/**
+    	 * 
+    	 * {@inheritDoc}
+    	 *
+    	 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#isCustomDataType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+    	 */
+    	@Override
+		protected boolean isCustomDataType(DdlTokenStream tokens)
+				throws ParsingException {
+        	// Loop through the registered statement start string arrays and look for exact matches.
+        	
+        	for( String[] stmts : derbyDataTypeStrings ) {
+        		if( tokens.matches(stmts) ) return true;
+        	}
+			return super.isCustomDataType(tokens);
+		}
+		
+		/**
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseApproxNumericType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected DataType parseApproxNumericType(DdlTokenStream tokens)
+				throws ParsingException {
+			return super.parseApproxNumericType(tokens);
+		}
+
+
+		/**
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseBitStringType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected DataType parseBitStringType(DdlTokenStream tokens)
+				throws ParsingException {
+			return super.parseBitStringType(tokens);
+		}
+
+		/**
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseBracketedInteger(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected int parseBracketedInteger(DdlTokenStream tokens) {
+			return super.parseBracketedInteger(tokens);
+		}
+
+		/**
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseCharStringType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected DataType parseCharStringType(DdlTokenStream tokens)
+				throws ParsingException {
+	    	DataType result = super.parseCharStringType(tokens);
+	    	
+			tokens.canConsume("FOR", "BIT", "DATA");
+	        
+	    	return result;
+		}
+
+		/**
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseCustomType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected DataType parseCustomType(DdlTokenStream tokens)
+				throws ParsingException {
+	    	DataType result = null;
+	    	String typeName = null;
+	    	int length = 0;
+	    	
+			if( tokens.matches(DerbyDataTypes.DTYPE_BINARY_LARGE_OBJECT) || tokens.matches(DerbyDataTypes.DTYPE_CHARACTER_LARGE_OBJECT)) {
+				typeName = tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume();
+				boolean isKMGLength = false;
+				String kmgValue = null;
+				if( tokens.canConsume('(')) {
+					String lengthValue = tokens.consume();
+					kmgValue = getKMG(lengthValue);
+					
+					isKMGLength = isKMGInteger(lengthValue);
+					
+					length = parseInteger(lengthValue);
+					
+		            tokens.canConsume(')');
+				}
+				
+				result = new DataType(typeName, length);
+				
+				result.setKMGLength(isKMGLength);
+				result.setKMGValue(kmgValue);
+			} else if( tokens.matches(DerbyDataTypes.DTYPE_CLOB) || tokens.matches(DerbyDataTypes.DTYPE_BLOB) ){
+				typeName = tokens.consume();
+				boolean isKMGLength = false;
+				String kmgValue = null;
+				if( tokens.canConsume('(')) {
+					String lengthValue = tokens.consume();
+					kmgValue = getKMG(lengthValue);
+					
+					isKMGLength = isKMGInteger(lengthValue);
+					
+					length = parseInteger(lengthValue);
+					
+		            tokens.canConsume(')');
+				}
+				
+				result = new DataType(typeName, length);
+				
+				result.setKMGLength(isKMGLength);
+				result.setKMGValue(kmgValue);
+			} else if( tokens.matches(DerbyDataTypes.DTYPE_BIGINT) ){
+				typeName = tokens.consume();
+			} else if( tokens.matches(DerbyDataTypes.DTYPE_LONG_VARCHAR_FBD) ){
+				typeName = tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume();
+			} else if( tokens.matches(DerbyDataTypes.DTYPE_LONG_VARCHAR) ){
+				typeName = tokens.consume() + SPACE + tokens.consume();
+			} else if( tokens.matches(DerbyDataTypes.DTYPE_BIGINT) ){
+				typeName = tokens.consume();
+			} else if( tokens.matches(DerbyDataTypes.DTYPE_DOUBLE) ){
+				typeName = tokens.consume();
+			} else if( tokens.matches(DerbyDataTypes.DTYPE_XML) ){
+				typeName = tokens.consume();
+			} 
+			
+			if( result == null ) {
+				super.parseCustomType(tokens);
+			}
+			return result;
+		}
+
+		/**
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseDateTimeType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected DataType parseDateTimeType(DdlTokenStream tokens)
+				throws ParsingException {
+			return super.parseDateTimeType(tokens);
+		}
+
+		/**
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseExactNumericType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected DataType parseExactNumericType(DdlTokenStream tokens)
+				throws ParsingException {
+			return super.parseExactNumericType(tokens);
+		}
+    	
+    }
+
+
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,490 @@
+package org.jboss.dna.sequencer.ddl.dialect;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+import org.jboss.dna.common.text.ParsingException;
+import org.jboss.dna.sequencer.ddl.DdlTokenStream;
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+import org.jboss.dna.sequencer.ddl.datatype.DataType;
+import org.jboss.dna.sequencer.ddl.datatype.DataTypeParser;
+import org.jboss.dna.sequencer.ddl.statement.Index;
+import org.jboss.dna.sequencer.ddl.statement.Statement;
+
+public class MySqlDdlParser extends StandardDdlParser {
+	/*
+	* ===========================================================================================================================
+		* Data Definition Statements
+		ALTER [DATABASE | EVENT | FUNCTION | SERVER | TABLE | VIEW]
+		CREATE [DATABASE | EVENT | FUNCTION | INDEX | PROCEDURE | SERVER | TABLE | TRIGGER | VIEW]
+		DROP [DATABASE | EVENT | FUNCTION | INDEX | PROCEDURE | SERVER | TABLE | TRIGGER | VIEW]
+		RENAME TABLE
+	*/
+	private static final String[] STMT_CREATE_DATABASE = {"CREATE", "DATABASE"};
+	private static final String[] STMT_CREATE_EVENT = {"CREATE", "EVENT"};
+	private static final String[] STMT_CREATE_SERVER = {"CREATE", "SERVER"};
+	private static final String[] STMT_CREATE_FUNCTION = {"CREATE", "FUNCTION"};
+	private static final String[] STMT_CREATE_INDEX = {"CREATE", "INDEX"};
+	private static final String[] STMT_CREATE_UNIQUE_INDEX = {"CREATE", "UNIQUE", "INDEX"};
+	private static final String[] STMT_CREATE_PROCEDURE = {"CREATE", "PROCEDURE"};
+	private static final String[] STMT_CREATE_TRIGGER = {"CREATE", "TRIGGER"};
+	
+	protected static final String[] DTYPE_TINYINT = {"TINYINT"}; // TINYINT[(M)] [UNSIGNED] [ZEROFILL]
+	protected static final String[] DTYPE_MEDIUMINT = {"MEDIUMINT"}; // MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
+	protected static final String[] DTYPE_BIGINT = {"BIGINT"}; // BIGINT[(M)] [UNSIGNED] [ZEROFILL]
+	protected static final String[] DTYPE_FIXED = {"FIXED"};// FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
+	protected static final String[] DTYPE_BOOL = {"BOOL"};// BOOL
+	protected static final String[] DTYPE_BOOLEAN = {"BOOLEAN"};// BOOLEAN
+	
+	protected static final String[] DTYPE_DOUBLE = {"DOUBLE"}; // DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
+	
+
+	/* 
+	 * ===========================================================================================================================
+	 * DATYPES
+	 * Numeric Types
+	    -----------------------------------------------------------
+	    NEW  TYPE
+	    -----------------------------------------------------------
+		**	BIT[(M)]
+		**	TINYINT[(M)] [UNSIGNED] [ZEROFILL]
+		**	BOOL, BOOLEAN
+			SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
+		**	MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
+			INT[(M)] [UNSIGNED] [ZEROFILL]
+			INTEGER[(M)] [UNSIGNED] [ZEROFILL]
+		**	BIGINT[(M)] [UNSIGNED] [ZEROFILL]
+		**	SERIAL is an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE. 
+			FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
+			FLOAT(p) [UNSIGNED] [ZEROFILL]
+		**	DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
+			DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], 
+			REAL[(M,D)] [UNSIGNED] [ZEROFILL]
+			DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
+			DEC[(M[,D])] [UNSIGNED] [ZEROFILL], 
+			NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], 
+		**	FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
+	
+	* Date and Time Types
+	* 
+	DATE
+	DATETIME
+	TIMESTAMP
+	TIME
+	YEAR[2|4]
+	
+	* String Types
+	*
+	
+	[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
+		- CHAR is shorthand for CHARACTER. NATIONAL CHAR (or its equivalent short form, NCHAR) i
+		- The CHAR BYTE data type is an alias for the BINARY data type.
+	[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
+		- VARCHAR is shorthand for CHARACTER VARYING
+	BINARY(M)
+	VARBINARY(M)
+	TINYBLOB
+	TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
+		- A TEXT column with a maximum length of 255
+	BLOB[(M)]
+		- A BLOB column with a maximum length of 65,535
+	TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
+		- A TEXT column with a maximum length of 65,535
+	MEDIUMBLOB - maximum length of 16,777,215
+	MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]	
+		- maximum length of 16,777,215
+	LONGBLOB - maximum length of 4,294,967,295
+	LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]	
+		- maximum length of 4,294,967,295
+	ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
+		- NULL or the special ''
+		- maximum of 65,535 distinct values
+	SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
+		- zero or more values
+		- maximum of 64 members
+	
+	* ===========================================================================================================================
+	* CREATE TABLE
+	
+	CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
+    (create_definition,...)
+    [table_options]
+    [partition_options]
+
+	Or:
+	
+	CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
+	    [(create_definition,...)]
+	    [table_options]
+	    [partition_options]
+	    select_statement
+	
+	Or:
+	
+	CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
+	    { LIKE old_tbl_name | (LIKE old_tbl_name) }
+	
+	create_definition:
+	    col_name column_definition
+	  | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
+	      [index_option] ...
+	  | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
+	      [index_option] ...
+	  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
+	      [index_name] [index_type] (index_col_name,...)
+	      [index_option] ...
+	  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
+	      [index_option] ...
+	  | [CONSTRAINT [symbol]] FOREIGN KEY
+	      [index_name] (index_col_name,...) reference_definition
+	  | CHECK (expr)
+	
+	column_definition:
+	    data_type [NOT NULL | NULL] [DEFAULT default_value]
+	      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
+	      [COMMENT 'string']
+	      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
+	      [STORAGE {DISK|MEMORY|DEFAULT}]
+	      [reference_definition]
+	
+	data_type:
+	    BIT[(length)]
+	  | TINYINT[(length)] [UNSIGNED] [ZEROFILL]
+	  | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
+	  | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
+	  | INT[(length)] [UNSIGNED] [ZEROFILL]
+	  | INTEGER[(length)] [UNSIGNED] [ZEROFILL]
+	  | BIGINT[(length)] [UNSIGNED] [ZEROFILL]
+	  | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
+	  | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
+	  | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
+	  | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]
+	  | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]
+	  | DATE
+	  | TIME
+	  | TIMESTAMP
+	  | DATETIME
+	  | YEAR
+	  | CHAR[(length)]
+	      [CHARACTER SET charset_name] [COLLATE collation_name]
+	  | VARCHAR(length)
+	      [CHARACTER SET charset_name] [COLLATE collation_name]
+	  | BINARY[(length)]
+	  | VARBINARY(length)
+	  | TINYBLOB
+	  | BLOB
+	  | MEDIUMBLOB
+	  | LONGBLOB
+	  | TINYTEXT [BINARY]
+	      [CHARACTER SET charset_name] [COLLATE collation_name]
+	  | TEXT [BINARY]
+	      [CHARACTER SET charset_name] [COLLATE collation_name]
+	  | MEDIUMTEXT [BINARY]
+	      [CHARACTER SET charset_name] [COLLATE collation_name]
+	  | LONGTEXT [BINARY]
+	      [CHARACTER SET charset_name] [COLLATE collation_name]
+	  | ENUM(value1,value2,value3,...)
+	      [CHARACTER SET charset_name] [COLLATE collation_name]
+	  | SET(value1,value2,value3,...)
+	      [CHARACTER SET charset_name] [COLLATE collation_name]
+	  | spatial_type
+	
+	index_col_name:
+	    col_name [(length)] [ASC | DESC]
+	
+	index_type:
+	    USING {BTREE | HASH | RTREE}
+	
+	index_option:
+	    KEY_BLOCK_SIZE [=] value
+	  | index_type
+	  | WITH PARSER parser_name
+	
+	reference_definition:
+	    REFERENCES tbl_name (index_col_name,...)
+	      [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
+	      [ON DELETE reference_option]
+	      [ON UPDATE reference_option]
+	
+	reference_option:
+	    RESTRICT | CASCADE | SET NULL | NO ACTION
+	
+	table_options:
+	    table_option [[,] table_option] ...
+	
+	table_option:
+	    ENGINE [=] engine_name
+	  | AUTO_INCREMENT [=] value
+	  | AVG_ROW_LENGTH [=] value
+	  | [DEFAULT] CHARACTER SET [=] charset_name
+	  | CHECKSUM [=] {0 | 1}
+	  | [DEFAULT] COLLATE [=] collation_name
+	  | COMMENT [=] 'string'
+	  | CONNECTION [=] 'connect_string'
+	  | DATA DIRECTORY [=] 'absolute path to directory'
+	  | DELAY_KEY_WRITE [=] {0 | 1}
+	  | INDEX DIRECTORY [=] 'absolute path to directory'
+	  | INSERT_METHOD [=] { NO | FIRST | LAST }
+	  | KEY_BLOCK_SIZE [=] value
+	  | MAX_ROWS [=] value
+	  | MIN_ROWS [=] value
+	  | PACK_KEYS [=] {0 | 1 | DEFAULT}
+	  | PASSWORD [=] 'string'
+	  | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
+	  | TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]
+	  | UNION [=] (tbl_name[,tbl_name]...)
+	
+	partition_options:
+	    PARTITION BY
+	        { [LINEAR] HASH(expr)
+	        | [LINEAR] KEY(column_list)
+	        | RANGE(expr)
+	        | LIST(expr) }
+	    [PARTITIONS num]
+	    [SUBPARTITION BY
+	        { [LINEAR] HASH(expr)
+	        | [LINEAR] KEY(column_list) }
+	      [SUBPARTITIONS num]
+	    ]
+	    [(partition_definition [, partition_definition] ...)]
+	
+	partition_definition:
+	    PARTITION partition_name
+	        [VALUES {LESS THAN {(expr) | MAXVALUE} | IN (value_list)}]
+	        [[STORAGE] ENGINE [=] engine_name]
+	        [COMMENT [=] 'comment_text' ]
+	        [DATA DIRECTORY [=] 'data_dir']
+	        [INDEX DIRECTORY [=] 'index_dir']
+	        [MAX_ROWS [=] max_number_of_rows]
+	        [MIN_ROWS [=] min_number_of_rows]
+	        [TABLESPACE [=] tablespace_name]
+	        [NODEGROUP [=] node_group_id]
+	        [(subpartition_definition [, subpartition_definition] ...)]
+	
+	subpartition_definition:
+	    SUBPARTITION logical_name
+	        [[STORAGE] ENGINE [=] engine_name]
+	        [COMMENT [=] 'comment_text' ]
+	        [DATA DIRECTORY [=] 'data_dir']
+	        [INDEX DIRECTORY [=] 'index_dir']
+	        [MAX_ROWS [=] max_number_of_rows]
+	        [MIN_ROWS [=] min_number_of_rows]
+	        [TABLESPACE [=] tablespace_name]
+	        [NODEGROUP [=] node_group_id]
+	
+	select_statement:
+	    [IGNORE | REPLACE] [AS] SELECT ...   (Some legal select statement)
+
+	
+	* ===========================================================================================================================
+	*/
+	private static final String TERMINATOR = DEFAULT_TERMINATOR; 
+	
+	public MySqlDdlParser() {
+		initialize();
+	}
+	
+	
+	private void initialize() {
+    	setDatatypeParser(new MySqlDataTypeParser());
+    	
+		registerStatementStartPhrase(STMT_CREATE_FUNCTION);
+		registerStatementStartPhrase(STMT_CREATE_INDEX);
+		registerStatementStartPhrase(STMT_CREATE_UNIQUE_INDEX);
+		registerStatementStartPhrase(STMT_CREATE_PROCEDURE);
+		registerStatementStartPhrase(STMT_CREATE_SERVER);
+		registerStatementStartPhrase(STMT_CREATE_TRIGGER);
+		registerStatementStartPhrase(STMT_CREATE_DATABASE);
+		registerStatementStartPhrase(STMT_CREATE_EVENT);
+		
+		setDoUseTerminator(true);
+		
+		setTerminator(TERMINATOR);
+	}
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	@Override
+	protected Statement parseCreateStatement(DdlTokenStream tokens, boolean inSchema)
+			throws ParsingException {
+		Statement result = null;
+    	
+    	
+		if( tokens.matches(STMT_CREATE_INDEX) 
+	    		|| tokens.matches(STMT_CREATE_UNIQUE_INDEX) ) {
+	    		result = parseCreateIndex(tokens);
+	    } else if( tokens.matches(STMT_CREATE_FUNCTION) ) {
+	    	result = parseIgnorableStatement(tokens, "CREATE FUNCTION");
+    	} else if( tokens.matches(STMT_CREATE_PROCEDURE) ) {
+    		result = parseIgnorableStatement(tokens, "CREATE PROCEDURE");
+    	} else if( tokens.matches(STMT_CREATE_EVENT) ) {
+    		result = parseIgnorableStatement(tokens, "CREATE EVENT");
+    	} else if( tokens.matches(STMT_CREATE_SERVER) ) {
+    		result = parseIgnorableStatement(tokens, "CREATE SERVER");
+    	} else if( tokens.matches(STMT_CREATE_TRIGGER) ) {
+    		result = parseIgnorableStatement(tokens, "CREATE TRIGGER");
+    	}
+		
+		if( result == null ) {
+			result = super.parseCreateStatement(tokens, inSchema);
+		}
+		
+		return result;
+	}
+	
+    protected Statement parseCreateIndex( DdlTokenStream tokens ) throws ParsingException {
+    	// CREATE [UNIQUE] INDEX index-Name
+    	//  ON table-Name ( Simple-column-Name [ ASC | DESC ] [ , Simple-column-Name [ ASC | DESC ]] * )
+    	tokens.consume(); // CREATE
+    	boolean isUnique = tokens.canConsume("UNIQUE");
+    	tokens.consume("INDEX");
+    	String indexName = consumeIdentifier(tokens);
+    	tokens.consume("ON");
+    	String tableName = consumeIdentifier(tokens);
+    	
+    	//System.out.println("  >> PARSING Create INDEX >>  Name = " + indexName + "  For TABLE = " + tableName);
+    	
+    	List<String> columnNameList = new ArrayList<String>();
+		try {
+			if( tokens.matches('(')) {
+				tokens.consume();
+				columnNameList = parseColumnNameList(tokens);
+				tokens.consume(')');
+			}
+		} catch (ParsingException e) {
+			// Give up on parsing, probably a nested function (i.e.   banned (lower(banned_name)); 
+			parseUntilTerminator(tokens);
+		}
+		Index newIndex = new Index(indexName, tableName, columnNameList);
+		newIndex.setUnique(isUnique);
+		
+        consumeTerminator(tokens);
+        
+		return newIndex;
+    }
+    	    
+    		
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+    class MySqlDataTypeParser extends DataTypeParser {
+    	
+    	// NOTE THAT MYSQL allows "UNSIGNED" and "ZEROFILL" as options AFTER the datatype definition
+    	// Need to override and do a CHECK for and CONSUME them.
+    	
+    	
+
+		@Override
+		protected DataType parseApproxNumericType(DdlTokenStream tokens)
+				throws ParsingException {
+			return super.parseApproxNumericType(tokens);
+		}
+
+		@Override
+		protected DataType parseBitStringType(DdlTokenStream tokens)
+				throws ParsingException {
+			return super.parseBitStringType(tokens);
+		}
+
+		@Override
+		protected int parseBracketedInteger(DdlTokenStream tokens) {
+			return super.parseBracketedInteger(tokens);
+		}
+
+		@Override
+		protected DataType parseCharStringType(DdlTokenStream tokens)
+				throws ParsingException {
+	    	DataType result = super.parseCharStringType(tokens);
+	    	
+			tokens.canConsume("FOR", "BIT", "DATA");
+	        
+	    	return result;
+		}
+
+		@Override
+		protected DataType parseCustomType(DdlTokenStream tokens)
+				throws ParsingException {
+	    	DataType result = null;
+	    	String typeName = null;
+	    	int length = 0;
+	    	
+//			if( tokens.matches(DTYPE_BINARY_LARGE_OBJECT) || tokens.matches(DTYPE_CHARACTER_LARGE_OBJECT)) {
+//				typeName = tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume();
+//				boolean isKMGLength = false;
+//				String kmgValue = null;
+//				if( tokens.canConsume('(')) {
+//					String lengthValue = tokens.consume();
+//					kmgValue = getKMG(lengthValue);
+//					
+//					isKMGLength = isKMGInteger(lengthValue);
+//					
+//					length = parseInteger(lengthValue);
+//					
+//		            tokens.canConsume(')');
+//				}
+//				
+//				result = new DataType(typeName, length);
+//				
+//				result.setKMGLength(isKMGLength);
+//				result.setKMGValue(kmgValue);
+//			} else if( tokens.matches(DTYPE_CLOB) || tokens.matches(DTYPE_BLOB) ){
+//				typeName = tokens.consume();
+//				boolean isKMGLength = false;
+//				String kmgValue = null;
+//				if( tokens.canConsume('(')) {
+//					String lengthValue = tokens.consume();
+//					kmgValue = getKMG(lengthValue);
+//					
+//					isKMGLength = isKMGInteger(lengthValue);
+//					
+//					length = parseInteger(lengthValue);
+//					
+//		            tokens.canConsume(')');
+//				}
+//				
+//				result = new DataType(typeName, length);
+//				
+//				result.setKMGLength(isKMGLength);
+//				result.setKMGValue(kmgValue);
+//			} else if( tokens.matches(DTYPE_BIGINT) ){
+//				typeName = tokens.consume();
+//			} else if( tokens.matches(DTYPE_LONG_VARCHAR_FBD) ){
+//				typeName = tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume();
+//			} else if( tokens.matches(DTYPE_LONG_VARCHAR) ){
+//				typeName = tokens.consume() + SPACE + tokens.consume();
+//			} else if( tokens.matches(DTYPE_BIGINT) ){
+//				typeName = tokens.consume();
+//			} else if( tokens.matches(DTYPE_DOUBLE) ){
+//				typeName = tokens.consume();
+//			} else if( tokens.matches(DTYPE_XML) ){
+//				typeName = tokens.consume();
+//			} 
+			
+			if( result == null ) {
+				super.parseCustomType(tokens);
+			}
+			return result;
+		}
+
+		@Override
+		protected DataType parseDateTimeType(DdlTokenStream tokens)
+				throws ParsingException {
+			return super.parseDateTimeType(tokens);
+		}
+
+		@Override
+		protected DataType parseExactNumericType(DdlTokenStream tokens)
+				throws ParsingException {
+			return super.parseExactNumericType(tokens);
+		}
+    	
+    }
+
+
+
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/PostgresDdlParser.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/PostgresDdlParser.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/PostgresDdlParser.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,88 @@
+package org.jboss.dna.sequencer.ddl.dialect;
+
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+
+public class PostgresDdlParser extends StandardDdlParser {
+	private static final String[] COMMENT_ON = {"COMMENT", "ON"};
+
+	// SQL COMMANDS FOUND @ http://www.postgresql.org/docs/8.4/static/sql-commands.html
+
+//	bigint	8 bytes	large-range integer	-9223372036854775808 to 9223372036854775807
+//	serial	4 bytes	autoincrementing integer	1 to 2147483647
+//	bigserial	8 bytes	large autoincrementing integer	1 to 9223372036854775807
+//	
+//	money	8 bytes	currency amount	-92233720368547758.08 to +92233720368547758.07
+//	text	variable unlimited length
+//	bytea	1 or 4 bytes plus the actual binary string	variable-length binary string
+//	
+//	timestamp [ (p) ] [ without time zone ]	8 bytes	both date and time (no time zone)	4713 BC	294276 AD	1 microsecond / 14 digits
+//	timestamp [ (p) ] with time zone	8 bytes	both date and time, with time zone	4713 BC	294276 AD	1 microsecond / 14 digits
+//	date	4 bytes	date (no time of day)	4713 BC	5874897 AD	1 day
+//	time [ (p) ] [ without time zone ]	8 bytes	time of day (no date)	00:00:00	24:00:00	1 microsecond / 14 digits
+//	time [ (p) ] with time zone	12 bytes	times of day only, with time zone	00:00:00+1459	24:00:00-1459	1 microsecond / 14 digits
+//	interval [ fields ] [ (p) ]	12 bytes	time interval	-178000000 years	178000000 years	1 microsecond / 14 digits
+//	boolean
+//	
+//    YEAR
+//    MONTH
+//    DAY
+//    HOUR
+//    MINUTE
+//    SECOND
+//    YEAR TO MONTH
+//    DAY TO HOUR
+//    DAY TO MINUTE
+//    DAY TO SECOND
+//    HOUR TO MINUTE
+//    HOUR TO SECOND
+//    MINUTE TO SECOND
+//    
+//    CREATE TYPE happiness AS ENUM ('happy', 'very happy', 'ecstatic');
+//    CREATE TABLE holidays (
+//        num_weeks integer,
+//        happiness happiness
+//    );
+//
+//    cidr	7 or 19 bytes	IPv4 and IPv6 networks
+//    inet	7 or 19 bytes	IPv4 and IPv6 hosts and networks
+//    macaddr	6 bytes	MAC addresses
+//    uuid
+//    xml
+//    CREATE TABLE sal_emp (
+//    	    name            text,
+//    	    pay_by_quarter  integer[],
+//    	    schedule        text[][]
+//    	);
+//    CREATE TABLE tictactoe (
+//    	    squares   integer[3][3]
+//    	);
+//    pay_by_quarter  integer ARRAY[4],
+//
+//    Or, if no array size is to be specified:
+//
+//        pay_by_quarter  integer ARRAY,
+    
+	
+	private static final String TERMINATOR = "GO"; 
+	
+	public PostgresDdlParser() {
+		initialize();
+	}
+	
+	
+	private void initialize() {
+		registerStatementStartPhrase(COMMENT_ON);
+		setTerminator(TERMINATOR);
+	}
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/PostgresDdlParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SqlServerDdlParser.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SqlServerDdlParser.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SqlServerDdlParser.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,30 @@
+package org.jboss.dna.sequencer.ddl.dialect;
+
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+
+public class SqlServerDdlParser extends StandardDdlParser {
+	private static final String[] COMMENT_ON = {"COMMENT", "ON"};
+
+	private static final String TERMINATOR = "GO"; 
+	
+	public SqlServerDdlParser() {
+		initialize();
+	}
+	
+	
+	private void initialize() {
+		registerStatementStartPhrase(COMMENT_ON);
+		setTerminator(TERMINATOR);
+	}
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SqlServerDdlParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SybaseDdlParser.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SybaseDdlParser.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SybaseDdlParser.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,127 @@
+package org.jboss.dna.sequencer.ddl.dialect;
+
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+
+public class SybaseDdlParser extends StandardDdlParser {
+	private static final String[] COMMENT_ON = {"COMMENT", "ON"};
+
+	/*
+	 * 
+	 * 
+	 * Character
+		CHAR [ ( max-length ) ]
+		CHARACTER [ ( max-length ) ]
+		CHARACTER VARYING [ ( max-length ) ]
+		VARCHAR [ ( max-length ) ]
+		UNIQUEIDENTIFIERSTR
+	 * Numeric
+		[ UNSIGNED ] BIGINT
+		[ UNSIGNED ] { INT | INTEGER }
+		SMALLINT
+		TINYINT
+		DECIMAL [ ( precision [ , scale ] ) ]
+		NUMERIC [ ( precision [ , scale ] ) ]
+		DOUBLE
+		FLOAT [ ( precision ) ]
+		REAL
+	 * Binary
+		BINARY [ ( length ) ]
+		VARBINARY [ ( max-length ) ]
+		UNIQUEIDENTIFIER
+	 * Bit
+		BIT
+	 * Date/Time
+		DATE
+		DATETIME
+		SMALLDATETIME
+		TIME
+		TIMESTAMP
+
+
+	 * ===========================================================================================================================
+	 * Data Definition Statements
+	 ALLOCATE DESCRIPTOR
+	 ALTER [DATABASE | DBSPACE | DOMAIN | EVENT | FUNCTION | INDEX | (LOGIN POLICY) | PROCEDURE | SERVER | SERVICE | TABLE | USER | VIEW]
+	 BACKUP
+	 BEGIN PARALLEL IQ … END PARALLEL IQ statement
+	 BEGIN TRAN[SACTION] [ transaction-name ]
+	 CHECKPOINT
+	 COMMENT ON
+	 COMMIT [ WORK ]
+	 CONFIGURE
+	 CREATE [DATABASE | DBSPACE | DOMAIN | EVENT | (EXISTING TABLE) | EXTERNLOGIN | FUNCTION | INDEX | (JOIN INDEX) 
+	      | (LOGIN POLICY) | MESSAGE | PROCEDURE | SCHEMA | SERVER | SERVICE | TABLE | USER | VARIABLE | VIEW]
+	 DEALLOCATE DESCRIPTOR
+	 DECLARE LOCAL TEMPORARY TABLE
+	 DELETE
+	 DESCRIBE
+	 DROP [CONNECTION | DATABASE | DBSPACE | DOMAIN | EVENT | EXTERNALLOGIN | FUNCTION | INDEX | (JOIN INDEX) | (LOGIN POLICY) 
+	      | MESSAGE | PROCEDURE | SERVER | STATEMENT | TABLE | TRIGGER | USER | VARIABLE | VIEW]
+	 EXEC[UTE]
+	 EXIT
+	 FORWARD TO
+	 GET DESCRIPTOR
+	 GRANT
+	 INSERT
+	 INSTALL JAVA
+	 IQ UTILITIES
+	 LOAD TABLE
+	 LOCK TABLE
+	 OUTPUT TO
+	 PARAMETERS
+	 READ
+	 RELEASE SAVEPOINT
+	 REMOVE JAVA
+	 RESTORE DATABASE
+	 REVOKE
+	 ROLLBACK [WORK]
+	 ROLLBACK TO SAVEPOINT
+	 SAVEPOINT
+	 SET [CONNECTION | DESCRIPTION | OPTION | SQLCA]
+	 SIGNAL
+	 START [DATABASE | ENGINE | JAVA]
+	 STOP [DATABASE | ENGINE | JAVA]
+	 SYNCHRONIZE JOIN INDEX
+	 TRIGGER EVENT
+	 TRUNCATE TABLE
+	 UPDATE
+ 	 WAITFOR
+ 	 
+ 	 
+	 * ===========================================================================================================================
+	 * CREATE TABLE
+
+
+
+
+
+
+
+	*/
+	
+	
+	
+	
+	private static final String TERMINATOR = "go"; 
+	
+	public SybaseDdlParser() {
+		initialize();
+	}
+	
+	
+	private void initialize() {
+		registerStatementStartPhrase(COMMENT_ON);
+		setTerminator(TERMINATOR);
+	}
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+	
+	
+	// ===========================================================================================================================
+	// ===========================================================================================================================
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/SybaseDdlParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/derby/DerbyDdlConstants.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/derby/DerbyDdlConstants.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/derby/DerbyDdlConstants.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,115 @@
+/*
+ * 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.
+ */
+package org.jboss.dna.sequencer.ddl.dialect.derby;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.jboss.dna.sequencer.ddl.DdlConstants;
+
+/**
+ * @author blafond
+ *
+ */
+public interface DerbyDdlConstants extends DdlConstants {
+	public static final String[] CUSTOM_KEYWORDS = {
+		"TRIGGER", "SYNOMYM", "LOCK", "ISOLATION", "SQLID", INDEX, "RENAME", "DECLARE"
+	};
+	
+	interface DerbyStatementStartPhrases {
+		
+	    static final String[][] ALTER_PHRASES = { 
+		};
+	    
+		static final String[] STMT_CREATE_FUNCTION = {CREATE, "FUNCTION"};
+		static final String[] STMT_CREATE_INDEX = {CREATE, "INDEX"};
+		static final String[] STMT_CREATE_UNIQUE_INDEX = {CREATE, "UNIQUE", INDEX};
+		static final String[] STMT_CREATE_PROCEDURE = {CREATE, "PROCEDURE"};
+		static final String[] STMT_CREATE_ROLE = {CREATE, "ROLE"};
+		static final String[] STMT_CREATE_SYNONYM = {CREATE, "SYNONYM"};
+		static final String[] STMT_CREATE_TRIGGER = {CREATE, "TRIGGER"};
+		
+	    static final String[][] CREATE_PHRASES = { 
+	    	STMT_CREATE_FUNCTION, STMT_CREATE_INDEX, STMT_CREATE_UNIQUE_INDEX, STMT_CREATE_PROCEDURE, 
+	    	STMT_CREATE_ROLE, STMT_CREATE_SYNONYM, STMT_CREATE_TRIGGER
+		};
+	    
+	    static final String[] STMT_DECLARE_GLOBAL_TEMP_TABLE = {"DECLARE", "GLOBAL", "TEMPORARY", "TABLE"};
+		static final String[] STMT_DROP_FUNCTION = {DROP, "FUNCTION"};
+		static final String[] STMT_DROP_INDEX = {DROP, "INDEX"};
+		static final String[] STMT_DROP_PROCEDURE = {DROP, "PROCEDURE"};
+		static final String[] STMT_DROP_ROLE = {DROP, "ROLE"};
+		static final String[] STMT_DROP_SYNONYM = {DROP, "SYNONYM"};
+		static final String[] STMT_DROP_TRIGGER = {DROP, "TRIGGER"};
+		
+	    static final String[][] DROP_PHRASES = { 
+	    	STMT_DROP_FUNCTION, STMT_DROP_INDEX, STMT_DROP_PROCEDURE, STMT_DROP_ROLE, STMT_DROP_SYNONYM, STMT_DROP_TRIGGER 
+		};
+	    
+	    static final String[] STMT_GRANT = {"GRANT"};
+		static final String[] STMT_LOCK_TABLE = {"LOCK", TABLE};
+		static final String[] STMT_RENAME_TABLE = {"RENAME", TABLE};
+		static final String[] STMT_RENAME_INDEX = {"RENAME", INDEX};
+
+	    
+		static final String[] STMT_SET_ISOLATION = {SET, "ISOLATION"};
+		static final String[] STMT_SET_CURRENT_ISOLATION = {SET, "CURRENT", "ISOLATION"};
+		static final String[] STMT_SET_ROLE = {SET, "ROLE"};
+		static final String[] STMT_SET_SCHEMA = {SET, "SCHEMA"};
+		static final String[] STMT_SET_CURRENT_SCHEMA = {SET, "CURRENT", SCHEMA};
+		static final String[] STMT_SET_CURRENT_SQLID = {SET, "CURRENT", "SQLID"};
+		
+	    static final String[][] SET_PHRASES = { 
+	    	STMT_SET_ISOLATION, STMT_SET_CURRENT_ISOLATION, STMT_SET_ROLE, STMT_SET_SCHEMA, STMT_SET_CURRENT_SCHEMA,
+	    	STMT_SET_CURRENT_SQLID
+		};
+	    
+	    static final String[][] MISC_PHRASES = { STMT_LOCK_TABLE, STMT_RENAME_TABLE, STMT_RENAME_INDEX, STMT_GRANT,
+	    	STMT_DECLARE_GLOBAL_TEMP_TABLE
+		};
+	}
+	interface DerbyDataTypes {
+		static final String[] DTYPE_BIGINT = {"BIGINT"};
+		static final String[] DTYPE_LONG_VARCHAR = {"LONG", "VARCHAR"};
+		static final String[] DTYPE_LONG_VARCHAR_FBD = {"LONG", "VARCHAR", "FOR", "BIT", "DATA"};
+		
+		static final String[] DTYPE_DOUBLE = {"DOUBLE"};
+		static final String[] DTYPE_XML = {"XML"};
+		static final String[] DTYPE_CLOB = {"CLOB"}; // CLOB [ ( length [{K |M |G }] ) ]
+		static final String[] DTYPE_CHARACTER_LARGE_OBJECT = {"CHARACTER", "LARGE", "OBJECT"}; // [ ( length [{K |M |G }] ) ]
+		static final String[] DTYPE_BLOB = {"BLOB"}; // BLOB [ ( length [{K |M |G }] ) ]
+		static final String[] DTYPE_BINARY_LARGE_OBJECT = {"BINARY", "LARGE", "OBJECT"}; // [ ( length [{K |M |G }] ) ]
+	
+		static final List<String[]> CUSTOM_DATATYPE_START_PHRASES = 
+	  		Arrays.asList(new String[][] {
+	  				DTYPE_BIGINT, DTYPE_LONG_VARCHAR, DTYPE_LONG_VARCHAR_FBD, DTYPE_DOUBLE, DTYPE_XML,
+	  				DTYPE_CLOB, DTYPE_CHARACTER_LARGE_OBJECT, DTYPE_BLOB, DTYPE_BINARY_LARGE_OBJECT
+	  	  	});
+		
+	  	static final List<String> CUSTOM_DATATYPE_START_WORDS = 
+	  		Arrays.asList(new String[] {"BIGINT", "LONG", "DOUBLE",
+	  	  		"XML", "CLOB", "CHARACTER", "BLOB", "BINARY"
+	  	  	});
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/derby/DerbyDdlConstants.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,250 @@
+/*
+ * 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.
+ */
+package org.jboss.dna.sequencer.ddl.dialect.oracle;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.jboss.dna.sequencer.ddl.DdlConstants;
+
+/**
+ * Oracle-specific constants including key words and statement start phrases.
+ * 
+ * @author blafond
+ *
+ */
+public interface OracleDdlConstants extends DdlConstants {
+	
+	public static final String[] CUSTOM_KEYWORDS = {
+		"ANALYZE", "ASSOCIATE", "TRUNCATE",	"MATERIALIZED",	"SAVEPOINT", "PURGE", "LOCK", "TRIGGER", "EXPLAIN",	"PLAN",	"DIMENSION", 
+		"DIRECTORY", "DATABASE", "CONTROLFILE", "DISKGROUP", "INDEXTYPE", "SYNONYM", "SEQUENCE", "LIBRARY", "CLUSTER", "OUTLINE",
+		"PACKAGE", "SPFILE", "PFILE", "AUDIT", "COMMIT", "PURGE", "MERGE", "RENAME", "FLASHBACK", "NOAUDIT", "DISASSOCIATE", 
+		"NESTED", "REVOKE", "COMMENT", INDEX
+	};
+	
+	interface OracleStatementStartPhrases {
+		static final String[] STMT_ALTER_CLUSTER = {ALTER, "CLUSTER"};
+		static final String[] STMT_ALTER_DATABASE = {ALTER, "DATABASE"};
+		static final String[] STMT_ALTER_DIMENSION = {ALTER, "DIMENSION"};
+		static final String[] STMT_ALTER_DISKGROUP = {ALTER, "DISKGROUP"};
+		static final String[] STMT_ALTER_FUNCTION = {ALTER, "FUNCTION"};
+		static final String[] STMT_ALTER_INDEX = {ALTER, INDEX};
+		static final String[] STMT_ALTER_INDEXTYPE = {ALTER, "INDEXTYPE"};
+		static final String[] STMT_ALTER_JAVA = {ALTER, "JAVA"};
+		static final String[] STMT_ALTER_MATERIALIZED = {ALTER, "MATERIALIZED"};
+		static final String[] STMT_ALTER_OPERATOR = {ALTER, "OPERATOR"};
+		static final String[] STMT_ALTER_OUTLINE = {ALTER, "OUTLINE"};
+		static final String[] STMT_ALTER_PACKAGE = {ALTER, "PACKAGE"};
+		static final String[] STMT_ALTER_PROCEDURE = {ALTER, "PROCEDURE"};
+		static final String[] STMT_ALTER_PROFILE = {ALTER, "PROFILE"};
+		static final String[] STMT_ALTER_RESOURCE = {ALTER, "RESOURCE"};
+		static final String[] STMT_ALTER_ROLE = {ALTER, "ROLE"};
+		static final String[] STMT_ALTER_ROLLBACK = {ALTER, "ROLLBACK"};
+		static final String[] STMT_ALTER_SEQUENCE = {ALTER, "SEQUENCE"};
+		static final String[] STMT_ALTER_SESSION = {ALTER, "SESSION"};
+		static final String[] STMT_ALTER_SYSTEM = {ALTER, "SYSTEM"};
+		static final String[] STMT_ALTER_TABLESPACE = {ALTER, "TABLESPACE"};
+		static final String[] STMT_ALTER_TRIGGER = {ALTER, "TRIGGER"};
+		static final String[] STMT_ALTER_TYPE = {ALTER, "TYPE"};
+		static final String[] STMT_ALTER_USER = {ALTER, "USER"};
+		static final String[] STMT_ALTER_VIEW = {ALTER, "VIEW"};
+		
+	    static final String[][] ALTER_PHRASES = { STMT_ALTER_CLUSTER, STMT_ALTER_DATABASE, 
+			STMT_ALTER_DIMENSION, STMT_ALTER_DISKGROUP, STMT_ALTER_FUNCTION, STMT_ALTER_INDEX, STMT_ALTER_INDEXTYPE, STMT_ALTER_JAVA, 
+			STMT_ALTER_MATERIALIZED, STMT_ALTER_OPERATOR, STMT_ALTER_OUTLINE, STMT_ALTER_PACKAGE, STMT_ALTER_PROCEDURE, 
+			STMT_ALTER_PROFILE, STMT_ALTER_RESOURCE, STMT_ALTER_ROLE, STMT_ALTER_ROLLBACK, STMT_ALTER_SEQUENCE, 
+			STMT_ALTER_SESSION, STMT_ALTER_SYSTEM, STMT_ALTER_TABLESPACE, STMT_ALTER_TRIGGER, STMT_ALTER_TYPE, 
+			STMT_ALTER_USER, STMT_ALTER_VIEW  
+		};
+		
+		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"};
+		static final String[] STMT_COMMENT_ON = {"COMMENT", "ON"};
+		
+		static final String[] STMT_CREATE_CLUSTER = {CREATE, "CLUSTER"};
+		static final String[] STMT_CREATE_CONTEXT = {CREATE, "CONTEXT"};
+		static final String[] STMT_CREATE_CONTROLFILE = {CREATE, "CONTROLFILE"};
+		static final String[] STMT_CREATE_DATABASE = {CREATE, "DATABASE"};
+		static final String[] STMT_CREATE_DIMENSION = {CREATE, "DIMENSION"};
+		static final String[] STMT_CREATE_DIRECTORY = {CREATE, "DIRECTORY"};
+		static final String[] STMT_CREATE_DISKGROUP = {CREATE, "DISKGROUP"};
+		static final String[] STMT_CREATE_FUNCTION = {CREATE, "FUNCTION"};   // PARSE UNTIL '/'
+		static final String[] STMT_CREATE_INDEX = {CREATE, "INDEX"};
+		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_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 '/'
+		static final String[] STMT_CREATE_OR_REPLACE_LIBRARY = {CREATE, "OR", "REPLACE", "LIBRARY"};    // PARSE UNTIL '/'
+		static final String[] STMT_CREATE_OR_REPLACE_OUTLINE = {CREATE,"OR", "REPLACE", "OUTLINE"};    // PARSE UNTIL '/'
+		static final String[] STMT_CREATE_OR_REPLACE_PACKAGE = {CREATE,"OR", "REPLACE", "PACKAGE"};
+		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 '/
+		static final String[] STMT_CREATE_OR_REPLACE_TYPE = {CREATE, "OR", "REPLACE", "TYPE"};
+		static final String[] STMT_CREATE_OUTLINE = {CREATE, "OUTLINE"}; // PARSE UNTIL '/'
+		static final String[] STMT_CREATE_PACKAGE = {CREATE, "PACKAGE"};   // PARSE UNTIL '/'
+		static final String[] STMT_CREATE_PFILE = {CREATE, "PFILE"};
+		static final String[] STMT_CREATE_PROCEDURE = {CREATE, "PROCEDURE"}; // PARSE UNTIL '/'
+		static final String[] STMT_CREATE_PROFILE = {CREATE, "PROFILE"};
+		static final String[] STMT_CREATE_PUBLIC_DATABASE = {CREATE, "PUBLIC", "DATABASE"};
+		static final String[] STMT_CREATE_PUBLIC_ROLLBACK = {CREATE, "PUBLIC", "ROLLBACK"};
+		static final String[] STMT_CREATE_PUBLIC_SYNONYM = {CREATE, "PUBLIC", "SYNONYM"};
+		static final String[] STMT_CREATE_ROLE = {CREATE, "ROLE"};
+		static final String[] STMT_CREATE_ROLLBACK = {CREATE, "ROLLBACK"};
+		static final String[] STMT_CREATE_SEQUENCE = {CREATE, "SEQUENCE"};
+		static final String[] STMT_CREATE_SPFILE = {CREATE, "SPFILE"};
+		static final String[] STMT_CREATE_SYNONYM = {CREATE, "SYNONYM"};
+		static final String[] STMT_CREATE_TABLESPACE = {CREATE, "TABLESPACE"};
+		static final String[] STMT_CREATE_TRIGGER = {CREATE, "TRIGGER"};
+		static final String[] STMT_CREATE_TYPE = {CREATE, "TYPE"};
+		static final String[] STMT_CREATE_USER = {CREATE, "USER"};
+		static final String[] STMT_CREATE_UNIQUE_INDEX = {CREATE, "UNIQUE", "INDEX"};
+		static final String[] STMT_CREATE_BITMAP_INDEX = {CREATE, "BITMAP", "INDEX"};
+	
+		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_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_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[] STMT_DISASSOCIATE_STATISTICS = {"DISASSOCIATE", "STATISTICS"};
+		
+		static final String[] STMT_DROP_CLUSTER = {DROP, "CLUSTER"};
+		static final String[] STMT_DROP_CONTEXT = {DROP, "CONTEXT"};
+		static final String[] STMT_DROP_DATABASE = {DROP, "DATABASE"};
+		static final String[] STMT_DROP_DIMENSION = {DROP, "DIMENSION"};
+		static final String[] STMT_DROP_DIRECTORY = {DROP, "DIRECTORY"};
+		static final String[] STMT_DROP_DISKGROUP = {DROP, "DISKGROUP"};
+		static final String[] STMT_DROP_FUNCTION = {DROP, "FUNCTION"};
+		static final String[] STMT_DROP_INDEX = {DROP, "INDEX"};
+		static final String[] STMT_DROP_INDEXTYPE = {DROP, "INDEXTYPE"};
+		static final String[] STMT_DROP_JAVA = {DROP, "JAVA"};
+		static final String[] STMT_DROP_LIBRARY = {DROP, "LIBRARY"};
+		static final String[] STMT_DROP_MATERIALIZED = {DROP, "MATERIALIZED"};
+		static final String[] STMT_DROP_OPERATOR = {DROP, "OPERATOR"};
+		static final String[] STMT_DROP_OUTLINE = {DROP, "OUTLINE"};
+		static final String[] STMT_DROP_PACKAGE = {DROP, "PACKAGE"};
+		static final String[] STMT_DROP_PROCEDURE = {DROP, "PROCEDURE"};
+		static final String[] STMT_DROP_PROFILE = {DROP, "PROFILE"};
+		static final String[] STMT_DROP_ROLE = {DROP, "ROLE"};
+		static final String[] STMT_DROP_ROLLBACK = {DROP, "ROLLBACK"};
+		static final String[] STMT_DROP_SEQUENCE = {DROP, "SEQUENCE"};
+		static final String[] STMT_DROP_SYNONYM = {DROP, "SYNONYM"};
+		static final String[] STMT_DROP_TABLESPACE = {DROP, "TABLESPACE"};
+		static final String[] STMT_DROP_TRIGGER = {DROP, "TRIGGER"};
+		static final String[] STMT_DROP_TYPE = {DROP, "TYPE"};
+		static final String[] STMT_DROP_USER = {DROP, "USER"};
+		
+		static final String[] STMT_DROP_PUBLIC_DATABASE = {DROP, "PUBLIC", "DATABASE"};
+		static final String[] STMT_DROP_PUBLIC_SYNONYM = {DROP, "PUBLIC", "SYNONYM"};
+		
+		static final String[][] DROP_PHRASES = {
+			STMT_DROP_CLUSTER, STMT_DROP_CONTEXT, STMT_DROP_DATABASE, STMT_DROP_DIMENSION, STMT_DROP_DIRECTORY, STMT_DROP_DISKGROUP,
+			STMT_DROP_FUNCTION, STMT_DROP_INDEX, STMT_DROP_INDEXTYPE, STMT_DROP_JAVA, STMT_DROP_LIBRARY, STMT_DROP_MATERIALIZED,
+			STMT_DROP_OPERATOR, STMT_DROP_OUTLINE, STMT_DROP_PACKAGE, STMT_DROP_PROCEDURE, STMT_DROP_PROFILE, STMT_DROP_ROLE, 
+			STMT_DROP_ROLLBACK, STMT_DROP_SEQUENCE, STMT_DROP_SYNONYM, STMT_DROP_TABLESPACE, STMT_DROP_TRIGGER, STMT_DROP_TYPE,
+			STMT_DROP_USER, STMT_DROP_PUBLIC_DATABASE, STMT_DROP_PUBLIC_SYNONYM
+		};
+		
+		static final String[] STMT_EXPLAIN_PLAN = {"EXPLAIN", "PLAN"};
+		static final String[] STMT_FLASHBACK = {"FLASHBACK"};
+		static final String[] STMT_GRANT = {GRANT};
+		static final String[] STMT_LOCK_TABLE = {"LOCK", "TABLE"};
+		static final String[] STMT_MERGE = {"MERGE"};
+		static final String[] STMT_NESTED_TABLE = {"NESTED", "TABLE"};
+		static final String[] STMT_NOAUDIT = {"NOAUDIT"};
+		static final String[] STMT_PURGE = {"PURGE"};
+		static final String[] STMT_RENAME = {"RENAME"};
+		static final String[] STMT_REVOKE = {"REVOKE"};
+		static final String[] STMT_ROLLBACK_TO_SAVEPOINT = {"ROLLBACK", "TO", "SAVEPOINT"};
+		static final String[] STMT_ROLLBACK_WORK = {"ROLLBACK", "WORK"};
+		static final String[] STMT_ROLLBACK = {"ROLLBACK"};
+		static final String[] STMT_SAVEPOINT = {"SAVEPOINT"};
+		static final String[] STMT_SET_CONSTRAINT = {SET, "CONSTRAINT"};
+		static final String[] STMT_SET_CONSTRAINTS = {SET, "CONSTRAINTS"};
+		static final String[] STMT_SET_ROLE = {SET, "ROLE"};
+		static final String[] STMT_SET_TRANSACTION = {SET, "TRANSACTION"};
+		static final String[] STMT_TRUNCATE = {"TRUNCATE"};
+		
+		static final String[][] SET_PHRASES = {
+			STMT_SET_CONSTRAINT, STMT_SET_CONSTRAINTS, STMT_SET_ROLE, STMT_SET_TRANSACTION
+		};
+		
+		static final String[][] MISC_PHRASES = {
+			STMT_ANALYZE, STMT_ASSOCIATE_STATISTICS, STMT_AUDIT, STMT_COMMIT, STMT_COMMENT_ON, STMT_DISASSOCIATE_STATISTICS,
+			STMT_EXPLAIN_PLAN, STMT_FLASHBACK, STMT_GRANT, STMT_LOCK_TABLE, STMT_MERGE, STMT_NESTED_TABLE, STMT_NOAUDIT, STMT_PURGE, 
+			STMT_RENAME, STMT_REVOKE, STMT_ROLLBACK_TO_SAVEPOINT, STMT_ROLLBACK_WORK, STMT_ROLLBACK, STMT_SAVEPOINT, STMT_TRUNCATE
+		};
+	}
+	
+	interface OracleDataTypes {
+		static final String[] DTYPE_CHAR_ORACLE = {"CHAR"}; //CHAR(size [BYTE | CHAR])
+		static final String[] DTYPE_VARCHAR2 = {"VARCHAR2"}; // VARCHAR2(size [BYTE | CHAR])
+		static final String[] DTYPE_NVARCHAR2 = {"NVARCHAR2"}; // NVARCHAR2(size)
+		static final String[] DTYPE_NUMBER = {"NUMBER"}; // NUMBER(p,s)
+		static final String[] DTYPE_BINARY_FLOAT = {"BINARY_FLOAT "};
+		static final String[] DTYPE_BINARY_DOUBLE = {"BINARY_DOUBLE"};
+		static final String[] DTYPE_LONG = {"LONG"};
+		static final String[] DTYPE_LONG_RAW = {"LONG", "RAW"};
+		static final String[] DTYPE_RAW = {"RAW"}; // RAW(size)
+		static final String[] DTYPE_BLOB = {"BLOB"};
+		static final String[] DTYPE_CLOB = {"CLOB"};
+		static final String[] DTYPE_NCLOB = {"NCLOB"};
+		static final String[] DTYPE_BFILE = {"BFILE"};
+		static final String[] DTYPE_INTERVAL_YEAR = {"INTERVAL", "YEAR"}; //INTERVAL YEAR (year_precision) TO MONTH
+		static final String[] DTYPE_INTERVAL_DAY = {"INTERVAL", "DAY"}; //	INTERVAL DAY (day_precision) TO SECOND (fractional_seconds_precision)
+	
+	  	static final List<String[]> CUSTOM_DATATYPE_START_PHRASES = 
+	  		Arrays.asList(new String[][] {
+	  				DTYPE_CHAR_ORACLE, DTYPE_VARCHAR2, DTYPE_NVARCHAR2, DTYPE_NUMBER, DTYPE_BINARY_FLOAT, DTYPE_BINARY_DOUBLE,
+	  				DTYPE_LONG, DTYPE_LONG_RAW, DTYPE_RAW, DTYPE_BLOB, DTYPE_CLOB, DTYPE_NCLOB, DTYPE_BFILE, DTYPE_INTERVAL_YEAR,
+	  				DTYPE_INTERVAL_DAY
+	  	  	});
+		
+	  	static final List<String> CUSTOM_DATATYPE_START_WORDS = 
+	  		Arrays.asList(new String[] {"VARCHAR2", "NVARCHAR2", "NUMBER",
+	  	  		"BINARY_FLOAT", "BINARY_DOUBLE", "LONG", "RAW", "BLOB", "CLOB", "NCLOB", "BFILE", "INTERVAL"
+	  	  	});
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlConstants.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,786 @@
+/*
+ * 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.
+ */
+package org.jboss.dna.sequencer.ddl.dialect.oracle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.dna.common.text.ParsingException;
+import org.jboss.dna.sequencer.ddl.DdlTokenStream;
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+import org.jboss.dna.sequencer.ddl.datatype.DataType;
+import org.jboss.dna.sequencer.ddl.datatype.DataTypeParser;
+import org.jboss.dna.sequencer.ddl.statement.AlterTable;
+import org.jboss.dna.sequencer.ddl.statement.Column;
+import org.jboss.dna.sequencer.ddl.statement.Index;
+import org.jboss.dna.sequencer.ddl.statement.Statement;
+import org.jboss.dna.sequencer.ddl.statement.TableConstraint;
+import org.jboss.dna.sequencer.ddl.statement.TypedStatement;
+
+
+/**
+ * Oracle-specific DDL Parser. Includes custom data types as well as custom DDL statements.
+ *
+ */
+public class OracleDdlParser extends StandardDdlParser implements OracleDdlConstants {
+	
+	static List<String[]> oracleDataTypeStrings = new ArrayList<String[]>();
+	
+	public OracleDdlParser() {
+		super();
+		
+		setDatatypeParser(new OracleDataTypeParser());
+		initialize();
+	}
+	
+	private void initialize() {
+		setTerminator(DEFAULT_TERMINATOR);
+		
+		setDoUseTerminator(true);
+		
+		oracleDataTypeStrings.addAll(OracleDataTypes.CUSTOM_DATATYPE_START_PHRASES); //
+	}
+	
+	/**
+	 * Method allows registering Oracle-specific Statement Start Keyword Phrases and Keywords
+	 * 
+	 * 
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#registerWords(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected void registerWords( DdlTokenStream tokens ) {
+		super.registerWords(tokens);
+		
+		registerKeyWords(CUSTOM_KEYWORDS);
+		registerKeyWords(OracleDataTypes.CUSTOM_DATATYPE_START_WORDS);
+		
+		registerStatementStartPhrase(OracleStatementStartPhrases.ALTER_PHRASES);
+		registerStatementStartPhrase(OracleStatementStartPhrases.CREATE_PHRASES);
+		registerStatementStartPhrase(OracleStatementStartPhrases.IGNORABLE_CREATE_PHRASES_WITH_SLASHES);
+		registerStatementStartPhrase(OracleStatementStartPhrases.DROP_PHRASES);
+		registerStatementStartPhrase(OracleStatementStartPhrases.SET_PHRASES);
+		registerStatementStartPhrase(OracleStatementStartPhrases.MISC_PHRASES);
+
+	}
+	
+	/**
+	 * 
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseCustomStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Statement parseCustomStatement(DdlTokenStream tokens)
+			throws ParsingException {
+		Statement stmt = null;
+		
+		if( tokens.matches(OracleStatementStartPhrases.STMT_COMMENT_ON) ) {
+			stmt = parseCommentStatement(tokens);
+		} else if( tokens.matches(OracleStatementStartPhrases.STMT_NESTED_TABLE) ) {
+			// EXAMPLES:
+			// 		NESTED TABLE employees STORE AS deptemps; 
+			// or   MODIFY NESTED TABLE employees RETURN AS deptemps; 
+			tokens.consume("NESTED", TABLE, DdlTokenStream.ANY_VALUE, DdlTokenStream.ANY_VALUE, "AS", DdlTokenStream.ANY_VALUE);
+		} else if( tokens.matches(SET) ) {
+			stmt = parseSetStatement(tokens);
+		} else if( tokens.matches(GRANT)) {
+			stmt = parseGrantStatement(tokens);
+		} else {
+			stmt = parseIgnorableStatement(tokens);
+		}
+			
+		if( stmt == null ) {
+			stmt = super.parseCustomStatement(tokens);
+		}
+		return stmt;
+	}
+	
+	private Statement parseIgnorableStatement(DdlTokenStream tokens ) throws ParsingException {
+		Statement result = null;
+		for( String[] phrase : OracleStatementStartPhrases.IGNORABLE_CREATE_PHRASES_WITH_SLASHES ) {
+			if( tokens.matches(phrase) ) {
+				tokens.consume(CREATE);
+				result = parseIgnorableSlashedStatement(tokens, getStatementTypeName(phrase));
+				break;
+			}
+		}
+		if( result == null ) {
+			for( String[] phrase : OracleStatementStartPhrases.ALTER_PHRASES ) {
+				// NOTE:  Shouldn't get here. Alter statements are handled at a higher level
+				if( tokens.matches(phrase) ) {
+					tokens.consume(ALTER);
+					result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+					consumeSlash(tokens);
+					break;
+				}
+			}
+		}
+		if( result == null ) {
+			for( String[] phrase : OracleStatementStartPhrases.CREATE_PHRASES ) {
+				// NOTE:  Shouldn't get here. Alter statements are handled at a higher level
+				if( tokens.matches(phrase) ) {
+					tokens.consume(CREATE);
+					result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+					consumeSlash(tokens);
+				}
+			}
+		}
+		if( result == null ) {
+			for( String[] phrase : OracleStatementStartPhrases.DROP_PHRASES ) {
+				// NOTE:  Shouldn't get here. Alter statements are handled at a higher level
+				if( tokens.matches(phrase) ) {
+					tokens.consume(DROP);
+					result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+					consumeSlash(tokens);
+					break;
+				}
+			}
+		}		
+		if( result == null ) {
+			for( String[] phrase : OracleStatementStartPhrases.SET_PHRASES ) {
+				// NOTE:  Shouldn't get here. Alter statements are handled at a higher level
+				if( tokens.matches(phrase) ) {
+					tokens.consume(SET);
+					result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+					consumeSlash(tokens);
+					break;
+				}
+			}
+		}
+		if( result == null ) {
+			for( String[] phrase : OracleStatementStartPhrases.MISC_PHRASES ) {
+				// NOTE:  Shouldn't get here. Alter statements are handled at a higher level
+				if( tokens.matches(phrase) ) {
+					tokens.consume();
+					result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+					consumeSlash(tokens);
+					break;
+				}
+			}
+		}
+		
+		return result;
+		
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseCreateStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream, boolean)
+	 */
+	@Override
+	protected Statement parseCreateStatement(DdlTokenStream tokens, boolean inSchema) throws ParsingException {
+		Statement result = null;
+    	
+    	if( tokens.matches(OracleStatementStartPhrases.STMT_CREATE_INDEX) 
+    		|| tokens.matches(OracleStatementStartPhrases.STMT_CREATE_UNIQUE_INDEX)
+    		|| tokens.matches(OracleStatementStartPhrases.STMT_CREATE_BITMAP_INDEX)) {
+    		result = parseCreateIndex(tokens);
+    	} else {
+    		for( String[] phrase : OracleStatementStartPhrases.IGNORABLE_CREATE_PHRASES_WITH_SLASHES ) {
+    			if( tokens.matches(phrase) ) {
+    				tokens.consume(CREATE);
+    				result = parseIgnorableSlashedStatement(tokens, getStatementTypeName(phrase));
+    				break;
+    			}
+    		}
+    		if( result ==  null ) {
+	    		for( String[] phrase : OracleStatementStartPhrases.CREATE_PHRASES ) {
+	    			if( tokens.matches(phrase) ) {
+	    				tokens.consume(CREATE);
+	    				result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+	    				consumeSlash(tokens);
+	    				break;
+	    			}
+	    		}
+    		}
+    	}
+		
+		if( result == null ) {
+			result = super.parseCreateStatement(tokens, inSchema);
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * 
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseGrantStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Statement parseGrantStatement( DdlTokenStream tokens ) throws ParsingException {
+		if( tokens.matches(GRANT, DdlTokenStream.ANY_VALUE, "TO")) {
+			tokens.consume(GRANT);
+			String privilege = tokens.consume();
+			tokens.consume("TO");
+			String toValue = tokens.consume();
+			Statement stmt = new TypedStatement();
+			String value = parseUntilTerminator(tokens);
+			stmt.setValue(value);
+			stmt.setType("GRANT" + SPACE + privilege + SPACE + "TO" + SPACE + toValue);
+			return stmt;
+		}
+		if( tokens.matches(GRANT, DdlTokenStream.ANY_VALUE, "ON")) {
+			tokens.consume(GRANT);
+			String privilege = tokens.consume();
+			tokens.consume("ON");
+			String toValue = tokens.consume();
+			Statement stmt = new TypedStatement();
+			String value = parseUntilTerminator(tokens);
+			stmt.setValue(value);
+			stmt.setType("GRANT" + SPACE + privilege + SPACE + "ON" + SPACE + toValue);
+			return stmt;
+		}
+		if( 	tokens.matches(GRANT, CREATE) ||
+				tokens.matches(GRANT, ALTER) || 
+				tokens.matches(GRANT, DROP) || 
+				tokens.matches(GRANT, "EXECUTE") || 
+				tokens.matches(GRANT, "MANAGE") || 
+				tokens.matches(GRANT, "QUERY") || 
+				tokens.matches(GRANT, "ON", "COMMIT") || 
+				tokens.matches(GRANT, "ANY") || 
+				tokens.matches(GRANT, "SELECT") || 
+				tokens.matches(GRANT, "RESTRICTED") || 
+				tokens.matches(GRANT, "FLASHBACK") || 
+				tokens.matches(GRANT, "GLOBAL") || 
+				tokens.matches(GRANT, "DEBUG") ||
+				tokens.matches(GRANT, "GLOBAL") ||
+				tokens.matches(GRANT, "ADVISOR") ||
+				tokens.matches(GRANT, "ADMINISTER") ||
+				tokens.matches(GRANT, "BACKUP") ||
+				tokens.matches(GRANT, "LOCK") ||
+				tokens.matches(GRANT, "UPDATE") || 
+				tokens.matches(GRANT, "DELETE") ||
+				tokens.matches(GRANT, "INSERT") ||
+				tokens.matches(GRANT, "UNLIMITED") ||
+				tokens.matches(GRANT, "UNDER") ||
+				tokens.matches(GRANT, "ANALYZE") ||
+				tokens.matches(GRANT, "AUDIT") ||
+				tokens.matches(GRANT, "COMMENT") ||
+				tokens.matches(GRANT, "EXEMPT") ||
+				tokens.matches(GRANT, "FORCE") ||
+				tokens.matches(GRANT, "RESUMABLE") ||
+				tokens.matches(GRANT, "SYSDBA") ||
+				tokens.matches(GRANT, "REFERENCES") ||
+				tokens.matches(GRANT, "SYSOPER") ||
+				tokens.matches(GRANT, "WRITE") ) {
+			tokens.consume(GRANT);
+			String nextTok = tokens.consume() + SPACE + tokens.consume() + SPACE + tokens.consume();
+			Statement stmt = new TypedStatement();
+			String value = parseUntilTerminator(tokens);
+			stmt.setValue(value);
+			stmt.setType("GRANT" + " " + nextTok);
+			return stmt;
+		}
+		
+		
+		return null;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseAlterTableStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Statement parseAlterTableStatement(DdlTokenStream tokens)
+			throws ParsingException {
+		if( tokens.matches("ALTER", "TABLE", DdlTokenStream.ANY_VALUE, "ADD")) {
+	    	tokens.consume(); // consumes 'ALTER'
+	    	tokens.consume("TABLE");
+	    	String tableName = parseName(tokens);
+	    	tokens.consume("ADD");
+	    	
+	    	//System.out.println("  >> PARSING ALTER STATEMENT >>  TABLE Name = " + tableName);
+	    	
+	    	AlterTable alterTableStatement = new AlterTable(tableName);
+    		TableConstraint constraint = parseTableConstraint(tokens);
+    		if( constraint != null ) {
+    			alterTableStatement.addConstraint(constraint);
+    		} else {
+    			// This segment can also be enclosed in "()" brackets to handle multiple Column ADDs
+    			if( tokens.matches("(", "REF")) {
+    					//ALTER TABLE staff ADD (REF(dept) WITH ROWID);
+    					tokens.consume("(", "REF", "(");
+    					parseName(tokens);
+    					tokens.consume(")", "WITH", "ROWID");
+    					
+				} else if( tokens.matches("(", "SCOPE") ) {
+					// ALTER TABLE staff ADD (SCOPE FOR (dept) IS offices); 
+					tokens.consume("(", "SCOPE", "FOR", "(");
+					parseName(tokens);
+					tokens.consume(")", "IS");
+					parseName(tokens);
+					tokens.consume(")");
+				} else if( tokens.matches('(')) {
+    				List<Column> columns = parseColumns(tokens);
+		    		for( Column newColumn : columns ) {
+		    			alterTableStatement.addColumn(newColumn);
+		    		}
+				} else {
+    				// Assume single ADD COLUMN
+	    			Column newColumn = parseSingleTerminatedColumnDefinition(tokens);
+	    			
+	    			alterTableStatement.addColumn(newColumn);
+    			}
+    		}
+    		consumeTerminator(tokens);
+    		return alterTableStatement;
+		} else if( tokens.matches(OracleStatementStartPhrases.STMT_ALTER_INDEX) ){
+	    	tokens.consume(OracleStatementStartPhrases.STMT_ALTER_INDEX); // consumes 'ALTER'
+	    	String indexName = parseName(tokens);
+	    	Statement stmt = new TypedStatement();
+	    	stmt.setName(getStatementTypeName(OracleStatementStartPhrases.STMT_ALTER_INDEX));
+	    	StringBuffer sb = new StringBuffer();
+	    	sb.append("ALTER INDEX").append(SPACE).append(indexName).append(parseUntilTerminator(tokens));
+	    	consumeTerminator(tokens);
+	    	return stmt;
+
+		} else if(tokens.matches("ALTER", "TABLE", DdlTokenStream.ANY_VALUE, "RENAME")) {
+			// ALTER TABLE customers RENAME TO my_customers;
+			// ALTER TABLE customers RENAME CONSTRAINT cust_fname_nn TO cust_firstname_nn;
+	    	tokens.consume(); // consumes 'ALTER'
+	    	tokens.consume("TABLE");
+	    	String oldName = parseName(tokens);
+	    	
+	    	AlterTable alterTableStatement = new AlterTable(oldName);
+	    	
+	    	if( tokens.canConsume("RENAME", "TO") ) {
+	    		alterTableStatement.setActionValue("RENAME TO" + parseUntilTerminator(tokens));
+	    	} else if( tokens.canConsume("RENAME", "COLUMN") ) {
+	    		alterTableStatement.setActionValue("RENAME COLUMN" + parseUntilTerminator(tokens));
+	    	} else if( tokens.canConsume("RENAME", "CONSTRAINT") ) {
+	    		alterTableStatement.setActionValue("RENAME CONSTRAINT" + parseUntilTerminator(tokens));
+	    	}
+	    	consumeTerminator(tokens);
+	    	return alterTableStatement;
+		}
+
+		return super.parseAlterTableStatement(tokens);
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseAlterStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+	protected Statement parseAlterStatement(DdlTokenStream tokens) throws ParsingException {
+		Statement result = null;
+		
+		for( String[] phrase : OracleStatementStartPhrases.ALTER_PHRASES ) {
+			if( tokens.matches(phrase) ) {
+				tokens.consume("ALTER");
+				result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+				break;
+			}
+		}
+
+		if( result == null ) {
+			result = super.parseAlterStatement(tokens);
+		}
+		
+		return result;
+	}
+	
+	/**
+	 * Parses DDL CREATE INDEX {@link Statement}
+	 * 
+	 * @param tokens
+	 * @return the parsed CREATE INDEX {@link Statement}
+	 * @throws ParsingException
+	 */
+    private Statement parseCreateIndex( DdlTokenStream tokens ) throws ParsingException {
+    	// CREATE INDEX STR_MODEL_NDX ON MMR_STRING_ATTRS (MODEL_ID);
+    	tokens.consume(); // CREATE
+    	boolean isUnique = tokens.canConsume("UNIQUE");
+    	tokens.canConsume("BITMAP");
+    	tokens.consume("INDEX");
+    	String indexName = consumeIdentifier(tokens);
+    	tokens.consume("ON");
+    	tokens.canConsume("CLUSTER");
+    	String tableName = consumeIdentifier(tokens);
+    	
+    	//System.out.println("  >> PARSING Create INDEX >>  Name = " + indexName + "  For TABLE = " + tableName);
+    	
+    	List<String> columnNameList = new ArrayList<String>();
+		try {
+			if( tokens.matches('(')) {
+				tokens.consume();
+				columnNameList = parseColumnNameList(tokens);
+				tokens.consume(')');
+			}
+		} catch (ParsingException e) {
+			// Give up on parsing, probably a nested function (i.e.   banned (lower(banned_name)); 
+			parseUntilTerminator(tokens);
+		}
+		Index newIndex = new Index(indexName, tableName, columnNameList);
+		newIndex.setUnique(isUnique);
+		
+        consumeTerminator(tokens);
+        
+		return newIndex;
+    }
+
+    
+    private Statement parseCommentStatement( DdlTokenStream tokens ) throws ParsingException {
+    	//  COMMENT ON COLUMN CS_EXT_FILES.FILE_UID IS
+    	//  'UNIQUE INTERNAL IDENTIFIER, NOT EXPOSED'
+    	//  %
+    	
+    	/*
+			commentCommand
+				:	'COMMENT' 'ON' 
+				  ( 'TABLE' tableName 
+				  | 'VIEW' tableName
+				  | 'INDEX' indexName
+				  | 'COLUMN' columnName 
+				  | 'PROCEDURE' procedureId
+				  | 'MATERIALIZED'? 'VIEW' tableName 
+				  ) 'IS' ('NULL' | (CharLiteral)+) commandEnd? //CharLiteral (',' unicodeCharLiteral)*) commandEnd?
+				;
+    	 */
+    	tokens.consume("COMMENT", "ON"); // consumes 'COMMENT' 'ON'
+    	String obj = tokens.consume();
+    	String objName = parseName(tokens);
+    	
+    	//System.out.println("  >> FOUND [COMMENT ON] STATEMENT >>  TABLE Name = " + objName);
+    	String commentString = null;
+    		
+    	tokens.consume("IS");
+    	if( tokens.matches("NULL") ) {
+    		tokens.consume("NULL");
+    	} else {
+    		commentString = parseUntilTerminator(tokens);
+    	}
+    	
+    	consumeTerminator(tokens);
+    	
+        return new CommentStatement(obj, objName, commentString);
+    }
+    
+    /**
+     * 
+     * {@inheritDoc}
+     *
+     * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseSetStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+     */
+	@Override
+	protected Statement parseSetStatement(DdlTokenStream tokens)
+			throws ParsingException {
+		Statement result = null;
+		
+		for( String[] phrase : OracleStatementStartPhrases.SET_PHRASES ) {
+			// NOTE:  Shouldn't get here. Alter statements are handled at a higher level
+			if( tokens.matches(phrase) ) {
+				tokens.consume("SET");
+				result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+				break;
+			}
+		}
+		
+		return result;
+	}
+
+	/**
+	 * 
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#parseDropStatement(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+	 */
+	@Override
+    protected Statement parseDropStatement( DdlTokenStream tokens )  throws ParsingException {
+    	Statement result =  null;
+    	
+    	if( tokens.matches(StatementStartPhrases.STMT_DROP_TABLE )) {
+			//    		<drop table statement> ::=
+			//    		    DROP TABLE <table name> [{CASCADE | RESTRICT} CONSTAINTS] [PURGE]
+    		//
+    		//				<drop behavior> ::= CASCADE | RESTRICT
+    		tokens.consume(StatementStartPhrases.STMT_DROP_TABLE);
+    		String name = parseName(tokens);
+    		result = new TypedStatement();
+    		result.setName(name);
+    		result.setType("DROP TABLE");
+    		
+    		tokens.canConsume("CASCADE");
+    		tokens.canConsume("CASCADE");
+    		tokens.canConsume("RESTRICT");
+    		tokens.canConsume("PURGE");
+    	}
+    	if( result == null ) {
+			for( String[] phrase : OracleStatementStartPhrases.DROP_PHRASES ) {
+				if( tokens.matches(phrase) ) {
+					tokens.consume("DROP");
+					String name = null;
+					if( !tokens.matches(getTerminator())) {
+						name = tokens.consume();
+					}
+					result = parseIgnorableStatement(tokens, getStatementTypeName(phrase));
+					result.setName(name);
+					break;
+				}
+			}
+    	}
+		if( result == null ) {
+			result = super.parseDropStatement(tokens);
+		}
+    	return result;
+    }
+    
+    private Statement parseIgnorableSlashedStatement(DdlTokenStream tokens, String name) throws ParsingException {
+    	TypedStatement stmt = null;
+    	
+    	String value = parseUntilFwdSlash(tokens);
+    	if( value != null ) {
+    		stmt = new TypedStatement();
+    		stmt.setType(name);
+    		stmt.setValue(value);
+    	}
+    	tokens.consume("/");
+    	
+    	//System.out.println(" >>> FOUND [" + stmt.getType() +"] STATEMENT TOKEN. IGNORING");
+    	return stmt;
+    }
+    
+    /**
+     * Various Oracle statements (i.e. "CREATE OR REPLACE PACKAGE", etc...) may contain multiple SQL statements that will be 
+     * terminated by the semicolon, ';'.  In these cases, the terminator is now the '/' character.
+     * 
+     * @param tokens
+     * @return the parsed string.
+     * @throws ParsingException 
+     */
+    private String parseUntilFwdSlash( DdlTokenStream tokens ) throws ParsingException {
+    	StringBuffer sb = new StringBuffer();
+	    	while( tokens.hasNext() && !tokens.matches('/')) { // !tokens.matches(DdlTokenizer.STATEMENT_KEY) && 
+	    		sb.append(SPACE).append(tokens.consume());
+	    	} 
+    	
+    	return sb.toString();
+    }
+    
+    private void consumeSlash( DdlTokenStream tokens )  throws ParsingException {
+    	tokens.canConsume("/");
+    }
+    
+    // ===========================================================================================================================
+    // PARSE OBJECTS
+    // ===========================================================================================================================
+    
+    /**
+     * Oracle-specific COMMENT ON statement
+     */
+    public class CommentStatement extends TypedStatement {
+    	private String comment = null;
+    	private String targetType = null;
+    	private String targetName = null;
+    	
+		public CommentStatement(String targetType, String targetName, String comment) {
+			super();
+			setType("COMMENT ON");
+			this.targetType = targetType;
+			this.targetName = targetName;
+			this.comment = comment;
+		}
+		
+		public String getTargetType() {
+			return targetType;
+		}
+
+		public void setTargetType(String targetType) {
+			this.targetType = targetType;
+		}
+
+		public String getTargetName() {
+			return targetName;
+		}
+
+		public void setTargetName(String targetName) {
+			this.targetName = targetName;
+		}
+
+		public String getComment() {
+			return comment;
+		}
+
+		public void setComment(String comment) {
+			this.comment = comment;
+		}
+    	
+		
+		// ===========================================================================================================================
+		// ===========================================================================================================================	
+    }
+
+	/**
+	 * This class provides custom data type parsing for Oracle-specific data types.
+	 *
+	 */
+    class OracleDataTypeParser extends DataTypeParser {
+
+    	/*
+    	 * (non-Javadoc)
+    	 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseCustomType(org.jboss.dna.common.text.DdlTokenStream)
+    	 */
+		@Override
+		protected DataType parseCustomType(DdlTokenStream tokens) throws ParsingException {
+	    	DataType result = null;
+	    	String typeName = null;
+			
+			if( tokens.matches(OracleDataTypes.DTYPE_BINARY_FLOAT)) {
+				typeName = tokens.consume();
+			} else if( tokens.matches(OracleDataTypes.DTYPE_BINARY_DOUBLE) ) {
+				typeName = tokens.consume();
+			} else if( tokens.matches(OracleDataTypes.DTYPE_LONG) ){
+				typeName = tokens.consume();
+			} else if( tokens.matches(OracleDataTypes.DTYPE_LONG_RAW) ){
+				typeName = tokens.consume() + SPACE + tokens.consume();
+			} else if( tokens.matches(OracleDataTypes.DTYPE_BLOB) ){
+				typeName = tokens.consume();
+			} else if( tokens.matches(OracleDataTypes.DTYPE_CLOB) ){
+				typeName = tokens.consume();
+			} else if( tokens.matches(OracleDataTypes.DTYPE_NCLOB) ){
+				typeName = tokens.consume();
+			} else if( tokens.matches(OracleDataTypes.DTYPE_BFILE) ){
+				typeName = tokens.consume();
+			} else if(tokens.matches(OracleDataTypes.DTYPE_VARCHAR2)) {
+				// VARCHAR2(size [BYTE | CHAR])
+				typeName = tokens.consume(); // NAME
+		        tokens.consume('(');
+		        int length = parseInteger(tokens);
+		        if( tokens.matchesAnyOf("BYTE", "CHAR") ) {
+		        	tokens.consume();
+		        }
+		        tokens.consume(')');
+		        result = new DataType(typeName, length);
+			} else if(tokens.matches(OracleDataTypes.DTYPE_RAW)) {
+				typeName = tokens.consume();
+				int length = parseBracketedInteger(tokens);
+		        
+		        result = new DataType(typeName, length);
+			} else if(tokens.matches(OracleDataTypes.DTYPE_NVARCHAR2)) {
+				typeName = tokens.consume();
+				int length = parseBracketedInteger(tokens);
+		        
+		        result = new DataType(typeName, length);
+			} else if(tokens.matches(OracleDataTypes.DTYPE_NUMBER)) {
+				typeName = tokens.consume();
+	    		int precision = 0;
+	    		int scale = 0;
+	        	if( tokens.matches('(')) {
+		            tokens.consume('(');
+		            precision = parseInteger(tokens);
+		            if( tokens.canConsume(',') ) {
+		                scale =  parseInteger(tokens);
+		            } else {
+		            	scale = getDefaultScale();
+		            }
+		            tokens.consume(')');
+	        	} else {
+	        		precision = getDefaultPrecision();
+	        		scale = getDefaultScale();
+	        	}
+	        	result = new DataType(typeName, precision, scale);
+			} else if(tokens.matches(OracleDataTypes.DTYPE_INTERVAL_YEAR)) {
+				//INTERVAL YEAR (year_precision) TO MONTH
+				
+			} else if(tokens.matches(OracleDataTypes.DTYPE_INTERVAL_DAY)) {
+				//INTERVAL DAY (day_precision) TO SECOND (fractional_seconds_precision)
+			}
+			
+			if( result == null ) {
+				result = super.parseCustomType(tokens);
+			}
+			
+			return result;
+		}
+
+		/**
+		 * Because Oracle has an additional option on the CHAR datatype, we need to override the super method, check
+		 * for CHAR type and parse, else call super.parseCharStringType().
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#parseCharStringType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected DataType parseCharStringType(DdlTokenStream tokens)
+				throws ParsingException {
+	    	DataType result = null;
+	    	
+			if( tokens.matches(OracleDataTypes.DTYPE_CHAR_ORACLE)) {
+				String typeName = tokens.consume(); 
+				// CHAR (size [BYTE | CHAR]) (i.e. CHAR (10 BYTE) )
+				int length = getDefaultLength();
+				if( tokens.matches('(')) {
+			        tokens.consume('(');
+			        length = parseInteger(tokens);
+			        if( tokens.matchesAnyOf("BYTE", OracleDataTypes.DTYPE_CHAR_ORACLE) ) {
+			        	tokens.consume();
+			        }
+			        tokens.consume(')');
+				}
+				result = new DataType(typeName, length);
+			} else {
+				result = super.parseCharStringType(tokens);
+			}
+			
+			return result;
+		}
+
+		/**
+		 * 
+		 * {@inheritDoc}
+		 *
+		 * @see org.jboss.dna.sequencer.ddl.datatype.DataTypeParser#isCustomDataType(org.jboss.dna.sequencer.ddl.DdlTokenStream)
+		 */
+		@Override
+		protected boolean isCustomDataType(DdlTokenStream tokens)
+				throws ParsingException {
+        	for( String[] stmt : oracleDataTypeStrings ) {
+        		if( tokens.matches(stmt) ) return true;
+        	}
+        	
+        	return false;
+		}
+    	
+    }
+	
+	/**
+	 * {@inheritDoc}
+	 *
+	 * @see org.jboss.dna.sequencer.ddl.StandardDdlParser#getDataTypeStartWords()
+	 */
+	@Override
+	protected List<String> getCustomDataTypeStartWords() {
+		return OracleDataTypes.CUSTOM_DATATYPE_START_WORDS;
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/dialect/oracle/OracleDdlParser.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/AlterTable.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/AlterTable.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/AlterTable.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,66 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class AlterTable extends Table {
+
+	private List<String> droppedColumnNames = new ArrayList<String>();
+	private HashMap<String, String> renamedColumns = new HashMap<String, String>();
+	private List<Column> modifiedColumns = new ArrayList<Column>();
+	
+	private String actionValue = null;
+
+	public AlterTable(String name) {
+		super(name);
+		// TODO Auto-generated constructor stub
+		setType("ALTER TABLE");
+	}
+
+	public List<String> getDroppedColumnNames() {
+		return droppedColumnNames;
+	}
+
+	public void addDroppedColumnName(String name) {
+		this.droppedColumnNames.add(name);
+	}
+	
+	public void addRenamedColumn(String oldName, String newName) {
+		renamedColumns.put(oldName, newName);
+	}
+	
+	public HashMap<String, String> getRenamedColumnsMap() {
+		return renamedColumns;
+	}
+	
+	public void addModifiedColumn(Column modifiedColumn) {
+		this.modifiedColumns.add(modifiedColumn);
+	}
+	
+	public List<Column> getModifiedColumns() {
+		return this.modifiedColumns;
+	}
+	
+	/**
+	 * @return actionValue
+	 */
+	public String getActionValue() {
+		return actionValue;
+	}
+
+	/**
+	 * @param actionValue Sets actionValue to the specified value.
+	 */
+	public void setActionValue(String actionValue) {
+		this.actionValue = actionValue;
+	}
+	
+	@Override
+	public String toString() {
+		StringBuffer result = new StringBuffer(100);
+		result.append("AlterTable()").append(" ").append(getName());
+				
+		return result.toString();
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/AlterTable.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Column.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Column.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Column.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,88 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.dna.sequencer.ddl.datatype.DataType;
+
+public class Column extends TableElement {
+	private String name =  null;
+	private DataType dataType = null;
+	private String defaultValue = null;
+	private String nullable = DEFAULT_NULLABLE;
+	private List<TableConstraint> constraints = new ArrayList<TableConstraint>();
+	private Table parentTable =  null;
+	
+	public static final String DEFAULT_NULLABLE = "NULL";
+	
+	
+	public Column(String name, DataType dataType) {
+		super();
+		this.name = name;
+		this.dataType = dataType;
+	}
+	
+	public Column(String name, DataType dataType, Table parent) {
+		super();
+		this.name = name;
+		this.dataType = dataType;
+		this.parentTable = parent;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public DataType getDataType() {
+		return dataType;
+	}
+
+	public void setDataType(DataType dataType) {
+		this.dataType = dataType;
+	}
+
+	public String getDefaultValue() {
+		return defaultValue;
+	}
+
+	public void setDefaultValue(String defaultValue) {
+		this.defaultValue = defaultValue;
+	}
+
+	public String getNullable() {
+		return nullable;
+	}
+
+	public void setNullable(String nullable) {
+		this.nullable = nullable;
+	}
+	
+	public void addConstraint(TableConstraint constraint) {
+		constraints.add(constraint);
+	}
+	
+	public List<TableConstraint> getConstraints(){
+		return this.constraints;
+	}
+
+	@Override
+	public String toString() {
+		StringBuffer result = new StringBuffer(100);
+		result.append("Column()").append(" ").append(name);
+				
+		return result.toString();
+	}
+
+	public Table getParentTable() {
+		return parentTable;
+	}
+
+	public void setParentTable(Table parentTable) {
+		this.parentTable = parentTable;
+	}
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Column.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/ForeignKeyReference.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/ForeignKeyReference.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/ForeignKeyReference.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,35 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ForeignKeyReference extends TableConstraint {
+	private String referencedTablename = null;
+	private List<String> referencedColumnNameList = null;
+	
+
+	public ForeignKeyReference(int type, String name, List<String> columnNameList) {
+		super(type, name, columnNameList);
+		// TODO Auto-generated constructor stub
+	}
+
+
+	public String getReferencedTablename() {
+		return referencedTablename;
+	}
+
+
+	public void setReferencedTablename(String referencedTablename) {
+		this.referencedTablename = referencedTablename;
+	}
+
+
+	public List<String> getReferencedColumnNameList() {
+		return referencedColumnNameList;
+	}
+
+
+	public void setReferencedColumnNameList(List<String> referencedColumnNameList) {
+		this.referencedColumnNameList = new ArrayList<String>(referencedColumnNameList);
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/ForeignKeyReference.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Index.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Index.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Index.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,54 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Index extends TypedStatement {
+
+	private boolean isUnique = false;
+	private String tableName = null;
+	private List<String> columnNames = new ArrayList<String>();
+	
+	public Index(String name, String tableName, List<String> columnNames) {
+		super();
+		setName(name);
+		setType("CREATE INDEX");
+		this.tableName = tableName;
+		this.columnNames.addAll(columnNames);
+	}
+
+	
+	public void addColumn(String column) {
+		columnNames.add(column);
+	}
+	
+	public List<String> getColumns() {
+		return this.columnNames;
+	}
+	
+	@Override
+	public String toString() {
+		StringBuffer result = new StringBuffer(100);
+		result.append("Index()").append(" ").append(getName());
+				
+		return result.toString();
+	}
+
+	public boolean isUnique() {
+		return isUnique;
+	}
+
+	public void setUnique(boolean isUnique) {
+		this.isUnique = isUnique;
+	}
+
+
+	public String getTableName() {
+		return tableName;
+	}
+
+
+	public void setTableName(String tableName) {
+		this.tableName = tableName;
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Index.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Statement.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Statement.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Statement.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,18 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+public interface Statement {
+	static final String UKNOWN_TYPE = "UNKNOWN";
+
+	String getType();
+	
+	String getValue();
+	
+	String getName();
+	
+
+	void setType(String type);
+	
+	void setValue(String value);
+	
+	void setName(String name);
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Statement.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Table.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Table.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Table.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,41 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class Table extends TypedStatement {
+	private List<TableElement> columns = new ArrayList<TableElement>();
+	private List<TableElement> constraints = new ArrayList<TableElement>();
+	
+	public Table(String name) {
+		super();
+		setName(name);
+		setType("CREATE TABLE");
+		setValue(null);
+	}
+
+	public void addColumn(TableElement column) {
+		columns.add(column);
+	}
+	
+	public void addConstraint(TableElement tableConstraint) {
+		constraints.add(tableConstraint);
+	}
+	
+	public List<TableElement> getColumns() {
+		return this.columns;
+	}
+	
+	public List<TableElement> getConstraints() {
+		return this.constraints;
+	}
+	
+	@Override
+	public String toString() {
+		StringBuffer result = new StringBuffer(100);
+		result.append("Table()").append(" ").append(getName());
+				
+		return result.toString();
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/Table.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableConstraint.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableConstraint.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableConstraint.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,52 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TableConstraint extends TableElement {
+	private int type = 0;
+	private String name = null;
+
+	private List<String> columnNameList = new ArrayList<String>();
+	
+	public TableConstraint(int type, String name, List<String> columnNameList) {
+		super();
+		this.type = type;
+		this.name = name;
+		this.columnNameList.addAll(columnNameList);
+	}
+
+	public int getType() {
+		return type;
+	}
+
+	public void setType(int type) {
+		this.type = type;
+	}
+
+	public List<String> getColumnNameList() {
+		return columnNameList;
+	}
+	
+	/**
+	 * @return name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @param name Sets name to the specified value.
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	@Override
+	public String toString() {
+		StringBuffer result = new StringBuffer(100);
+		result.append("TableConstraint()").append(" ").append(name);
+				
+		return result.toString();
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableConstraint.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableElement.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableElement.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableElement.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,5 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+public abstract class TableElement {
+
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TableElement.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TypedStatement.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TypedStatement.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TypedStatement.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,39 @@
+package org.jboss.dna.sequencer.ddl.statement;
+
+public class TypedStatement implements Statement {
+	private String name = null;
+	private String type = Statement.UKNOWN_TYPE;
+	private String value = null;
+	
+	public String getName() {
+		return name;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	@Override
+	public String toString() {
+		StringBuffer result = new StringBuffer(100);
+		result.append(getType()).append("   NAME = ").append(getName());
+				
+		return result.toString();
+	}
+}


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/main/java/org/jboss/dna/sequencer/ddl/statement/TypedStatement.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParserTest.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParserTest.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParserTest.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,746 @@
+package org.jboss.dna.sequencer.ddl.datatype;
+
+import org.jboss.dna.common.text.ParsingException;
+import org.jboss.dna.sequencer.ddl.DdlConstants;
+import org.jboss.dna.sequencer.ddl.DdlTokenStream;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class DataTypeParserTest implements DdlConstants {
+	private DataTypeParser parser;
+
+	
+	
+    @Before
+    public void beforeEach() {
+    	parser = new DataTypeParser();
+    }
+    
+    private DdlTokenStream getTokens(String content) {
+    	DdlTokenStream tokens = new DdlTokenStream(content, DdlTokenStream.ddlTokenizer(false), false);
+    	
+    	tokens.start();
+    	
+    	return tokens;
+    }
+    
+    private String getDataTypeString(String[] input) {
+    	StringBuffer sb = new StringBuffer();
+    	
+    	for(int i=0; i<input.length; i++ ) {
+    		if( i>0 ) {
+    			sb.append(SPACE);
+    		}
+    		sb.append(input[i]);
+    	}
+    	
+    	return sb.toString();
+    }
+
+    /* ===========================================================================================================================
+     * UTILITY METHODS
+     * ==========================================================================================================================
+     */
+    
+    @Test
+    public void shouldParseBracketedInteger() {
+		String content = "(255)";
+		DdlTokenStream tokens = getTokens(content);
+		int value = parser.parseBracketedInteger(tokens);
+		
+		Assert.assertEquals("DataType length is not correct", 255, value);
+    }
+    
+    @Test
+    public void shouldParseKMGInteger() {
+		String content = "1000M";
+		DdlTokenStream tokens = getTokens(content);
+		
+		int value = parser.parseInteger(tokens);
+		Assert.assertEquals("DataType length is not correct", 1000, value);
+		
+		content = "1000G";
+		tokens = getTokens(content);
+		value = parser.parseInteger(tokens);
+		
+		Assert.assertEquals("DataType length is not correct", 1000, value);
+		
+		content = "1000K";
+		tokens = getTokens(content);
+		value = parser.parseInteger(tokens);
+		
+		Assert.assertEquals("DataType length is not correct", 1000, value);
+		
+		content = "(1000M)";
+		tokens = getTokens(content);
+		value = parser.parseBracketedInteger(tokens);
+		
+		Assert.assertEquals("DataType length is not correct", 1000, value);
+		
+		content = "(1000G)";
+		tokens = getTokens(content);
+		value = parser.parseBracketedInteger(tokens);
+		
+		Assert.assertEquals("DataType length is not correct", 1000, value);
+		
+		content = "(1000K)";
+		tokens = getTokens(content);
+		value = parser.parseBracketedInteger(tokens);
+		
+		Assert.assertEquals("DataType length is not correct", 1000, value);
+    }
+    
+    /* ===========================================================================================================================
+     * CHARACTER STRING TYPE
+     * ==========================================================================================================================
+	    <character string type> ::=
+	        CHARACTER [ <left paren> <length> <right paren> ]
+	      | CHAR [ <left paren> <length> <right paren> ]
+	      | CHARACTER VARYING <left paren> <length> <right paren>
+	      | CHAR VARYING <left paren> <length> <right paren>
+	      | VARCHAR <left paren> <length> <right paren>
+    */
+     
+	@Test
+	public void shouldParseCHAR() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_CHAR);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		content = typeString + " (255)";
+		tokens = getTokens(content);
+		
+		dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseCHARACTER() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_CHARACTER);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		content = typeString + " (255)";
+		tokens = getTokens(content);
+		
+		dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseCHAR_VARYING() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_CHAR_VARYING);
+		String content = typeString + " (255)";
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseCHARACTER_VARYING() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_CHARACTER_VARYING);
+		String content = typeString + " (255)";
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseVARCHAR() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_VARCHAR);
+		String content = typeString + " (255)";
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+		
+		content = typeString;
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+	}
+	
+    /* ===========================================================================================================================
+     * NATIONAL CHARACTER STRING TYPE
+     * ==========================================================================================================================
+     * 
+     * 
+		<national character string type> ::=
+		      NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
+		    | NATIONAL CHAR [ <left paren> <length> <right paren> ]
+		    | NCHAR [ <left paren> <length> <right paren> ]
+		    | NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
+		    | NATIONAL CHAR VARYING <left paren> <length> <right paren>
+		    | NCHAR VARYING <left paren> <length> <right paren>
+
+     * 
+     * 
+     */
+	@Test
+	public void shouldParseNATIONAL_CHAR() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_NATIONAL_CHAR);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		content = typeString + " (255)";
+		tokens = getTokens(content);
+		
+		dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseNATIONAL_CHARACTER() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_NATIONAL_CHARACTER);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		content = typeString + " (255)";
+		tokens = getTokens(content);
+		
+		dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseNATIONAL_CHAR_VARYING() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_NATIONAL_CHAR_VARYING);
+		String content = typeString + " (255)";
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseNATIONAL_CHARACTER_VARYING() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_NATIONAL_CHARACTER_VARYING);
+		String content = typeString + " (255)";
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseNCHAR_VARYING() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_NCHAR_VARYING);
+		String content = typeString + " (255)";
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+		
+		content = typeString;
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+	}
+	
+	
+    /* ===========================================================================================================================
+     * NATIONAL CHARACTER STRING TYPE
+     * ==========================================================================================================================
+     * 
+		<bit string type> ::=
+		      BIT [ <left paren> <length> <right paren> ]
+		    | BIT VARYING <left paren> <length> <right paren>
+     *
+     */
+	
+	@Test
+	public void shouldParseBIT() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_BIT);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+	}
+
+	@Test
+	public void shouldParseBITWithLength() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_BIT);
+		String content = typeString + " (255)";
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+	}
+	
+	@Test
+	public void shouldParseBIT_VARYINGWithLength() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_BIT_VARYING);
+		String content = typeString + " (255)";
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 255, dType.getLength());
+		
+		content = typeString;
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+	}
+	
+    /* ===========================================================================================================================
+     * EXACT NUMERIC TYPE
+     * ==========================================================================================================================
+		<exact numeric type> ::=
+		      NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+		    | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+		    | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+		    | INTEGER
+		    | INT
+		    | SMALLINT
+     * 
+     */
+	
+	@Test
+	public void shouldNotParseXXXXXXTYPE() {
+		String typeString = "XXXXXXTYPE";
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		
+		
+		DataType dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		
+		Assert.assertNull("DataType should NOT have been found for Type = " + typeString, dType);
+	}
+	
+	@Test
+	public void shouldParseINT() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_INT);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+	}
+	
+	@Test
+	public void shouldParseINTEGER() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_INTEGER);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+	}
+	
+	@Test
+	public void shouldParseSMALLINT() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_SMALLINT);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+	}
+	
+	@Test
+	public void shouldParseNUMERIC() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_NUMERIC);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		content = typeString + " (5)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 5, dType.getPrecision());  // PRECISION
+		
+		content = typeString + " (5, 2)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 5, dType.getPrecision());  // PRECISION
+		Assert.assertEquals("DataType length is not correct", 2, dType.getScale());  // SCALE
+		
+		
+		// MISSING COMMA
+		content = typeString + " (5  2)";
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+		
+		
+		// INVALID Scale Integer
+		content = typeString + " (5  A)";
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+	}
+	
+	
+	@Test
+	public void shouldParseDECIMAL() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_DECIMAL);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		content = typeString + " (5)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 5, dType.getPrecision());  // PRECISION
+		
+		content = typeString + " (5, 2)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 5, dType.getPrecision());  // PRECISION
+		Assert.assertEquals("DataType length is not correct", 2, dType.getScale());  // SCALE
+		
+		// MISSING COMMA
+		content = typeString + " (5  2)";
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+		
+		
+		// INVALID Scale Integer
+		content = typeString + " (5  A)";
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+	}
+	
+	
+	@Test
+	public void shouldParseDEC() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_DEC);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		content = typeString + " (5)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 5, dType.getPrecision());  // PRECISION
+		
+		content = typeString + " (5, 2)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 5, dType.getPrecision());  // PRECISION
+		Assert.assertEquals("DataType length is not correct", 2, dType.getScale());  // SCALE
+		
+		
+		// MISSING COMMA
+		content = typeString + " (5  2)";
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+		
+		
+		// INVALID Scale Integer
+		content = typeString + " (5  A)";
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+	}
+	
+	
+    /* ===========================================================================================================================
+     * APPROXIMATE NUMERIC TYPE
+     * ==========================================================================================================================
+     * 
+		<approximate numeric type> ::=
+		      FLOAT [ <left paren> <precision> <right paren> ]
+		    | REAL
+		    | DOUBLE PRECISION
+     */
+	
+	
+	
+	@Test
+	public void shouldParseFLOAT() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_FLOAT);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		content = typeString + " (5)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 5, dType.getPrecision());  // PRECISION
+		
+		// ADDED SCALE
+		content = typeString + " (5,  2)";
+		tokens = getTokens(content);
+		dType = null;
+		try {
+			dType = parser.parse(tokens);
+		} catch (ParsingException e) {
+			// Expect exception
+		}
+		Assert.assertNull("DataType should NOT have been found for Type = " + content, dType);
+
+	}
+	
+	@Test
+	public void shouldParseREAL() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_REAL);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+	}
+	
+	
+	@Test
+	public void shouldParseDOUBLE_PRECISION() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_DOUBLE_PRECISION);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+	}
+	
+    /* ===========================================================================================================================
+     * APPROXIMATE NUMERIC TYPE
+     * ==========================================================================================================================
+     * 
+		<datetime type> ::=
+		      DATE
+		    | TIME [ <left paren> <time precision> <right paren> ] [ WITH TIME ZONE ]
+		    | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ] [ WITH TIME ZONE ]
+		    
+		    NOTE:  time precision & timestamp precision is an integer from 0 to 9
+	 */
+	
+	@Test
+	public void shouldParseDATE() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_DATE);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+	}
+	
+	@Test
+	public void shouldParseTIME() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_TIME);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		
+		content = typeString + " (6)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 6, dType.getPrecision());
+	}
+	
+	@Test
+	public void shouldParseTIMESTAMP() {
+		String typeString = getDataTypeString(DataTypes.DTYPE_TIMESTAMP);
+		String content = typeString;
+		
+		DdlTokenStream tokens = getTokens(content);
+		  
+		DataType dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		
+		
+		content = typeString + " (6)";
+		tokens = getTokens(content);
+		dType = parser.parse(tokens);
+		
+		Assert.assertNotNull("DataType was NOT found for Type = " + typeString, dType);
+		Assert.assertEquals("Wrong DataType found", typeString, dType.getName());
+		Assert.assertEquals("DataType length is not correct", 6, dType.getPrecision());
+	}
+}
\ No newline at end of file


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/datatype/DataTypeParserTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParserTest.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParserTest.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParserTest.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,107 @@
+package org.jboss.dna.sequencer.ddl.dialect;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.List;
+
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+import org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParser;
+import org.jboss.dna.sequencer.ddl.statement.Statement;
+import org.junit.Before;
+import org.junit.Test;
+
+public class DerbyDdlParserTest {
+	private StandardDdlParser parser;
+	
+	
+	public static final String DDL_FILE_PATH = "src/test/resources/ddl/";
+	public static final String MM_DDL_FILE_PATH = "src/test/resources/mmddl/";
+	
+	
+	@Before
+	public void beforeEach() {
+		parser = new DerbyDdlParser();
+	}
+	
+	protected String getFileContent(String filePath) {
+		StringBuilder sb = new StringBuilder(1000);
+		
+	    System.out.println("   Getting Content for File = " + filePath);
+		
+	    if(filePath!=null && filePath.length() > 0){
+	        FileReader fr=null;
+	        BufferedReader in=null;
+	        
+	        try{
+	            fr=new FileReader(filePath);
+	            in = new BufferedReader(fr);
+	
+	            int ch = in.read();
+	       
+	            while( ch > -1 ) {
+	            	sb.append((char)ch);
+	            	ch = in.read();
+	            }        
+	        }catch(Exception e){
+	           System.out.print(e);
+	        }
+	        finally{
+	            try{
+	                fr.close();
+	            }catch(java.io.IOException e){}
+	            try{
+	                in.close();
+	            }catch(java.io.IOException e){}
+	
+	        }
+	    }
+		return sb.toString();
+	}
+	
+	
+//	@Test
+//	public void shouldParseDerbyDDL() {
+//	  	String content = getFileContent(DDL_FILE_PATH + "derby_test_create.ddl");
+//	  
+//	  	List<Statement> stmts = parser.parse(content);
+//	  	
+//	  	assertEquals(744, stmts.size());
+//
+//	  	System.out.println("  END PARSING.  # Statements = " + stmts.size());
+//	  
+//	}
+	
+	
+    @Test
+    public void shouldParseDeclareGlobaTemporaryTable() {
+    	System.out.println("TEST:  shouldParseDeclareGlobaTemporaryTable()");
+    	String content = "declare global temporary table SESSION.t1(c11 int) not logged;";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("DECLARE", stmts.get(0).getType());
+    }
+	
+    @Test
+    public void shouldParseAlterTableAlterColumnDefaultRealNumber() {
+    	System.out.println("TEST:  shouldParseAlterTableAlterColumnDefaultRealNumber()");
+    	String content = "ALTER TABLE Employees ALTER COLUMN Salary DEFAULT 1000.0;";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ALTER TABLE", stmts.get(0).getType());
+    }
+    
+	
+	
+	@Test
+	public void shouldParseDerbyStatements() {
+		//System.out.println("TEST:  shouldParseDerbyStatements()");
+	  	String content = getFileContent(DDL_FILE_PATH + "derby_test_statements.ddl");
+	  	parser.setDoUseTerminator(true);
+	  	List<Statement> stmts = parser.parse(content);
+	  	assertEquals(64, stmts.size());
+	  	System.out.println("  END PARSING.  # Statements = " + stmts.size());
+	  
+	}
+}
\ No newline at end of file


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParserTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/OracleDdlParserTest.java
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/OracleDdlParserTest.java	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/OracleDdlParserTest.java	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,192 @@
+package org.jboss.dna.sequencer.ddl.dialect;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.List;
+
+import org.jboss.dna.sequencer.ddl.DdlConstants;
+import org.jboss.dna.sequencer.ddl.StandardDdlParser;
+import org.jboss.dna.sequencer.ddl.dialect.oracle.OracleDdlParser;
+import org.jboss.dna.sequencer.ddl.statement.Statement;
+import org.junit.Before;
+import org.junit.Test;
+
+public class OracleDdlParserTest {
+	private StandardDdlParser parser;
+	
+
+	public static final String DDL_FILE_PATH = "src/test/resources/ddl/";
+	public static final String MM_DDL_FILE_PATH = "src/test/resources/mmddl/";
+	
+	
+    @Before
+    public void beforeEach() {
+    	parser = new OracleDdlParser();
+    }
+    
+    protected String getFileContent(String filePath) {
+    	StringBuilder sb = new StringBuilder(1000);
+    	
+        System.out.println("   Getting Content for File = " + filePath);
+    	
+        if(filePath!=null && filePath.length() > 0){
+            FileReader fr=null;
+            BufferedReader in=null;
+            
+            try{
+                fr=new FileReader(filePath);
+                in = new BufferedReader(fr);
+
+                int ch = in.read();
+           
+                while( ch > -1 ) {
+                	sb.append((char)ch);
+                	ch = in.read();
+                }        
+            }catch(Exception e){
+               System.out.print(e);
+            }
+            finally{
+                try{
+                    fr.close();
+                }catch(java.io.IOException e){}
+                try{
+                    in.close();
+                }catch(java.io.IOException e){}
+
+            }
+        }
+    	return sb.toString();
+    }
+    
+//	@Test
+//	public void shouldParseOracleDDL() {
+//	  	String content = getFileContent(DDL_FILE_PATH + "oracle_test_create.ddl");
+//	  
+//	  	List<Statement> stmts = parser.parse(content);
+//	  	
+//	  	System.out.println("  END PARSING.  # Statements = " + stmts.size());
+//	  
+//	}
+    
+    @Test
+    public void shouldParseCreateOrReplaceTrigger() {
+    	System.out.println("TEST:  shouldParseCreateOrReplaceTrigger()");
+    	String content = "CREATE OR REPLACE TRIGGER drop_trigger" + DdlConstants.SPACE + 
+    	   "BEFORE DROP ON hr.SCHEMA" + DdlConstants.SPACE + 
+    	   "BEGIN" + DdlConstants.SPACE + 
+    	   		"RAISE_APPLICATION_ERROR ( num => -20000,msg => 'Cannot drop object');" + DdlConstants.SPACE + 
+    	   "END;" + DdlConstants.SPACE +  "/";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	System.out.println("  END PARSING.  # Statements = " + stmts.size());
+    	System.out.println("     VALUE STMT 1 = " + stmts.get(0).getValue());
+    	
+    }
+    
+    @Test 
+    public void shouldParseAnalyze() {
+    	System.out.println("TEST:  shouldParseAnalyze()");
+    	String content = "ANALYZE TABLE customers VALIDATE STRUCTURE ONLINE;";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ANALYZE", stmts.get(0).getType());
+    }
+    
+    @Test
+    public void shouldParseRollbackToSavepoint() {
+    	System.out.println("TEST:  shouldParseRollbackToSavepoint()");
+    	String content = "ROLLBACK TO SAVEPOINT banda_sal;";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ROLLBACK TO SAVEPOINT", stmts.get(0).getType());
+    }
+    
+    @Test
+    public void shouldParseAlterTableAddREF() {
+    	System.out.println("TEST:  shouldParseAlterTableAddREF()");
+    	String content = "ALTER TABLE staff ADD (REF(dept) WITH ROWID);";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ALTER TABLE", stmts.get(0).getType());
+    }
+	
+    @Test
+    public void shouldParseAlterTableADDWithNESTED_TABLE() {
+    	// This is a one-off case where there is a custom datatype (i.e. skill_table_type)
+    	System.out.println("TEST:  shouldParseAlterTableADDWithNESTED_TABLE()");
+    	String content = "ALTER TABLE employees ADD (skills skill_table_type) NESTED TABLE skills STORE AS nested_skill_table;";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ALTER TABLE", stmts.get(0).getType());
+    }
+    
+    @Test
+    public void shouldParseAlterIndexRename() {
+    	System.out.println("TEST:  shouldParseAlterIndexRename()");
+    	String content = "ALTER INDEX upper_ix RENAME TO upper_name_ix;";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ALTER INDEX", stmts.get(0).getType());
+    }
+    
+    @Test
+    public void shouldParseAlterIndexMODIFY() {
+    	System.out.println("TEST:  shouldParseAlterIndexMODIFY()");
+    	String content = "ALTER INDEX cost_ix MODIFY PARTITION p3 STORAGE(MAXEXTENTS 30) LOGGING;";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ALTER INDEX", stmts.get(0).getType());
+    }
+    
+    @Test
+    public void shouldParseAlterIndexDROP() {
+    	System.out.println("TEST:  shouldParseAlterIndexDROP()");
+    	String content = "ALTER INDEX cost_ix DROP PARTITION p1;";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ALTER INDEX", stmts.get(0).getType());
+    }
+    
+    @Test
+    public void shouldParseAlterIndexTypeADD() {
+    	System.out.println("TEST:  shouldParseAlterIndexTypeADD()");
+    	String content = "ALTER INDEXTYPE position_indextype ADD lob_contains(CLOB, CLOB);";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+    	assertEquals("ALTER INDEXTYPE", stmts.get(0).getType());
+    }
+    
+    @Test
+    public void shouldParseTEMP_TEST() {
+    	System.out.println("TEST:  shouldParseTEMP_TEST()");
+        String content = "COMMENT ON COLUMN employees.job_id IS 'abbreviated job title';";
+    	parser.setDoUseTerminator(true);
+    	List<Statement> stmts = parser.parse(content);
+
+    }
+      
+	@Test
+	public void shouldParseOracleStatements() {
+		System.out.println("TEST:  shouldParseOracleStatements()");
+	  	String content = getFileContent(DDL_FILE_PATH + "oracle_test_statements.ddl");
+	  	parser.setDoUseTerminator(true);
+	  	List<Statement> stmts = parser.parse(content);
+	  	assertEquals(198, stmts.size());
+	  	System.out.println("  END PARSING.  # Statements = " + stmts.size());
+	  
+	}
+	
+//	@Test
+//	public void shouldParseGFM_PhysicalDDL() {
+//	  	String content = getFileContent(DDL_FILE_PATH + "GFM_Physical.ddl");
+//	  	parser.setDoUseTerminator(true);
+//	  	List<Statement> stmts = parser.parse(content);
+//	  	
+//	  	System.out.println("  END PARSING.  # Statements = " + stmts.size());
+//	  
+//	}
+
+}
\ No newline at end of file


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/java/org/jboss/dna/sequencer/ddl/dialect/OracleDdlParserTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/resources/sql2bnf.aug92.txt
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/resources/sql2bnf.aug92.txt	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/resources/sql2bnf.aug92.txt	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,2594 @@
+This file contains a depth-first tree traversal of the BNF
+for the  language done at about 27-AUG-1992 11:03:41.64.
+The specific version of the BNF included here is:  ANSI-only, SQL2-only.
+
+
+<SQL terminal character> ::=
+      <SQL language character>
+    | <SQL embedded language character>
+
+<SQL language character> ::=
+      <simple Latin letter>
+    | <digit>
+    | <SQL special character>
+
+<simple Latin letter> ::=
+      <simple Latin upper case letter>
+    | <simple Latin lower case letter>
+
+<simple Latin upper case letter> ::=
+          A | B | C | D | E | F | G | H | I | J | K | L | M | N | O
+    | P | Q | R | S | T | U | V | W | X | Y | Z
+
+<simple Latin lower case letter> ::=
+          a | b | c | d | e | f | g | h | i | j | k | l | m | n | o
+    | p | q | r | s | t | u | v | w | x | y | z
+
+<digit> ::=
+    0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
+
+<SQL special character> ::=
+      <space>
+    | <double quote>
+    | <percent>
+    | <ampersand>
+    | <quote>
+    | <left paren>
+    | <right paren>
+    | <asterisk>
+    | <plus sign>
+    | <comma>
+    | <minus sign>
+    | <period>
+    | <solidus>
+    | <colon>
+    | <semicolon>
+    | <less than operator>
+    | <equals operator>
+    | <greater than operator>
+    | <question mark>
+    | <underscore>
+    | <vertical bar>
+
+<space> ::= !! <EMPHASIS>(space character in character set in use)
+
+<double quote> ::= "
+
+<percent> ::= %
+
+<ampersand> ::= &
+
+<quote> ::= '
+
+<left paren> ::= (
+
+<right paren> ::= )
+
+<asterisk> ::= *
+
+<plus sign> ::= +
+
+<comma> ::= ,
+
+<minus sign> ::= -
+
+<period> ::= .
+
+<solidus> ::= /
+
+<colon> ::= :
+
+<semicolon> ::= ;
+
+<less than operator> ::= <
+
+<equals operator> ::= =
+
+<greater than operator> ::= >
+
+<question mark> ::= ?
+
+<underscore> ::= _
+
+<vertical bar> ::= |
+
+<SQL embedded language character> ::=
+      <left bracket>
+    | <right bracket>
+
+<left bracket> ::= [
+
+<right bracket> ::= ]
+
+<token> ::=
+      <nondelimiter token>
+    | <delimiter token>
+
+<nondelimiter token> ::=
+      <regular identifier>
+    | <key word>
+    | <unsigned numeric literal>
+    | <national character string literal>
+    | <bit string literal>
+    | <hex string literal>
+
+<regular identifier> ::= <identifier body>
+
+<identifier body> ::=
+    <identifier start> [ { <underscore> | <identifier part> }... ]
+
+<identifier start> ::= <EMPHASIS>(!! See the Syntax Rules)
+
+<identifier part> ::=
+      <identifier start>
+    | <digit>
+
+<key word> ::=
+      <reserved word>
+    | <non-reserved word>
+
+<reserved word> ::=
+      ABSOLUTE | ACTION | ADD | ALL
+    | ALLOCATE | ALTER | AND
+    | ANY | ARE
+    | AS | ASC
+    | ASSERTION | AT
+    | AUTHORIZATION | AVG
+    | BEGIN | BETWEEN | BIT | BIT_LENGTH
+    | BOTH | BY
+    | CASCADE | CASCADED | CASE | CAST
+    | CATALOG
+    | CHAR | CHARACTER | CHAR_LENGTH
+    | CHARACTER_LENGTH | CHECK | CLOSE | COALESCE
+    | COLLATE | COLLATION
+    | COLUMN | COMMIT
+    | CONNECT
+    | CONNECTION | CONSTRAINT
+    | CONSTRAINTS | CONTINUE
+    | CONVERT | CORRESPONDING | COUNT | CREATE | CROSS
+    | CURRENT
+    | CURRENT_DATE | CURRENT_TIME
+    | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR
+    | DATE | DAY | DEALLOCATE | DEC
+    | DECIMAL | DECLARE | DEFAULT | DEFERRABLE
+    | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR
+    | DIAGNOSTICS
+    | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP
+    | ELSE | END | END-EXEC | ESCAPE
+    | EXCEPT | EXCEPTION
+    | EXEC | EXECUTE | EXISTS
+    | EXTERNAL | EXTRACT
+    | FALSE | FETCH | FIRST | FLOAT | FOR
+    | FOREIGN | FOUND | FROM | FULL
+    | GET | GLOBAL | GO | GOTO
+    | GRANT | GROUP
+    | HAVING | HOUR
+    | IDENTITY | IMMEDIATE | IN | INDICATOR
+    | INITIALLY | INNER | INPUT
+    | INSENSITIVE | INSERT | INT | INTEGER | INTERSECT
+    | INTERVAL | INTO | IS
+    | ISOLATION
+    | JOIN
+    | KEY
+    | LANGUAGE | LAST | LEADING | LEFT
+    | LEVEL | LIKE | LOCAL | LOWER
+    | MATCH | MAX | MIN | MINUTE | MODULE
+    | MONTH
+    | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO
+    | NOT | NULL
+    | NULLIF | NUMERIC
+    | OCTET_LENGTH | OF
+    | ON | ONLY | OPEN | OPTION | OR
+    | ORDER | OUTER
+    | OUTPUT | OVERLAPS
+    | PAD | PARTIAL | POSITION | PRECISION | PREPARE
+    | PRESERVE | PRIMARY
+    | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
+    | READ | REAL | REFERENCES | RELATIVE | RESTRICT
+    | REVOKE | RIGHT
+    | ROLLBACK | ROWS
+    | SCHEMA | SCROLL | SECOND | SECTION
+    | SELECT
+    | SESSION | SESSION_USER | SET
+    | SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE
+    | SQLERROR | SQLSTATE
+    | SUBSTRING | SUM | SYSTEM_USER
+    | TABLE | TEMPORARY
+    | THEN | TIME | TIMESTAMP
+    | TIMEZONE_HOUR | TIMEZONE_MINUTE
+    | TO | TRAILING | TRANSACTION
+    | TRANSLATE | TRANSLATION | TRIM | TRUE
+    | UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE
+    | USER | USING
+    | VALUE | VALUES | VARCHAR | VARYING | VIEW
+    | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE
+    | YEAR
+    | ZONE
+
+<non-reserved word> ::=
+    
+      ADA
+    | C | CATALOG_NAME
+    | CHARACTER_SET_CATALOG | CHARACTER_SET_NAME
+    | CHARACTER_SET_SCHEMA | CLASS_ORIGIN | COBOL | COLLATION_CATALOG
+    | COLLATION_NAME | COLLATION_SCHEMA | COLUMN_NAME | COMMAND_FUNCTION
+    | COMMITTED
+    | CONDITION_NUMBER | CONNECTION_NAME | CONSTRAINT_CATALOG | CONSTRAINT_NAME
+    | CONSTRAINT_SCHEMA | CURSOR_NAME
+    | DATA | DATETIME_INTERVAL_CODE
+    | DATETIME_INTERVAL_PRECISION | DYNAMIC_FUNCTION
+    | FORTRAN
+    | LENGTH
+    | MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE | MUMPS
+    | NAME | NULLABLE | NUMBER
+    | PASCAL | PLI
+    | REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE
+    | ROW_COUNT
+    | SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
+    | TABLE_NAME | TYPE
+    | UNCOMMITTED | UNNAMED
+
+<unsigned numeric literal> ::=
+      <exact numeric literal>
+    | <approximate numeric literal>
+
+<exact numeric literal> ::=
+      <unsigned integer> [ <period> [ <unsigned integer> ] ]
+    | <period> <unsigned integer>
+
+<unsigned integer> ::= <digit>...
+
+<approximate numeric literal> ::= <mantissa> E <exponent>
+
+<mantissa> ::= <exact numeric literal>
+
+<exponent> ::= <signed integer>
+
+<signed integer> ::= [ <sign> ] <unsigned integer>
+
+<sign> ::= <plus sign> | <minus sign>
+
+<national character string literal> ::=
+    N <quote> [ <character representation>... ] <quote>
+      [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]
+
+<character representation> ::=
+      <nonquote character>
+    | <quote symbol>
+
+<nonquote character> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<quote symbol> ::= <quote><quote>
+
+<separator> ::= { <comment> | <space> | <newline> }...
+
+<comment> ::=
+    <comment introducer> [ <comment character>... ] <newline>
+
+<comment introducer> ::= <minus sign><minus sign>[<minus sign>...]
+
+<comment character> ::=
+      <nonquote character>
+    | <quote>
+
+<newline> ::= !! <EMPHASIS>(implementation-defined end-of-line indicator)
+
+<bit string literal> ::=
+    B <quote> [ <bit>... ] <quote>
+      [ { <separator>... <quote> [ <bit>... ] <quote> }... ]
+
+<bit> ::= 0 | 1
+
+<hex string literal> ::=
+    X <quote> [ <hexit>... ] <quote>
+      [ { <separator>... <quote> [ <hexit>... ] <quote> }... ]
+
+<hexit> ::= <digit> | A | B | C | D | E | F | a | b | c | d | e | f
+
+<delimiter token> ::=
+      <character string literal>
+    | <date string>
+    | <time string>
+    | <timestamp string>
+    | <interval string>
+    | <delimited identifier>
+    | <SQL special character>
+    | <not equals operator>
+    | <greater than or equals operator>
+    | <less than or equals operator>
+    | <concatenation operator>
+    | <double period>
+    | <left bracket>
+    | <right bracket>
+
+<character string literal> ::=
+    [ <introducer><character set specification> ]
+    <quote> [ <character representation>... ] <quote>
+      [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]
+
+<introducer> ::= <underscore>
+
+<character set specification> ::=
+      <standard character repertoire name>
+    | <implementation-defined character repertoire name>
+    | <user-defined character repertoire name>
+    | <standard universal character form-of-use name>
+    | <implementation-defined universal character form-of-use name>
+
+<standard character repertoire name> ::= <character set name>
+
+<character set name> ::= [ <schema name> <period> ]
+      <SQL language identifier>
+
+<schema name> ::=
+    [ <catalog name> <period> ] <unqualified schema name>
+
+<catalog name> ::= <identifier>
+
+<identifier> ::=
+    [ <introducer><character set specification> ] <actual identifier>
+
+<actual identifier> ::=
+      <regular identifier>
+    | <delimited identifier>
+
+<delimited identifier> ::=
+    <double quote> <delimited identifier body> <double quote>
+
+<delimited identifier body> ::= <delimited identifier part>...
+
+<delimited identifier part> ::=
+      <nondoublequote character>
+    | <doublequote symbol>
+
+<nondoublequote character> ::= <EMPHASIS>(!! See the Syntax Rules)
+
+<doublequote symbol> ::= <double quote><double quote>
+
+<unqualified schema name> ::= <identifier>
+
+<SQL language identifier> ::=
+    <SQL language identifier start>
+       [ { <underscore> | <SQL language identifier part> }... ]
+
+<SQL language identifier start> ::= <simple Latin letter>
+
+<SQL language identifier part> ::=
+      <simple Latin letter>
+    | <digit>
+
+<implementation-defined character repertoire name> ::=
+    <character set name>
+
+<user-defined character repertoire name> ::= <character set name>
+
+<standard universal character form-of-use name> ::=
+    <character set name>
+
+<implementation-defined universal character form-of-use name> ::=
+    <character set name>
+
+<date string> ::=
+    <quote> <date value> <quote>
+
+<date value> ::=
+    <years value> <minus sign> <months value>
+        <minus sign> <days value>
+
+<years value> ::= <datetime value>
+
+<datetime value> ::= <unsigned integer>
+
+<months value> ::= <datetime value>
+
+<days value> ::= <datetime value>
+
+<time string> ::=
+    <quote> <time value> [ <time zone interval> ] <quote>
+
+<time value> ::=
+    <hours value> <colon> <minutes value> <colon> <seconds value>
+
+<hours value> ::= <datetime value>
+
+<minutes value> ::= <datetime value>
+
+<seconds value> ::=
+      <seconds integer value> [ <period> [ <seconds fraction> ] ]
+
+<seconds integer value> ::= <unsigned integer>
+
+<seconds fraction> ::= <unsigned integer>
+
+<time zone interval> ::=
+    <sign> <hours value> <colon> <minutes value>
+
+<timestamp string> ::=
+    <quote> <date value> <space> <time value>
+        [ <time zone interval> ] <quote>
+
+<interval string> ::=
+    <quote> { <year-month literal> | <day-time literal> } <quote>
+
+<year-month literal> ::=
+      <years value>
+    | [ <years value> <minus sign> ] <months value>
+
+<day-time literal> ::=
+      <day-time interval>
+    | <time interval>
+
+<day-time interval> ::=
+    <days value>
+      [ <space> <hours value> [ <colon> <minutes value>
+        [ <colon> <seconds value> ] ] ]
+
+<time interval> ::=
+      <hours value> [ <colon> <minutes value> [ <colon> <seconds value> ] ]
+    | <minutes value> [ <colon> <seconds value> ]
+    | <seconds value>
+
+<not equals operator> ::= <>
+
+<greater than or equals operator> ::= >=
+
+<less than or equals operator> ::= <=
+
+<concatenation operator> ::= ||
+
+<double period> ::= ..
+
+<module> ::=
+    <module name clause>
+    <language clause>
+    <module authorization clause>
+    [ <temporary table declaration>... ]
+    <module contents>...
+
+<module name clause> ::=
+    MODULE [ <module name> ]
+      [ <module character set specification> ]
+
+<module name> ::= <identifier>
+
+<module character set specification> ::=
+    NAMES ARE <character set specification>
+
+<language clause> ::=
+    LANGUAGE <language name>
+
+<language name> ::=
+    ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI
+
+<module authorization clause> ::=
+      SCHEMA <schema name>
+    | AUTHORIZATION <module authorization identifier>
+    | SCHEMA <schema name>
+          AUTHORIZATION <module authorization identifier>
+
+<module authorization identifier> ::=
+    <authorization identifier>
+
+<authorization identifier> ::= <identifier>
+
+<temporary table declaration> ::=
+    DECLARE LOCAL TEMPORARY TABLE
+        <qualified local table name>
+      <table element list>
+      [ ON COMMIT { PRESERVE | DELETE } ROWS ]
+
+<qualified local table name> ::=
+    MODULE <period> <local table name>
+
+<local table name> ::= <qualified identifier>
+
+<qualified identifier> ::= <identifier>
+
+<table element list> ::=
+      <left paren> <table element> [ { <comma> <table element> }... ] <right paren>
+
+<table element> ::=
+      <column definition>
+    | <table constraint definition>
+
+<column definition> ::=
+    <column name> { <data type> | <domain name> }
+    [ <default clause> ]
+    [ <column constraint definition>... ]
+    [ <collate clause> ]
+
+<column name> ::= <identifier>
+
+<data type> ::=
+      <character string type>
+           [ CHARACTER SET <character set specification> ]
+    | <national character string type>
+    | <bit string type>
+    | <numeric type>
+    | <datetime type>
+    | <interval type>
+
+<character string type> ::=
+      CHARACTER [ <left paren> <length> <right paren> ]
+    | CHAR [ <left paren> <length> <right paren> ]
+    | CHARACTER VARYING <left paren> <length> <right paren>
+    | CHAR VARYING <left paren> <length> <right paren>
+    | VARCHAR <left paren> <length> <right paren>
+
+<length> ::= <unsigned integer>
+
+<national character string type> ::=
+      NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
+    | NATIONAL CHAR [ <left paren> <length> <right paren> ]
+    | NCHAR [ <left paren> <length> <right paren> ]
+    | NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
+    | NATIONAL CHAR VARYING <left paren> <length> <right paren>
+    | NCHAR VARYING <left paren> <length> <right paren>
+
+<bit string type> ::=
+      BIT [ <left paren> <length> <right paren> ]
+    | BIT VARYING <left paren> <length> <right paren>
+
+<numeric type> ::=
+      <exact numeric type>
+    | <approximate numeric type>
+
+<exact numeric type> ::=
+      NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | INTEGER
+    | INT
+    | SMALLINT
+
+<precision> ::= <unsigned integer>
+
+<scale> ::= <unsigned integer>
+
+<approximate numeric type> ::=
+      FLOAT [ <left paren> <precision> <right paren> ]
+    | REAL
+    | DOUBLE PRECISION
+
+<datetime type> ::=
+      DATE
+    | TIME [ <left paren> <time precision> <right paren> ]
+          [ WITH TIME ZONE ]
+    | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
+          [ WITH TIME ZONE ]
+
+<time precision> ::= <time fractional seconds precision>
+
+<time fractional seconds precision> ::= <unsigned integer>
+
+<timestamp precision> ::= <time fractional seconds precision>
+
+<interval type> ::= INTERVAL <interval qualifier>
+
+<interval qualifier> ::=
+      <start field> TO <end field>
+    | <single datetime field>
+
+<start field> ::=
+    <non-second datetime field>
+        [ <left paren> <interval leading field precision> <right paren> ]
+
+<non-second datetime field> ::= YEAR | MONTH | DAY | HOUR
+    | MINUTE
+
+<interval leading field precision> ::= <unsigned integer>
+
+<end field> ::=
+      <non-second datetime field>
+    | SECOND [ <left paren> <interval fractional seconds precision> <right paren> ]
+
+<interval fractional seconds precision> ::= <unsigned integer>
+
+<single datetime field> ::=
+      <non-second datetime field>
+          [ <left paren> <interval leading field precision> <right paren> ]
+    | SECOND [ <left paren> <interval leading field precision>
+          [ <comma> <interval fractional seconds precision> ] <right paren> ]
+
+<domain name> ::= <qualified name>
+
+<qualified name> ::=
+    [ <schema name> <period> ] <qualified identifier>
+
+<default clause> ::=
+      DEFAULT <default option>
+
+<default option> ::=
+      <literal>
+    | <datetime value function>
+    | USER
+    | CURRENT_USER
+    | SESSION_USER
+    | SYSTEM_USER
+    | NULL
+
+<literal> ::=
+      <signed numeric literal>
+    | <general literal>
+
+<signed numeric literal> ::=
+    [ <sign> ] <unsigned numeric literal>
+
+<general literal> ::=
+      <character string literal>
+    | <national character string literal>
+    | <bit string literal>
+    | <hex string literal>
+    | <datetime literal>
+    | <interval literal>
+
+<datetime literal> ::=
+      <date literal>
+    | <time literal>
+    | <timestamp literal>
+
+<date literal> ::=
+    DATE <date string>
+
+<time literal> ::=
+    TIME <time string>
+
+<timestamp literal> ::=
+    TIMESTAMP <timestamp string>
+
+<interval literal> ::=
+    INTERVAL [ <sign> ] <interval string> <interval qualifier>
+
+<datetime value function> ::=
+      <current date value function>
+    | <current time value function>
+    | <current timestamp value function>
+
+<current date value function> ::= CURRENT_DATE
+
+<current time value function> ::=
+      CURRENT_TIME [ <left paren> <time precision> <right paren> ]
+
+<current timestamp value function> ::=
+      CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
+
+<column constraint definition> ::=
+    [ <constraint name definition> ]
+    <column constraint>
+      [ <constraint attributes> ]
+
+<constraint name definition> ::= CONSTRAINT <constraint name>
+
+<constraint name> ::= <qualified name>
+
+<column constraint> ::=
+      NOT NULL
+    | <unique specification>
+    | <references specification>
+    | <check constraint definition>
+
+<unique specification> ::=
+    UNIQUE | PRIMARY KEY
+
+<references specification> ::=
+    REFERENCES <referenced table and columns>
+      [ MATCH <match type> ]
+      [ <referential triggered action> ]
+
+<referenced table and columns> ::=
+     <table name> [ <left paren> <reference column list> <right paren> ]
+
+<table name> ::=
+      <qualified name>
+    | <qualified local table name>
+
+<reference column list> ::= <column name list>
+
+<column name list> ::=
+    <column name> [ { <comma> <column name> }... ]
+
+<match type> ::=
+      FULL
+    | PARTIAL
+
+<referential triggered action> ::=
+      <update rule> [ <delete rule> ]
+    | <delete rule> [ <update rule> ]
+
+<update rule> ::= ON UPDATE <referential action>
+
+<referential action> ::=
+      CASCADE
+    | SET NULL
+    | SET DEFAULT
+    | NO ACTION
+
+<delete rule> ::= ON DELETE <referential action>
+
+<check constraint definition> ::=
+    CHECK
+        <left paren> <search condition> <right paren>
+
+<search condition> ::=
+      <boolean term>
+    | <search condition> OR <boolean term>
+
+<boolean term> ::=
+      <boolean factor>
+    | <boolean term> AND <boolean factor>
+
+<boolean factor> ::=
+    [ NOT ] <boolean test>
+
+<boolean test> ::=
+    <boolean primary> [ IS [ NOT ]
+          <truth value> ]
+
+<boolean primary> ::=
+      <predicate>
+    | <left paren> <search condition> <right paren>
+
+<predicate> ::=
+      <comparison predicate>
+    | <between predicate>
+    | <in predicate>
+    | <like predicate>
+    | <null predicate>
+    | <quantified comparison predicate>
+    | <exists predicate>
+    | <unique predicate>
+    | <match predicate>
+    | <overlaps predicate>
+
+<comparison predicate> ::=
+    <row value constructor> <comp op>
+        <row value constructor>
+
+<row value constructor> ::=
+       <row value constructor element>
+    | <left paren> <row value constructor list> <right paren>
+    | <row subquery>
+
+<row value constructor element> ::=
+      <value expression>
+    | <null specification>
+    | <default specification>
+
+<value expression> ::=
+      <numeric value expression>
+    | <string value expression>
+    | <datetime value expression>
+    | <interval value expression>
+
+<numeric value expression> ::=
+      <term>
+    | <numeric value expression> <plus sign> <term>
+    | <numeric value expression> <minus sign> <term>
+
+<term> ::=
+      <factor>
+    | <term> <asterisk> <factor>
+    | <term> <solidus> <factor>
+
+<factor> ::=
+    [ <sign> ] <numeric primary>
+
+<numeric primary> ::=
+      <value expression primary>
+    | <numeric value function>
+
+<value expression primary> ::=
+      <unsigned value specification>
+    | <column reference>
+    | <set function specification>
+    | <scalar subquery>
+    | <case expression>
+    | <left paren> <value expression> <right paren>
+    | <cast specification>
+
+<unsigned value specification> ::=
+      <unsigned literal>
+    | <general value specification>
+
+<unsigned literal> ::=
+      <unsigned numeric literal>
+    | <general literal>
+
+<general value specification> ::=
+      <parameter specification>
+    | <dynamic parameter specification>
+    | <variable specification>
+    | USER
+    | CURRENT_USER
+    | SESSION_USER
+    | SYSTEM_USER
+    | VALUE
+
+<parameter specification> ::=
+    <parameter name> [ <indicator parameter> ]
+
+<parameter name> ::= <colon> <identifier>
+
+<indicator parameter> ::=
+    [ INDICATOR ] <parameter name>
+
+<dynamic parameter specification> ::= <question mark>
+
+<variable specification> ::=
+    <embedded variable name> [ <indicator variable> ]
+
+<embedded variable name> ::=
+    <colon><host identifier>
+
+<host identifier> ::=
+      <Ada host identifier>
+    | <C host identifier>
+    | <COBOL host identifier>
+    | <Fortran host identifier>
+    | <MUMPS host identifier>
+    | <Pascal host identifier>
+    | <PL/I host identifier>
+
+<Ada host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<C host identifier> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<COBOL host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<Fortran host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<MUMPS host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<Pascal host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<PL/I host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<indicator variable> ::=
+    [ INDICATOR ] <embedded variable name>
+
+<column reference> ::= [ <qualifier> <period> ] <column name>
+
+<qualifier> ::=
+      <table name>
+    | <correlation name>
+
+<correlation name> ::= <identifier>
+
+<set function specification> ::=
+      COUNT <left paren> <asterisk> <right paren>
+    | <general set function>
+
+<general set function> ::=
+      <set function type>
+          <left paren> [ <set quantifier> ] <value expression> <right paren>
+
+<set function type> ::=
+    AVG | MAX | MIN | SUM | COUNT
+
+<set quantifier> ::= DISTINCT | ALL
+
+<scalar subquery> ::= <subquery>
+
+<subquery> ::= <left paren> <query expression> <right paren>
+
+<query expression> ::=
+      <non-join query expression>
+    | <joined table>
+
+<non-join query expression> ::=
+      <non-join query term>
+    | <query expression> UNION  [ ALL ]
+          [ <corresponding spec> ] <query term>
+    | <query expression> EXCEPT [ ALL ]
+          [ <corresponding spec> ] <query term>
+
+<non-join query term> ::=
+      <non-join query primary>
+    | <query term> INTERSECT [ ALL ]
+          [ <corresponding spec> ] <query primary>
+
+<non-join query primary> ::=
+      <simple table>
+    | <left paren> <non-join query expression> <right paren>
+
+<simple table> ::=
+      <query specification>
+    | <table value constructor>
+    | <explicit table>
+
+<query specification> ::=
+    SELECT [ <set quantifier> ] <select list> <table expression>
+
+<select list> ::=
+      <asterisk>
+    | <select sublist> [ { <comma> <select sublist> }... ]
+
+<select sublist> ::=
+      <derived column>
+    | <qualifier> <period> <asterisk>
+
+<derived column> ::= <value expression> [ <as clause> ]
+
+<as clause> ::= [ AS ] <column name>
+
+<table expression> ::=
+    <from clause>
+    [ <where clause> ]
+    [ <group by clause> ]
+    [ <having clause> ]
+
+<from clause> ::= FROM <table reference>
+    [ { <comma> <table reference> }... ]
+
+<table reference> ::=
+      <table name> [ [ AS ] <correlation name>
+          [ <left paren> <derived column list> <right paren> ] ]
+    | <derived table> [ AS ] <correlation name>
+          [ <left paren> <derived column list> <right paren> ]
+    | <joined table>
+
+<derived column list> ::= <column name list>
+
+<derived table> ::= <table subquery>
+
+<table subquery> ::= <subquery>
+
+<joined table> ::=
+      <cross join>
+    | <qualified join>
+    | <left paren> <joined table> <right paren>
+
+<cross join> ::=
+    <table reference> CROSS JOIN <table reference>
+
+<qualified join> ::=
+    <table reference> [ NATURAL ] [ <join type> ] JOIN
+      <table reference> [ <join specification> ]
+
+<join type> ::=
+      INNER
+    | <outer join type> [ OUTER ]
+    | UNION
+
+<outer join type> ::=
+      LEFT
+    | RIGHT
+    | FULL
+
+<join specification> ::=
+      <join condition>
+    | <named columns join>
+
+<join condition> ::= ON <search condition>
+
+<named columns join> ::=
+    USING <left paren> <join column list> <right paren>
+
+<join column list> ::= <column name list>
+
+<where clause> ::= WHERE <search condition>
+
+<group by clause> ::=
+    GROUP BY <grouping column reference list>
+
+<grouping column reference list> ::=
+    <grouping column reference>
+        [ { <comma> <grouping column reference> }... ]
+
+<grouping column reference> ::=
+    <column reference> [ <collate clause> ]
+
+<collate clause> ::= COLLATE <collation name>
+
+<collation name> ::= <qualified name>
+
+<having clause> ::= HAVING <search condition>
+
+<table value constructor> ::=
+    VALUES <table value constructor list>
+
+<table value constructor list> ::=
+    <row value constructor> [ { <comma> <row value constructor> }... ]
+
+<explicit table> ::= TABLE <table name>
+
+<query term> ::=
+      <non-join query term>
+    | <joined table>
+
+<corresponding spec> ::=
+    CORRESPONDING [ BY <left paren> <corresponding column list> <right paren> ]
+
+<corresponding column list> ::= <column name list>
+
+<query primary> ::=
+      <non-join query primary>
+    | <joined table>
+
+<case expression> ::=
+      <case abbreviation>
+    | <case specification>
+
+<case abbreviation> ::=
+      NULLIF <left paren> <value expression> <comma>
+            <value expression> <right paren>
+    | COALESCE <left paren> <value expression>
+            { <comma> <value expression> }... <right paren>
+
+<case specification> ::=
+      <simple case>
+    | <searched case>
+
+<simple case> ::=
+    CASE <case operand>
+      <simple when clause>...
+      [ <else clause> ]
+    END
+
+<case operand> ::= <value expression>
+
+<simple when clause> ::= WHEN <when operand> THEN <result>
+
+<when operand> ::= <value expression>
+
+<result> ::= <result expression> | NULL
+
+<result expression> ::= <value expression>
+
+<else clause> ::= ELSE <result>
+
+<searched case> ::=
+    CASE
+      <searched when clause>...
+      [ <else clause> ]
+    END
+
+<searched when clause> ::= WHEN <search condition> THEN <result>
+
+<cast specification> ::=
+    CAST <left paren> <cast operand> AS
+        <cast target> <right paren>
+
+<cast operand> ::=
+      <value expression>
+    | NULL
+
+<cast target> ::=
+      <domain name>
+    | <data type>
+
+<numeric value function> ::=
+      <position expression>
+    | <extract expression>
+    | <length expression>
+
+<position expression> ::=
+    POSITION <left paren> <character value expression>
+        IN <character value expression> <right paren>
+
+<character value expression> ::=
+      <concatenation>
+    | <character factor>
+
+<concatenation> ::=
+    <character value expression> <concatenation operator>
+        <character factor>
+
+<character factor> ::=
+    <character primary> [ <collate clause> ]
+
+<character primary> ::=
+      <value expression primary>
+    | <string value function>
+
+<string value function> ::=
+      <character value function>
+    | <bit value function>
+
+<character value function> ::=
+      <character substring function>
+    | <fold>
+    | <form-of-use conversion>
+    | <character translation>
+    | <trim function>
+
+<character substring function> ::=
+    SUBSTRING <left paren> <character value expression> FROM <start position>
+                [ FOR <string length> ] <right paren>
+
+<start position> ::= <numeric value expression>
+
+<string length> ::= <numeric value expression>
+
+<fold> ::= { UPPER | LOWER }
+     <left paren> <character value expression> <right paren>
+
+<form-of-use conversion> ::=
+    CONVERT <left paren> <character value expression>
+        USING <form-of-use conversion name> <right paren>
+
+<form-of-use conversion name> ::= <qualified name>
+
+<character translation> ::=
+    TRANSLATE <left paren> <character value expression>
+        USING <translation name> <right paren>
+
+<translation name> ::= <qualified name>
+
+<trim function> ::=
+    TRIM <left paren> <trim operands> <right paren>
+
+<trim operands> ::=
+    [ [ <trim specification> ] [ <trim character> ] FROM ] <trim source>
+
+<trim specification> ::=
+      LEADING
+    | TRAILING
+    | BOTH
+
+<trim character> ::= <character value expression>
+
+<trim source> ::= <character value expression>
+
+<bit value function> ::=
+    <bit substring function>
+
+<bit substring function> ::=
+    SUBSTRING <left paren> <bit value expression> FROM <start position>
+        [ FOR <string length> ] <right paren>
+
+<bit value expression> ::=
+      <bit concatenation>
+    | <bit factor>
+
+<bit concatenation> ::=
+    <bit value expression> <concatenation operator> <bit factor>
+
+<bit factor> ::= <bit primary>
+
+<bit primary> ::=
+      <value expression primary>
+    | <string value function>
+
+<extract expression> ::=
+    EXTRACT <left paren> <extract field>
+        FROM <extract source> <right paren>
+
+<extract field> ::=
+      <datetime field>
+    | <time zone field>
+
+<datetime field> ::=
+      <non-second datetime field>
+    | SECOND
+
+<time zone field> ::=
+      TIMEZONE_HOUR
+    | TIMEZONE_MINUTE
+
+<extract source> ::=
+      <datetime value expression>
+    | <interval value expression>
+
+<datetime value expression> ::=
+      <datetime term>
+    | <interval value expression> <plus sign> <datetime term>
+    | <datetime value expression> <plus sign> <interval term>
+    | <datetime value expression> <minus sign> <interval term>
+
+<interval term> ::=
+      <interval factor>
+    | <interval term 2> <asterisk> <factor>
+    | <interval term 2> <solidus> <factor>
+    | <term> <asterisk> <interval factor>
+
+<interval factor> ::=
+    [ <sign> ] <interval primary>
+
+<interval primary> ::=
+      <value expression primary> [ <interval qualifier> ]
+
+<interval term 2> ::= <interval term>
+
+<interval value expression> ::=
+      <interval term>
+    | <interval value expression 1> <plus sign> <interval term 1>
+    | <interval value expression 1> <minus sign> <interval term 1>
+    | <left paren> <datetime value expression> <minus sign>
+          <datetime term> <right paren> <interval qualifier>
+
+<interval value expression 1> ::= <interval value expression>
+
+<interval term 1> ::= <interval term>
+
+<datetime term> ::=
+      <datetime factor>
+
+<datetime factor> ::=
+      <datetime primary> [ <time zone> ]
+
+<datetime primary> ::=
+      <value expression primary>
+    | <datetime value function>
+
+<time zone> ::=
+    AT <time zone specifier>
+
+<time zone specifier> ::=
+      LOCAL
+    | TIME ZONE <interval value expression>
+
+<length expression> ::=
+      <char length expression>
+    | <octet length expression>
+    | <bit length expression>
+
+<char length expression> ::=
+    { CHAR_LENGTH | CHARACTER_LENGTH }
+        <left paren> <string value expression> <right paren>
+
+<string value expression> ::=
+      <character value expression>
+    | <bit value expression>
+
+<octet length expression> ::=
+    OCTET_LENGTH <left paren> <string value expression> <right paren>
+
+<bit length expression> ::=
+    BIT_LENGTH <left paren> <string value expression> <right paren>
+
+<null specification> ::=
+    NULL
+
+<default specification> ::=
+    DEFAULT
+
+<row value constructor list> ::=
+    <row value constructor element>
+        [ { <comma> <row value constructor element> }... ]
+
+<row subquery> ::= <subquery>
+
+<comp op> ::=
+      <equals operator>
+    | <not equals operator>
+    | <less than operator>
+    | <greater than operator>
+    | <less than or equals operator>
+    | <greater than or equals operator>
+
+<between predicate> ::=
+    <row value constructor> [ NOT ] BETWEEN
+      <row value constructor> AND <row value constructor>
+
+<in predicate> ::=
+    <row value constructor>
+      [ NOT ] IN <in predicate value>
+
+<in predicate value> ::=
+      <table subquery>
+    | <left paren> <in value list> <right paren>
+
+<in value list> ::=
+    <value expression> { <comma> <value expression> }...
+
+<like predicate> ::=
+    <match value> [ NOT ] LIKE <pattern>
+      [ ESCAPE <escape character> ]
+
+<match value> ::= <character value expression>
+
+<pattern> ::= <character value expression>
+
+<escape character> ::= <character value expression>
+
+<null predicate> ::= <row value constructor>
+    IS [ NOT ] NULL
+
+<quantified comparison predicate> ::=
+    <row value constructor> <comp op> <quantifier> <table subquery>
+
+<quantifier> ::= <all> | <some>
+
+<all> ::= ALL
+
+<some> ::= SOME | ANY
+
+<exists predicate> ::= EXISTS <table subquery>
+
+<unique predicate> ::= UNIQUE <table subquery>
+
+<match predicate> ::=
+    <row value constructor> MATCH [ UNIQUE ]
+        [ PARTIAL | FULL ] <table subquery>
+
+<overlaps predicate> ::=
+    <row value constructor 1> OVERLAPS <row value constructor 2>
+
+<row value constructor 1> ::= <row value constructor>
+
+<row value constructor 2> ::= <row value constructor>
+
+<truth value> ::=
+      TRUE
+    | FALSE
+    | UNKNOWN
+
+<constraint attributes> ::=
+      <constraint check time> [ [ NOT ] DEFERRABLE ]
+    | [ NOT ] DEFERRABLE [ <constraint check time> ]
+
+<constraint check time> ::=
+      INITIALLY DEFERRED
+    | INITIALLY IMMEDIATE
+
+<table constraint definition> ::=
+    [ <constraint name definition> ]
+    <table constraint> [ <constraint attributes> ]
+
+<table constraint> ::=
+      <unique constraint definition>
+    | <referential constraint definition>
+    | <check constraint definition>
+
+<unique constraint definition> ::=
+            <unique specification> even in SQL3)
+    <unique specification>
+      <left paren> <unique column list> <right paren>
+
+<unique column list> ::= <column name list>
+
+<referential constraint definition> ::=
+    FOREIGN KEY
+        <left paren> <referencing columns> <right paren>
+      <references specification>
+
+<referencing columns> ::=
+    <reference column list>
+
+<module contents> ::=
+      <declare cursor>
+    | <dynamic declare cursor>
+    | <procedure>
+
+<declare cursor> ::=
+    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
+      FOR <cursor specification>
+
+<cursor name> ::= <identifier>
+
+<cursor specification> ::=
+    <query expression> [ <order by clause> ]
+      [ <updatability clause> ]
+
+<order by clause> ::=
+    ORDER BY <sort specification list>
+
+<sort specification list> ::=
+    <sort specification> [ { <comma> <sort specification> }... ]
+
+<sort specification> ::=
+    <sort key> [ <collate clause> ] [ <ordering specification> ]
+
+<sort key> ::=
+      <column name>
+    | <unsigned integer>
+
+<ordering specification> ::= ASC | DESC
+
+<updatability clause> ::=
+    FOR
+        { READ ONLY |
+          UPDATE [ OF <column name list> ] }
+
+<dynamic declare cursor> ::=
+    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
+        FOR <statement name>
+
+<statement name> ::= <identifier>
+
+<procedure> ::=
+    PROCEDURE <procedure name>
+        <parameter declaration list> <semicolon>
+      <SQL procedure statement> <semicolon>
+
+<procedure name> ::= <identifier>
+
+<parameter declaration list> ::=
+      <left paren> <parameter declaration>
+          [ { <comma> <parameter declaration> }... ] <right paren>
+    | <parameter declaration>...
+
+<parameter declaration> ::=
+      <parameter name> <data type>
+    | <status parameter>
+
+<status parameter> ::=
+    SQLCODE | SQLSTATE
+
+<SQL procedure statement> ::=
+      <SQL schema statement>
+    | <SQL data statement>
+    | <SQL transaction statement>
+    | <SQL connection statement>
+    | <SQL session statement>
+    | <SQL dynamic statement>
+    | <SQL diagnostics statement>
+
+<SQL schema statement> ::=
+      <SQL schema definition statement>
+    | <SQL schema manipulation statement>
+
+<SQL schema definition statement> ::=
+      <schema definition>
+    | <table definition>
+    | <view definition>
+    | <grant statement>
+    | <domain definition>
+    | <character set definition>
+    | <collation definition>
+    | <translation definition>
+    | <assertion definition>
+
+<schema definition> ::=
+    CREATE SCHEMA <schema name clause>
+      [ <schema character set specification> ]
+      [ <schema element>... ]
+
+<schema name clause> ::=
+      <schema name>
+    | AUTHORIZATION <schema authorization identifier>
+    | <schema name> AUTHORIZATION
+          <schema authorization identifier>
+
+<schema authorization identifier> ::=
+    <authorization identifier>
+
+<schema character set specification> ::=
+    DEFAULT CHARACTER
+        SET <character set specification>
+
+<schema element> ::=
+      <domain definition>
+    | <table definition>
+    | <view definition>
+    | <grant statement>
+    | <assertion definition>
+    | <character set definition>
+    | <collation definition>
+    | <translation definition>
+
+<domain definition> ::=
+    CREATE DOMAIN <domain name>
+        [ AS ] <data type>
+      [ <default clause> ]
+      [ <domain constraint>... ]
+      [ <collate clause> ]
+
+<domain constraint> ::=
+    [ <constraint name definition> ]
+    <check constraint definition> [ <constraint attributes> ]
+
+<table definition> ::=
+    CREATE [ { GLOBAL | LOCAL } TEMPORARY ] TABLE
+        <table name>
+      <table element list>
+      [ ON COMMIT { DELETE | PRESERVE } ROWS ]
+
+<view definition> ::=
+    CREATE VIEW <table name> [ <left paren> <view column list>
+                                  <right paren> ]
+      AS <query expression>
+      [ WITH [ <levels clause> ] CHECK OPTION ]
+
+<view column list> ::= <column name list>
+
+<levels clause> ::=
+    CASCADED | LOCAL
+
+<grant statement> ::=
+   GRANT <privileges> ON <object name>
+     TO <grantee> [ { <comma> <grantee> }... ]
+       [ WITH GRANT OPTION ]
+
+<privileges> ::=
+      ALL PRIVILEGES
+    | <action list>
+
+<action list> ::= <action> [ { <comma> <action> }... ]
+
+<action> ::=
+      SELECT
+    | DELETE
+    | INSERT [ <left paren> <privilege column list> <right paren> ]
+    | UPDATE [ <left paren> <privilege column list> <right paren> ]
+    | REFERENCES [ <left paren> <privilege column list> <right paren> ]
+    | USAGE
+
+<privilege column list> ::= <column name list>
+
+<object name> ::=
+      [ TABLE ] <table name>
+    | DOMAIN <domain name>
+    | COLLATION <collation name>
+    | CHARACTER SET <character set name>
+    | TRANSLATION <translation name>
+
+<grantee> ::=
+      PUBLIC
+    | <authorization identifier>
+
+<assertion definition> ::=
+    CREATE ASSERTION <constraint name> <assertion check>
+      [ <constraint attributes> ]
+
+<assertion check> ::=
+    CHECK
+        <left paren> <search condition> <right paren>
+
+<character set definition> ::=
+    CREATE CHARACTER SET <character set name>
+        [ AS ]
+      <character set source>
+      [ <collate clause> | <limited collation definition> ]
+
+<character set source> ::=
+      GET <existing character set name>
+
+<existing character set name> ::=
+      <standard character repertoire name>
+    | <implementation-defined character repertoire name>
+    | <schema character set name>
+
+<schema character set name> ::= <character set name>
+
+<limited collation definition> ::=
+    COLLATION FROM <collation source>
+
+<collation source> ::=
+      <collating sequence definition>
+    | <translation collation>
+
+<collating sequence definition> ::=
+      <external collation>
+    | <schema collation name>
+    | DESC <left paren> <collation name> <right paren>
+    | DEFAULT
+
+<external collation> ::=
+    EXTERNAL <left paren> <quote> <external collation name> <quote> <right paren>
+
+<external collation name> ::=
+      <standard collation name>
+    | <implementation-defined collation name>
+
+<standard collation name> ::= <collation name>
+
+<implementation-defined collation name> ::= <collation name>
+
+<schema collation name> ::= <collation name>
+
+<translation collation> ::=
+    TRANSLATION <translation name>
+        [ THEN COLLATION <collation name> ]
+
+<collation definition> ::=
+    CREATE COLLATION <collation name> FOR
+        <character set specification>
+      FROM <collation source>
+        [ <pad attribute> ]
+
+<pad attribute> ::=
+      NO PAD
+    | PAD SPACE
+
+<translation definition> ::=
+    CREATE TRANSLATION <translation name>
+      FOR <source character set specification>
+        TO <target character set specification>
+      FROM <translation source>
+
+<source character set specification> ::= <character set specification>
+
+<target character set specification> ::= <character set specification>
+
+<translation source> ::=
+      <translation specification>
+
+<translation specification> ::=
+      <external translation>
+    | IDENTITY
+    | <schema translation name>
+
+<external translation> ::=
+    EXTERNAL <left paren> <quote> <external translation name> <quote> <right paren>
+
+<external translation name> ::=
+      <standard translation name>
+    | <implementation-defined translation name>
+
+<standard translation name> ::= <translation name>
+
+<implementation-defined translation name> ::= <translation name>
+
+<schema translation name> ::= <translation name>
+
+<SQL schema manipulation statement> ::=
+      <drop schema statement>
+    | <alter table statement>
+    | <drop table statement>
+    | <drop view statement>
+    | <revoke statement>
+    | <alter domain statement>
+    | <drop domain statement>
+    | <drop character set statement>
+    | <drop collation statement>
+    | <drop translation statement>
+    | <drop assertion statement>
+
+<drop schema statement> ::=
+    DROP SCHEMA <schema name> <drop behavior>
+
+<drop behavior> ::= CASCADE | RESTRICT
+
+<alter table statement> ::=
+    ALTER TABLE <table name> <alter table action>
+
+<alter table action> ::=
+      <add column definition>
+    | <alter column definition>
+    | <drop column definition>
+    | <add table constraint definition>
+    | <drop table constraint definition>
+
+<add column definition> ::=
+    ADD [ COLUMN ] <column definition>
+
+<alter column definition> ::=
+    ALTER [ COLUMN ] <column name> <alter column action>
+
+<alter column action> ::=
+      <set column default clause>
+    | <drop column default clause>
+
+<set column default clause> ::=
+    SET <default clause>
+
+<drop column default clause> ::=
+    DROP DEFAULT
+
+<drop column definition> ::=
+    DROP [ COLUMN ] <column name> <drop behavior>
+
+<add table constraint definition> ::=
+    ADD <table constraint definition>
+
+<drop table constraint definition> ::=
+    DROP CONSTRAINT <constraint name> <drop behavior>
+
+<drop table statement> ::=
+    DROP TABLE <table name> <drop behavior>
+
+<drop view statement> ::=
+    DROP VIEW <table name> <drop behavior>
+
+<revoke statement> ::=
+    REVOKE [ GRANT OPTION FOR ]
+        <privileges>
+        ON <object name>
+      FROM <grantee> [ { <comma> <grantee> }... ] <drop behavior>
+
+<alter domain statement> ::=
+    ALTER DOMAIN <domain name> <alter domain action>
+
+<alter domain action> ::=
+      <set domain default clause>
+    | <drop domain default clause>
+    | <add domain constraint definition>
+    | <drop domain constraint definition>
+
+<set domain default clause> ::= SET <default clause>
+
+<drop domain default clause> ::= DROP DEFAULT
+
+<add domain constraint definition> ::=
+    ADD <domain constraint>
+
+<drop domain constraint definition> ::=
+    DROP CONSTRAINT <constraint name>
+
+<drop domain statement> ::=
+    DROP DOMAIN <domain name> <drop behavior>
+
+<drop character set statement> ::=
+    DROP CHARACTER SET <character set name>
+
+<drop collation statement> ::=
+    DROP COLLATION <collation name>
+
+<drop translation statement> ::=
+    DROP TRANSLATION <translation name>
+
+<drop assertion statement> ::=
+    DROP ASSERTION <constraint name>
+
+<SQL data statement> ::=
+      <open statement>
+    | <fetch statement>
+    | <close statement>
+    | <select statement: single row>
+    | <SQL data change statement>
+
+<open statement> ::=
+    OPEN <cursor name>
+
+<fetch statement> ::=
+    FETCH [ [ <fetch orientation> ] FROM ]
+      <cursor name> INTO <fetch target list>
+
+<fetch orientation> ::=
+      NEXT
+    | PRIOR
+    | FIRST
+    | LAST
+    | { ABSOLUTE | RELATIVE } <simple value specification>
+
+<simple value specification> ::=
+      <parameter name>
+    | <embedded variable name>
+    | <literal>
+
+<fetch target list> ::=
+    <target specification> [ { <comma> <target specification> }... ]
+
+<target specification> ::=
+      <parameter specification>
+    | <variable specification>
+
+<close statement> ::=
+    CLOSE <cursor name>
+
+<select statement: single row> ::=
+    SELECT [ <set quantifier> ] <select list>
+      INTO <select target list>
+        <table expression>
+
+<select target list> ::=
+    <target specification> [ { <comma> <target specification> }... ]
+
+<SQL data change statement> ::=
+      <delete statement: positioned>
+    | <delete statement: searched>
+    | <insert statement>
+    | <update statement: positioned>
+    | <update statement: searched>
+
+<delete statement: positioned> ::=
+    DELETE FROM <table name>
+      WHERE CURRENT OF <cursor name>
+
+<delete statement: searched> ::=
+    DELETE FROM <table name>
+      [ WHERE <search condition> ]
+
+<insert statement> ::=
+    INSERT INTO <table name>
+      <insert columns and source>
+
+<insert columns and source> ::=
+      [ <left paren> <insert column list> <right paren> ]
+            <query expression>
+    | DEFAULT VALUES
+
+<insert column list> ::= <column name list>
+
+<update statement: positioned> ::=
+    UPDATE <table name>
+      SET <set clause list>
+        WHERE CURRENT OF <cursor name>
+
+<set clause list> ::=
+    <set clause> [ { <comma> <set clause> }... ]
+
+<set clause> ::=
+    <object column> <equals operator> <update source>
+
+<object column> ::= <column name>
+
+<update source> ::=
+      <value expression>
+    | <null specification>
+    | DEFAULT
+
+<update statement: searched> ::=
+    UPDATE <table name>
+      SET <set clause list>
+      [ WHERE <search condition> ]
+
+<SQL transaction statement> ::=
+      <set transaction statement>
+    | <set constraints mode statement>
+    | <commit statement>
+    | <rollback statement>
+
+<set transaction statement> ::=
+    SET TRANSACTION <transaction mode>
+        [ { <comma> <transaction mode> }... ]
+
+<transaction mode> ::=
+      <isolation level>
+    | <transaction access mode>
+    | <diagnostics size>
+
+<isolation level> ::=
+    ISOLATION LEVEL <level of isolation>
+
+<level of isolation> ::=
+      READ UNCOMMITTED
+    | READ COMMITTED
+    | REPEATABLE READ
+    | SERIALIZABLE
+
+<transaction access mode> ::=
+      READ ONLY
+    | READ WRITE
+
+<diagnostics size> ::=
+    DIAGNOSTICS SIZE <number of conditions>
+
+<number of conditions> ::= <simple value specification>
+
+<set constraints mode statement> ::=
+    SET CONSTRAINTS <constraint name list>
+        { DEFERRED | IMMEDIATE }
+
+<constraint name list> ::=
+      ALL
+    | <constraint name> [ { <comma> <constraint name> }... ]
+
+<commit statement> ::=
+    COMMIT [ WORK ]
+
+<rollback statement> ::=
+    ROLLBACK [ WORK ]
+
+<SQL connection statement> ::=
+      <connect statement>
+    | <set connection statement>
+    | <disconnect statement>
+
+<connect statement> ::=
+    CONNECT TO <connection target>
+
+<connection target> ::=
+      <SQL-server name>
+        [ AS <connection name> ]
+          correspondence with Tony Gordon)
+        [ USER <user name> ]
+    | DEFAULT
+
+<SQL-server name> ::= <simple value specification>
+
+<connection name> ::= <simple value specification>
+
+<user name> ::= <simple value specification>
+
+<set connection statement> ::=
+    SET CONNECTION <connection object>
+
+<connection object> ::=
+      DEFAULT
+    | <connection name>
+
+<disconnect statement> ::=
+    DISCONNECT <disconnect object>
+
+<disconnect object> ::=
+      <connection object>
+    | ALL
+    | CURRENT
+
+<SQL session statement> ::=
+      <set catalog statement>
+    | <set schema statement>
+    | <set names statement>
+    | <set session authorization identifier statement>
+    | <set local time zone statement>
+
+<set catalog statement> ::=
+    SET CATALOG <value specification>
+
+<value specification> ::=
+      <literal>
+    | <general value specification>
+
+<set schema statement> ::=
+    SET SCHEMA <value specification>
+
+<set names statement> ::=
+    SET NAMES <value specification>
+
+<set session authorization identifier statement> ::=
+    SET SESSION AUTHORIZATION
+        <value specification>
+
+<set local time zone statement> ::=
+    SET TIME ZONE
+        <set time zone value>
+
+<set time zone value> ::=
+      <interval value expression>
+    | LOCAL
+
+<SQL dynamic statement> ::=
+      <system descriptor statement>
+    | <prepare statement>
+    | <deallocate prepared statement>
+    | <describe statement>
+    | <execute statement>
+    | <execute immediate statement>
+    | <SQL dynamic data statement>
+
+<system descriptor statement> ::=
+      <allocate descriptor statement>
+    | <deallocate descriptor statement>
+    | <set descriptor statement>
+    | <get descriptor statement>
+
+<allocate descriptor statement> ::=
+    ALLOCATE DESCRIPTOR <descriptor name>
+       [ WITH MAX <occurrences> ]
+
+<descriptor name> ::=
+    [ <scope option> ] <simple value specification>
+
+<scope option> ::=
+      GLOBAL
+    | LOCAL
+
+<occurrences> ::= <simple value specification>
+
+<deallocate descriptor statement> ::=
+    DEALLOCATE DESCRIPTOR <descriptor name>
+
+<set descriptor statement> ::=
+    SET DESCRIPTOR <descriptor name>
+        <set descriptor information>
+
+<set descriptor information> ::=
+      <set count>
+    | VALUE <item number>
+        <set item information> [ { <comma> <set item information> }... ]
+
+<set count> ::=
+    COUNT <equals operator> <simple value specification 1>
+
+<simple value specification 1> ::= <simple value specification>
+
+<item number> ::= <simple value specification>
+
+<set item information> ::=
+    <descriptor item name> <equals operator> <simple value specification 2>
+
+<descriptor item name> ::=
+      TYPE
+    | LENGTH
+    | OCTET_LENGTH
+    | RETURNED_LENGTH
+    | RETURNED_OCTET_LENGTH
+    | PRECISION
+    | SCALE
+    | DATETIME_INTERVAL_CODE
+    | DATETIME_INTERVAL_PRECISION
+    | NULLABLE
+    | INDICATOR
+    | DATA
+    | NAME
+    | UNNAMED
+    | COLLATION_CATALOG
+    | COLLATION_SCHEMA
+    | COLLATION_NAME
+    | CHARACTER_SET_CATALOG
+    | CHARACTER_SET_SCHEMA
+    | CHARACTER_SET_NAME
+
+<simple value specification 2> ::= <simple value specification>
+
+<item number> ::= <simple value specification>
+
+<get descriptor statement> ::=
+    GET DESCRIPTOR <descriptor name> <get descriptor information>
+
+<get descriptor information> ::=
+      <get count>
+    | VALUE <item number>
+        <get item information> [ { <comma> <get item information> }... ]
+
+<get count> ::=
+    <simple target specification 1> <equals operator>
+         COUNT
+
+<simple target specification 1> ::= <simple target specification>
+
+<simple target specification> ::=
+      <parameter name>
+    | <embedded variable name>
+
+<get item information> ::=
+    <simple target specification 2> <equals operator> <descriptor item name>>
+
+<simple target specification 2> ::= <simple target specification>
+
+<prepare statement> ::=
+    PREPARE <SQL statement name> FROM <SQL statement variable>
+
+<SQL statement name> ::=
+      <statement name>
+    | <extended statement name>
+
+<extended statement name> ::=
+    [ <scope option> ] <simple value specification>
+
+<SQL statement variable> ::= <simple value specification>
+
+<deallocate prepared statement> ::=
+    DEALLOCATE PREPARE <SQL statement name>
+
+<describe statement> ::=
+      <describe input statement>
+    | <describe output statement>
+
+<describe input statement> ::=
+    DESCRIBE INPUT <SQL statement name> <using descriptor>
+
+<using descriptor> ::=
+    { USING | INTO } SQL DESCRIPTOR <descriptor name>
+
+<describe output statement> ::=
+    DESCRIBE [ OUTPUT ] <SQL statement name> <using descriptor>
+
+<execute statement> ::=
+    EXECUTE <SQL statement name>
+      [ <result using clause> ]
+      [ <parameter using clause> ]
+
+<result using clause> ::= <using clause>
+
+<using clause> ::=
+      <using arguments>
+    | <using descriptor>
+
+<using arguments> ::=
+    { USING | INTO } <argument> [ { <comma> <argument> }... ]
+
+<argument> ::= <target specification>
+
+<parameter using clause> ::= <using clause>
+
+<execute immediate statement> ::=
+    EXECUTE IMMEDIATE <SQL statement variable>
+
+<SQL dynamic data statement> ::=
+      <allocate cursor statement>
+    | <dynamic open statement>
+    | <dynamic fetch statement>
+    | <dynamic close statement>
+    | <dynamic delete statement: positioned>
+    | <dynamic update statement: positioned>
+
+<allocate cursor statement> ::=
+    ALLOCATE <extended cursor name> [ INSENSITIVE ]
+        [ SCROLL ] CURSOR
+      FOR <extended statement name>
+
+<extended cursor name> ::=
+    [ <scope option> ] <simple value specification>
+
+<dynamic open statement> ::=
+    OPEN <dynamic cursor name> [ <using clause> ]
+
+<dynamic cursor name> ::=
+      <cursor name>
+    | <extended cursor name>
+
+<dynamic fetch statement> ::=
+    FETCH [ [ <fetch orientation> ] FROM ] <dynamic cursor name>
+        <using clause>
+
+<dynamic close statement> ::=
+    CLOSE <dynamic cursor name>
+
+<dynamic delete statement: positioned> ::=
+    DELETE FROM <table name>
+      WHERE CURRENT OF
+          <dynamic cursor name>
+
+<dynamic update statement: positioned> ::=
+    UPDATE <table name>
+      SET <set clause>
+          [ { <comma> <set clause> }... ]
+        WHERE CURRENT OF
+            <dynamic cursor name>
+
+<SQL diagnostics statement> ::=
+    <get diagnostics statement>
+
+<get diagnostics statement> ::=
+    GET DIAGNOSTICS <sql diagnostics information>
+
+<sql diagnostics information> ::=
+      <statement information>
+    | <condition information>
+
+<statement information> ::=
+    <statement information item> [ { <comma> <statement information item> }... ]
+
+<statement information item> ::=
+    <simple target specification> <equals operator> <statement information item name>
+
+<statement information item name> ::=
+      NUMBER
+    | MORE
+    | COMMAND_FUNCTION
+    | DYNAMIC_FUNCTION
+    | ROW_COUNT
+
+<condition information> ::=
+    EXCEPTION <condition number>
+      <condition information item> [ { <comma> <condition information item> }... ]
+
+<condition number> ::= <simple value specification>
+
+<condition information item> ::=
+    <simple target specification> <equals operator> <condition information item name>
+
+<condition information item name> ::=
+      CONDITION_NUMBER
+    | RETURNED_SQLSTATE
+    | CLASS_ORIGIN
+    | SUBCLASS_ORIGIN
+    | SERVER_NAME
+    | CONNECTION_NAME
+    | CONSTRAINT_CATALOG
+    | CONSTRAINT_SCHEMA
+    | CONSTRAINT_NAME
+    | CATALOG_NAME
+    | SCHEMA_NAME
+    | TABLE_NAME
+    | COLUMN_NAME
+    | CURSOR_NAME
+    | MESSAGE_TEXT
+    | MESSAGE_LENGTH
+    | MESSAGE_OCTET_LENGTH
+
+<embedded SQL host program> ::=
+      <embedded SQL Ada program>
+    | <embedded SQL C program>
+    | <embedded SQL COBOL program>
+    | <embedded SQL Fortran program>
+    | <embedded SQL MUMPS program>
+    | <embedded SQL Pascal program>
+    | <embedded SQL PL/I program>
+
+<embedded SQL Ada program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL C program> ::=
+      !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL COBOL program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL Fortran program> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL MUMPS program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL Pascal program> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL PL/I program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL declare section> ::=
+      <embedded SQL begin declare>
+        [ <embedded character set declaration> ]
+        [ <host variable definition>... ]
+      <embedded SQL end declare>
+    | <embedded SQL MUMPS declare>
+
+<embedded SQL begin declare> ::=
+    <SQL prefix> BEGIN DECLARE SECTION
+        [ <SQL terminator> ]
+
+<SQL prefix> ::=
+      EXEC SQL
+    | <ampersand>SQL<left paren>
+
+<SQL terminator> ::=
+      END-EXEC
+    | <semicolon>
+    | <right paren>
+
+<embedded character set declaration> ::=
+    SQL NAMES ARE <character set specification>
+
+<host variable definition> ::=
+      <Ada variable definition>
+    | <C variable definition>
+    | <COBOL variable definition>
+    | <Fortran variable definition>
+    | <MUMPS variable definition>
+    | <Pascal variable definition>
+    | <PL/I variable definition>
+
+<Ada variable definition> ::=
+    <Ada host identifier> [ { <comma> <Ada host identifier> }... ] :
+    <Ada type specification> [ <Ada initial value> ]
+
+<Ada type specification> ::=
+      <Ada qualified type specification>
+    | <Ada unqualified type specification>
+
+<Ada qualified type specification> ::=
+      SQL_STANDARD.CHAR [ CHARACTER SET
+         [ IS ] <character set specification> ]
+          <left paren> 1 <double period> <length> <right paren>
+    | SQL_STANDARD.BIT
+          <left paren> 1 <double period> <length> <right paren>
+    | SQL_STANDARD.SMALLINT
+    | SQL_STANDARD.INT
+    | SQL_STANDARD.REAL
+    | SQL_STANDARD.DOUBLE_PRECISION
+    | SQL_STANDARD.SQLCODE_TYPE
+    | SQL_STANDARD.SQLSTATE_TYPE
+    | SQL_STANDARD.INDICATOR_TYPE
+
+<Ada unqualified type specification> ::=
+      CHAR
+          <left paren> 1 <double period> <length> <right paren>
+    | BIT
+          <left paren> 1 <double period> <length> <right paren>
+    | SMALLINT
+    | INT
+    | REAL
+    | DOUBLE_PRECISION
+    | SQLCODE_TYPE
+    | SQLSTATE_TYPE
+    | INDICATOR_TYPE
+
+<Ada initial value> ::=
+    <Ada assignment operator> <character representation>...
+
+<Ada assignment operator> ::= <colon><equals operator>
+
+<C variable definition> ::=
+      [ <C storage class> ]
+      [ <C class modifier> ]
+      <C variable specification>
+    <semicolon>
+
+<C storage class> ::=
+      auto
+    | extern
+    | static
+
+<C class modifier> ::= const | volatile
+
+<C variable specification> ::=
+      <C numeric variable>
+    | <C character variable>
+    | <C derived variable>
+
+<C numeric variable> ::=
+    { long | short | float | double }
+      <C host identifier> [ <C initial value> ]
+            [ { <comma> <C host identifier> [ <C initial value> ] }... ]
+
+<C initial value> ::=
+    <equals operator> <character representation>...
+
+<C character variable> ::=
+    char [ CHARACTER SET
+             [ IS ] <character set specification> ]
+      <C host identifier>
+        <C array specification> [ <C initial value> ]
+        [ { <comma> <C host identifier>
+          <C array specification>
+                 [ <C initial value> ] }... ]
+
+<C array specification> ::=
+    <left bracket> <length> <right bracket>
+
+<C derived variable> ::=
+      <C VARCHAR variable>
+    | <C bit variable>
+
+<C VARCHAR variable> ::=
+    VARCHAR [ CHARACTER SET [ IS ]
+        <character set specification> ]
+        <C host identifier>
+            <C array specification> [ <C initial value> ]
+          [ { <comma> <C host identifier>
+              <C array specification>
+                      [ <C initial value> ] }... ]
+
+<C bit variable> ::=
+    BIT <C host identifier>
+        <C array specification> [ <C initial value> ]
+      [ { <comma> <C host identifier>
+        <C array specification>
+                   [ <C initial value> ] }... ]
+
+<COBOL variable definition> ::=
+    {01|77} <COBOL host identifier> <COBOL type specification>
+      [ <character representation>... ] <period>
+
+<COBOL type specification> ::=
+      <COBOL character type>
+    | <COBOL bit type>
+    | <COBOL numeric type>
+    | <COBOL integer type>
+
+<COBOL character type> ::=
+    [ CHARACTER SET [ IS ]
+          <character set specification> ]
+    { PIC | PICTURE } [ IS ] { X [ <left paren> <length> <right paren> ] }...
+
+<COBOL bit type> ::=
+    { PIC | PICTURE } [ IS ]
+        { B [ <left paren> <length> <right paren> ] }...
+
+<COBOL numeric type> ::=
+    { PIC | PICTURE } [ IS ]
+      S <COBOL nines specification>
+    [ USAGE [ IS ] ] DISPLAY SIGN LEADING SEPARATE
+
+<COBOL nines specification> ::=
+      <COBOL nines> [ V [ <COBOL nines> ] ]
+    | V <COBOL nines>
+
+<COBOL nines> ::= { 9 [ <left paren> <length> <right paren> ] }...
+
+<COBOL integer type> ::=
+      <COBOL computational integer>
+    | <COBOL binary integer>
+
+<COBOL computational integer> ::=
+    { PIC | PICTURE } [ IS ] S<COBOL nines>
+      [ USAGE [ IS ] ] { COMP | COMPUTATIONAL }
+
+<COBOL binary integer> ::=
+    { PIC | PICTURE } [ IS ] S<COBOL nines>
+      [ USAGE [ IS ] ] BINARY
+
+<Fortran variable definition> ::=
+    <Fortran type specification>
+    <Fortran host identifier>
+        [ { <comma> <Fortran host identifier> }... ]
+
+<Fortran type specification> ::=
+      CHARACTER [ <asterisk> <length> ]
+          [ CHARACTER SET [ IS ]
+                <character set specification> ]
+    | BIT [ <asterisk> <length> ]
+    | INTEGER
+    | REAL
+    | DOUBLE PRECISION
+
+<MUMPS variable definition> ::=
+    { <MUMPS numeric variable> | <MUMPS character variable> }
+        <semicolon>
+
+<MUMPS numeric variable> ::=
+    <MUMPS type specification>
+      <MUMPS host identifier> [ { <comma> <MUMPS host identifier> }... ]
+
+<MUMPS type specification> ::=
+      INT
+    | DEC
+          [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | REAL
+
+<MUMPS character variable> ::=
+    VARCHAR <MUMPS host identifier> <MUMPS length specification>
+      [ { <comma> <MUMPS host identifier> <MUMPS length specification> }... ]
+
+<MUMPS length specification> ::=
+    <left paren> <length> <right paren>
+
+<Pascal variable definition> ::=
+    <Pascal host identifier> [ { <comma> <Pascal host identifier> }... ] <colon>
+      <Pascal type specification> <semicolon>
+
+<Pascal type specification> ::=
+      PACKED ARRAY
+          <left bracket> 1 <double period> <length> <right bracket>
+        OF CHAR
+          [ CHARACTER SET [ IS ]
+                <character set specification> ]
+    | PACKED ARRAY
+          <left bracket> 1 <double period> <length> <right bracket>
+        OF BIT
+    | INTEGER
+    | REAL
+    | CHAR [ CHARACTER SET
+                                [ IS ] <character set specification> ]
+    | BIT
+
+<PL/I variable definition> ::=
+    {DCL | DECLARE}
+        {   <PL/I host identifier>
+          | <left paren> <PL/I host identifier>
+                [ { <comma> <PL/I host identifier> }... ] <right paren> }
+    <PL/I type specification>
+    [ <character representation>... ] <semicolon>
+
+<PL/I type specification> ::=
+      { CHAR | CHARACTER } [ VARYING ]
+          <left paren><length><right paren>
+          [ CHARACTER SET
+                [ IS ] <character set specification> ]
+    | BIT [ VARYING ] <left paren><length><right paren>
+    | <PL/I type fixed decimal> <left paren> <precision>
+          [ <comma> <scale> ] <right paren>
+    | <PL/I type fixed binary> [ <left paren> <precision> <right paren> ]
+    | <PL/I type float binary> <left paren> <precision> <right paren>
+
+<PL/I type fixed decimal> ::=
+      { DEC | DECIMAL } FIXED
+    | FIXED { DEC | DECIMAL }
+
+<PL/I type fixed binary> ::=
+      { BIN | BINARY } FIXED
+    | FIXED { BIN | BINARY }
+
+<PL/I type float binary> ::=
+      { BIN | BINARY } FLOAT
+    | FLOAT { BIN | BINARY }
+
+<embedded SQL end declare> ::=
+    <SQL prefix> END DECLARE SECTION
+        [ <SQL terminator> ]
+
+<embedded SQL MUMPS declare> ::=
+    <SQL prefix>
+      BEGIN DECLARE SECTION
+        [ <embedded character set declaration> ]
+        [ <host variable definition>... ]
+      END DECLARE SECTION
+    <SQL terminator>
+
+<embedded SQL statement> ::=
+    <SQL prefix>
+      <statement or declaration>
+    [ <SQL terminator> ]
+
+<statement or declaration> ::=
+      <declare cursor>
+    | <dynamic declare cursor>
+    | <temporary table declaration>
+    | <embedded exception declaration>
+    | <SQL procedure statement>
+
+<embedded exception declaration> ::=
+    WHENEVER <condition> <condition action>
+
+<condition> ::=
+    SQLERROR | NOT FOUND
+
+<condition action> ::=
+    CONTINUE | <go to>
+
+<go to> ::=
+    { GOTO | GO TO } <goto target>
+
+<goto target> ::=
+      <host label identifier>
+    | <unsigned integer>
+    | <host PL/I label variable>
+
+<host label identifier> ::= !!<EMPHASIS>(See the Syntax Rules.)
+
+<host PL/I label variable> ::= !!<EMPHASIS>(See the Syntax Rules.)
+
+<preparable statement> ::=
+      <preparable SQL data statement>
+    | <preparable SQL schema statement>
+    | <preparable SQL transaction statement>
+    | <preparable SQL session statement>
+    | <preparable implementation-defined statement>
+
+<preparable SQL data statement> ::=
+      <delete statement: searched>
+    | <dynamic single row select statement>
+    | <insert statement>
+    | <dynamic select statement>
+    | <update statement: searched>
+    | <preparable dynamic delete statement: positioned>
+    | <preparable dynamic update statement: positioned>
+
+<dynamic single row select statement> ::= <query specification>
+
+<dynamic select statement> ::= <cursor specification>
+
+<preparable dynamic delete statement: positioned> ::=
+   DELETE [ FROM <table name> ]
+      WHERE CURRENT OF <cursor name>
+
+<preparable dynamic update statement: positioned> ::=
+   UPDATE [ <table name> ]
+      SET <set clause list>
+      WHERE CURRENT OF <cursor name>
+
+<preparable SQL schema statement> ::=
+      <SQL schema statement>
+
+<preparable SQL transaction statement> ::=
+      <SQL transaction statement>
+
+<preparable SQL session statement> ::=
+      <SQL session statement>
+
+<preparable implementation-defined statement> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<direct SQL statement> ::=
+    <directly executable statement> <semicolon>
+
+<directly executable statement> ::=
+      <direct SQL data statement>
+    | <SQL schema statement>
+    | <SQL transaction statement>
+    | <SQL connection statement>
+    | <SQL session statement>
+    | <direct implementation-defined statement>
+
+<direct SQL data statement> ::=
+      <delete statement: searched>
+    | <direct select statement: multiple rows>
+    | <insert statement>
+    | <update statement: searched>
+    | <temporary table declaration>
+
+<direct select statement: multiple rows> ::=
+    <query expression> [ <order by clause> ]
+
+<direct implementation-defined statement> ::=
+    !!<EMPHASIS>(See the Syntax Rules)
+
+<SQL object identifier> ::=
+    <SQL provenance> <SQL variant>
+
+<SQL provenance> ::= <arc1> <arc2> <arc3>
+
+<arc1> ::= iso | 1 | iso <left paren> 1 <right paren>
+
+<arc2> ::= standard | 0 | standard <left paren> 0 <right paren>
+
+<arc3> ::= 9075
+
+<SQL variant> ::= <SQL edition> <SQL conformance>
+
+<SQL edition> ::= <1987> | <1989> | <1992>
+
+<1987> ::= 0 | edition1987 <left paren> 0 <right paren>
+
+<1989> ::= <1989 base> <1989 package>
+
+<1989 base> ::= 1 | edition1989 <left paren> 1 <right paren>
+
+<1989 package> ::= <integrity no> | <integrity yes>
+
+<integrity no> ::= 0 | IntegrityNo <left paren> 0 <right paren>
+
+<integrity yes> ::= 1 | IntegrityYes <left paren> 1 <right paren>
+
+<1992> ::= 2 | edition1992 <left paren> 2 <right paren>
+
+<SQL conformance> ::= <low> | <intermediate> | <high>
+
+<low> ::= 0 | Low <left paren> 0 <right paren>
+
+<intermediate> ::= 1 | Intermediate <left paren> 1 <right paren>
+
+<high> ::= 2 | High <left paren> 2 <right paren>
+


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/src/test/resources/sql2bnf.aug92.txt
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants$DataTypes.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants$DataTypes.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants$StatementStartPhrases.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants$StatementStartPhrases.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlConstants.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlTokenStream$DdlTokenizer.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlTokenStream$DdlTokenizer.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlTokenStream.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/DdlTokenStream.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/OldDdlTokenizer.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/OldDdlTokenizer.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/StandardDdlParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/StandardDdlParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/Db2DdlParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/Db2DdlParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser$DerbyDataTypeParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser$DerbyDataTypeParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser$MySqlDataTypeParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser$MySqlDataTypeParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/MySqlDdlParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/PostgresDdlParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/PostgresDdlParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/SqlServerDdlParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/SqlServerDdlParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/SybaseDdlParser.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/org/jboss/dna/sequencer/ddl/dialect/SybaseDdlParser.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/sql2bnf.aug92.txt
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/sql2bnf.aug92.txt	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/sql2bnf.aug92.txt	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,2594 @@
+This file contains a depth-first tree traversal of the BNF
+for the  language done at about 27-AUG-1992 11:03:41.64.
+The specific version of the BNF included here is:  ANSI-only, SQL2-only.
+
+
+<SQL terminal character> ::=
+      <SQL language character>
+    | <SQL embedded language character>
+
+<SQL language character> ::=
+      <simple Latin letter>
+    | <digit>
+    | <SQL special character>
+
+<simple Latin letter> ::=
+      <simple Latin upper case letter>
+    | <simple Latin lower case letter>
+
+<simple Latin upper case letter> ::=
+          A | B | C | D | E | F | G | H | I | J | K | L | M | N | O
+    | P | Q | R | S | T | U | V | W | X | Y | Z
+
+<simple Latin lower case letter> ::=
+          a | b | c | d | e | f | g | h | i | j | k | l | m | n | o
+    | p | q | r | s | t | u | v | w | x | y | z
+
+<digit> ::=
+    0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
+
+<SQL special character> ::=
+      <space>
+    | <double quote>
+    | <percent>
+    | <ampersand>
+    | <quote>
+    | <left paren>
+    | <right paren>
+    | <asterisk>
+    | <plus sign>
+    | <comma>
+    | <minus sign>
+    | <period>
+    | <solidus>
+    | <colon>
+    | <semicolon>
+    | <less than operator>
+    | <equals operator>
+    | <greater than operator>
+    | <question mark>
+    | <underscore>
+    | <vertical bar>
+
+<space> ::= !! <EMPHASIS>(space character in character set in use)
+
+<double quote> ::= "
+
+<percent> ::= %
+
+<ampersand> ::= &
+
+<quote> ::= '
+
+<left paren> ::= (
+
+<right paren> ::= )
+
+<asterisk> ::= *
+
+<plus sign> ::= +
+
+<comma> ::= ,
+
+<minus sign> ::= -
+
+<period> ::= .
+
+<solidus> ::= /
+
+<colon> ::= :
+
+<semicolon> ::= ;
+
+<less than operator> ::= <
+
+<equals operator> ::= =
+
+<greater than operator> ::= >
+
+<question mark> ::= ?
+
+<underscore> ::= _
+
+<vertical bar> ::= |
+
+<SQL embedded language character> ::=
+      <left bracket>
+    | <right bracket>
+
+<left bracket> ::= [
+
+<right bracket> ::= ]
+
+<token> ::=
+      <nondelimiter token>
+    | <delimiter token>
+
+<nondelimiter token> ::=
+      <regular identifier>
+    | <key word>
+    | <unsigned numeric literal>
+    | <national character string literal>
+    | <bit string literal>
+    | <hex string literal>
+
+<regular identifier> ::= <identifier body>
+
+<identifier body> ::=
+    <identifier start> [ { <underscore> | <identifier part> }... ]
+
+<identifier start> ::= <EMPHASIS>(!! See the Syntax Rules)
+
+<identifier part> ::=
+      <identifier start>
+    | <digit>
+
+<key word> ::=
+      <reserved word>
+    | <non-reserved word>
+
+<reserved word> ::=
+      ABSOLUTE | ACTION | ADD | ALL
+    | ALLOCATE | ALTER | AND
+    | ANY | ARE
+    | AS | ASC
+    | ASSERTION | AT
+    | AUTHORIZATION | AVG
+    | BEGIN | BETWEEN | BIT | BIT_LENGTH
+    | BOTH | BY
+    | CASCADE | CASCADED | CASE | CAST
+    | CATALOG
+    | CHAR | CHARACTER | CHAR_LENGTH
+    | CHARACTER_LENGTH | CHECK | CLOSE | COALESCE
+    | COLLATE | COLLATION
+    | COLUMN | COMMIT
+    | CONNECT
+    | CONNECTION | CONSTRAINT
+    | CONSTRAINTS | CONTINUE
+    | CONVERT | CORRESPONDING | COUNT | CREATE | CROSS
+    | CURRENT
+    | CURRENT_DATE | CURRENT_TIME
+    | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR
+    | DATE | DAY | DEALLOCATE | DEC
+    | DECIMAL | DECLARE | DEFAULT | DEFERRABLE
+    | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR
+    | DIAGNOSTICS
+    | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP
+    | ELSE | END | END-EXEC | ESCAPE
+    | EXCEPT | EXCEPTION
+    | EXEC | EXECUTE | EXISTS
+    | EXTERNAL | EXTRACT
+    | FALSE | FETCH | FIRST | FLOAT | FOR
+    | FOREIGN | FOUND | FROM | FULL
+    | GET | GLOBAL | GO | GOTO
+    | GRANT | GROUP
+    | HAVING | HOUR
+    | IDENTITY | IMMEDIATE | IN | INDICATOR
+    | INITIALLY | INNER | INPUT
+    | INSENSITIVE | INSERT | INT | INTEGER | INTERSECT
+    | INTERVAL | INTO | IS
+    | ISOLATION
+    | JOIN
+    | KEY
+    | LANGUAGE | LAST | LEADING | LEFT
+    | LEVEL | LIKE | LOCAL | LOWER
+    | MATCH | MAX | MIN | MINUTE | MODULE
+    | MONTH
+    | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO
+    | NOT | NULL
+    | NULLIF | NUMERIC
+    | OCTET_LENGTH | OF
+    | ON | ONLY | OPEN | OPTION | OR
+    | ORDER | OUTER
+    | OUTPUT | OVERLAPS
+    | PAD | PARTIAL | POSITION | PRECISION | PREPARE
+    | PRESERVE | PRIMARY
+    | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
+    | READ | REAL | REFERENCES | RELATIVE | RESTRICT
+    | REVOKE | RIGHT
+    | ROLLBACK | ROWS
+    | SCHEMA | SCROLL | SECOND | SECTION
+    | SELECT
+    | SESSION | SESSION_USER | SET
+    | SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE
+    | SQLERROR | SQLSTATE
+    | SUBSTRING | SUM | SYSTEM_USER
+    | TABLE | TEMPORARY
+    | THEN | TIME | TIMESTAMP
+    | TIMEZONE_HOUR | TIMEZONE_MINUTE
+    | TO | TRAILING | TRANSACTION
+    | TRANSLATE | TRANSLATION | TRIM | TRUE
+    | UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE
+    | USER | USING
+    | VALUE | VALUES | VARCHAR | VARYING | VIEW
+    | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE
+    | YEAR
+    | ZONE
+
+<non-reserved word> ::=
+    
+      ADA
+    | C | CATALOG_NAME
+    | CHARACTER_SET_CATALOG | CHARACTER_SET_NAME
+    | CHARACTER_SET_SCHEMA | CLASS_ORIGIN | COBOL | COLLATION_CATALOG
+    | COLLATION_NAME | COLLATION_SCHEMA | COLUMN_NAME | COMMAND_FUNCTION
+    | COMMITTED
+    | CONDITION_NUMBER | CONNECTION_NAME | CONSTRAINT_CATALOG | CONSTRAINT_NAME
+    | CONSTRAINT_SCHEMA | CURSOR_NAME
+    | DATA | DATETIME_INTERVAL_CODE
+    | DATETIME_INTERVAL_PRECISION | DYNAMIC_FUNCTION
+    | FORTRAN
+    | LENGTH
+    | MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE | MUMPS
+    | NAME | NULLABLE | NUMBER
+    | PASCAL | PLI
+    | REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE
+    | ROW_COUNT
+    | SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
+    | TABLE_NAME | TYPE
+    | UNCOMMITTED | UNNAMED
+
+<unsigned numeric literal> ::=
+      <exact numeric literal>
+    | <approximate numeric literal>
+
+<exact numeric literal> ::=
+      <unsigned integer> [ <period> [ <unsigned integer> ] ]
+    | <period> <unsigned integer>
+
+<unsigned integer> ::= <digit>...
+
+<approximate numeric literal> ::= <mantissa> E <exponent>
+
+<mantissa> ::= <exact numeric literal>
+
+<exponent> ::= <signed integer>
+
+<signed integer> ::= [ <sign> ] <unsigned integer>
+
+<sign> ::= <plus sign> | <minus sign>
+
+<national character string literal> ::=
+    N <quote> [ <character representation>... ] <quote>
+      [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]
+
+<character representation> ::=
+      <nonquote character>
+    | <quote symbol>
+
+<nonquote character> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<quote symbol> ::= <quote><quote>
+
+<separator> ::= { <comment> | <space> | <newline> }...
+
+<comment> ::=
+    <comment introducer> [ <comment character>... ] <newline>
+
+<comment introducer> ::= <minus sign><minus sign>[<minus sign>...]
+
+<comment character> ::=
+      <nonquote character>
+    | <quote>
+
+<newline> ::= !! <EMPHASIS>(implementation-defined end-of-line indicator)
+
+<bit string literal> ::=
+    B <quote> [ <bit>... ] <quote>
+      [ { <separator>... <quote> [ <bit>... ] <quote> }... ]
+
+<bit> ::= 0 | 1
+
+<hex string literal> ::=
+    X <quote> [ <hexit>... ] <quote>
+      [ { <separator>... <quote> [ <hexit>... ] <quote> }... ]
+
+<hexit> ::= <digit> | A | B | C | D | E | F | a | b | c | d | e | f
+
+<delimiter token> ::=
+      <character string literal>
+    | <date string>
+    | <time string>
+    | <timestamp string>
+    | <interval string>
+    | <delimited identifier>
+    | <SQL special character>
+    | <not equals operator>
+    | <greater than or equals operator>
+    | <less than or equals operator>
+    | <concatenation operator>
+    | <double period>
+    | <left bracket>
+    | <right bracket>
+
+<character string literal> ::=
+    [ <introducer><character set specification> ]
+    <quote> [ <character representation>... ] <quote>
+      [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]
+
+<introducer> ::= <underscore>
+
+<character set specification> ::=
+      <standard character repertoire name>
+    | <implementation-defined character repertoire name>
+    | <user-defined character repertoire name>
+    | <standard universal character form-of-use name>
+    | <implementation-defined universal character form-of-use name>
+
+<standard character repertoire name> ::= <character set name>
+
+<character set name> ::= [ <schema name> <period> ]
+      <SQL language identifier>
+
+<schema name> ::=
+    [ <catalog name> <period> ] <unqualified schema name>
+
+<catalog name> ::= <identifier>
+
+<identifier> ::=
+    [ <introducer><character set specification> ] <actual identifier>
+
+<actual identifier> ::=
+      <regular identifier>
+    | <delimited identifier>
+
+<delimited identifier> ::=
+    <double quote> <delimited identifier body> <double quote>
+
+<delimited identifier body> ::= <delimited identifier part>...
+
+<delimited identifier part> ::=
+      <nondoublequote character>
+    | <doublequote symbol>
+
+<nondoublequote character> ::= <EMPHASIS>(!! See the Syntax Rules)
+
+<doublequote symbol> ::= <double quote><double quote>
+
+<unqualified schema name> ::= <identifier>
+
+<SQL language identifier> ::=
+    <SQL language identifier start>
+       [ { <underscore> | <SQL language identifier part> }... ]
+
+<SQL language identifier start> ::= <simple Latin letter>
+
+<SQL language identifier part> ::=
+      <simple Latin letter>
+    | <digit>
+
+<implementation-defined character repertoire name> ::=
+    <character set name>
+
+<user-defined character repertoire name> ::= <character set name>
+
+<standard universal character form-of-use name> ::=
+    <character set name>
+
+<implementation-defined universal character form-of-use name> ::=
+    <character set name>
+
+<date string> ::=
+    <quote> <date value> <quote>
+
+<date value> ::=
+    <years value> <minus sign> <months value>
+        <minus sign> <days value>
+
+<years value> ::= <datetime value>
+
+<datetime value> ::= <unsigned integer>
+
+<months value> ::= <datetime value>
+
+<days value> ::= <datetime value>
+
+<time string> ::=
+    <quote> <time value> [ <time zone interval> ] <quote>
+
+<time value> ::=
+    <hours value> <colon> <minutes value> <colon> <seconds value>
+
+<hours value> ::= <datetime value>
+
+<minutes value> ::= <datetime value>
+
+<seconds value> ::=
+      <seconds integer value> [ <period> [ <seconds fraction> ] ]
+
+<seconds integer value> ::= <unsigned integer>
+
+<seconds fraction> ::= <unsigned integer>
+
+<time zone interval> ::=
+    <sign> <hours value> <colon> <minutes value>
+
+<timestamp string> ::=
+    <quote> <date value> <space> <time value>
+        [ <time zone interval> ] <quote>
+
+<interval string> ::=
+    <quote> { <year-month literal> | <day-time literal> } <quote>
+
+<year-month literal> ::=
+      <years value>
+    | [ <years value> <minus sign> ] <months value>
+
+<day-time literal> ::=
+      <day-time interval>
+    | <time interval>
+
+<day-time interval> ::=
+    <days value>
+      [ <space> <hours value> [ <colon> <minutes value>
+        [ <colon> <seconds value> ] ] ]
+
+<time interval> ::=
+      <hours value> [ <colon> <minutes value> [ <colon> <seconds value> ] ]
+    | <minutes value> [ <colon> <seconds value> ]
+    | <seconds value>
+
+<not equals operator> ::= <>
+
+<greater than or equals operator> ::= >=
+
+<less than or equals operator> ::= <=
+
+<concatenation operator> ::= ||
+
+<double period> ::= ..
+
+<module> ::=
+    <module name clause>
+    <language clause>
+    <module authorization clause>
+    [ <temporary table declaration>... ]
+    <module contents>...
+
+<module name clause> ::=
+    MODULE [ <module name> ]
+      [ <module character set specification> ]
+
+<module name> ::= <identifier>
+
+<module character set specification> ::=
+    NAMES ARE <character set specification>
+
+<language clause> ::=
+    LANGUAGE <language name>
+
+<language name> ::=
+    ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI
+
+<module authorization clause> ::=
+      SCHEMA <schema name>
+    | AUTHORIZATION <module authorization identifier>
+    | SCHEMA <schema name>
+          AUTHORIZATION <module authorization identifier>
+
+<module authorization identifier> ::=
+    <authorization identifier>
+
+<authorization identifier> ::= <identifier>
+
+<temporary table declaration> ::=
+    DECLARE LOCAL TEMPORARY TABLE
+        <qualified local table name>
+      <table element list>
+      [ ON COMMIT { PRESERVE | DELETE } ROWS ]
+
+<qualified local table name> ::=
+    MODULE <period> <local table name>
+
+<local table name> ::= <qualified identifier>
+
+<qualified identifier> ::= <identifier>
+
+<table element list> ::=
+      <left paren> <table element> [ { <comma> <table element> }... ] <right paren>
+
+<table element> ::=
+      <column definition>
+    | <table constraint definition>
+
+<column definition> ::=
+    <column name> { <data type> | <domain name> }
+    [ <default clause> ]
+    [ <column constraint definition>... ]
+    [ <collate clause> ]
+
+<column name> ::= <identifier>
+
+<data type> ::=
+      <character string type>
+           [ CHARACTER SET <character set specification> ]
+    | <national character string type>
+    | <bit string type>
+    | <numeric type>
+    | <datetime type>
+    | <interval type>
+
+<character string type> ::=
+      CHARACTER [ <left paren> <length> <right paren> ]
+    | CHAR [ <left paren> <length> <right paren> ]
+    | CHARACTER VARYING <left paren> <length> <right paren>
+    | CHAR VARYING <left paren> <length> <right paren>
+    | VARCHAR <left paren> <length> <right paren>
+
+<length> ::= <unsigned integer>
+
+<national character string type> ::=
+      NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
+    | NATIONAL CHAR [ <left paren> <length> <right paren> ]
+    | NCHAR [ <left paren> <length> <right paren> ]
+    | NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
+    | NATIONAL CHAR VARYING <left paren> <length> <right paren>
+    | NCHAR VARYING <left paren> <length> <right paren>
+
+<bit string type> ::=
+      BIT [ <left paren> <length> <right paren> ]
+    | BIT VARYING <left paren> <length> <right paren>
+
+<numeric type> ::=
+      <exact numeric type>
+    | <approximate numeric type>
+
+<exact numeric type> ::=
+      NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | INTEGER
+    | INT
+    | SMALLINT
+
+<precision> ::= <unsigned integer>
+
+<scale> ::= <unsigned integer>
+
+<approximate numeric type> ::=
+      FLOAT [ <left paren> <precision> <right paren> ]
+    | REAL
+    | DOUBLE PRECISION
+
+<datetime type> ::=
+      DATE
+    | TIME [ <left paren> <time precision> <right paren> ]
+          [ WITH TIME ZONE ]
+    | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
+          [ WITH TIME ZONE ]
+
+<time precision> ::= <time fractional seconds precision>
+
+<time fractional seconds precision> ::= <unsigned integer>
+
+<timestamp precision> ::= <time fractional seconds precision>
+
+<interval type> ::= INTERVAL <interval qualifier>
+
+<interval qualifier> ::=
+      <start field> TO <end field>
+    | <single datetime field>
+
+<start field> ::=
+    <non-second datetime field>
+        [ <left paren> <interval leading field precision> <right paren> ]
+
+<non-second datetime field> ::= YEAR | MONTH | DAY | HOUR
+    | MINUTE
+
+<interval leading field precision> ::= <unsigned integer>
+
+<end field> ::=
+      <non-second datetime field>
+    | SECOND [ <left paren> <interval fractional seconds precision> <right paren> ]
+
+<interval fractional seconds precision> ::= <unsigned integer>
+
+<single datetime field> ::=
+      <non-second datetime field>
+          [ <left paren> <interval leading field precision> <right paren> ]
+    | SECOND [ <left paren> <interval leading field precision>
+          [ <comma> <interval fractional seconds precision> ] <right paren> ]
+
+<domain name> ::= <qualified name>
+
+<qualified name> ::=
+    [ <schema name> <period> ] <qualified identifier>
+
+<default clause> ::=
+      DEFAULT <default option>
+
+<default option> ::=
+      <literal>
+    | <datetime value function>
+    | USER
+    | CURRENT_USER
+    | SESSION_USER
+    | SYSTEM_USER
+    | NULL
+
+<literal> ::=
+      <signed numeric literal>
+    | <general literal>
+
+<signed numeric literal> ::=
+    [ <sign> ] <unsigned numeric literal>
+
+<general literal> ::=
+      <character string literal>
+    | <national character string literal>
+    | <bit string literal>
+    | <hex string literal>
+    | <datetime literal>
+    | <interval literal>
+
+<datetime literal> ::=
+      <date literal>
+    | <time literal>
+    | <timestamp literal>
+
+<date literal> ::=
+    DATE <date string>
+
+<time literal> ::=
+    TIME <time string>
+
+<timestamp literal> ::=
+    TIMESTAMP <timestamp string>
+
+<interval literal> ::=
+    INTERVAL [ <sign> ] <interval string> <interval qualifier>
+
+<datetime value function> ::=
+      <current date value function>
+    | <current time value function>
+    | <current timestamp value function>
+
+<current date value function> ::= CURRENT_DATE
+
+<current time value function> ::=
+      CURRENT_TIME [ <left paren> <time precision> <right paren> ]
+
+<current timestamp value function> ::=
+      CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
+
+<column constraint definition> ::=
+    [ <constraint name definition> ]
+    <column constraint>
+      [ <constraint attributes> ]
+
+<constraint name definition> ::= CONSTRAINT <constraint name>
+
+<constraint name> ::= <qualified name>
+
+<column constraint> ::=
+      NOT NULL
+    | <unique specification>
+    | <references specification>
+    | <check constraint definition>
+
+<unique specification> ::=
+    UNIQUE | PRIMARY KEY
+
+<references specification> ::=
+    REFERENCES <referenced table and columns>
+      [ MATCH <match type> ]
+      [ <referential triggered action> ]
+
+<referenced table and columns> ::=
+     <table name> [ <left paren> <reference column list> <right paren> ]
+
+<table name> ::=
+      <qualified name>
+    | <qualified local table name>
+
+<reference column list> ::= <column name list>
+
+<column name list> ::=
+    <column name> [ { <comma> <column name> }... ]
+
+<match type> ::=
+      FULL
+    | PARTIAL
+
+<referential triggered action> ::=
+      <update rule> [ <delete rule> ]
+    | <delete rule> [ <update rule> ]
+
+<update rule> ::= ON UPDATE <referential action>
+
+<referential action> ::=
+      CASCADE
+    | SET NULL
+    | SET DEFAULT
+    | NO ACTION
+
+<delete rule> ::= ON DELETE <referential action>
+
+<check constraint definition> ::=
+    CHECK
+        <left paren> <search condition> <right paren>
+
+<search condition> ::=
+      <boolean term>
+    | <search condition> OR <boolean term>
+
+<boolean term> ::=
+      <boolean factor>
+    | <boolean term> AND <boolean factor>
+
+<boolean factor> ::=
+    [ NOT ] <boolean test>
+
+<boolean test> ::=
+    <boolean primary> [ IS [ NOT ]
+          <truth value> ]
+
+<boolean primary> ::=
+      <predicate>
+    | <left paren> <search condition> <right paren>
+
+<predicate> ::=
+      <comparison predicate>
+    | <between predicate>
+    | <in predicate>
+    | <like predicate>
+    | <null predicate>
+    | <quantified comparison predicate>
+    | <exists predicate>
+    | <unique predicate>
+    | <match predicate>
+    | <overlaps predicate>
+
+<comparison predicate> ::=
+    <row value constructor> <comp op>
+        <row value constructor>
+
+<row value constructor> ::=
+       <row value constructor element>
+    | <left paren> <row value constructor list> <right paren>
+    | <row subquery>
+
+<row value constructor element> ::=
+      <value expression>
+    | <null specification>
+    | <default specification>
+
+<value expression> ::=
+      <numeric value expression>
+    | <string value expression>
+    | <datetime value expression>
+    | <interval value expression>
+
+<numeric value expression> ::=
+      <term>
+    | <numeric value expression> <plus sign> <term>
+    | <numeric value expression> <minus sign> <term>
+
+<term> ::=
+      <factor>
+    | <term> <asterisk> <factor>
+    | <term> <solidus> <factor>
+
+<factor> ::=
+    [ <sign> ] <numeric primary>
+
+<numeric primary> ::=
+      <value expression primary>
+    | <numeric value function>
+
+<value expression primary> ::=
+      <unsigned value specification>
+    | <column reference>
+    | <set function specification>
+    | <scalar subquery>
+    | <case expression>
+    | <left paren> <value expression> <right paren>
+    | <cast specification>
+
+<unsigned value specification> ::=
+      <unsigned literal>
+    | <general value specification>
+
+<unsigned literal> ::=
+      <unsigned numeric literal>
+    | <general literal>
+
+<general value specification> ::=
+      <parameter specification>
+    | <dynamic parameter specification>
+    | <variable specification>
+    | USER
+    | CURRENT_USER
+    | SESSION_USER
+    | SYSTEM_USER
+    | VALUE
+
+<parameter specification> ::=
+    <parameter name> [ <indicator parameter> ]
+
+<parameter name> ::= <colon> <identifier>
+
+<indicator parameter> ::=
+    [ INDICATOR ] <parameter name>
+
+<dynamic parameter specification> ::= <question mark>
+
+<variable specification> ::=
+    <embedded variable name> [ <indicator variable> ]
+
+<embedded variable name> ::=
+    <colon><host identifier>
+
+<host identifier> ::=
+      <Ada host identifier>
+    | <C host identifier>
+    | <COBOL host identifier>
+    | <Fortran host identifier>
+    | <MUMPS host identifier>
+    | <Pascal host identifier>
+    | <PL/I host identifier>
+
+<Ada host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<C host identifier> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<COBOL host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<Fortran host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<MUMPS host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<Pascal host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<PL/I host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<indicator variable> ::=
+    [ INDICATOR ] <embedded variable name>
+
+<column reference> ::= [ <qualifier> <period> ] <column name>
+
+<qualifier> ::=
+      <table name>
+    | <correlation name>
+
+<correlation name> ::= <identifier>
+
+<set function specification> ::=
+      COUNT <left paren> <asterisk> <right paren>
+    | <general set function>
+
+<general set function> ::=
+      <set function type>
+          <left paren> [ <set quantifier> ] <value expression> <right paren>
+
+<set function type> ::=
+    AVG | MAX | MIN | SUM | COUNT
+
+<set quantifier> ::= DISTINCT | ALL
+
+<scalar subquery> ::= <subquery>
+
+<subquery> ::= <left paren> <query expression> <right paren>
+
+<query expression> ::=
+      <non-join query expression>
+    | <joined table>
+
+<non-join query expression> ::=
+      <non-join query term>
+    | <query expression> UNION  [ ALL ]
+          [ <corresponding spec> ] <query term>
+    | <query expression> EXCEPT [ ALL ]
+          [ <corresponding spec> ] <query term>
+
+<non-join query term> ::=
+      <non-join query primary>
+    | <query term> INTERSECT [ ALL ]
+          [ <corresponding spec> ] <query primary>
+
+<non-join query primary> ::=
+      <simple table>
+    | <left paren> <non-join query expression> <right paren>
+
+<simple table> ::=
+      <query specification>
+    | <table value constructor>
+    | <explicit table>
+
+<query specification> ::=
+    SELECT [ <set quantifier> ] <select list> <table expression>
+
+<select list> ::=
+      <asterisk>
+    | <select sublist> [ { <comma> <select sublist> }... ]
+
+<select sublist> ::=
+      <derived column>
+    | <qualifier> <period> <asterisk>
+
+<derived column> ::= <value expression> [ <as clause> ]
+
+<as clause> ::= [ AS ] <column name>
+
+<table expression> ::=
+    <from clause>
+    [ <where clause> ]
+    [ <group by clause> ]
+    [ <having clause> ]
+
+<from clause> ::= FROM <table reference>
+    [ { <comma> <table reference> }... ]
+
+<table reference> ::=
+      <table name> [ [ AS ] <correlation name>
+          [ <left paren> <derived column list> <right paren> ] ]
+    | <derived table> [ AS ] <correlation name>
+          [ <left paren> <derived column list> <right paren> ]
+    | <joined table>
+
+<derived column list> ::= <column name list>
+
+<derived table> ::= <table subquery>
+
+<table subquery> ::= <subquery>
+
+<joined table> ::=
+      <cross join>
+    | <qualified join>
+    | <left paren> <joined table> <right paren>
+
+<cross join> ::=
+    <table reference> CROSS JOIN <table reference>
+
+<qualified join> ::=
+    <table reference> [ NATURAL ] [ <join type> ] JOIN
+      <table reference> [ <join specification> ]
+
+<join type> ::=
+      INNER
+    | <outer join type> [ OUTER ]
+    | UNION
+
+<outer join type> ::=
+      LEFT
+    | RIGHT
+    | FULL
+
+<join specification> ::=
+      <join condition>
+    | <named columns join>
+
+<join condition> ::= ON <search condition>
+
+<named columns join> ::=
+    USING <left paren> <join column list> <right paren>
+
+<join column list> ::= <column name list>
+
+<where clause> ::= WHERE <search condition>
+
+<group by clause> ::=
+    GROUP BY <grouping column reference list>
+
+<grouping column reference list> ::=
+    <grouping column reference>
+        [ { <comma> <grouping column reference> }... ]
+
+<grouping column reference> ::=
+    <column reference> [ <collate clause> ]
+
+<collate clause> ::= COLLATE <collation name>
+
+<collation name> ::= <qualified name>
+
+<having clause> ::= HAVING <search condition>
+
+<table value constructor> ::=
+    VALUES <table value constructor list>
+
+<table value constructor list> ::=
+    <row value constructor> [ { <comma> <row value constructor> }... ]
+
+<explicit table> ::= TABLE <table name>
+
+<query term> ::=
+      <non-join query term>
+    | <joined table>
+
+<corresponding spec> ::=
+    CORRESPONDING [ BY <left paren> <corresponding column list> <right paren> ]
+
+<corresponding column list> ::= <column name list>
+
+<query primary> ::=
+      <non-join query primary>
+    | <joined table>
+
+<case expression> ::=
+      <case abbreviation>
+    | <case specification>
+
+<case abbreviation> ::=
+      NULLIF <left paren> <value expression> <comma>
+            <value expression> <right paren>
+    | COALESCE <left paren> <value expression>
+            { <comma> <value expression> }... <right paren>
+
+<case specification> ::=
+      <simple case>
+    | <searched case>
+
+<simple case> ::=
+    CASE <case operand>
+      <simple when clause>...
+      [ <else clause> ]
+    END
+
+<case operand> ::= <value expression>
+
+<simple when clause> ::= WHEN <when operand> THEN <result>
+
+<when operand> ::= <value expression>
+
+<result> ::= <result expression> | NULL
+
+<result expression> ::= <value expression>
+
+<else clause> ::= ELSE <result>
+
+<searched case> ::=
+    CASE
+      <searched when clause>...
+      [ <else clause> ]
+    END
+
+<searched when clause> ::= WHEN <search condition> THEN <result>
+
+<cast specification> ::=
+    CAST <left paren> <cast operand> AS
+        <cast target> <right paren>
+
+<cast operand> ::=
+      <value expression>
+    | NULL
+
+<cast target> ::=
+      <domain name>
+    | <data type>
+
+<numeric value function> ::=
+      <position expression>
+    | <extract expression>
+    | <length expression>
+
+<position expression> ::=
+    POSITION <left paren> <character value expression>
+        IN <character value expression> <right paren>
+
+<character value expression> ::=
+      <concatenation>
+    | <character factor>
+
+<concatenation> ::=
+    <character value expression> <concatenation operator>
+        <character factor>
+
+<character factor> ::=
+    <character primary> [ <collate clause> ]
+
+<character primary> ::=
+      <value expression primary>
+    | <string value function>
+
+<string value function> ::=
+      <character value function>
+    | <bit value function>
+
+<character value function> ::=
+      <character substring function>
+    | <fold>
+    | <form-of-use conversion>
+    | <character translation>
+    | <trim function>
+
+<character substring function> ::=
+    SUBSTRING <left paren> <character value expression> FROM <start position>
+                [ FOR <string length> ] <right paren>
+
+<start position> ::= <numeric value expression>
+
+<string length> ::= <numeric value expression>
+
+<fold> ::= { UPPER | LOWER }
+     <left paren> <character value expression> <right paren>
+
+<form-of-use conversion> ::=
+    CONVERT <left paren> <character value expression>
+        USING <form-of-use conversion name> <right paren>
+
+<form-of-use conversion name> ::= <qualified name>
+
+<character translation> ::=
+    TRANSLATE <left paren> <character value expression>
+        USING <translation name> <right paren>
+
+<translation name> ::= <qualified name>
+
+<trim function> ::=
+    TRIM <left paren> <trim operands> <right paren>
+
+<trim operands> ::=
+    [ [ <trim specification> ] [ <trim character> ] FROM ] <trim source>
+
+<trim specification> ::=
+      LEADING
+    | TRAILING
+    | BOTH
+
+<trim character> ::= <character value expression>
+
+<trim source> ::= <character value expression>
+
+<bit value function> ::=
+    <bit substring function>
+
+<bit substring function> ::=
+    SUBSTRING <left paren> <bit value expression> FROM <start position>
+        [ FOR <string length> ] <right paren>
+
+<bit value expression> ::=
+      <bit concatenation>
+    | <bit factor>
+
+<bit concatenation> ::=
+    <bit value expression> <concatenation operator> <bit factor>
+
+<bit factor> ::= <bit primary>
+
+<bit primary> ::=
+      <value expression primary>
+    | <string value function>
+
+<extract expression> ::=
+    EXTRACT <left paren> <extract field>
+        FROM <extract source> <right paren>
+
+<extract field> ::=
+      <datetime field>
+    | <time zone field>
+
+<datetime field> ::=
+      <non-second datetime field>
+    | SECOND
+
+<time zone field> ::=
+      TIMEZONE_HOUR
+    | TIMEZONE_MINUTE
+
+<extract source> ::=
+      <datetime value expression>
+    | <interval value expression>
+
+<datetime value expression> ::=
+      <datetime term>
+    | <interval value expression> <plus sign> <datetime term>
+    | <datetime value expression> <plus sign> <interval term>
+    | <datetime value expression> <minus sign> <interval term>
+
+<interval term> ::=
+      <interval factor>
+    | <interval term 2> <asterisk> <factor>
+    | <interval term 2> <solidus> <factor>
+    | <term> <asterisk> <interval factor>
+
+<interval factor> ::=
+    [ <sign> ] <interval primary>
+
+<interval primary> ::=
+      <value expression primary> [ <interval qualifier> ]
+
+<interval term 2> ::= <interval term>
+
+<interval value expression> ::=
+      <interval term>
+    | <interval value expression 1> <plus sign> <interval term 1>
+    | <interval value expression 1> <minus sign> <interval term 1>
+    | <left paren> <datetime value expression> <minus sign>
+          <datetime term> <right paren> <interval qualifier>
+
+<interval value expression 1> ::= <interval value expression>
+
+<interval term 1> ::= <interval term>
+
+<datetime term> ::=
+      <datetime factor>
+
+<datetime factor> ::=
+      <datetime primary> [ <time zone> ]
+
+<datetime primary> ::=
+      <value expression primary>
+    | <datetime value function>
+
+<time zone> ::=
+    AT <time zone specifier>
+
+<time zone specifier> ::=
+      LOCAL
+    | TIME ZONE <interval value expression>
+
+<length expression> ::=
+      <char length expression>
+    | <octet length expression>
+    | <bit length expression>
+
+<char length expression> ::=
+    { CHAR_LENGTH | CHARACTER_LENGTH }
+        <left paren> <string value expression> <right paren>
+
+<string value expression> ::=
+      <character value expression>
+    | <bit value expression>
+
+<octet length expression> ::=
+    OCTET_LENGTH <left paren> <string value expression> <right paren>
+
+<bit length expression> ::=
+    BIT_LENGTH <left paren> <string value expression> <right paren>
+
+<null specification> ::=
+    NULL
+
+<default specification> ::=
+    DEFAULT
+
+<row value constructor list> ::=
+    <row value constructor element>
+        [ { <comma> <row value constructor element> }... ]
+
+<row subquery> ::= <subquery>
+
+<comp op> ::=
+      <equals operator>
+    | <not equals operator>
+    | <less than operator>
+    | <greater than operator>
+    | <less than or equals operator>
+    | <greater than or equals operator>
+
+<between predicate> ::=
+    <row value constructor> [ NOT ] BETWEEN
+      <row value constructor> AND <row value constructor>
+
+<in predicate> ::=
+    <row value constructor>
+      [ NOT ] IN <in predicate value>
+
+<in predicate value> ::=
+      <table subquery>
+    | <left paren> <in value list> <right paren>
+
+<in value list> ::=
+    <value expression> { <comma> <value expression> }...
+
+<like predicate> ::=
+    <match value> [ NOT ] LIKE <pattern>
+      [ ESCAPE <escape character> ]
+
+<match value> ::= <character value expression>
+
+<pattern> ::= <character value expression>
+
+<escape character> ::= <character value expression>
+
+<null predicate> ::= <row value constructor>
+    IS [ NOT ] NULL
+
+<quantified comparison predicate> ::=
+    <row value constructor> <comp op> <quantifier> <table subquery>
+
+<quantifier> ::= <all> | <some>
+
+<all> ::= ALL
+
+<some> ::= SOME | ANY
+
+<exists predicate> ::= EXISTS <table subquery>
+
+<unique predicate> ::= UNIQUE <table subquery>
+
+<match predicate> ::=
+    <row value constructor> MATCH [ UNIQUE ]
+        [ PARTIAL | FULL ] <table subquery>
+
+<overlaps predicate> ::=
+    <row value constructor 1> OVERLAPS <row value constructor 2>
+
+<row value constructor 1> ::= <row value constructor>
+
+<row value constructor 2> ::= <row value constructor>
+
+<truth value> ::=
+      TRUE
+    | FALSE
+    | UNKNOWN
+
+<constraint attributes> ::=
+      <constraint check time> [ [ NOT ] DEFERRABLE ]
+    | [ NOT ] DEFERRABLE [ <constraint check time> ]
+
+<constraint check time> ::=
+      INITIALLY DEFERRED
+    | INITIALLY IMMEDIATE
+
+<table constraint definition> ::=
+    [ <constraint name definition> ]
+    <table constraint> [ <constraint attributes> ]
+
+<table constraint> ::=
+      <unique constraint definition>
+    | <referential constraint definition>
+    | <check constraint definition>
+
+<unique constraint definition> ::=
+            <unique specification> even in SQL3)
+    <unique specification>
+      <left paren> <unique column list> <right paren>
+
+<unique column list> ::= <column name list>
+
+<referential constraint definition> ::=
+    FOREIGN KEY
+        <left paren> <referencing columns> <right paren>
+      <references specification>
+
+<referencing columns> ::=
+    <reference column list>
+
+<module contents> ::=
+      <declare cursor>
+    | <dynamic declare cursor>
+    | <procedure>
+
+<declare cursor> ::=
+    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
+      FOR <cursor specification>
+
+<cursor name> ::= <identifier>
+
+<cursor specification> ::=
+    <query expression> [ <order by clause> ]
+      [ <updatability clause> ]
+
+<order by clause> ::=
+    ORDER BY <sort specification list>
+
+<sort specification list> ::=
+    <sort specification> [ { <comma> <sort specification> }... ]
+
+<sort specification> ::=
+    <sort key> [ <collate clause> ] [ <ordering specification> ]
+
+<sort key> ::=
+      <column name>
+    | <unsigned integer>
+
+<ordering specification> ::= ASC | DESC
+
+<updatability clause> ::=
+    FOR
+        { READ ONLY |
+          UPDATE [ OF <column name list> ] }
+
+<dynamic declare cursor> ::=
+    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
+        FOR <statement name>
+
+<statement name> ::= <identifier>
+
+<procedure> ::=
+    PROCEDURE <procedure name>
+        <parameter declaration list> <semicolon>
+      <SQL procedure statement> <semicolon>
+
+<procedure name> ::= <identifier>
+
+<parameter declaration list> ::=
+      <left paren> <parameter declaration>
+          [ { <comma> <parameter declaration> }... ] <right paren>
+    | <parameter declaration>...
+
+<parameter declaration> ::=
+      <parameter name> <data type>
+    | <status parameter>
+
+<status parameter> ::=
+    SQLCODE | SQLSTATE
+
+<SQL procedure statement> ::=
+      <SQL schema statement>
+    | <SQL data statement>
+    | <SQL transaction statement>
+    | <SQL connection statement>
+    | <SQL session statement>
+    | <SQL dynamic statement>
+    | <SQL diagnostics statement>
+
+<SQL schema statement> ::=
+      <SQL schema definition statement>
+    | <SQL schema manipulation statement>
+
+<SQL schema definition statement> ::=
+      <schema definition>
+    | <table definition>
+    | <view definition>
+    | <grant statement>
+    | <domain definition>
+    | <character set definition>
+    | <collation definition>
+    | <translation definition>
+    | <assertion definition>
+
+<schema definition> ::=
+    CREATE SCHEMA <schema name clause>
+      [ <schema character set specification> ]
+      [ <schema element>... ]
+
+<schema name clause> ::=
+      <schema name>
+    | AUTHORIZATION <schema authorization identifier>
+    | <schema name> AUTHORIZATION
+          <schema authorization identifier>
+
+<schema authorization identifier> ::=
+    <authorization identifier>
+
+<schema character set specification> ::=
+    DEFAULT CHARACTER
+        SET <character set specification>
+
+<schema element> ::=
+      <domain definition>
+    | <table definition>
+    | <view definition>
+    | <grant statement>
+    | <assertion definition>
+    | <character set definition>
+    | <collation definition>
+    | <translation definition>
+
+<domain definition> ::=
+    CREATE DOMAIN <domain name>
+        [ AS ] <data type>
+      [ <default clause> ]
+      [ <domain constraint>... ]
+      [ <collate clause> ]
+
+<domain constraint> ::=
+    [ <constraint name definition> ]
+    <check constraint definition> [ <constraint attributes> ]
+
+<table definition> ::=
+    CREATE [ { GLOBAL | LOCAL } TEMPORARY ] TABLE
+        <table name>
+      <table element list>
+      [ ON COMMIT { DELETE | PRESERVE } ROWS ]
+
+<view definition> ::=
+    CREATE VIEW <table name> [ <left paren> <view column list>
+                                  <right paren> ]
+      AS <query expression>
+      [ WITH [ <levels clause> ] CHECK OPTION ]
+
+<view column list> ::= <column name list>
+
+<levels clause> ::=
+    CASCADED | LOCAL
+
+<grant statement> ::=
+   GRANT <privileges> ON <object name>
+     TO <grantee> [ { <comma> <grantee> }... ]
+       [ WITH GRANT OPTION ]
+
+<privileges> ::=
+      ALL PRIVILEGES
+    | <action list>
+
+<action list> ::= <action> [ { <comma> <action> }... ]
+
+<action> ::=
+      SELECT
+    | DELETE
+    | INSERT [ <left paren> <privilege column list> <right paren> ]
+    | UPDATE [ <left paren> <privilege column list> <right paren> ]
+    | REFERENCES [ <left paren> <privilege column list> <right paren> ]
+    | USAGE
+
+<privilege column list> ::= <column name list>
+
+<object name> ::=
+      [ TABLE ] <table name>
+    | DOMAIN <domain name>
+    | COLLATION <collation name>
+    | CHARACTER SET <character set name>
+    | TRANSLATION <translation name>
+
+<grantee> ::=
+      PUBLIC
+    | <authorization identifier>
+
+<assertion definition> ::=
+    CREATE ASSERTION <constraint name> <assertion check>
+      [ <constraint attributes> ]
+
+<assertion check> ::=
+    CHECK
+        <left paren> <search condition> <right paren>
+
+<character set definition> ::=
+    CREATE CHARACTER SET <character set name>
+        [ AS ]
+      <character set source>
+      [ <collate clause> | <limited collation definition> ]
+
+<character set source> ::=
+      GET <existing character set name>
+
+<existing character set name> ::=
+      <standard character repertoire name>
+    | <implementation-defined character repertoire name>
+    | <schema character set name>
+
+<schema character set name> ::= <character set name>
+
+<limited collation definition> ::=
+    COLLATION FROM <collation source>
+
+<collation source> ::=
+      <collating sequence definition>
+    | <translation collation>
+
+<collating sequence definition> ::=
+      <external collation>
+    | <schema collation name>
+    | DESC <left paren> <collation name> <right paren>
+    | DEFAULT
+
+<external collation> ::=
+    EXTERNAL <left paren> <quote> <external collation name> <quote> <right paren>
+
+<external collation name> ::=
+      <standard collation name>
+    | <implementation-defined collation name>
+
+<standard collation name> ::= <collation name>
+
+<implementation-defined collation name> ::= <collation name>
+
+<schema collation name> ::= <collation name>
+
+<translation collation> ::=
+    TRANSLATION <translation name>
+        [ THEN COLLATION <collation name> ]
+
+<collation definition> ::=
+    CREATE COLLATION <collation name> FOR
+        <character set specification>
+      FROM <collation source>
+        [ <pad attribute> ]
+
+<pad attribute> ::=
+      NO PAD
+    | PAD SPACE
+
+<translation definition> ::=
+    CREATE TRANSLATION <translation name>
+      FOR <source character set specification>
+        TO <target character set specification>
+      FROM <translation source>
+
+<source character set specification> ::= <character set specification>
+
+<target character set specification> ::= <character set specification>
+
+<translation source> ::=
+      <translation specification>
+
+<translation specification> ::=
+      <external translation>
+    | IDENTITY
+    | <schema translation name>
+
+<external translation> ::=
+    EXTERNAL <left paren> <quote> <external translation name> <quote> <right paren>
+
+<external translation name> ::=
+      <standard translation name>
+    | <implementation-defined translation name>
+
+<standard translation name> ::= <translation name>
+
+<implementation-defined translation name> ::= <translation name>
+
+<schema translation name> ::= <translation name>
+
+<SQL schema manipulation statement> ::=
+      <drop schema statement>
+    | <alter table statement>
+    | <drop table statement>
+    | <drop view statement>
+    | <revoke statement>
+    | <alter domain statement>
+    | <drop domain statement>
+    | <drop character set statement>
+    | <drop collation statement>
+    | <drop translation statement>
+    | <drop assertion statement>
+
+<drop schema statement> ::=
+    DROP SCHEMA <schema name> <drop behavior>
+
+<drop behavior> ::= CASCADE | RESTRICT
+
+<alter table statement> ::=
+    ALTER TABLE <table name> <alter table action>
+
+<alter table action> ::=
+      <add column definition>
+    | <alter column definition>
+    | <drop column definition>
+    | <add table constraint definition>
+    | <drop table constraint definition>
+
+<add column definition> ::=
+    ADD [ COLUMN ] <column definition>
+
+<alter column definition> ::=
+    ALTER [ COLUMN ] <column name> <alter column action>
+
+<alter column action> ::=
+      <set column default clause>
+    | <drop column default clause>
+
+<set column default clause> ::=
+    SET <default clause>
+
+<drop column default clause> ::=
+    DROP DEFAULT
+
+<drop column definition> ::=
+    DROP [ COLUMN ] <column name> <drop behavior>
+
+<add table constraint definition> ::=
+    ADD <table constraint definition>
+
+<drop table constraint definition> ::=
+    DROP CONSTRAINT <constraint name> <drop behavior>
+
+<drop table statement> ::=
+    DROP TABLE <table name> <drop behavior>
+
+<drop view statement> ::=
+    DROP VIEW <table name> <drop behavior>
+
+<revoke statement> ::=
+    REVOKE [ GRANT OPTION FOR ]
+        <privileges>
+        ON <object name>
+      FROM <grantee> [ { <comma> <grantee> }... ] <drop behavior>
+
+<alter domain statement> ::=
+    ALTER DOMAIN <domain name> <alter domain action>
+
+<alter domain action> ::=
+      <set domain default clause>
+    | <drop domain default clause>
+    | <add domain constraint definition>
+    | <drop domain constraint definition>
+
+<set domain default clause> ::= SET <default clause>
+
+<drop domain default clause> ::= DROP DEFAULT
+
+<add domain constraint definition> ::=
+    ADD <domain constraint>
+
+<drop domain constraint definition> ::=
+    DROP CONSTRAINT <constraint name>
+
+<drop domain statement> ::=
+    DROP DOMAIN <domain name> <drop behavior>
+
+<drop character set statement> ::=
+    DROP CHARACTER SET <character set name>
+
+<drop collation statement> ::=
+    DROP COLLATION <collation name>
+
+<drop translation statement> ::=
+    DROP TRANSLATION <translation name>
+
+<drop assertion statement> ::=
+    DROP ASSERTION <constraint name>
+
+<SQL data statement> ::=
+      <open statement>
+    | <fetch statement>
+    | <close statement>
+    | <select statement: single row>
+    | <SQL data change statement>
+
+<open statement> ::=
+    OPEN <cursor name>
+
+<fetch statement> ::=
+    FETCH [ [ <fetch orientation> ] FROM ]
+      <cursor name> INTO <fetch target list>
+
+<fetch orientation> ::=
+      NEXT
+    | PRIOR
+    | FIRST
+    | LAST
+    | { ABSOLUTE | RELATIVE } <simple value specification>
+
+<simple value specification> ::=
+      <parameter name>
+    | <embedded variable name>
+    | <literal>
+
+<fetch target list> ::=
+    <target specification> [ { <comma> <target specification> }... ]
+
+<target specification> ::=
+      <parameter specification>
+    | <variable specification>
+
+<close statement> ::=
+    CLOSE <cursor name>
+
+<select statement: single row> ::=
+    SELECT [ <set quantifier> ] <select list>
+      INTO <select target list>
+        <table expression>
+
+<select target list> ::=
+    <target specification> [ { <comma> <target specification> }... ]
+
+<SQL data change statement> ::=
+      <delete statement: positioned>
+    | <delete statement: searched>
+    | <insert statement>
+    | <update statement: positioned>
+    | <update statement: searched>
+
+<delete statement: positioned> ::=
+    DELETE FROM <table name>
+      WHERE CURRENT OF <cursor name>
+
+<delete statement: searched> ::=
+    DELETE FROM <table name>
+      [ WHERE <search condition> ]
+
+<insert statement> ::=
+    INSERT INTO <table name>
+      <insert columns and source>
+
+<insert columns and source> ::=
+      [ <left paren> <insert column list> <right paren> ]
+            <query expression>
+    | DEFAULT VALUES
+
+<insert column list> ::= <column name list>
+
+<update statement: positioned> ::=
+    UPDATE <table name>
+      SET <set clause list>
+        WHERE CURRENT OF <cursor name>
+
+<set clause list> ::=
+    <set clause> [ { <comma> <set clause> }... ]
+
+<set clause> ::=
+    <object column> <equals operator> <update source>
+
+<object column> ::= <column name>
+
+<update source> ::=
+      <value expression>
+    | <null specification>
+    | DEFAULT
+
+<update statement: searched> ::=
+    UPDATE <table name>
+      SET <set clause list>
+      [ WHERE <search condition> ]
+
+<SQL transaction statement> ::=
+      <set transaction statement>
+    | <set constraints mode statement>
+    | <commit statement>
+    | <rollback statement>
+
+<set transaction statement> ::=
+    SET TRANSACTION <transaction mode>
+        [ { <comma> <transaction mode> }... ]
+
+<transaction mode> ::=
+      <isolation level>
+    | <transaction access mode>
+    | <diagnostics size>
+
+<isolation level> ::=
+    ISOLATION LEVEL <level of isolation>
+
+<level of isolation> ::=
+      READ UNCOMMITTED
+    | READ COMMITTED
+    | REPEATABLE READ
+    | SERIALIZABLE
+
+<transaction access mode> ::=
+      READ ONLY
+    | READ WRITE
+
+<diagnostics size> ::=
+    DIAGNOSTICS SIZE <number of conditions>
+
+<number of conditions> ::= <simple value specification>
+
+<set constraints mode statement> ::=
+    SET CONSTRAINTS <constraint name list>
+        { DEFERRED | IMMEDIATE }
+
+<constraint name list> ::=
+      ALL
+    | <constraint name> [ { <comma> <constraint name> }... ]
+
+<commit statement> ::=
+    COMMIT [ WORK ]
+
+<rollback statement> ::=
+    ROLLBACK [ WORK ]
+
+<SQL connection statement> ::=
+      <connect statement>
+    | <set connection statement>
+    | <disconnect statement>
+
+<connect statement> ::=
+    CONNECT TO <connection target>
+
+<connection target> ::=
+      <SQL-server name>
+        [ AS <connection name> ]
+          correspondence with Tony Gordon)
+        [ USER <user name> ]
+    | DEFAULT
+
+<SQL-server name> ::= <simple value specification>
+
+<connection name> ::= <simple value specification>
+
+<user name> ::= <simple value specification>
+
+<set connection statement> ::=
+    SET CONNECTION <connection object>
+
+<connection object> ::=
+      DEFAULT
+    | <connection name>
+
+<disconnect statement> ::=
+    DISCONNECT <disconnect object>
+
+<disconnect object> ::=
+      <connection object>
+    | ALL
+    | CURRENT
+
+<SQL session statement> ::=
+      <set catalog statement>
+    | <set schema statement>
+    | <set names statement>
+    | <set session authorization identifier statement>
+    | <set local time zone statement>
+
+<set catalog statement> ::=
+    SET CATALOG <value specification>
+
+<value specification> ::=
+      <literal>
+    | <general value specification>
+
+<set schema statement> ::=
+    SET SCHEMA <value specification>
+
+<set names statement> ::=
+    SET NAMES <value specification>
+
+<set session authorization identifier statement> ::=
+    SET SESSION AUTHORIZATION
+        <value specification>
+
+<set local time zone statement> ::=
+    SET TIME ZONE
+        <set time zone value>
+
+<set time zone value> ::=
+      <interval value expression>
+    | LOCAL
+
+<SQL dynamic statement> ::=
+      <system descriptor statement>
+    | <prepare statement>
+    | <deallocate prepared statement>
+    | <describe statement>
+    | <execute statement>
+    | <execute immediate statement>
+    | <SQL dynamic data statement>
+
+<system descriptor statement> ::=
+      <allocate descriptor statement>
+    | <deallocate descriptor statement>
+    | <set descriptor statement>
+    | <get descriptor statement>
+
+<allocate descriptor statement> ::=
+    ALLOCATE DESCRIPTOR <descriptor name>
+       [ WITH MAX <occurrences> ]
+
+<descriptor name> ::=
+    [ <scope option> ] <simple value specification>
+
+<scope option> ::=
+      GLOBAL
+    | LOCAL
+
+<occurrences> ::= <simple value specification>
+
+<deallocate descriptor statement> ::=
+    DEALLOCATE DESCRIPTOR <descriptor name>
+
+<set descriptor statement> ::=
+    SET DESCRIPTOR <descriptor name>
+        <set descriptor information>
+
+<set descriptor information> ::=
+      <set count>
+    | VALUE <item number>
+        <set item information> [ { <comma> <set item information> }... ]
+
+<set count> ::=
+    COUNT <equals operator> <simple value specification 1>
+
+<simple value specification 1> ::= <simple value specification>
+
+<item number> ::= <simple value specification>
+
+<set item information> ::=
+    <descriptor item name> <equals operator> <simple value specification 2>
+
+<descriptor item name> ::=
+      TYPE
+    | LENGTH
+    | OCTET_LENGTH
+    | RETURNED_LENGTH
+    | RETURNED_OCTET_LENGTH
+    | PRECISION
+    | SCALE
+    | DATETIME_INTERVAL_CODE
+    | DATETIME_INTERVAL_PRECISION
+    | NULLABLE
+    | INDICATOR
+    | DATA
+    | NAME
+    | UNNAMED
+    | COLLATION_CATALOG
+    | COLLATION_SCHEMA
+    | COLLATION_NAME
+    | CHARACTER_SET_CATALOG
+    | CHARACTER_SET_SCHEMA
+    | CHARACTER_SET_NAME
+
+<simple value specification 2> ::= <simple value specification>
+
+<item number> ::= <simple value specification>
+
+<get descriptor statement> ::=
+    GET DESCRIPTOR <descriptor name> <get descriptor information>
+
+<get descriptor information> ::=
+      <get count>
+    | VALUE <item number>
+        <get item information> [ { <comma> <get item information> }... ]
+
+<get count> ::=
+    <simple target specification 1> <equals operator>
+         COUNT
+
+<simple target specification 1> ::= <simple target specification>
+
+<simple target specification> ::=
+      <parameter name>
+    | <embedded variable name>
+
+<get item information> ::=
+    <simple target specification 2> <equals operator> <descriptor item name>>
+
+<simple target specification 2> ::= <simple target specification>
+
+<prepare statement> ::=
+    PREPARE <SQL statement name> FROM <SQL statement variable>
+
+<SQL statement name> ::=
+      <statement name>
+    | <extended statement name>
+
+<extended statement name> ::=
+    [ <scope option> ] <simple value specification>
+
+<SQL statement variable> ::= <simple value specification>
+
+<deallocate prepared statement> ::=
+    DEALLOCATE PREPARE <SQL statement name>
+
+<describe statement> ::=
+      <describe input statement>
+    | <describe output statement>
+
+<describe input statement> ::=
+    DESCRIBE INPUT <SQL statement name> <using descriptor>
+
+<using descriptor> ::=
+    { USING | INTO } SQL DESCRIPTOR <descriptor name>
+
+<describe output statement> ::=
+    DESCRIBE [ OUTPUT ] <SQL statement name> <using descriptor>
+
+<execute statement> ::=
+    EXECUTE <SQL statement name>
+      [ <result using clause> ]
+      [ <parameter using clause> ]
+
+<result using clause> ::= <using clause>
+
+<using clause> ::=
+      <using arguments>
+    | <using descriptor>
+
+<using arguments> ::=
+    { USING | INTO } <argument> [ { <comma> <argument> }... ]
+
+<argument> ::= <target specification>
+
+<parameter using clause> ::= <using clause>
+
+<execute immediate statement> ::=
+    EXECUTE IMMEDIATE <SQL statement variable>
+
+<SQL dynamic data statement> ::=
+      <allocate cursor statement>
+    | <dynamic open statement>
+    | <dynamic fetch statement>
+    | <dynamic close statement>
+    | <dynamic delete statement: positioned>
+    | <dynamic update statement: positioned>
+
+<allocate cursor statement> ::=
+    ALLOCATE <extended cursor name> [ INSENSITIVE ]
+        [ SCROLL ] CURSOR
+      FOR <extended statement name>
+
+<extended cursor name> ::=
+    [ <scope option> ] <simple value specification>
+
+<dynamic open statement> ::=
+    OPEN <dynamic cursor name> [ <using clause> ]
+
+<dynamic cursor name> ::=
+      <cursor name>
+    | <extended cursor name>
+
+<dynamic fetch statement> ::=
+    FETCH [ [ <fetch orientation> ] FROM ] <dynamic cursor name>
+        <using clause>
+
+<dynamic close statement> ::=
+    CLOSE <dynamic cursor name>
+
+<dynamic delete statement: positioned> ::=
+    DELETE FROM <table name>
+      WHERE CURRENT OF
+          <dynamic cursor name>
+
+<dynamic update statement: positioned> ::=
+    UPDATE <table name>
+      SET <set clause>
+          [ { <comma> <set clause> }... ]
+        WHERE CURRENT OF
+            <dynamic cursor name>
+
+<SQL diagnostics statement> ::=
+    <get diagnostics statement>
+
+<get diagnostics statement> ::=
+    GET DIAGNOSTICS <sql diagnostics information>
+
+<sql diagnostics information> ::=
+      <statement information>
+    | <condition information>
+
+<statement information> ::=
+    <statement information item> [ { <comma> <statement information item> }... ]
+
+<statement information item> ::=
+    <simple target specification> <equals operator> <statement information item name>
+
+<statement information item name> ::=
+      NUMBER
+    | MORE
+    | COMMAND_FUNCTION
+    | DYNAMIC_FUNCTION
+    | ROW_COUNT
+
+<condition information> ::=
+    EXCEPTION <condition number>
+      <condition information item> [ { <comma> <condition information item> }... ]
+
+<condition number> ::= <simple value specification>
+
+<condition information item> ::=
+    <simple target specification> <equals operator> <condition information item name>
+
+<condition information item name> ::=
+      CONDITION_NUMBER
+    | RETURNED_SQLSTATE
+    | CLASS_ORIGIN
+    | SUBCLASS_ORIGIN
+    | SERVER_NAME
+    | CONNECTION_NAME
+    | CONSTRAINT_CATALOG
+    | CONSTRAINT_SCHEMA
+    | CONSTRAINT_NAME
+    | CATALOG_NAME
+    | SCHEMA_NAME
+    | TABLE_NAME
+    | COLUMN_NAME
+    | CURSOR_NAME
+    | MESSAGE_TEXT
+    | MESSAGE_LENGTH
+    | MESSAGE_OCTET_LENGTH
+
+<embedded SQL host program> ::=
+      <embedded SQL Ada program>
+    | <embedded SQL C program>
+    | <embedded SQL COBOL program>
+    | <embedded SQL Fortran program>
+    | <embedded SQL MUMPS program>
+    | <embedded SQL Pascal program>
+    | <embedded SQL PL/I program>
+
+<embedded SQL Ada program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL C program> ::=
+      !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL COBOL program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL Fortran program> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL MUMPS program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL Pascal program> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL PL/I program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL declare section> ::=
+      <embedded SQL begin declare>
+        [ <embedded character set declaration> ]
+        [ <host variable definition>... ]
+      <embedded SQL end declare>
+    | <embedded SQL MUMPS declare>
+
+<embedded SQL begin declare> ::=
+    <SQL prefix> BEGIN DECLARE SECTION
+        [ <SQL terminator> ]
+
+<SQL prefix> ::=
+      EXEC SQL
+    | <ampersand>SQL<left paren>
+
+<SQL terminator> ::=
+      END-EXEC
+    | <semicolon>
+    | <right paren>
+
+<embedded character set declaration> ::=
+    SQL NAMES ARE <character set specification>
+
+<host variable definition> ::=
+      <Ada variable definition>
+    | <C variable definition>
+    | <COBOL variable definition>
+    | <Fortran variable definition>
+    | <MUMPS variable definition>
+    | <Pascal variable definition>
+    | <PL/I variable definition>
+
+<Ada variable definition> ::=
+    <Ada host identifier> [ { <comma> <Ada host identifier> }... ] :
+    <Ada type specification> [ <Ada initial value> ]
+
+<Ada type specification> ::=
+      <Ada qualified type specification>
+    | <Ada unqualified type specification>
+
+<Ada qualified type specification> ::=
+      SQL_STANDARD.CHAR [ CHARACTER SET
+         [ IS ] <character set specification> ]
+          <left paren> 1 <double period> <length> <right paren>
+    | SQL_STANDARD.BIT
+          <left paren> 1 <double period> <length> <right paren>
+    | SQL_STANDARD.SMALLINT
+    | SQL_STANDARD.INT
+    | SQL_STANDARD.REAL
+    | SQL_STANDARD.DOUBLE_PRECISION
+    | SQL_STANDARD.SQLCODE_TYPE
+    | SQL_STANDARD.SQLSTATE_TYPE
+    | SQL_STANDARD.INDICATOR_TYPE
+
+<Ada unqualified type specification> ::=
+      CHAR
+          <left paren> 1 <double period> <length> <right paren>
+    | BIT
+          <left paren> 1 <double period> <length> <right paren>
+    | SMALLINT
+    | INT
+    | REAL
+    | DOUBLE_PRECISION
+    | SQLCODE_TYPE
+    | SQLSTATE_TYPE
+    | INDICATOR_TYPE
+
+<Ada initial value> ::=
+    <Ada assignment operator> <character representation>...
+
+<Ada assignment operator> ::= <colon><equals operator>
+
+<C variable definition> ::=
+      [ <C storage class> ]
+      [ <C class modifier> ]
+      <C variable specification>
+    <semicolon>
+
+<C storage class> ::=
+      auto
+    | extern
+    | static
+
+<C class modifier> ::= const | volatile
+
+<C variable specification> ::=
+      <C numeric variable>
+    | <C character variable>
+    | <C derived variable>
+
+<C numeric variable> ::=
+    { long | short | float | double }
+      <C host identifier> [ <C initial value> ]
+            [ { <comma> <C host identifier> [ <C initial value> ] }... ]
+
+<C initial value> ::=
+    <equals operator> <character representation>...
+
+<C character variable> ::=
+    char [ CHARACTER SET
+             [ IS ] <character set specification> ]
+      <C host identifier>
+        <C array specification> [ <C initial value> ]
+        [ { <comma> <C host identifier>
+          <C array specification>
+                 [ <C initial value> ] }... ]
+
+<C array specification> ::=
+    <left bracket> <length> <right bracket>
+
+<C derived variable> ::=
+      <C VARCHAR variable>
+    | <C bit variable>
+
+<C VARCHAR variable> ::=
+    VARCHAR [ CHARACTER SET [ IS ]
+        <character set specification> ]
+        <C host identifier>
+            <C array specification> [ <C initial value> ]
+          [ { <comma> <C host identifier>
+              <C array specification>
+                      [ <C initial value> ] }... ]
+
+<C bit variable> ::=
+    BIT <C host identifier>
+        <C array specification> [ <C initial value> ]
+      [ { <comma> <C host identifier>
+        <C array specification>
+                   [ <C initial value> ] }... ]
+
+<COBOL variable definition> ::=
+    {01|77} <COBOL host identifier> <COBOL type specification>
+      [ <character representation>... ] <period>
+
+<COBOL type specification> ::=
+      <COBOL character type>
+    | <COBOL bit type>
+    | <COBOL numeric type>
+    | <COBOL integer type>
+
+<COBOL character type> ::=
+    [ CHARACTER SET [ IS ]
+          <character set specification> ]
+    { PIC | PICTURE } [ IS ] { X [ <left paren> <length> <right paren> ] }...
+
+<COBOL bit type> ::=
+    { PIC | PICTURE } [ IS ]
+        { B [ <left paren> <length> <right paren> ] }...
+
+<COBOL numeric type> ::=
+    { PIC | PICTURE } [ IS ]
+      S <COBOL nines specification>
+    [ USAGE [ IS ] ] DISPLAY SIGN LEADING SEPARATE
+
+<COBOL nines specification> ::=
+      <COBOL nines> [ V [ <COBOL nines> ] ]
+    | V <COBOL nines>
+
+<COBOL nines> ::= { 9 [ <left paren> <length> <right paren> ] }...
+
+<COBOL integer type> ::=
+      <COBOL computational integer>
+    | <COBOL binary integer>
+
+<COBOL computational integer> ::=
+    { PIC | PICTURE } [ IS ] S<COBOL nines>
+      [ USAGE [ IS ] ] { COMP | COMPUTATIONAL }
+
+<COBOL binary integer> ::=
+    { PIC | PICTURE } [ IS ] S<COBOL nines>
+      [ USAGE [ IS ] ] BINARY
+
+<Fortran variable definition> ::=
+    <Fortran type specification>
+    <Fortran host identifier>
+        [ { <comma> <Fortran host identifier> }... ]
+
+<Fortran type specification> ::=
+      CHARACTER [ <asterisk> <length> ]
+          [ CHARACTER SET [ IS ]
+                <character set specification> ]
+    | BIT [ <asterisk> <length> ]
+    | INTEGER
+    | REAL
+    | DOUBLE PRECISION
+
+<MUMPS variable definition> ::=
+    { <MUMPS numeric variable> | <MUMPS character variable> }
+        <semicolon>
+
+<MUMPS numeric variable> ::=
+    <MUMPS type specification>
+      <MUMPS host identifier> [ { <comma> <MUMPS host identifier> }... ]
+
+<MUMPS type specification> ::=
+      INT
+    | DEC
+          [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | REAL
+
+<MUMPS character variable> ::=
+    VARCHAR <MUMPS host identifier> <MUMPS length specification>
+      [ { <comma> <MUMPS host identifier> <MUMPS length specification> }... ]
+
+<MUMPS length specification> ::=
+    <left paren> <length> <right paren>
+
+<Pascal variable definition> ::=
+    <Pascal host identifier> [ { <comma> <Pascal host identifier> }... ] <colon>
+      <Pascal type specification> <semicolon>
+
+<Pascal type specification> ::=
+      PACKED ARRAY
+          <left bracket> 1 <double period> <length> <right bracket>
+        OF CHAR
+          [ CHARACTER SET [ IS ]
+                <character set specification> ]
+    | PACKED ARRAY
+          <left bracket> 1 <double period> <length> <right bracket>
+        OF BIT
+    | INTEGER
+    | REAL
+    | CHAR [ CHARACTER SET
+                                [ IS ] <character set specification> ]
+    | BIT
+
+<PL/I variable definition> ::=
+    {DCL | DECLARE}
+        {   <PL/I host identifier>
+          | <left paren> <PL/I host identifier>
+                [ { <comma> <PL/I host identifier> }... ] <right paren> }
+    <PL/I type specification>
+    [ <character representation>... ] <semicolon>
+
+<PL/I type specification> ::=
+      { CHAR | CHARACTER } [ VARYING ]
+          <left paren><length><right paren>
+          [ CHARACTER SET
+                [ IS ] <character set specification> ]
+    | BIT [ VARYING ] <left paren><length><right paren>
+    | <PL/I type fixed decimal> <left paren> <precision>
+          [ <comma> <scale> ] <right paren>
+    | <PL/I type fixed binary> [ <left paren> <precision> <right paren> ]
+    | <PL/I type float binary> <left paren> <precision> <right paren>
+
+<PL/I type fixed decimal> ::=
+      { DEC | DECIMAL } FIXED
+    | FIXED { DEC | DECIMAL }
+
+<PL/I type fixed binary> ::=
+      { BIN | BINARY } FIXED
+    | FIXED { BIN | BINARY }
+
+<PL/I type float binary> ::=
+      { BIN | BINARY } FLOAT
+    | FLOAT { BIN | BINARY }
+
+<embedded SQL end declare> ::=
+    <SQL prefix> END DECLARE SECTION
+        [ <SQL terminator> ]
+
+<embedded SQL MUMPS declare> ::=
+    <SQL prefix>
+      BEGIN DECLARE SECTION
+        [ <embedded character set declaration> ]
+        [ <host variable definition>... ]
+      END DECLARE SECTION
+    <SQL terminator>
+
+<embedded SQL statement> ::=
+    <SQL prefix>
+      <statement or declaration>
+    [ <SQL terminator> ]
+
+<statement or declaration> ::=
+      <declare cursor>
+    | <dynamic declare cursor>
+    | <temporary table declaration>
+    | <embedded exception declaration>
+    | <SQL procedure statement>
+
+<embedded exception declaration> ::=
+    WHENEVER <condition> <condition action>
+
+<condition> ::=
+    SQLERROR | NOT FOUND
+
+<condition action> ::=
+    CONTINUE | <go to>
+
+<go to> ::=
+    { GOTO | GO TO } <goto target>
+
+<goto target> ::=
+      <host label identifier>
+    | <unsigned integer>
+    | <host PL/I label variable>
+
+<host label identifier> ::= !!<EMPHASIS>(See the Syntax Rules.)
+
+<host PL/I label variable> ::= !!<EMPHASIS>(See the Syntax Rules.)
+
+<preparable statement> ::=
+      <preparable SQL data statement>
+    | <preparable SQL schema statement>
+    | <preparable SQL transaction statement>
+    | <preparable SQL session statement>
+    | <preparable implementation-defined statement>
+
+<preparable SQL data statement> ::=
+      <delete statement: searched>
+    | <dynamic single row select statement>
+    | <insert statement>
+    | <dynamic select statement>
+    | <update statement: searched>
+    | <preparable dynamic delete statement: positioned>
+    | <preparable dynamic update statement: positioned>
+
+<dynamic single row select statement> ::= <query specification>
+
+<dynamic select statement> ::= <cursor specification>
+
+<preparable dynamic delete statement: positioned> ::=
+   DELETE [ FROM <table name> ]
+      WHERE CURRENT OF <cursor name>
+
+<preparable dynamic update statement: positioned> ::=
+   UPDATE [ <table name> ]
+      SET <set clause list>
+      WHERE CURRENT OF <cursor name>
+
+<preparable SQL schema statement> ::=
+      <SQL schema statement>
+
+<preparable SQL transaction statement> ::=
+      <SQL transaction statement>
+
+<preparable SQL session statement> ::=
+      <SQL session statement>
+
+<preparable implementation-defined statement> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<direct SQL statement> ::=
+    <directly executable statement> <semicolon>
+
+<directly executable statement> ::=
+      <direct SQL data statement>
+    | <SQL schema statement>
+    | <SQL transaction statement>
+    | <SQL connection statement>
+    | <SQL session statement>
+    | <direct implementation-defined statement>
+
+<direct SQL data statement> ::=
+      <delete statement: searched>
+    | <direct select statement: multiple rows>
+    | <insert statement>
+    | <update statement: searched>
+    | <temporary table declaration>
+
+<direct select statement: multiple rows> ::=
+    <query expression> [ <order by clause> ]
+
+<direct implementation-defined statement> ::=
+    !!<EMPHASIS>(See the Syntax Rules)
+
+<SQL object identifier> ::=
+    <SQL provenance> <SQL variant>
+
+<SQL provenance> ::= <arc1> <arc2> <arc3>
+
+<arc1> ::= iso | 1 | iso <left paren> 1 <right paren>
+
+<arc2> ::= standard | 0 | standard <left paren> 0 <right paren>
+
+<arc3> ::= 9075
+
+<SQL variant> ::= <SQL edition> <SQL conformance>
+
+<SQL edition> ::= <1987> | <1989> | <1992>
+
+<1987> ::= 0 | edition1987 <left paren> 0 <right paren>
+
+<1989> ::= <1989 base> <1989 package>
+
+<1989 base> ::= 1 | edition1989 <left paren> 1 <right paren>
+
+<1989 package> ::= <integrity no> | <integrity yes>
+
+<integrity no> ::= 0 | IntegrityNo <left paren> 0 <right paren>
+
+<integrity yes> ::= 1 | IntegrityYes <left paren> 1 <right paren>
+
+<1992> ::= 2 | edition1992 <left paren> 2 <right paren>
+
+<SQL conformance> ::= <low> | <intermediate> | <high>
+
+<low> ::= 0 | Low <left paren> 0 <right paren>
+
+<intermediate> ::= 1 | Intermediate <left paren> 1 <right paren>
+
+<high> ::= 2 | High <left paren> 2 <right paren>
+


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/classes/sql2bnf.aug92.txt
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.BasicDdlParserTest.xml
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.BasicDdlParserTest.xml	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.BasicDdlParserTest.xml	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite failures="0" time="0.162" errors="1" skipped="0" tests="5" name="org.jboss.dna.sequencer.ddl.BasicDdlParserTest">
+  <properties>
+    <property name="java.vendor" value="Sun Microsystems Inc."/>
+    <property name="env.SESSION_MANAGER" value="local/work-laptop:/tmp/.ICE-unix/5913"/>
+    <property name="localRepository" value="/home/blafond/.m2/repository"/>
+    <property name="sun.java.launcher" value="SUN_STANDARD"/>
+    <property name="sun.management.compiler" value="HotSpot Tiered Compilers"/>
+    <property name="os.name" value="Linux"/>
+    <property name="sun.boot.class.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/classes"/>
+    <property name="env.PWD" value="/home/blafond"/>
+    <property name="env.XDG_SESSION_COOKIE" value="70bef359dccaf87f474bc0d7490f06a9-1253116029.282562-1962947517"/>
+    <property name="sun.desktop" value="gnome"/>
+    <property name="env.LANG" value="en_US.UTF-8"/>
+    <property name="java.vm.specification.vendor" value="Sun Microsystems Inc."/>
+    <property name="java.runtime.version" value="1.6.0_14-b08"/>
+    <property name="env.DISPLAY" value=":0.0"/>
+    <property name="user.name" value="blafond"/>
+    <property name="env.USER" value="blafond"/>
+    <property name="env.SHELL" value="/bin/bash"/>
+    <property name="env.MOZILLA_FIVE_HOME" value="/usr/lib/xulrunner-addons"/>
+    <property name="env.DESKTOP_SESSION" value="default"/>
+    <property name="env.XDG_DATA_DIRS" value="/usr/local/share/:/usr/share/:/usr/share/gdm/"/>
+    <property name="env.NLSPATH" value="/usr/dt/lib/nls/msg/%L/%N.cat"/>
+    <property name="env.PATH" value="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"/>
+    <property name="user.language" value="en"/>
+    <property name="sun.boot.library.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386"/>
+    <property name="classworlds.conf" value="/home/blafond/Workspaces/DNA/.metadata/.plugins/org.maven.ide.eclipse/launches/m2conf7839333797857365463.tmp"/>
+    <property name="java.version" value="1.6.0_14"/>
+    <property name="user.timezone" value="US/Central"/>
+    <property name="env.DBUS_SESSION_BUS_ADDRESS" value="unix:abstract=/tmp/dbus-Cmyp7m4oLS,guid=f006087070ce2e1077eb8f884ab1087e"/>
+    <property name="sun.arch.data.model" value="32"/>
+    <property name="java.endorsed.dirs" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/endorsed"/>
+    <property name="sun.cpu.isalist" value=""/>
+    <property name="sun.jnu.encoding" value="UTF-8"/>
+    <property name="file.encoding.pkg" value="sun.io"/>
+    <property name="file.separator" value="/"/>
+    <property name="java.specification.name" value="Java Platform API Specification"/>
+    <property name="env.GNOME_DESKTOP_SESSION_ID" value="Default"/>
+    <property name="java.class.version" value="50.0"/>
+    <property name="env.GDMSESSION" value="default"/>
+    <property name="user.country" value="US"/>
+    <property name="env.GNOME_KEYRING_PID" value="5912"/>
+    <property name="java.home" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre"/>
+    <property name="java.vm.info" value="mixed mode"/>
+    <property name="env.LOGNAME" value="blafond"/>
+    <property name="os.version" value="2.6.24-24-generic"/>
+    <property name="path.separator" value=":"/>
+    <property name="java.vm.version" value="14.0-b16"/>
+    <property name="java.awt.printerjob" value="sun.print.PSPrinterJob"/>
+    <property name="env.WINDOWPATH" value="7"/>
+    <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
+    <property name="env.GDM_LANG" value="en_US.UTF-8"/>
+    <property name="user.home" value="/home/blafond"/>
+    <property name="java.specification.vendor" value="Sun Microsystems Inc."/>
+    <property name="java.library.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/java/packages/lib/i386:/lib:/usr/lib"/>
+    <property name="java.vendor.url" value="http://java.sun.com/"/>
+    <property name="env.GDM_XSERVER_LOCATION" value="local"/>
+    <property name="java.vm.vendor" value="Sun Microsystems Inc."/>
+    <property name="maven.home" value="EMBEDDED"/>
+    <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
+    <property name="java.class.path" value="/home/blafond/Programs/eclipse-SDK-3.5/plugins/org.maven.ide.components.maven_embedder_2.1.0.20080530-2300/jars/plexus-classworlds-1.2-alpha-12.jar"/>
+    <property name="env.XFILESEARCHPATH" value="/usr/dt/app-defaults/%L/Dt"/>
+    <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
+    <property name="java.vm.specification.version" value="1.0"/>
+    <property name="m2eclipse.workspace.state" value="/home/blafond/Workspaces/DNA/.metadata/.plugins/org.maven.ide.eclipse/workspacestate.properties"/>
+    <property name="sun.cpu.endian" value="little"/>
+    <property name="env.GTK_RC_FILES" value="/etc/gtk/gtkrc:/home/blafond/.gtkrc-1.2-gnome2"/>
+    <property name="sun.os.patch.level" value="unknown"/>
+    <property name="env.HOME" value="/home/blafond"/>
+    <property name="surefire.test.class.path" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target/test-classes:/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target/classes:/home/blafond/.m2/repository/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-common/0.7-SNAPSHOT/dna-common-0.7-SNAPSHOT.jar:/home/blafond/.m2/repository/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar:/home/blafond/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-graph/0.7-SNAPSHOT/dna-graph-0.7-SNAPSHOT.jar:/home/blafond/.m2/repository/joda-time/joda-time/1.4/joda-time-1.4.jar:/home/blafond/.m2/repository/com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-common/0.7-SNAPSHOT/dna-common-0.7-SNAPSHOT-tests.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-graph/!
 0.7-SNAPSHOT/dna-graph-0.7-SNAPSHOT-tests.jar:/home/blafond/.m2/repository/junit/junit/4.4/junit-4.4.jar:/home/blafond/.m2/repository/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar:/home/blafond/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar:/home/blafond/.m2/repository/org/mockito/mockito-all/1.5/mockito-all-1.5.jar:/home/blafond/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar:/home/blafond/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar:"/>
+    <property name="java.io.tmpdir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target"/>
+    <property name="env.LD_LIBRARY_PATH" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons"/>
+    <property name="java.vendor.url.bug" value="http://java.sun.com/cgi-bin/bugreport.cgi"/>
+    <property name="env.SSH_AUTH_SOCK" value="/tmp/keyring-dF941n/ssh"/>
+    <property name="java.awt.graphicsenv" value="sun.awt.X11GraphicsEnvironment"/>
+    <property name="os.arch" value="i386"/>
+    <property name="java.ext.dirs" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/ext:/usr/java/packages/lib/ext"/>
+    <property name="user.dir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl"/>
+    <property name="env.XAUTHORITY" value="/home/blafond/.Xauthority"/>
+    <property name="line.separator" value="
+"/>
+    <property name="java.vm.name" value="Java HotSpot(TM) Server VM"/>
+    <property name="basedir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl"/>
+    <property name="maven.mode.standalone" value="true"/>
+    <property name="env.USERNAME" value="blafond"/>
+    <property name="file.encoding" value="UTF-8"/>
+    <property name="env.GNOME_KEYRING_SOCKET" value="/tmp/keyring-dF941n/socket"/>
+    <property name="env.GPG_AGENT_INFO" value="/tmp/seahorse-ZO5q59/S.gpg-agent:5994:1"/>
+    <property name="java.specification.version" value="1.6"/>
+  </properties>
+  <testcase time="0.04" classname="org.jboss.dna.sequencer.ddl.BasicDdlParserTest" name="shouldParseColumnDefinition"/>
+  <testcase time="0.038" classname="org.jboss.dna.sequencer.ddl.BasicDdlParserTest" name="shouldGetTableElementString"/>
+  <testcase time="0.028" classname="org.jboss.dna.sequencer.ddl.BasicDdlParserTest" name="shouldParseCreateTable"/>
+  <testcase time="0.027" classname="org.jboss.dna.sequencer.ddl.BasicDdlParserTest" name="shouldParseCreateTableWithConstraint"/>
+  <testcase time="0.022" classname="org.jboss.dna.sequencer.ddl.BasicDdlParserTest" name="shouldParseCreateTables">
+    <error type="java.lang.NullPointerException">java.lang.NullPointerException
+	at org.jboss.dna.sequencer.ddl.BasicDdlParserTest.getFileContent(BasicDdlParserTest.java:59)
+	at org.jboss.dna.sequencer.ddl.BasicDdlParserTest.shouldParseCreateTables(BasicDdlParserTest.java:159)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
+	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
+	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
+	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
+	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
+	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
+	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
+	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
+	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
+	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
+	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
+	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
+	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
+	at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
+	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
+</error>
+    <system-out>   Getting Content for File = src/test/resources/ddl/createTables.ddl
+java.io.FileNotFoundException: src/test/resources/ddl/createTables.ddl (No such file or directory)</system-out>
+  </testcase>
+</testsuite>
\ No newline at end of file


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.BasicDdlParserTest.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.xml
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.xml	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.xml	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite failures="0" time="0.276" errors="0" skipped="0" tests="28" name="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest">
+  <properties>
+    <property name="java.vendor" value="Sun Microsystems Inc."/>
+    <property name="env.SESSION_MANAGER" value="local/work-laptop:/tmp/.ICE-unix/5913"/>
+    <property name="localRepository" value="/home/blafond/.m2/repository"/>
+    <property name="sun.java.launcher" value="SUN_STANDARD"/>
+    <property name="sun.management.compiler" value="HotSpot Tiered Compilers"/>
+    <property name="os.name" value="Linux"/>
+    <property name="sun.boot.class.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/classes"/>
+    <property name="env.PWD" value="/home/blafond"/>
+    <property name="env.XDG_SESSION_COOKIE" value="70bef359dccaf87f474bc0d7490f06a9-1253116029.282562-1962947517"/>
+    <property name="sun.desktop" value="gnome"/>
+    <property name="env.LANG" value="en_US.UTF-8"/>
+    <property name="java.vm.specification.vendor" value="Sun Microsystems Inc."/>
+    <property name="java.runtime.version" value="1.6.0_14-b08"/>
+    <property name="env.DISPLAY" value=":0.0"/>
+    <property name="user.name" value="blafond"/>
+    <property name="env.USER" value="blafond"/>
+    <property name="env.SHELL" value="/bin/bash"/>
+    <property name="env.MOZILLA_FIVE_HOME" value="/usr/lib/xulrunner-addons"/>
+    <property name="env.DESKTOP_SESSION" value="default"/>
+    <property name="env.XDG_DATA_DIRS" value="/usr/local/share/:/usr/share/:/usr/share/gdm/"/>
+    <property name="env.NLSPATH" value="/usr/dt/lib/nls/msg/%L/%N.cat"/>
+    <property name="env.PATH" value="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"/>
+    <property name="user.language" value="en"/>
+    <property name="sun.boot.library.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386"/>
+    <property name="classworlds.conf" value="/home/blafond/Workspaces/DNA/.metadata/.plugins/org.maven.ide.eclipse/launches/m2conf7839333797857365463.tmp"/>
+    <property name="java.version" value="1.6.0_14"/>
+    <property name="user.timezone" value=""/>
+    <property name="env.DBUS_SESSION_BUS_ADDRESS" value="unix:abstract=/tmp/dbus-Cmyp7m4oLS,guid=f006087070ce2e1077eb8f884ab1087e"/>
+    <property name="sun.arch.data.model" value="32"/>
+    <property name="java.endorsed.dirs" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/endorsed"/>
+    <property name="sun.cpu.isalist" value=""/>
+    <property name="sun.jnu.encoding" value="UTF-8"/>
+    <property name="file.encoding.pkg" value="sun.io"/>
+    <property name="file.separator" value="/"/>
+    <property name="java.specification.name" value="Java Platform API Specification"/>
+    <property name="env.GNOME_DESKTOP_SESSION_ID" value="Default"/>
+    <property name="java.class.version" value="50.0"/>
+    <property name="env.GDMSESSION" value="default"/>
+    <property name="user.country" value="US"/>
+    <property name="env.GNOME_KEYRING_PID" value="5912"/>
+    <property name="java.home" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre"/>
+    <property name="java.vm.info" value="mixed mode"/>
+    <property name="env.LOGNAME" value="blafond"/>
+    <property name="os.version" value="2.6.24-24-generic"/>
+    <property name="path.separator" value=":"/>
+    <property name="java.vm.version" value="14.0-b16"/>
+    <property name="java.awt.printerjob" value="sun.print.PSPrinterJob"/>
+    <property name="env.WINDOWPATH" value="7"/>
+    <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
+    <property name="env.GDM_LANG" value="en_US.UTF-8"/>
+    <property name="user.home" value="/home/blafond"/>
+    <property name="java.specification.vendor" value="Sun Microsystems Inc."/>
+    <property name="java.library.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/java/packages/lib/i386:/lib:/usr/lib"/>
+    <property name="java.vendor.url" value="http://java.sun.com/"/>
+    <property name="env.GDM_XSERVER_LOCATION" value="local"/>
+    <property name="java.vm.vendor" value="Sun Microsystems Inc."/>
+    <property name="maven.home" value="EMBEDDED"/>
+    <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
+    <property name="java.class.path" value="/home/blafond/Programs/eclipse-SDK-3.5/plugins/org.maven.ide.components.maven_embedder_2.1.0.20080530-2300/jars/plexus-classworlds-1.2-alpha-12.jar"/>
+    <property name="env.XFILESEARCHPATH" value="/usr/dt/app-defaults/%L/Dt"/>
+    <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
+    <property name="java.vm.specification.version" value="1.0"/>
+    <property name="m2eclipse.workspace.state" value="/home/blafond/Workspaces/DNA/.metadata/.plugins/org.maven.ide.eclipse/workspacestate.properties"/>
+    <property name="sun.cpu.endian" value="little"/>
+    <property name="env.GTK_RC_FILES" value="/etc/gtk/gtkrc:/home/blafond/.gtkrc-1.2-gnome2"/>
+    <property name="sun.os.patch.level" value="unknown"/>
+    <property name="env.HOME" value="/home/blafond"/>
+    <property name="surefire.test.class.path" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target/test-classes:/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target/classes:/home/blafond/.m2/repository/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-common/0.7-SNAPSHOT/dna-common-0.7-SNAPSHOT.jar:/home/blafond/.m2/repository/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar:/home/blafond/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-graph/0.7-SNAPSHOT/dna-graph-0.7-SNAPSHOT.jar:/home/blafond/.m2/repository/joda-time/joda-time/1.4/joda-time-1.4.jar:/home/blafond/.m2/repository/com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-common/0.7-SNAPSHOT/dna-common-0.7-SNAPSHOT-tests.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-graph/!
 0.7-SNAPSHOT/dna-graph-0.7-SNAPSHOT-tests.jar:/home/blafond/.m2/repository/junit/junit/4.4/junit-4.4.jar:/home/blafond/.m2/repository/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar:/home/blafond/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar:/home/blafond/.m2/repository/org/mockito/mockito-all/1.5/mockito-all-1.5.jar:/home/blafond/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar:/home/blafond/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar:"/>
+    <property name="java.io.tmpdir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target"/>
+    <property name="env.LD_LIBRARY_PATH" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons"/>
+    <property name="java.vendor.url.bug" value="http://java.sun.com/cgi-bin/bugreport.cgi"/>
+    <property name="env.SSH_AUTH_SOCK" value="/tmp/keyring-dF941n/ssh"/>
+    <property name="java.awt.graphicsenv" value="sun.awt.X11GraphicsEnvironment"/>
+    <property name="os.arch" value="i386"/>
+    <property name="java.ext.dirs" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/ext:/usr/java/packages/lib/ext"/>
+    <property name="user.dir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl"/>
+    <property name="env.XAUTHORITY" value="/home/blafond/.Xauthority"/>
+    <property name="line.separator" value="
+"/>
+    <property name="java.vm.name" value="Java HotSpot(TM) Server VM"/>
+    <property name="basedir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl"/>
+    <property name="maven.mode.standalone" value="true"/>
+    <property name="env.USERNAME" value="blafond"/>
+    <property name="file.encoding" value="UTF-8"/>
+    <property name="env.GNOME_KEYRING_SOCKET" value="/tmp/keyring-dF941n/socket"/>
+    <property name="env.GPG_AGENT_INFO" value="/tmp/seahorse-ZO5q59/S.gpg-agent:5994:1"/>
+    <property name="java.specification.version" value="1.6"/>
+  </properties>
+  <testcase time="0.028" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseBracketedInteger"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseKMGInteger"/>
+  <testcase time="0.006" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseCHAR"/>
+  <testcase time="0.006" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseCHARACTER"/>
+  <testcase time="0.006" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseCHAR_VARYING"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseCHARACTER_VARYING"/>
+  <testcase time="0.036" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseVARCHAR"/>
+  <testcase time="0.02" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseNATIONAL_CHAR"/>
+  <testcase time="0.007" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseNATIONAL_CHARACTER"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseNATIONAL_CHAR_VARYING"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseNATIONAL_CHARACTER_VARYING"/>
+  <testcase time="0.004" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseNCHAR_VARYING"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseBIT"/>
+  <testcase time="0.004" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseBITWithLength"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseBIT_VARYINGWithLength"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldNotParseXXXXXXTYPE"/>
+  <testcase time="0.004" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseINT"/>
+  <testcase time="0.004" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseINTEGER"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseSMALLINT"/>
+  <testcase time="0.009" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseNUMERIC"/>
+  <testcase time="0.007" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseDECIMAL"/>
+  <testcase time="0.006" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseDEC"/>
+  <testcase time="0.007" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseFLOAT"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseREAL"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseDOUBLE_PRECISION"/>
+  <testcase time="0.004" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseDATE"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseTIME"/>
+  <testcase time="0.005" classname="org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest" name="shouldParseTIMESTAMP"/>
+</testsuite>
\ No newline at end of file


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.xml
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.xml	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.xml	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite failures="0" time="2.197" errors="1" skipped="0" tests="2" name="org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest">
+  <properties>
+    <property name="java.vendor" value="Sun Microsystems Inc."/>
+    <property name="env.SESSION_MANAGER" value="local/work-laptop:/tmp/.ICE-unix/5913"/>
+    <property name="localRepository" value="/home/blafond/.m2/repository"/>
+    <property name="sun.java.launcher" value="SUN_STANDARD"/>
+    <property name="sun.management.compiler" value="HotSpot Tiered Compilers"/>
+    <property name="os.name" value="Linux"/>
+    <property name="sun.boot.class.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/classes"/>
+    <property name="env.PWD" value="/home/blafond"/>
+    <property name="env.XDG_SESSION_COOKIE" value="70bef359dccaf87f474bc0d7490f06a9-1253116029.282562-1962947517"/>
+    <property name="sun.desktop" value="gnome"/>
+    <property name="env.LANG" value="en_US.UTF-8"/>
+    <property name="java.vm.specification.vendor" value="Sun Microsystems Inc."/>
+    <property name="java.runtime.version" value="1.6.0_14-b08"/>
+    <property name="env.DISPLAY" value=":0.0"/>
+    <property name="user.name" value="blafond"/>
+    <property name="env.USER" value="blafond"/>
+    <property name="env.SHELL" value="/bin/bash"/>
+    <property name="env.MOZILLA_FIVE_HOME" value="/usr/lib/xulrunner-addons"/>
+    <property name="env.DESKTOP_SESSION" value="default"/>
+    <property name="env.XDG_DATA_DIRS" value="/usr/local/share/:/usr/share/:/usr/share/gdm/"/>
+    <property name="env.NLSPATH" value="/usr/dt/lib/nls/msg/%L/%N.cat"/>
+    <property name="env.PATH" value="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"/>
+    <property name="user.language" value="en"/>
+    <property name="sun.boot.library.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386"/>
+    <property name="classworlds.conf" value="/home/blafond/Workspaces/DNA/.metadata/.plugins/org.maven.ide.eclipse/launches/m2conf7839333797857365463.tmp"/>
+    <property name="java.version" value="1.6.0_14"/>
+    <property name="user.timezone" value="US/Central"/>
+    <property name="env.DBUS_SESSION_BUS_ADDRESS" value="unix:abstract=/tmp/dbus-Cmyp7m4oLS,guid=f006087070ce2e1077eb8f884ab1087e"/>
+    <property name="sun.arch.data.model" value="32"/>
+    <property name="java.endorsed.dirs" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/endorsed"/>
+    <property name="sun.cpu.isalist" value=""/>
+    <property name="sun.jnu.encoding" value="UTF-8"/>
+    <property name="file.encoding.pkg" value="sun.io"/>
+    <property name="file.separator" value="/"/>
+    <property name="java.specification.name" value="Java Platform API Specification"/>
+    <property name="env.GNOME_DESKTOP_SESSION_ID" value="Default"/>
+    <property name="java.class.version" value="50.0"/>
+    <property name="env.GDMSESSION" value="default"/>
+    <property name="user.country" value="US"/>
+    <property name="env.GNOME_KEYRING_PID" value="5912"/>
+    <property name="java.home" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre"/>
+    <property name="java.vm.info" value="mixed mode"/>
+    <property name="env.LOGNAME" value="blafond"/>
+    <property name="os.version" value="2.6.24-24-generic"/>
+    <property name="path.separator" value=":"/>
+    <property name="java.vm.version" value="14.0-b16"/>
+    <property name="java.awt.printerjob" value="sun.print.PSPrinterJob"/>
+    <property name="env.WINDOWPATH" value="7"/>
+    <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
+    <property name="env.GDM_LANG" value="en_US.UTF-8"/>
+    <property name="user.home" value="/home/blafond"/>
+    <property name="java.specification.vendor" value="Sun Microsystems Inc."/>
+    <property name="java.library.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/java/packages/lib/i386:/lib:/usr/lib"/>
+    <property name="java.vendor.url" value="http://java.sun.com/"/>
+    <property name="env.GDM_XSERVER_LOCATION" value="local"/>
+    <property name="java.vm.vendor" value="Sun Microsystems Inc."/>
+    <property name="maven.home" value="EMBEDDED"/>
+    <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
+    <property name="java.class.path" value="/home/blafond/Programs/eclipse-SDK-3.5/plugins/org.maven.ide.components.maven_embedder_2.1.0.20080530-2300/jars/plexus-classworlds-1.2-alpha-12.jar"/>
+    <property name="env.XFILESEARCHPATH" value="/usr/dt/app-defaults/%L/Dt"/>
+    <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
+    <property name="java.vm.specification.version" value="1.0"/>
+    <property name="m2eclipse.workspace.state" value="/home/blafond/Workspaces/DNA/.metadata/.plugins/org.maven.ide.eclipse/workspacestate.properties"/>
+    <property name="sun.cpu.endian" value="little"/>
+    <property name="env.GTK_RC_FILES" value="/etc/gtk/gtkrc:/home/blafond/.gtkrc-1.2-gnome2"/>
+    <property name="sun.os.patch.level" value="unknown"/>
+    <property name="env.HOME" value="/home/blafond"/>
+    <property name="surefire.test.class.path" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target/test-classes:/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target/classes:/home/blafond/.m2/repository/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-common/0.7-SNAPSHOT/dna-common-0.7-SNAPSHOT.jar:/home/blafond/.m2/repository/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar:/home/blafond/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-graph/0.7-SNAPSHOT/dna-graph-0.7-SNAPSHOT.jar:/home/blafond/.m2/repository/joda-time/joda-time/1.4/joda-time-1.4.jar:/home/blafond/.m2/repository/com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-common/0.7-SNAPSHOT/dna-common-0.7-SNAPSHOT-tests.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-graph/!
 0.7-SNAPSHOT/dna-graph-0.7-SNAPSHOT-tests.jar:/home/blafond/.m2/repository/junit/junit/4.4/junit-4.4.jar:/home/blafond/.m2/repository/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar:/home/blafond/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar:/home/blafond/.m2/repository/org/mockito/mockito-all/1.5/mockito-all-1.5.jar:/home/blafond/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar:/home/blafond/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar:"/>
+    <property name="java.io.tmpdir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target"/>
+    <property name="env.LD_LIBRARY_PATH" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons"/>
+    <property name="java.vendor.url.bug" value="http://java.sun.com/cgi-bin/bugreport.cgi"/>
+    <property name="env.SSH_AUTH_SOCK" value="/tmp/keyring-dF941n/ssh"/>
+    <property name="java.awt.graphicsenv" value="sun.awt.X11GraphicsEnvironment"/>
+    <property name="os.arch" value="i386"/>
+    <property name="java.ext.dirs" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/ext:/usr/java/packages/lib/ext"/>
+    <property name="user.dir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl"/>
+    <property name="env.XAUTHORITY" value="/home/blafond/.Xauthority"/>
+    <property name="line.separator" value="
+"/>
+    <property name="java.vm.name" value="Java HotSpot(TM) Server VM"/>
+    <property name="basedir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl"/>
+    <property name="maven.mode.standalone" value="true"/>
+    <property name="env.USERNAME" value="blafond"/>
+    <property name="file.encoding" value="UTF-8"/>
+    <property name="env.GNOME_KEYRING_SOCKET" value="/tmp/keyring-dF941n/socket"/>
+    <property name="env.GPG_AGENT_INFO" value="/tmp/seahorse-ZO5q59/S.gpg-agent:5994:1"/>
+    <property name="java.specification.version" value="1.6"/>
+  </properties>
+  <testcase time="0.024" classname="org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest" name="shouldParseDerbyTestDDL">
+    <error type="java.lang.NullPointerException">java.lang.NullPointerException
+	at org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.getFileContent(DerbyDdlParserTest.java:50)
+	at org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.shouldParseDerbyTestDDL(DerbyDdlParserTest.java:63)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
+	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
+	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
+	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
+	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
+	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
+	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
+	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
+	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
+	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
+	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
+	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
+	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
+	at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
+	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
+</error>
+    <system-out>   Getting Content for File = src/test/resources/ddl/derby_test_bugs.ddl
+java.io.FileNotFoundException: src/test/resources/ddl/derby_test_bugs.ddl (No such file or directory)</system-out>
+  </testcase>
+  <testcase time="2.171" classname="org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest" name="shouldParseDerbyDDL"/>
+</testsuite>
\ No newline at end of file


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.xml
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.xml	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.xml	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite failures="0" time="0.517" errors="1" skipped="0" tests="1" name="org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest">
+  <properties>
+    <property name="java.vendor" value="Sun Microsystems Inc."/>
+    <property name="env.SESSION_MANAGER" value="local/work-laptop:/tmp/.ICE-unix/5913"/>
+    <property name="localRepository" value="/home/blafond/.m2/repository"/>
+    <property name="sun.java.launcher" value="SUN_STANDARD"/>
+    <property name="sun.management.compiler" value="HotSpot Tiered Compilers"/>
+    <property name="os.name" value="Linux"/>
+    <property name="sun.boot.class.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/classes"/>
+    <property name="env.PWD" value="/home/blafond"/>
+    <property name="env.XDG_SESSION_COOKIE" value="70bef359dccaf87f474bc0d7490f06a9-1253116029.282562-1962947517"/>
+    <property name="sun.desktop" value="gnome"/>
+    <property name="env.LANG" value="en_US.UTF-8"/>
+    <property name="java.vm.specification.vendor" value="Sun Microsystems Inc."/>
+    <property name="java.runtime.version" value="1.6.0_14-b08"/>
+    <property name="env.DISPLAY" value=":0.0"/>
+    <property name="user.name" value="blafond"/>
+    <property name="env.USER" value="blafond"/>
+    <property name="env.SHELL" value="/bin/bash"/>
+    <property name="env.MOZILLA_FIVE_HOME" value="/usr/lib/xulrunner-addons"/>
+    <property name="env.DESKTOP_SESSION" value="default"/>
+    <property name="env.XDG_DATA_DIRS" value="/usr/local/share/:/usr/share/:/usr/share/gdm/"/>
+    <property name="env.NLSPATH" value="/usr/dt/lib/nls/msg/%L/%N.cat"/>
+    <property name="env.PATH" value="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"/>
+    <property name="user.language" value="en"/>
+    <property name="sun.boot.library.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386"/>
+    <property name="classworlds.conf" value="/home/blafond/Workspaces/DNA/.metadata/.plugins/org.maven.ide.eclipse/launches/m2conf7839333797857365463.tmp"/>
+    <property name="java.version" value="1.6.0_14"/>
+    <property name="user.timezone" value="US/Central"/>
+    <property name="env.DBUS_SESSION_BUS_ADDRESS" value="unix:abstract=/tmp/dbus-Cmyp7m4oLS,guid=f006087070ce2e1077eb8f884ab1087e"/>
+    <property name="sun.arch.data.model" value="32"/>
+    <property name="java.endorsed.dirs" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/endorsed"/>
+    <property name="sun.cpu.isalist" value=""/>
+    <property name="sun.jnu.encoding" value="UTF-8"/>
+    <property name="file.encoding.pkg" value="sun.io"/>
+    <property name="file.separator" value="/"/>
+    <property name="java.specification.name" value="Java Platform API Specification"/>
+    <property name="env.GNOME_DESKTOP_SESSION_ID" value="Default"/>
+    <property name="java.class.version" value="50.0"/>
+    <property name="env.GDMSESSION" value="default"/>
+    <property name="user.country" value="US"/>
+    <property name="env.GNOME_KEYRING_PID" value="5912"/>
+    <property name="java.home" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre"/>
+    <property name="java.vm.info" value="mixed mode"/>
+    <property name="env.LOGNAME" value="blafond"/>
+    <property name="os.version" value="2.6.24-24-generic"/>
+    <property name="path.separator" value=":"/>
+    <property name="java.vm.version" value="14.0-b16"/>
+    <property name="java.awt.printerjob" value="sun.print.PSPrinterJob"/>
+    <property name="env.WINDOWPATH" value="7"/>
+    <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
+    <property name="env.GDM_LANG" value="en_US.UTF-8"/>
+    <property name="user.home" value="/home/blafond"/>
+    <property name="java.specification.vendor" value="Sun Microsystems Inc."/>
+    <property name="java.library.path" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/java/packages/lib/i386:/lib:/usr/lib"/>
+    <property name="java.vendor.url" value="http://java.sun.com/"/>
+    <property name="env.GDM_XSERVER_LOCATION" value="local"/>
+    <property name="java.vm.vendor" value="Sun Microsystems Inc."/>
+    <property name="maven.home" value="EMBEDDED"/>
+    <property name="java.runtime.name" value="Java(TM) SE Runtime Environment"/>
+    <property name="java.class.path" value="/home/blafond/Programs/eclipse-SDK-3.5/plugins/org.maven.ide.components.maven_embedder_2.1.0.20080530-2300/jars/plexus-classworlds-1.2-alpha-12.jar"/>
+    <property name="env.XFILESEARCHPATH" value="/usr/dt/app-defaults/%L/Dt"/>
+    <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
+    <property name="java.vm.specification.version" value="1.0"/>
+    <property name="m2eclipse.workspace.state" value="/home/blafond/Workspaces/DNA/.metadata/.plugins/org.maven.ide.eclipse/workspacestate.properties"/>
+    <property name="sun.cpu.endian" value="little"/>
+    <property name="env.GTK_RC_FILES" value="/etc/gtk/gtkrc:/home/blafond/.gtkrc-1.2-gnome2"/>
+    <property name="sun.os.patch.level" value="unknown"/>
+    <property name="env.HOME" value="/home/blafond"/>
+    <property name="surefire.test.class.path" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target/test-classes:/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target/classes:/home/blafond/.m2/repository/hsqldb/hsqldb/1.8.0.2/hsqldb-1.8.0.2.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-common/0.7-SNAPSHOT/dna-common-0.7-SNAPSHOT.jar:/home/blafond/.m2/repository/org/slf4j/slf4j-api/1.5.8/slf4j-api-1.5.8.jar:/home/blafond/.m2/repository/net/jcip/jcip-annotations/1.0/jcip-annotations-1.0.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-graph/0.7-SNAPSHOT/dna-graph-0.7-SNAPSHOT.jar:/home/blafond/.m2/repository/joda-time/joda-time/1.4/joda-time-1.4.jar:/home/blafond/.m2/repository/com/google/code/google-collections/google-collect/snapshot-20080530/google-collect-snapshot-20080530.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-common/0.7-SNAPSHOT/dna-common-0.7-SNAPSHOT-tests.jar:/home/blafond/.m2/repository/org/jboss/dna/dna-graph/!
 0.7-SNAPSHOT/dna-graph-0.7-SNAPSHOT-tests.jar:/home/blafond/.m2/repository/junit/junit/4.4/junit-4.4.jar:/home/blafond/.m2/repository/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar:/home/blafond/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar:/home/blafond/.m2/repository/org/mockito/mockito-all/1.5/mockito-all-1.5.jar:/home/blafond/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar:/home/blafond/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar:"/>
+    <property name="java.io.tmpdir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl/target"/>
+    <property name="env.LD_LIBRARY_PATH" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.14/jre/../lib/i386:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons:/usr/lib/xulrunner-addons"/>
+    <property name="java.vendor.url.bug" value="http://java.sun.com/cgi-bin/bugreport.cgi"/>
+    <property name="env.SSH_AUTH_SOCK" value="/tmp/keyring-dF941n/ssh"/>
+    <property name="java.awt.graphicsenv" value="sun.awt.X11GraphicsEnvironment"/>
+    <property name="os.arch" value="i386"/>
+    <property name="java.ext.dirs" value="/usr/lib/jvm/java-6-sun-1.6.0.14/jre/lib/ext:/usr/java/packages/lib/ext"/>
+    <property name="user.dir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl"/>
+    <property name="env.XAUTHORITY" value="/home/blafond/.Xauthority"/>
+    <property name="line.separator" value="
+"/>
+    <property name="java.vm.name" value="Java HotSpot(TM) Server VM"/>
+    <property name="basedir" value="/home/blafond/Workspaces/DNA/dna/extensions/dna-sequencer-ddl"/>
+    <property name="maven.mode.standalone" value="true"/>
+    <property name="env.USERNAME" value="blafond"/>
+    <property name="file.encoding" value="UTF-8"/>
+    <property name="env.GNOME_KEYRING_SOCKET" value="/tmp/keyring-dF941n/socket"/>
+    <property name="env.GPG_AGENT_INFO" value="/tmp/seahorse-ZO5q59/S.gpg-agent:5994:1"/>
+    <property name="java.specification.version" value="1.6"/>
+  </properties>
+  <testcase time="0.514" classname="org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest" name="shouldParseGFM_PhysicalDDL">
+    <error type="java.lang.NullPointerException">java.lang.NullPointerException
+	at org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.getFileContent(OracleDdlParserTest.java:50)
+	at org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.shouldParseGFM_PhysicalDDL(OracleDdlParserTest.java:83)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
+	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
+	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
+	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
+	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
+	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
+	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
+	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
+	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
+	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
+	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
+	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
+	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
+	at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
+	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
+</error>
+    <system-out>   Getting Content for File = src/test/resources/ddl/GFM_Physical.ddl
+java.io.FileNotFoundException: src/test/resources/ddl/GFM_Physical.ddl (No such file or directory)</system-out>
+  </testcase>
+</testsuite>
\ No newline at end of file


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/TEST-org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.BasicDdlParserTest.txt
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.BasicDdlParserTest.txt	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.BasicDdlParserTest.txt	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,35 @@
+-------------------------------------------------------------------------------
+Test set: org.jboss.dna.sequencer.ddl.BasicDdlParserTest
+-------------------------------------------------------------------------------
+Tests run: 5, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.166 sec <<< FAILURE!
+shouldParseCreateTables(org.jboss.dna.sequencer.ddl.BasicDdlParserTest)  Time elapsed: 0.023 sec  <<< ERROR!
+java.lang.NullPointerException
+	at org.jboss.dna.sequencer.ddl.BasicDdlParserTest.getFileContent(BasicDdlParserTest.java:59)
+	at org.jboss.dna.sequencer.ddl.BasicDdlParserTest.shouldParseCreateTables(BasicDdlParserTest.java:159)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
+	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
+	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
+	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
+	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
+	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
+	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
+	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
+	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
+	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
+	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
+	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
+	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
+	at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
+	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
+


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.BasicDdlParserTest.txt
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.txt
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.txt	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.txt	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,4 @@
+-------------------------------------------------------------------------------
+Test set: org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest
+-------------------------------------------------------------------------------
+Tests run: 28, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.286 sec


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.datatype.DataTypeParserTest.txt
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.txt
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.txt	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.txt	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,35 @@
+-------------------------------------------------------------------------------
+Test set: org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest
+-------------------------------------------------------------------------------
+Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.2 sec <<< FAILURE!
+shouldParseDerbyTestDDL(org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest)  Time elapsed: 0.024 sec  <<< ERROR!
+java.lang.NullPointerException
+	at org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.getFileContent(DerbyDdlParserTest.java:50)
+	at org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.shouldParseDerbyTestDDL(DerbyDdlParserTest.java:63)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
+	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
+	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
+	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
+	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
+	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
+	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
+	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
+	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
+	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
+	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
+	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
+	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
+	at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
+	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
+


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.DerbyDdlParserTest.txt
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.txt
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.txt	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.txt	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,35 @@
+-------------------------------------------------------------------------------
+Test set: org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest
+-------------------------------------------------------------------------------
+Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.534 sec <<< FAILURE!
+shouldParseGFM_PhysicalDDL(org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest)  Time elapsed: 0.515 sec  <<< ERROR!
+java.lang.NullPointerException
+	at org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.getFileContent(OracleDdlParserTest.java:50)
+	at org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.shouldParseGFM_PhysicalDDL(OracleDdlParserTest.java:83)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
+	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
+	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
+	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
+	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
+	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
+	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
+	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
+	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
+	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
+	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
+	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
+	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
+	at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
+	at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338)
+	at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997)
+


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/surefire-reports/org.jboss.dna.sequencer.ddl.dialect.OracleDdlParserTest.txt
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/datatype/DataTypeParserTest.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/datatype/DataTypeParserTest.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParserTest.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/dialect/DerbyDdlParserTest.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/dialect/OracleDdlParserTest.class
===================================================================
(Binary files differ)


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/org/jboss/dna/sequencer/ddl/dialect/OracleDdlParserTest.class
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/sql2bnf.aug92.txt
===================================================================
--- branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/sql2bnf.aug92.txt	                        (rev 0)
+++ branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/sql2bnf.aug92.txt	2009-10-02 16:13:40 UTC (rev 1280)
@@ -0,0 +1,2594 @@
+This file contains a depth-first tree traversal of the BNF
+for the  language done at about 27-AUG-1992 11:03:41.64.
+The specific version of the BNF included here is:  ANSI-only, SQL2-only.
+
+
+<SQL terminal character> ::=
+      <SQL language character>
+    | <SQL embedded language character>
+
+<SQL language character> ::=
+      <simple Latin letter>
+    | <digit>
+    | <SQL special character>
+
+<simple Latin letter> ::=
+      <simple Latin upper case letter>
+    | <simple Latin lower case letter>
+
+<simple Latin upper case letter> ::=
+          A | B | C | D | E | F | G | H | I | J | K | L | M | N | O
+    | P | Q | R | S | T | U | V | W | X | Y | Z
+
+<simple Latin lower case letter> ::=
+          a | b | c | d | e | f | g | h | i | j | k | l | m | n | o
+    | p | q | r | s | t | u | v | w | x | y | z
+
+<digit> ::=
+    0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
+
+<SQL special character> ::=
+      <space>
+    | <double quote>
+    | <percent>
+    | <ampersand>
+    | <quote>
+    | <left paren>
+    | <right paren>
+    | <asterisk>
+    | <plus sign>
+    | <comma>
+    | <minus sign>
+    | <period>
+    | <solidus>
+    | <colon>
+    | <semicolon>
+    | <less than operator>
+    | <equals operator>
+    | <greater than operator>
+    | <question mark>
+    | <underscore>
+    | <vertical bar>
+
+<space> ::= !! <EMPHASIS>(space character in character set in use)
+
+<double quote> ::= "
+
+<percent> ::= %
+
+<ampersand> ::= &
+
+<quote> ::= '
+
+<left paren> ::= (
+
+<right paren> ::= )
+
+<asterisk> ::= *
+
+<plus sign> ::= +
+
+<comma> ::= ,
+
+<minus sign> ::= -
+
+<period> ::= .
+
+<solidus> ::= /
+
+<colon> ::= :
+
+<semicolon> ::= ;
+
+<less than operator> ::= <
+
+<equals operator> ::= =
+
+<greater than operator> ::= >
+
+<question mark> ::= ?
+
+<underscore> ::= _
+
+<vertical bar> ::= |
+
+<SQL embedded language character> ::=
+      <left bracket>
+    | <right bracket>
+
+<left bracket> ::= [
+
+<right bracket> ::= ]
+
+<token> ::=
+      <nondelimiter token>
+    | <delimiter token>
+
+<nondelimiter token> ::=
+      <regular identifier>
+    | <key word>
+    | <unsigned numeric literal>
+    | <national character string literal>
+    | <bit string literal>
+    | <hex string literal>
+
+<regular identifier> ::= <identifier body>
+
+<identifier body> ::=
+    <identifier start> [ { <underscore> | <identifier part> }... ]
+
+<identifier start> ::= <EMPHASIS>(!! See the Syntax Rules)
+
+<identifier part> ::=
+      <identifier start>
+    | <digit>
+
+<key word> ::=
+      <reserved word>
+    | <non-reserved word>
+
+<reserved word> ::=
+      ABSOLUTE | ACTION | ADD | ALL
+    | ALLOCATE | ALTER | AND
+    | ANY | ARE
+    | AS | ASC
+    | ASSERTION | AT
+    | AUTHORIZATION | AVG
+    | BEGIN | BETWEEN | BIT | BIT_LENGTH
+    | BOTH | BY
+    | CASCADE | CASCADED | CASE | CAST
+    | CATALOG
+    | CHAR | CHARACTER | CHAR_LENGTH
+    | CHARACTER_LENGTH | CHECK | CLOSE | COALESCE
+    | COLLATE | COLLATION
+    | COLUMN | COMMIT
+    | CONNECT
+    | CONNECTION | CONSTRAINT
+    | CONSTRAINTS | CONTINUE
+    | CONVERT | CORRESPONDING | COUNT | CREATE | CROSS
+    | CURRENT
+    | CURRENT_DATE | CURRENT_TIME
+    | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR
+    | DATE | DAY | DEALLOCATE | DEC
+    | DECIMAL | DECLARE | DEFAULT | DEFERRABLE
+    | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR
+    | DIAGNOSTICS
+    | DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP
+    | ELSE | END | END-EXEC | ESCAPE
+    | EXCEPT | EXCEPTION
+    | EXEC | EXECUTE | EXISTS
+    | EXTERNAL | EXTRACT
+    | FALSE | FETCH | FIRST | FLOAT | FOR
+    | FOREIGN | FOUND | FROM | FULL
+    | GET | GLOBAL | GO | GOTO
+    | GRANT | GROUP
+    | HAVING | HOUR
+    | IDENTITY | IMMEDIATE | IN | INDICATOR
+    | INITIALLY | INNER | INPUT
+    | INSENSITIVE | INSERT | INT | INTEGER | INTERSECT
+    | INTERVAL | INTO | IS
+    | ISOLATION
+    | JOIN
+    | KEY
+    | LANGUAGE | LAST | LEADING | LEFT
+    | LEVEL | LIKE | LOCAL | LOWER
+    | MATCH | MAX | MIN | MINUTE | MODULE
+    | MONTH
+    | NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO
+    | NOT | NULL
+    | NULLIF | NUMERIC
+    | OCTET_LENGTH | OF
+    | ON | ONLY | OPEN | OPTION | OR
+    | ORDER | OUTER
+    | OUTPUT | OVERLAPS
+    | PAD | PARTIAL | POSITION | PRECISION | PREPARE
+    | PRESERVE | PRIMARY
+    | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
+    | READ | REAL | REFERENCES | RELATIVE | RESTRICT
+    | REVOKE | RIGHT
+    | ROLLBACK | ROWS
+    | SCHEMA | SCROLL | SECOND | SECTION
+    | SELECT
+    | SESSION | SESSION_USER | SET
+    | SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE
+    | SQLERROR | SQLSTATE
+    | SUBSTRING | SUM | SYSTEM_USER
+    | TABLE | TEMPORARY
+    | THEN | TIME | TIMESTAMP
+    | TIMEZONE_HOUR | TIMEZONE_MINUTE
+    | TO | TRAILING | TRANSACTION
+    | TRANSLATE | TRANSLATION | TRIM | TRUE
+    | UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE
+    | USER | USING
+    | VALUE | VALUES | VARCHAR | VARYING | VIEW
+    | WHEN | WHENEVER | WHERE | WITH | WORK | WRITE
+    | YEAR
+    | ZONE
+
+<non-reserved word> ::=
+    
+      ADA
+    | C | CATALOG_NAME
+    | CHARACTER_SET_CATALOG | CHARACTER_SET_NAME
+    | CHARACTER_SET_SCHEMA | CLASS_ORIGIN | COBOL | COLLATION_CATALOG
+    | COLLATION_NAME | COLLATION_SCHEMA | COLUMN_NAME | COMMAND_FUNCTION
+    | COMMITTED
+    | CONDITION_NUMBER | CONNECTION_NAME | CONSTRAINT_CATALOG | CONSTRAINT_NAME
+    | CONSTRAINT_SCHEMA | CURSOR_NAME
+    | DATA | DATETIME_INTERVAL_CODE
+    | DATETIME_INTERVAL_PRECISION | DYNAMIC_FUNCTION
+    | FORTRAN
+    | LENGTH
+    | MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE | MUMPS
+    | NAME | NULLABLE | NUMBER
+    | PASCAL | PLI
+    | REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE
+    | ROW_COUNT
+    | SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
+    | TABLE_NAME | TYPE
+    | UNCOMMITTED | UNNAMED
+
+<unsigned numeric literal> ::=
+      <exact numeric literal>
+    | <approximate numeric literal>
+
+<exact numeric literal> ::=
+      <unsigned integer> [ <period> [ <unsigned integer> ] ]
+    | <period> <unsigned integer>
+
+<unsigned integer> ::= <digit>...
+
+<approximate numeric literal> ::= <mantissa> E <exponent>
+
+<mantissa> ::= <exact numeric literal>
+
+<exponent> ::= <signed integer>
+
+<signed integer> ::= [ <sign> ] <unsigned integer>
+
+<sign> ::= <plus sign> | <minus sign>
+
+<national character string literal> ::=
+    N <quote> [ <character representation>... ] <quote>
+      [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]
+
+<character representation> ::=
+      <nonquote character>
+    | <quote symbol>
+
+<nonquote character> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<quote symbol> ::= <quote><quote>
+
+<separator> ::= { <comment> | <space> | <newline> }...
+
+<comment> ::=
+    <comment introducer> [ <comment character>... ] <newline>
+
+<comment introducer> ::= <minus sign><minus sign>[<minus sign>...]
+
+<comment character> ::=
+      <nonquote character>
+    | <quote>
+
+<newline> ::= !! <EMPHASIS>(implementation-defined end-of-line indicator)
+
+<bit string literal> ::=
+    B <quote> [ <bit>... ] <quote>
+      [ { <separator>... <quote> [ <bit>... ] <quote> }... ]
+
+<bit> ::= 0 | 1
+
+<hex string literal> ::=
+    X <quote> [ <hexit>... ] <quote>
+      [ { <separator>... <quote> [ <hexit>... ] <quote> }... ]
+
+<hexit> ::= <digit> | A | B | C | D | E | F | a | b | c | d | e | f
+
+<delimiter token> ::=
+      <character string literal>
+    | <date string>
+    | <time string>
+    | <timestamp string>
+    | <interval string>
+    | <delimited identifier>
+    | <SQL special character>
+    | <not equals operator>
+    | <greater than or equals operator>
+    | <less than or equals operator>
+    | <concatenation operator>
+    | <double period>
+    | <left bracket>
+    | <right bracket>
+
+<character string literal> ::=
+    [ <introducer><character set specification> ]
+    <quote> [ <character representation>... ] <quote>
+      [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]
+
+<introducer> ::= <underscore>
+
+<character set specification> ::=
+      <standard character repertoire name>
+    | <implementation-defined character repertoire name>
+    | <user-defined character repertoire name>
+    | <standard universal character form-of-use name>
+    | <implementation-defined universal character form-of-use name>
+
+<standard character repertoire name> ::= <character set name>
+
+<character set name> ::= [ <schema name> <period> ]
+      <SQL language identifier>
+
+<schema name> ::=
+    [ <catalog name> <period> ] <unqualified schema name>
+
+<catalog name> ::= <identifier>
+
+<identifier> ::=
+    [ <introducer><character set specification> ] <actual identifier>
+
+<actual identifier> ::=
+      <regular identifier>
+    | <delimited identifier>
+
+<delimited identifier> ::=
+    <double quote> <delimited identifier body> <double quote>
+
+<delimited identifier body> ::= <delimited identifier part>...
+
+<delimited identifier part> ::=
+      <nondoublequote character>
+    | <doublequote symbol>
+
+<nondoublequote character> ::= <EMPHASIS>(!! See the Syntax Rules)
+
+<doublequote symbol> ::= <double quote><double quote>
+
+<unqualified schema name> ::= <identifier>
+
+<SQL language identifier> ::=
+    <SQL language identifier start>
+       [ { <underscore> | <SQL language identifier part> }... ]
+
+<SQL language identifier start> ::= <simple Latin letter>
+
+<SQL language identifier part> ::=
+      <simple Latin letter>
+    | <digit>
+
+<implementation-defined character repertoire name> ::=
+    <character set name>
+
+<user-defined character repertoire name> ::= <character set name>
+
+<standard universal character form-of-use name> ::=
+    <character set name>
+
+<implementation-defined universal character form-of-use name> ::=
+    <character set name>
+
+<date string> ::=
+    <quote> <date value> <quote>
+
+<date value> ::=
+    <years value> <minus sign> <months value>
+        <minus sign> <days value>
+
+<years value> ::= <datetime value>
+
+<datetime value> ::= <unsigned integer>
+
+<months value> ::= <datetime value>
+
+<days value> ::= <datetime value>
+
+<time string> ::=
+    <quote> <time value> [ <time zone interval> ] <quote>
+
+<time value> ::=
+    <hours value> <colon> <minutes value> <colon> <seconds value>
+
+<hours value> ::= <datetime value>
+
+<minutes value> ::= <datetime value>
+
+<seconds value> ::=
+      <seconds integer value> [ <period> [ <seconds fraction> ] ]
+
+<seconds integer value> ::= <unsigned integer>
+
+<seconds fraction> ::= <unsigned integer>
+
+<time zone interval> ::=
+    <sign> <hours value> <colon> <minutes value>
+
+<timestamp string> ::=
+    <quote> <date value> <space> <time value>
+        [ <time zone interval> ] <quote>
+
+<interval string> ::=
+    <quote> { <year-month literal> | <day-time literal> } <quote>
+
+<year-month literal> ::=
+      <years value>
+    | [ <years value> <minus sign> ] <months value>
+
+<day-time literal> ::=
+      <day-time interval>
+    | <time interval>
+
+<day-time interval> ::=
+    <days value>
+      [ <space> <hours value> [ <colon> <minutes value>
+        [ <colon> <seconds value> ] ] ]
+
+<time interval> ::=
+      <hours value> [ <colon> <minutes value> [ <colon> <seconds value> ] ]
+    | <minutes value> [ <colon> <seconds value> ]
+    | <seconds value>
+
+<not equals operator> ::= <>
+
+<greater than or equals operator> ::= >=
+
+<less than or equals operator> ::= <=
+
+<concatenation operator> ::= ||
+
+<double period> ::= ..
+
+<module> ::=
+    <module name clause>
+    <language clause>
+    <module authorization clause>
+    [ <temporary table declaration>... ]
+    <module contents>...
+
+<module name clause> ::=
+    MODULE [ <module name> ]
+      [ <module character set specification> ]
+
+<module name> ::= <identifier>
+
+<module character set specification> ::=
+    NAMES ARE <character set specification>
+
+<language clause> ::=
+    LANGUAGE <language name>
+
+<language name> ::=
+    ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI
+
+<module authorization clause> ::=
+      SCHEMA <schema name>
+    | AUTHORIZATION <module authorization identifier>
+    | SCHEMA <schema name>
+          AUTHORIZATION <module authorization identifier>
+
+<module authorization identifier> ::=
+    <authorization identifier>
+
+<authorization identifier> ::= <identifier>
+
+<temporary table declaration> ::=
+    DECLARE LOCAL TEMPORARY TABLE
+        <qualified local table name>
+      <table element list>
+      [ ON COMMIT { PRESERVE | DELETE } ROWS ]
+
+<qualified local table name> ::=
+    MODULE <period> <local table name>
+
+<local table name> ::= <qualified identifier>
+
+<qualified identifier> ::= <identifier>
+
+<table element list> ::=
+      <left paren> <table element> [ { <comma> <table element> }... ] <right paren>
+
+<table element> ::=
+      <column definition>
+    | <table constraint definition>
+
+<column definition> ::=
+    <column name> { <data type> | <domain name> }
+    [ <default clause> ]
+    [ <column constraint definition>... ]
+    [ <collate clause> ]
+
+<column name> ::= <identifier>
+
+<data type> ::=
+      <character string type>
+           [ CHARACTER SET <character set specification> ]
+    | <national character string type>
+    | <bit string type>
+    | <numeric type>
+    | <datetime type>
+    | <interval type>
+
+<character string type> ::=
+      CHARACTER [ <left paren> <length> <right paren> ]
+    | CHAR [ <left paren> <length> <right paren> ]
+    | CHARACTER VARYING <left paren> <length> <right paren>
+    | CHAR VARYING <left paren> <length> <right paren>
+    | VARCHAR <left paren> <length> <right paren>
+
+<length> ::= <unsigned integer>
+
+<national character string type> ::=
+      NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
+    | NATIONAL CHAR [ <left paren> <length> <right paren> ]
+    | NCHAR [ <left paren> <length> <right paren> ]
+    | NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
+    | NATIONAL CHAR VARYING <left paren> <length> <right paren>
+    | NCHAR VARYING <left paren> <length> <right paren>
+
+<bit string type> ::=
+      BIT [ <left paren> <length> <right paren> ]
+    | BIT VARYING <left paren> <length> <right paren>
+
+<numeric type> ::=
+      <exact numeric type>
+    | <approximate numeric type>
+
+<exact numeric type> ::=
+      NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | INTEGER
+    | INT
+    | SMALLINT
+
+<precision> ::= <unsigned integer>
+
+<scale> ::= <unsigned integer>
+
+<approximate numeric type> ::=
+      FLOAT [ <left paren> <precision> <right paren> ]
+    | REAL
+    | DOUBLE PRECISION
+
+<datetime type> ::=
+      DATE
+    | TIME [ <left paren> <time precision> <right paren> ]
+          [ WITH TIME ZONE ]
+    | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
+          [ WITH TIME ZONE ]
+
+<time precision> ::= <time fractional seconds precision>
+
+<time fractional seconds precision> ::= <unsigned integer>
+
+<timestamp precision> ::= <time fractional seconds precision>
+
+<interval type> ::= INTERVAL <interval qualifier>
+
+<interval qualifier> ::=
+      <start field> TO <end field>
+    | <single datetime field>
+
+<start field> ::=
+    <non-second datetime field>
+        [ <left paren> <interval leading field precision> <right paren> ]
+
+<non-second datetime field> ::= YEAR | MONTH | DAY | HOUR
+    | MINUTE
+
+<interval leading field precision> ::= <unsigned integer>
+
+<end field> ::=
+      <non-second datetime field>
+    | SECOND [ <left paren> <interval fractional seconds precision> <right paren> ]
+
+<interval fractional seconds precision> ::= <unsigned integer>
+
+<single datetime field> ::=
+      <non-second datetime field>
+          [ <left paren> <interval leading field precision> <right paren> ]
+    | SECOND [ <left paren> <interval leading field precision>
+          [ <comma> <interval fractional seconds precision> ] <right paren> ]
+
+<domain name> ::= <qualified name>
+
+<qualified name> ::=
+    [ <schema name> <period> ] <qualified identifier>
+
+<default clause> ::=
+      DEFAULT <default option>
+
+<default option> ::=
+      <literal>
+    | <datetime value function>
+    | USER
+    | CURRENT_USER
+    | SESSION_USER
+    | SYSTEM_USER
+    | NULL
+
+<literal> ::=
+      <signed numeric literal>
+    | <general literal>
+
+<signed numeric literal> ::=
+    [ <sign> ] <unsigned numeric literal>
+
+<general literal> ::=
+      <character string literal>
+    | <national character string literal>
+    | <bit string literal>
+    | <hex string literal>
+    | <datetime literal>
+    | <interval literal>
+
+<datetime literal> ::=
+      <date literal>
+    | <time literal>
+    | <timestamp literal>
+
+<date literal> ::=
+    DATE <date string>
+
+<time literal> ::=
+    TIME <time string>
+
+<timestamp literal> ::=
+    TIMESTAMP <timestamp string>
+
+<interval literal> ::=
+    INTERVAL [ <sign> ] <interval string> <interval qualifier>
+
+<datetime value function> ::=
+      <current date value function>
+    | <current time value function>
+    | <current timestamp value function>
+
+<current date value function> ::= CURRENT_DATE
+
+<current time value function> ::=
+      CURRENT_TIME [ <left paren> <time precision> <right paren> ]
+
+<current timestamp value function> ::=
+      CURRENT_TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
+
+<column constraint definition> ::=
+    [ <constraint name definition> ]
+    <column constraint>
+      [ <constraint attributes> ]
+
+<constraint name definition> ::= CONSTRAINT <constraint name>
+
+<constraint name> ::= <qualified name>
+
+<column constraint> ::=
+      NOT NULL
+    | <unique specification>
+    | <references specification>
+    | <check constraint definition>
+
+<unique specification> ::=
+    UNIQUE | PRIMARY KEY
+
+<references specification> ::=
+    REFERENCES <referenced table and columns>
+      [ MATCH <match type> ]
+      [ <referential triggered action> ]
+
+<referenced table and columns> ::=
+     <table name> [ <left paren> <reference column list> <right paren> ]
+
+<table name> ::=
+      <qualified name>
+    | <qualified local table name>
+
+<reference column list> ::= <column name list>
+
+<column name list> ::=
+    <column name> [ { <comma> <column name> }... ]
+
+<match type> ::=
+      FULL
+    | PARTIAL
+
+<referential triggered action> ::=
+      <update rule> [ <delete rule> ]
+    | <delete rule> [ <update rule> ]
+
+<update rule> ::= ON UPDATE <referential action>
+
+<referential action> ::=
+      CASCADE
+    | SET NULL
+    | SET DEFAULT
+    | NO ACTION
+
+<delete rule> ::= ON DELETE <referential action>
+
+<check constraint definition> ::=
+    CHECK
+        <left paren> <search condition> <right paren>
+
+<search condition> ::=
+      <boolean term>
+    | <search condition> OR <boolean term>
+
+<boolean term> ::=
+      <boolean factor>
+    | <boolean term> AND <boolean factor>
+
+<boolean factor> ::=
+    [ NOT ] <boolean test>
+
+<boolean test> ::=
+    <boolean primary> [ IS [ NOT ]
+          <truth value> ]
+
+<boolean primary> ::=
+      <predicate>
+    | <left paren> <search condition> <right paren>
+
+<predicate> ::=
+      <comparison predicate>
+    | <between predicate>
+    | <in predicate>
+    | <like predicate>
+    | <null predicate>
+    | <quantified comparison predicate>
+    | <exists predicate>
+    | <unique predicate>
+    | <match predicate>
+    | <overlaps predicate>
+
+<comparison predicate> ::=
+    <row value constructor> <comp op>
+        <row value constructor>
+
+<row value constructor> ::=
+       <row value constructor element>
+    | <left paren> <row value constructor list> <right paren>
+    | <row subquery>
+
+<row value constructor element> ::=
+      <value expression>
+    | <null specification>
+    | <default specification>
+
+<value expression> ::=
+      <numeric value expression>
+    | <string value expression>
+    | <datetime value expression>
+    | <interval value expression>
+
+<numeric value expression> ::=
+      <term>
+    | <numeric value expression> <plus sign> <term>
+    | <numeric value expression> <minus sign> <term>
+
+<term> ::=
+      <factor>
+    | <term> <asterisk> <factor>
+    | <term> <solidus> <factor>
+
+<factor> ::=
+    [ <sign> ] <numeric primary>
+
+<numeric primary> ::=
+      <value expression primary>
+    | <numeric value function>
+
+<value expression primary> ::=
+      <unsigned value specification>
+    | <column reference>
+    | <set function specification>
+    | <scalar subquery>
+    | <case expression>
+    | <left paren> <value expression> <right paren>
+    | <cast specification>
+
+<unsigned value specification> ::=
+      <unsigned literal>
+    | <general value specification>
+
+<unsigned literal> ::=
+      <unsigned numeric literal>
+    | <general literal>
+
+<general value specification> ::=
+      <parameter specification>
+    | <dynamic parameter specification>
+    | <variable specification>
+    | USER
+    | CURRENT_USER
+    | SESSION_USER
+    | SYSTEM_USER
+    | VALUE
+
+<parameter specification> ::=
+    <parameter name> [ <indicator parameter> ]
+
+<parameter name> ::= <colon> <identifier>
+
+<indicator parameter> ::=
+    [ INDICATOR ] <parameter name>
+
+<dynamic parameter specification> ::= <question mark>
+
+<variable specification> ::=
+    <embedded variable name> [ <indicator variable> ]
+
+<embedded variable name> ::=
+    <colon><host identifier>
+
+<host identifier> ::=
+      <Ada host identifier>
+    | <C host identifier>
+    | <COBOL host identifier>
+    | <Fortran host identifier>
+    | <MUMPS host identifier>
+    | <Pascal host identifier>
+    | <PL/I host identifier>
+
+<Ada host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<C host identifier> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<COBOL host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<Fortran host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<MUMPS host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<Pascal host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<PL/I host identifier> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<indicator variable> ::=
+    [ INDICATOR ] <embedded variable name>
+
+<column reference> ::= [ <qualifier> <period> ] <column name>
+
+<qualifier> ::=
+      <table name>
+    | <correlation name>
+
+<correlation name> ::= <identifier>
+
+<set function specification> ::=
+      COUNT <left paren> <asterisk> <right paren>
+    | <general set function>
+
+<general set function> ::=
+      <set function type>
+          <left paren> [ <set quantifier> ] <value expression> <right paren>
+
+<set function type> ::=
+    AVG | MAX | MIN | SUM | COUNT
+
+<set quantifier> ::= DISTINCT | ALL
+
+<scalar subquery> ::= <subquery>
+
+<subquery> ::= <left paren> <query expression> <right paren>
+
+<query expression> ::=
+      <non-join query expression>
+    | <joined table>
+
+<non-join query expression> ::=
+      <non-join query term>
+    | <query expression> UNION  [ ALL ]
+          [ <corresponding spec> ] <query term>
+    | <query expression> EXCEPT [ ALL ]
+          [ <corresponding spec> ] <query term>
+
+<non-join query term> ::=
+      <non-join query primary>
+    | <query term> INTERSECT [ ALL ]
+          [ <corresponding spec> ] <query primary>
+
+<non-join query primary> ::=
+      <simple table>
+    | <left paren> <non-join query expression> <right paren>
+
+<simple table> ::=
+      <query specification>
+    | <table value constructor>
+    | <explicit table>
+
+<query specification> ::=
+    SELECT [ <set quantifier> ] <select list> <table expression>
+
+<select list> ::=
+      <asterisk>
+    | <select sublist> [ { <comma> <select sublist> }... ]
+
+<select sublist> ::=
+      <derived column>
+    | <qualifier> <period> <asterisk>
+
+<derived column> ::= <value expression> [ <as clause> ]
+
+<as clause> ::= [ AS ] <column name>
+
+<table expression> ::=
+    <from clause>
+    [ <where clause> ]
+    [ <group by clause> ]
+    [ <having clause> ]
+
+<from clause> ::= FROM <table reference>
+    [ { <comma> <table reference> }... ]
+
+<table reference> ::=
+      <table name> [ [ AS ] <correlation name>
+          [ <left paren> <derived column list> <right paren> ] ]
+    | <derived table> [ AS ] <correlation name>
+          [ <left paren> <derived column list> <right paren> ]
+    | <joined table>
+
+<derived column list> ::= <column name list>
+
+<derived table> ::= <table subquery>
+
+<table subquery> ::= <subquery>
+
+<joined table> ::=
+      <cross join>
+    | <qualified join>
+    | <left paren> <joined table> <right paren>
+
+<cross join> ::=
+    <table reference> CROSS JOIN <table reference>
+
+<qualified join> ::=
+    <table reference> [ NATURAL ] [ <join type> ] JOIN
+      <table reference> [ <join specification> ]
+
+<join type> ::=
+      INNER
+    | <outer join type> [ OUTER ]
+    | UNION
+
+<outer join type> ::=
+      LEFT
+    | RIGHT
+    | FULL
+
+<join specification> ::=
+      <join condition>
+    | <named columns join>
+
+<join condition> ::= ON <search condition>
+
+<named columns join> ::=
+    USING <left paren> <join column list> <right paren>
+
+<join column list> ::= <column name list>
+
+<where clause> ::= WHERE <search condition>
+
+<group by clause> ::=
+    GROUP BY <grouping column reference list>
+
+<grouping column reference list> ::=
+    <grouping column reference>
+        [ { <comma> <grouping column reference> }... ]
+
+<grouping column reference> ::=
+    <column reference> [ <collate clause> ]
+
+<collate clause> ::= COLLATE <collation name>
+
+<collation name> ::= <qualified name>
+
+<having clause> ::= HAVING <search condition>
+
+<table value constructor> ::=
+    VALUES <table value constructor list>
+
+<table value constructor list> ::=
+    <row value constructor> [ { <comma> <row value constructor> }... ]
+
+<explicit table> ::= TABLE <table name>
+
+<query term> ::=
+      <non-join query term>
+    | <joined table>
+
+<corresponding spec> ::=
+    CORRESPONDING [ BY <left paren> <corresponding column list> <right paren> ]
+
+<corresponding column list> ::= <column name list>
+
+<query primary> ::=
+      <non-join query primary>
+    | <joined table>
+
+<case expression> ::=
+      <case abbreviation>
+    | <case specification>
+
+<case abbreviation> ::=
+      NULLIF <left paren> <value expression> <comma>
+            <value expression> <right paren>
+    | COALESCE <left paren> <value expression>
+            { <comma> <value expression> }... <right paren>
+
+<case specification> ::=
+      <simple case>
+    | <searched case>
+
+<simple case> ::=
+    CASE <case operand>
+      <simple when clause>...
+      [ <else clause> ]
+    END
+
+<case operand> ::= <value expression>
+
+<simple when clause> ::= WHEN <when operand> THEN <result>
+
+<when operand> ::= <value expression>
+
+<result> ::= <result expression> | NULL
+
+<result expression> ::= <value expression>
+
+<else clause> ::= ELSE <result>
+
+<searched case> ::=
+    CASE
+      <searched when clause>...
+      [ <else clause> ]
+    END
+
+<searched when clause> ::= WHEN <search condition> THEN <result>
+
+<cast specification> ::=
+    CAST <left paren> <cast operand> AS
+        <cast target> <right paren>
+
+<cast operand> ::=
+      <value expression>
+    | NULL
+
+<cast target> ::=
+      <domain name>
+    | <data type>
+
+<numeric value function> ::=
+      <position expression>
+    | <extract expression>
+    | <length expression>
+
+<position expression> ::=
+    POSITION <left paren> <character value expression>
+        IN <character value expression> <right paren>
+
+<character value expression> ::=
+      <concatenation>
+    | <character factor>
+
+<concatenation> ::=
+    <character value expression> <concatenation operator>
+        <character factor>
+
+<character factor> ::=
+    <character primary> [ <collate clause> ]
+
+<character primary> ::=
+      <value expression primary>
+    | <string value function>
+
+<string value function> ::=
+      <character value function>
+    | <bit value function>
+
+<character value function> ::=
+      <character substring function>
+    | <fold>
+    | <form-of-use conversion>
+    | <character translation>
+    | <trim function>
+
+<character substring function> ::=
+    SUBSTRING <left paren> <character value expression> FROM <start position>
+                [ FOR <string length> ] <right paren>
+
+<start position> ::= <numeric value expression>
+
+<string length> ::= <numeric value expression>
+
+<fold> ::= { UPPER | LOWER }
+     <left paren> <character value expression> <right paren>
+
+<form-of-use conversion> ::=
+    CONVERT <left paren> <character value expression>
+        USING <form-of-use conversion name> <right paren>
+
+<form-of-use conversion name> ::= <qualified name>
+
+<character translation> ::=
+    TRANSLATE <left paren> <character value expression>
+        USING <translation name> <right paren>
+
+<translation name> ::= <qualified name>
+
+<trim function> ::=
+    TRIM <left paren> <trim operands> <right paren>
+
+<trim operands> ::=
+    [ [ <trim specification> ] [ <trim character> ] FROM ] <trim source>
+
+<trim specification> ::=
+      LEADING
+    | TRAILING
+    | BOTH
+
+<trim character> ::= <character value expression>
+
+<trim source> ::= <character value expression>
+
+<bit value function> ::=
+    <bit substring function>
+
+<bit substring function> ::=
+    SUBSTRING <left paren> <bit value expression> FROM <start position>
+        [ FOR <string length> ] <right paren>
+
+<bit value expression> ::=
+      <bit concatenation>
+    | <bit factor>
+
+<bit concatenation> ::=
+    <bit value expression> <concatenation operator> <bit factor>
+
+<bit factor> ::= <bit primary>
+
+<bit primary> ::=
+      <value expression primary>
+    | <string value function>
+
+<extract expression> ::=
+    EXTRACT <left paren> <extract field>
+        FROM <extract source> <right paren>
+
+<extract field> ::=
+      <datetime field>
+    | <time zone field>
+
+<datetime field> ::=
+      <non-second datetime field>
+    | SECOND
+
+<time zone field> ::=
+      TIMEZONE_HOUR
+    | TIMEZONE_MINUTE
+
+<extract source> ::=
+      <datetime value expression>
+    | <interval value expression>
+
+<datetime value expression> ::=
+      <datetime term>
+    | <interval value expression> <plus sign> <datetime term>
+    | <datetime value expression> <plus sign> <interval term>
+    | <datetime value expression> <minus sign> <interval term>
+
+<interval term> ::=
+      <interval factor>
+    | <interval term 2> <asterisk> <factor>
+    | <interval term 2> <solidus> <factor>
+    | <term> <asterisk> <interval factor>
+
+<interval factor> ::=
+    [ <sign> ] <interval primary>
+
+<interval primary> ::=
+      <value expression primary> [ <interval qualifier> ]
+
+<interval term 2> ::= <interval term>
+
+<interval value expression> ::=
+      <interval term>
+    | <interval value expression 1> <plus sign> <interval term 1>
+    | <interval value expression 1> <minus sign> <interval term 1>
+    | <left paren> <datetime value expression> <minus sign>
+          <datetime term> <right paren> <interval qualifier>
+
+<interval value expression 1> ::= <interval value expression>
+
+<interval term 1> ::= <interval term>
+
+<datetime term> ::=
+      <datetime factor>
+
+<datetime factor> ::=
+      <datetime primary> [ <time zone> ]
+
+<datetime primary> ::=
+      <value expression primary>
+    | <datetime value function>
+
+<time zone> ::=
+    AT <time zone specifier>
+
+<time zone specifier> ::=
+      LOCAL
+    | TIME ZONE <interval value expression>
+
+<length expression> ::=
+      <char length expression>
+    | <octet length expression>
+    | <bit length expression>
+
+<char length expression> ::=
+    { CHAR_LENGTH | CHARACTER_LENGTH }
+        <left paren> <string value expression> <right paren>
+
+<string value expression> ::=
+      <character value expression>
+    | <bit value expression>
+
+<octet length expression> ::=
+    OCTET_LENGTH <left paren> <string value expression> <right paren>
+
+<bit length expression> ::=
+    BIT_LENGTH <left paren> <string value expression> <right paren>
+
+<null specification> ::=
+    NULL
+
+<default specification> ::=
+    DEFAULT
+
+<row value constructor list> ::=
+    <row value constructor element>
+        [ { <comma> <row value constructor element> }... ]
+
+<row subquery> ::= <subquery>
+
+<comp op> ::=
+      <equals operator>
+    | <not equals operator>
+    | <less than operator>
+    | <greater than operator>
+    | <less than or equals operator>
+    | <greater than or equals operator>
+
+<between predicate> ::=
+    <row value constructor> [ NOT ] BETWEEN
+      <row value constructor> AND <row value constructor>
+
+<in predicate> ::=
+    <row value constructor>
+      [ NOT ] IN <in predicate value>
+
+<in predicate value> ::=
+      <table subquery>
+    | <left paren> <in value list> <right paren>
+
+<in value list> ::=
+    <value expression> { <comma> <value expression> }...
+
+<like predicate> ::=
+    <match value> [ NOT ] LIKE <pattern>
+      [ ESCAPE <escape character> ]
+
+<match value> ::= <character value expression>
+
+<pattern> ::= <character value expression>
+
+<escape character> ::= <character value expression>
+
+<null predicate> ::= <row value constructor>
+    IS [ NOT ] NULL
+
+<quantified comparison predicate> ::=
+    <row value constructor> <comp op> <quantifier> <table subquery>
+
+<quantifier> ::= <all> | <some>
+
+<all> ::= ALL
+
+<some> ::= SOME | ANY
+
+<exists predicate> ::= EXISTS <table subquery>
+
+<unique predicate> ::= UNIQUE <table subquery>
+
+<match predicate> ::=
+    <row value constructor> MATCH [ UNIQUE ]
+        [ PARTIAL | FULL ] <table subquery>
+
+<overlaps predicate> ::=
+    <row value constructor 1> OVERLAPS <row value constructor 2>
+
+<row value constructor 1> ::= <row value constructor>
+
+<row value constructor 2> ::= <row value constructor>
+
+<truth value> ::=
+      TRUE
+    | FALSE
+    | UNKNOWN
+
+<constraint attributes> ::=
+      <constraint check time> [ [ NOT ] DEFERRABLE ]
+    | [ NOT ] DEFERRABLE [ <constraint check time> ]
+
+<constraint check time> ::=
+      INITIALLY DEFERRED
+    | INITIALLY IMMEDIATE
+
+<table constraint definition> ::=
+    [ <constraint name definition> ]
+    <table constraint> [ <constraint attributes> ]
+
+<table constraint> ::=
+      <unique constraint definition>
+    | <referential constraint definition>
+    | <check constraint definition>
+
+<unique constraint definition> ::=
+            <unique specification> even in SQL3)
+    <unique specification>
+      <left paren> <unique column list> <right paren>
+
+<unique column list> ::= <column name list>
+
+<referential constraint definition> ::=
+    FOREIGN KEY
+        <left paren> <referencing columns> <right paren>
+      <references specification>
+
+<referencing columns> ::=
+    <reference column list>
+
+<module contents> ::=
+      <declare cursor>
+    | <dynamic declare cursor>
+    | <procedure>
+
+<declare cursor> ::=
+    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
+      FOR <cursor specification>
+
+<cursor name> ::= <identifier>
+
+<cursor specification> ::=
+    <query expression> [ <order by clause> ]
+      [ <updatability clause> ]
+
+<order by clause> ::=
+    ORDER BY <sort specification list>
+
+<sort specification list> ::=
+    <sort specification> [ { <comma> <sort specification> }... ]
+
+<sort specification> ::=
+    <sort key> [ <collate clause> ] [ <ordering specification> ]
+
+<sort key> ::=
+      <column name>
+    | <unsigned integer>
+
+<ordering specification> ::= ASC | DESC
+
+<updatability clause> ::=
+    FOR
+        { READ ONLY |
+          UPDATE [ OF <column name list> ] }
+
+<dynamic declare cursor> ::=
+    DECLARE <cursor name> [ INSENSITIVE ] [ SCROLL ] CURSOR
+        FOR <statement name>
+
+<statement name> ::= <identifier>
+
+<procedure> ::=
+    PROCEDURE <procedure name>
+        <parameter declaration list> <semicolon>
+      <SQL procedure statement> <semicolon>
+
+<procedure name> ::= <identifier>
+
+<parameter declaration list> ::=
+      <left paren> <parameter declaration>
+          [ { <comma> <parameter declaration> }... ] <right paren>
+    | <parameter declaration>...
+
+<parameter declaration> ::=
+      <parameter name> <data type>
+    | <status parameter>
+
+<status parameter> ::=
+    SQLCODE | SQLSTATE
+
+<SQL procedure statement> ::=
+      <SQL schema statement>
+    | <SQL data statement>
+    | <SQL transaction statement>
+    | <SQL connection statement>
+    | <SQL session statement>
+    | <SQL dynamic statement>
+    | <SQL diagnostics statement>
+
+<SQL schema statement> ::=
+      <SQL schema definition statement>
+    | <SQL schema manipulation statement>
+
+<SQL schema definition statement> ::=
+      <schema definition>
+    | <table definition>
+    | <view definition>
+    | <grant statement>
+    | <domain definition>
+    | <character set definition>
+    | <collation definition>
+    | <translation definition>
+    | <assertion definition>
+
+<schema definition> ::=
+    CREATE SCHEMA <schema name clause>
+      [ <schema character set specification> ]
+      [ <schema element>... ]
+
+<schema name clause> ::=
+      <schema name>
+    | AUTHORIZATION <schema authorization identifier>
+    | <schema name> AUTHORIZATION
+          <schema authorization identifier>
+
+<schema authorization identifier> ::=
+    <authorization identifier>
+
+<schema character set specification> ::=
+    DEFAULT CHARACTER
+        SET <character set specification>
+
+<schema element> ::=
+      <domain definition>
+    | <table definition>
+    | <view definition>
+    | <grant statement>
+    | <assertion definition>
+    | <character set definition>
+    | <collation definition>
+    | <translation definition>
+
+<domain definition> ::=
+    CREATE DOMAIN <domain name>
+        [ AS ] <data type>
+      [ <default clause> ]
+      [ <domain constraint>... ]
+      [ <collate clause> ]
+
+<domain constraint> ::=
+    [ <constraint name definition> ]
+    <check constraint definition> [ <constraint attributes> ]
+
+<table definition> ::=
+    CREATE [ { GLOBAL | LOCAL } TEMPORARY ] TABLE
+        <table name>
+      <table element list>
+      [ ON COMMIT { DELETE | PRESERVE } ROWS ]
+
+<view definition> ::=
+    CREATE VIEW <table name> [ <left paren> <view column list>
+                                  <right paren> ]
+      AS <query expression>
+      [ WITH [ <levels clause> ] CHECK OPTION ]
+
+<view column list> ::= <column name list>
+
+<levels clause> ::=
+    CASCADED | LOCAL
+
+<grant statement> ::=
+   GRANT <privileges> ON <object name>
+     TO <grantee> [ { <comma> <grantee> }... ]
+       [ WITH GRANT OPTION ]
+
+<privileges> ::=
+      ALL PRIVILEGES
+    | <action list>
+
+<action list> ::= <action> [ { <comma> <action> }... ]
+
+<action> ::=
+      SELECT
+    | DELETE
+    | INSERT [ <left paren> <privilege column list> <right paren> ]
+    | UPDATE [ <left paren> <privilege column list> <right paren> ]
+    | REFERENCES [ <left paren> <privilege column list> <right paren> ]
+    | USAGE
+
+<privilege column list> ::= <column name list>
+
+<object name> ::=
+      [ TABLE ] <table name>
+    | DOMAIN <domain name>
+    | COLLATION <collation name>
+    | CHARACTER SET <character set name>
+    | TRANSLATION <translation name>
+
+<grantee> ::=
+      PUBLIC
+    | <authorization identifier>
+
+<assertion definition> ::=
+    CREATE ASSERTION <constraint name> <assertion check>
+      [ <constraint attributes> ]
+
+<assertion check> ::=
+    CHECK
+        <left paren> <search condition> <right paren>
+
+<character set definition> ::=
+    CREATE CHARACTER SET <character set name>
+        [ AS ]
+      <character set source>
+      [ <collate clause> | <limited collation definition> ]
+
+<character set source> ::=
+      GET <existing character set name>
+
+<existing character set name> ::=
+      <standard character repertoire name>
+    | <implementation-defined character repertoire name>
+    | <schema character set name>
+
+<schema character set name> ::= <character set name>
+
+<limited collation definition> ::=
+    COLLATION FROM <collation source>
+
+<collation source> ::=
+      <collating sequence definition>
+    | <translation collation>
+
+<collating sequence definition> ::=
+      <external collation>
+    | <schema collation name>
+    | DESC <left paren> <collation name> <right paren>
+    | DEFAULT
+
+<external collation> ::=
+    EXTERNAL <left paren> <quote> <external collation name> <quote> <right paren>
+
+<external collation name> ::=
+      <standard collation name>
+    | <implementation-defined collation name>
+
+<standard collation name> ::= <collation name>
+
+<implementation-defined collation name> ::= <collation name>
+
+<schema collation name> ::= <collation name>
+
+<translation collation> ::=
+    TRANSLATION <translation name>
+        [ THEN COLLATION <collation name> ]
+
+<collation definition> ::=
+    CREATE COLLATION <collation name> FOR
+        <character set specification>
+      FROM <collation source>
+        [ <pad attribute> ]
+
+<pad attribute> ::=
+      NO PAD
+    | PAD SPACE
+
+<translation definition> ::=
+    CREATE TRANSLATION <translation name>
+      FOR <source character set specification>
+        TO <target character set specification>
+      FROM <translation source>
+
+<source character set specification> ::= <character set specification>
+
+<target character set specification> ::= <character set specification>
+
+<translation source> ::=
+      <translation specification>
+
+<translation specification> ::=
+      <external translation>
+    | IDENTITY
+    | <schema translation name>
+
+<external translation> ::=
+    EXTERNAL <left paren> <quote> <external translation name> <quote> <right paren>
+
+<external translation name> ::=
+      <standard translation name>
+    | <implementation-defined translation name>
+
+<standard translation name> ::= <translation name>
+
+<implementation-defined translation name> ::= <translation name>
+
+<schema translation name> ::= <translation name>
+
+<SQL schema manipulation statement> ::=
+      <drop schema statement>
+    | <alter table statement>
+    | <drop table statement>
+    | <drop view statement>
+    | <revoke statement>
+    | <alter domain statement>
+    | <drop domain statement>
+    | <drop character set statement>
+    | <drop collation statement>
+    | <drop translation statement>
+    | <drop assertion statement>
+
+<drop schema statement> ::=
+    DROP SCHEMA <schema name> <drop behavior>
+
+<drop behavior> ::= CASCADE | RESTRICT
+
+<alter table statement> ::=
+    ALTER TABLE <table name> <alter table action>
+
+<alter table action> ::=
+      <add column definition>
+    | <alter column definition>
+    | <drop column definition>
+    | <add table constraint definition>
+    | <drop table constraint definition>
+
+<add column definition> ::=
+    ADD [ COLUMN ] <column definition>
+
+<alter column definition> ::=
+    ALTER [ COLUMN ] <column name> <alter column action>
+
+<alter column action> ::=
+      <set column default clause>
+    | <drop column default clause>
+
+<set column default clause> ::=
+    SET <default clause>
+
+<drop column default clause> ::=
+    DROP DEFAULT
+
+<drop column definition> ::=
+    DROP [ COLUMN ] <column name> <drop behavior>
+
+<add table constraint definition> ::=
+    ADD <table constraint definition>
+
+<drop table constraint definition> ::=
+    DROP CONSTRAINT <constraint name> <drop behavior>
+
+<drop table statement> ::=
+    DROP TABLE <table name> <drop behavior>
+
+<drop view statement> ::=
+    DROP VIEW <table name> <drop behavior>
+
+<revoke statement> ::=
+    REVOKE [ GRANT OPTION FOR ]
+        <privileges>
+        ON <object name>
+      FROM <grantee> [ { <comma> <grantee> }... ] <drop behavior>
+
+<alter domain statement> ::=
+    ALTER DOMAIN <domain name> <alter domain action>
+
+<alter domain action> ::=
+      <set domain default clause>
+    | <drop domain default clause>
+    | <add domain constraint definition>
+    | <drop domain constraint definition>
+
+<set domain default clause> ::= SET <default clause>
+
+<drop domain default clause> ::= DROP DEFAULT
+
+<add domain constraint definition> ::=
+    ADD <domain constraint>
+
+<drop domain constraint definition> ::=
+    DROP CONSTRAINT <constraint name>
+
+<drop domain statement> ::=
+    DROP DOMAIN <domain name> <drop behavior>
+
+<drop character set statement> ::=
+    DROP CHARACTER SET <character set name>
+
+<drop collation statement> ::=
+    DROP COLLATION <collation name>
+
+<drop translation statement> ::=
+    DROP TRANSLATION <translation name>
+
+<drop assertion statement> ::=
+    DROP ASSERTION <constraint name>
+
+<SQL data statement> ::=
+      <open statement>
+    | <fetch statement>
+    | <close statement>
+    | <select statement: single row>
+    | <SQL data change statement>
+
+<open statement> ::=
+    OPEN <cursor name>
+
+<fetch statement> ::=
+    FETCH [ [ <fetch orientation> ] FROM ]
+      <cursor name> INTO <fetch target list>
+
+<fetch orientation> ::=
+      NEXT
+    | PRIOR
+    | FIRST
+    | LAST
+    | { ABSOLUTE | RELATIVE } <simple value specification>
+
+<simple value specification> ::=
+      <parameter name>
+    | <embedded variable name>
+    | <literal>
+
+<fetch target list> ::=
+    <target specification> [ { <comma> <target specification> }... ]
+
+<target specification> ::=
+      <parameter specification>
+    | <variable specification>
+
+<close statement> ::=
+    CLOSE <cursor name>
+
+<select statement: single row> ::=
+    SELECT [ <set quantifier> ] <select list>
+      INTO <select target list>
+        <table expression>
+
+<select target list> ::=
+    <target specification> [ { <comma> <target specification> }... ]
+
+<SQL data change statement> ::=
+      <delete statement: positioned>
+    | <delete statement: searched>
+    | <insert statement>
+    | <update statement: positioned>
+    | <update statement: searched>
+
+<delete statement: positioned> ::=
+    DELETE FROM <table name>
+      WHERE CURRENT OF <cursor name>
+
+<delete statement: searched> ::=
+    DELETE FROM <table name>
+      [ WHERE <search condition> ]
+
+<insert statement> ::=
+    INSERT INTO <table name>
+      <insert columns and source>
+
+<insert columns and source> ::=
+      [ <left paren> <insert column list> <right paren> ]
+            <query expression>
+    | DEFAULT VALUES
+
+<insert column list> ::= <column name list>
+
+<update statement: positioned> ::=
+    UPDATE <table name>
+      SET <set clause list>
+        WHERE CURRENT OF <cursor name>
+
+<set clause list> ::=
+    <set clause> [ { <comma> <set clause> }... ]
+
+<set clause> ::=
+    <object column> <equals operator> <update source>
+
+<object column> ::= <column name>
+
+<update source> ::=
+      <value expression>
+    | <null specification>
+    | DEFAULT
+
+<update statement: searched> ::=
+    UPDATE <table name>
+      SET <set clause list>
+      [ WHERE <search condition> ]
+
+<SQL transaction statement> ::=
+      <set transaction statement>
+    | <set constraints mode statement>
+    | <commit statement>
+    | <rollback statement>
+
+<set transaction statement> ::=
+    SET TRANSACTION <transaction mode>
+        [ { <comma> <transaction mode> }... ]
+
+<transaction mode> ::=
+      <isolation level>
+    | <transaction access mode>
+    | <diagnostics size>
+
+<isolation level> ::=
+    ISOLATION LEVEL <level of isolation>
+
+<level of isolation> ::=
+      READ UNCOMMITTED
+    | READ COMMITTED
+    | REPEATABLE READ
+    | SERIALIZABLE
+
+<transaction access mode> ::=
+      READ ONLY
+    | READ WRITE
+
+<diagnostics size> ::=
+    DIAGNOSTICS SIZE <number of conditions>
+
+<number of conditions> ::= <simple value specification>
+
+<set constraints mode statement> ::=
+    SET CONSTRAINTS <constraint name list>
+        { DEFERRED | IMMEDIATE }
+
+<constraint name list> ::=
+      ALL
+    | <constraint name> [ { <comma> <constraint name> }... ]
+
+<commit statement> ::=
+    COMMIT [ WORK ]
+
+<rollback statement> ::=
+    ROLLBACK [ WORK ]
+
+<SQL connection statement> ::=
+      <connect statement>
+    | <set connection statement>
+    | <disconnect statement>
+
+<connect statement> ::=
+    CONNECT TO <connection target>
+
+<connection target> ::=
+      <SQL-server name>
+        [ AS <connection name> ]
+          correspondence with Tony Gordon)
+        [ USER <user name> ]
+    | DEFAULT
+
+<SQL-server name> ::= <simple value specification>
+
+<connection name> ::= <simple value specification>
+
+<user name> ::= <simple value specification>
+
+<set connection statement> ::=
+    SET CONNECTION <connection object>
+
+<connection object> ::=
+      DEFAULT
+    | <connection name>
+
+<disconnect statement> ::=
+    DISCONNECT <disconnect object>
+
+<disconnect object> ::=
+      <connection object>
+    | ALL
+    | CURRENT
+
+<SQL session statement> ::=
+      <set catalog statement>
+    | <set schema statement>
+    | <set names statement>
+    | <set session authorization identifier statement>
+    | <set local time zone statement>
+
+<set catalog statement> ::=
+    SET CATALOG <value specification>
+
+<value specification> ::=
+      <literal>
+    | <general value specification>
+
+<set schema statement> ::=
+    SET SCHEMA <value specification>
+
+<set names statement> ::=
+    SET NAMES <value specification>
+
+<set session authorization identifier statement> ::=
+    SET SESSION AUTHORIZATION
+        <value specification>
+
+<set local time zone statement> ::=
+    SET TIME ZONE
+        <set time zone value>
+
+<set time zone value> ::=
+      <interval value expression>
+    | LOCAL
+
+<SQL dynamic statement> ::=
+      <system descriptor statement>
+    | <prepare statement>
+    | <deallocate prepared statement>
+    | <describe statement>
+    | <execute statement>
+    | <execute immediate statement>
+    | <SQL dynamic data statement>
+
+<system descriptor statement> ::=
+      <allocate descriptor statement>
+    | <deallocate descriptor statement>
+    | <set descriptor statement>
+    | <get descriptor statement>
+
+<allocate descriptor statement> ::=
+    ALLOCATE DESCRIPTOR <descriptor name>
+       [ WITH MAX <occurrences> ]
+
+<descriptor name> ::=
+    [ <scope option> ] <simple value specification>
+
+<scope option> ::=
+      GLOBAL
+    | LOCAL
+
+<occurrences> ::= <simple value specification>
+
+<deallocate descriptor statement> ::=
+    DEALLOCATE DESCRIPTOR <descriptor name>
+
+<set descriptor statement> ::=
+    SET DESCRIPTOR <descriptor name>
+        <set descriptor information>
+
+<set descriptor information> ::=
+      <set count>
+    | VALUE <item number>
+        <set item information> [ { <comma> <set item information> }... ]
+
+<set count> ::=
+    COUNT <equals operator> <simple value specification 1>
+
+<simple value specification 1> ::= <simple value specification>
+
+<item number> ::= <simple value specification>
+
+<set item information> ::=
+    <descriptor item name> <equals operator> <simple value specification 2>
+
+<descriptor item name> ::=
+      TYPE
+    | LENGTH
+    | OCTET_LENGTH
+    | RETURNED_LENGTH
+    | RETURNED_OCTET_LENGTH
+    | PRECISION
+    | SCALE
+    | DATETIME_INTERVAL_CODE
+    | DATETIME_INTERVAL_PRECISION
+    | NULLABLE
+    | INDICATOR
+    | DATA
+    | NAME
+    | UNNAMED
+    | COLLATION_CATALOG
+    | COLLATION_SCHEMA
+    | COLLATION_NAME
+    | CHARACTER_SET_CATALOG
+    | CHARACTER_SET_SCHEMA
+    | CHARACTER_SET_NAME
+
+<simple value specification 2> ::= <simple value specification>
+
+<item number> ::= <simple value specification>
+
+<get descriptor statement> ::=
+    GET DESCRIPTOR <descriptor name> <get descriptor information>
+
+<get descriptor information> ::=
+      <get count>
+    | VALUE <item number>
+        <get item information> [ { <comma> <get item information> }... ]
+
+<get count> ::=
+    <simple target specification 1> <equals operator>
+         COUNT
+
+<simple target specification 1> ::= <simple target specification>
+
+<simple target specification> ::=
+      <parameter name>
+    | <embedded variable name>
+
+<get item information> ::=
+    <simple target specification 2> <equals operator> <descriptor item name>>
+
+<simple target specification 2> ::= <simple target specification>
+
+<prepare statement> ::=
+    PREPARE <SQL statement name> FROM <SQL statement variable>
+
+<SQL statement name> ::=
+      <statement name>
+    | <extended statement name>
+
+<extended statement name> ::=
+    [ <scope option> ] <simple value specification>
+
+<SQL statement variable> ::= <simple value specification>
+
+<deallocate prepared statement> ::=
+    DEALLOCATE PREPARE <SQL statement name>
+
+<describe statement> ::=
+      <describe input statement>
+    | <describe output statement>
+
+<describe input statement> ::=
+    DESCRIBE INPUT <SQL statement name> <using descriptor>
+
+<using descriptor> ::=
+    { USING | INTO } SQL DESCRIPTOR <descriptor name>
+
+<describe output statement> ::=
+    DESCRIBE [ OUTPUT ] <SQL statement name> <using descriptor>
+
+<execute statement> ::=
+    EXECUTE <SQL statement name>
+      [ <result using clause> ]
+      [ <parameter using clause> ]
+
+<result using clause> ::= <using clause>
+
+<using clause> ::=
+      <using arguments>
+    | <using descriptor>
+
+<using arguments> ::=
+    { USING | INTO } <argument> [ { <comma> <argument> }... ]
+
+<argument> ::= <target specification>
+
+<parameter using clause> ::= <using clause>
+
+<execute immediate statement> ::=
+    EXECUTE IMMEDIATE <SQL statement variable>
+
+<SQL dynamic data statement> ::=
+      <allocate cursor statement>
+    | <dynamic open statement>
+    | <dynamic fetch statement>
+    | <dynamic close statement>
+    | <dynamic delete statement: positioned>
+    | <dynamic update statement: positioned>
+
+<allocate cursor statement> ::=
+    ALLOCATE <extended cursor name> [ INSENSITIVE ]
+        [ SCROLL ] CURSOR
+      FOR <extended statement name>
+
+<extended cursor name> ::=
+    [ <scope option> ] <simple value specification>
+
+<dynamic open statement> ::=
+    OPEN <dynamic cursor name> [ <using clause> ]
+
+<dynamic cursor name> ::=
+      <cursor name>
+    | <extended cursor name>
+
+<dynamic fetch statement> ::=
+    FETCH [ [ <fetch orientation> ] FROM ] <dynamic cursor name>
+        <using clause>
+
+<dynamic close statement> ::=
+    CLOSE <dynamic cursor name>
+
+<dynamic delete statement: positioned> ::=
+    DELETE FROM <table name>
+      WHERE CURRENT OF
+          <dynamic cursor name>
+
+<dynamic update statement: positioned> ::=
+    UPDATE <table name>
+      SET <set clause>
+          [ { <comma> <set clause> }... ]
+        WHERE CURRENT OF
+            <dynamic cursor name>
+
+<SQL diagnostics statement> ::=
+    <get diagnostics statement>
+
+<get diagnostics statement> ::=
+    GET DIAGNOSTICS <sql diagnostics information>
+
+<sql diagnostics information> ::=
+      <statement information>
+    | <condition information>
+
+<statement information> ::=
+    <statement information item> [ { <comma> <statement information item> }... ]
+
+<statement information item> ::=
+    <simple target specification> <equals operator> <statement information item name>
+
+<statement information item name> ::=
+      NUMBER
+    | MORE
+    | COMMAND_FUNCTION
+    | DYNAMIC_FUNCTION
+    | ROW_COUNT
+
+<condition information> ::=
+    EXCEPTION <condition number>
+      <condition information item> [ { <comma> <condition information item> }... ]
+
+<condition number> ::= <simple value specification>
+
+<condition information item> ::=
+    <simple target specification> <equals operator> <condition information item name>
+
+<condition information item name> ::=
+      CONDITION_NUMBER
+    | RETURNED_SQLSTATE
+    | CLASS_ORIGIN
+    | SUBCLASS_ORIGIN
+    | SERVER_NAME
+    | CONNECTION_NAME
+    | CONSTRAINT_CATALOG
+    | CONSTRAINT_SCHEMA
+    | CONSTRAINT_NAME
+    | CATALOG_NAME
+    | SCHEMA_NAME
+    | TABLE_NAME
+    | COLUMN_NAME
+    | CURSOR_NAME
+    | MESSAGE_TEXT
+    | MESSAGE_LENGTH
+    | MESSAGE_OCTET_LENGTH
+
+<embedded SQL host program> ::=
+      <embedded SQL Ada program>
+    | <embedded SQL C program>
+    | <embedded SQL COBOL program>
+    | <embedded SQL Fortran program>
+    | <embedded SQL MUMPS program>
+    | <embedded SQL Pascal program>
+    | <embedded SQL PL/I program>
+
+<embedded SQL Ada program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL C program> ::=
+      !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL COBOL program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL Fortran program> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL MUMPS program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL Pascal program> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL PL/I program> ::= !! <EMPHASIS>(See the Syntax Rules.)
+
+<embedded SQL declare section> ::=
+      <embedded SQL begin declare>
+        [ <embedded character set declaration> ]
+        [ <host variable definition>... ]
+      <embedded SQL end declare>
+    | <embedded SQL MUMPS declare>
+
+<embedded SQL begin declare> ::=
+    <SQL prefix> BEGIN DECLARE SECTION
+        [ <SQL terminator> ]
+
+<SQL prefix> ::=
+      EXEC SQL
+    | <ampersand>SQL<left paren>
+
+<SQL terminator> ::=
+      END-EXEC
+    | <semicolon>
+    | <right paren>
+
+<embedded character set declaration> ::=
+    SQL NAMES ARE <character set specification>
+
+<host variable definition> ::=
+      <Ada variable definition>
+    | <C variable definition>
+    | <COBOL variable definition>
+    | <Fortran variable definition>
+    | <MUMPS variable definition>
+    | <Pascal variable definition>
+    | <PL/I variable definition>
+
+<Ada variable definition> ::=
+    <Ada host identifier> [ { <comma> <Ada host identifier> }... ] :
+    <Ada type specification> [ <Ada initial value> ]
+
+<Ada type specification> ::=
+      <Ada qualified type specification>
+    | <Ada unqualified type specification>
+
+<Ada qualified type specification> ::=
+      SQL_STANDARD.CHAR [ CHARACTER SET
+         [ IS ] <character set specification> ]
+          <left paren> 1 <double period> <length> <right paren>
+    | SQL_STANDARD.BIT
+          <left paren> 1 <double period> <length> <right paren>
+    | SQL_STANDARD.SMALLINT
+    | SQL_STANDARD.INT
+    | SQL_STANDARD.REAL
+    | SQL_STANDARD.DOUBLE_PRECISION
+    | SQL_STANDARD.SQLCODE_TYPE
+    | SQL_STANDARD.SQLSTATE_TYPE
+    | SQL_STANDARD.INDICATOR_TYPE
+
+<Ada unqualified type specification> ::=
+      CHAR
+          <left paren> 1 <double period> <length> <right paren>
+    | BIT
+          <left paren> 1 <double period> <length> <right paren>
+    | SMALLINT
+    | INT
+    | REAL
+    | DOUBLE_PRECISION
+    | SQLCODE_TYPE
+    | SQLSTATE_TYPE
+    | INDICATOR_TYPE
+
+<Ada initial value> ::=
+    <Ada assignment operator> <character representation>...
+
+<Ada assignment operator> ::= <colon><equals operator>
+
+<C variable definition> ::=
+      [ <C storage class> ]
+      [ <C class modifier> ]
+      <C variable specification>
+    <semicolon>
+
+<C storage class> ::=
+      auto
+    | extern
+    | static
+
+<C class modifier> ::= const | volatile
+
+<C variable specification> ::=
+      <C numeric variable>
+    | <C character variable>
+    | <C derived variable>
+
+<C numeric variable> ::=
+    { long | short | float | double }
+      <C host identifier> [ <C initial value> ]
+            [ { <comma> <C host identifier> [ <C initial value> ] }... ]
+
+<C initial value> ::=
+    <equals operator> <character representation>...
+
+<C character variable> ::=
+    char [ CHARACTER SET
+             [ IS ] <character set specification> ]
+      <C host identifier>
+        <C array specification> [ <C initial value> ]
+        [ { <comma> <C host identifier>
+          <C array specification>
+                 [ <C initial value> ] }... ]
+
+<C array specification> ::=
+    <left bracket> <length> <right bracket>
+
+<C derived variable> ::=
+      <C VARCHAR variable>
+    | <C bit variable>
+
+<C VARCHAR variable> ::=
+    VARCHAR [ CHARACTER SET [ IS ]
+        <character set specification> ]
+        <C host identifier>
+            <C array specification> [ <C initial value> ]
+          [ { <comma> <C host identifier>
+              <C array specification>
+                      [ <C initial value> ] }... ]
+
+<C bit variable> ::=
+    BIT <C host identifier>
+        <C array specification> [ <C initial value> ]
+      [ { <comma> <C host identifier>
+        <C array specification>
+                   [ <C initial value> ] }... ]
+
+<COBOL variable definition> ::=
+    {01|77} <COBOL host identifier> <COBOL type specification>
+      [ <character representation>... ] <period>
+
+<COBOL type specification> ::=
+      <COBOL character type>
+    | <COBOL bit type>
+    | <COBOL numeric type>
+    | <COBOL integer type>
+
+<COBOL character type> ::=
+    [ CHARACTER SET [ IS ]
+          <character set specification> ]
+    { PIC | PICTURE } [ IS ] { X [ <left paren> <length> <right paren> ] }...
+
+<COBOL bit type> ::=
+    { PIC | PICTURE } [ IS ]
+        { B [ <left paren> <length> <right paren> ] }...
+
+<COBOL numeric type> ::=
+    { PIC | PICTURE } [ IS ]
+      S <COBOL nines specification>
+    [ USAGE [ IS ] ] DISPLAY SIGN LEADING SEPARATE
+
+<COBOL nines specification> ::=
+      <COBOL nines> [ V [ <COBOL nines> ] ]
+    | V <COBOL nines>
+
+<COBOL nines> ::= { 9 [ <left paren> <length> <right paren> ] }...
+
+<COBOL integer type> ::=
+      <COBOL computational integer>
+    | <COBOL binary integer>
+
+<COBOL computational integer> ::=
+    { PIC | PICTURE } [ IS ] S<COBOL nines>
+      [ USAGE [ IS ] ] { COMP | COMPUTATIONAL }
+
+<COBOL binary integer> ::=
+    { PIC | PICTURE } [ IS ] S<COBOL nines>
+      [ USAGE [ IS ] ] BINARY
+
+<Fortran variable definition> ::=
+    <Fortran type specification>
+    <Fortran host identifier>
+        [ { <comma> <Fortran host identifier> }... ]
+
+<Fortran type specification> ::=
+      CHARACTER [ <asterisk> <length> ]
+          [ CHARACTER SET [ IS ]
+                <character set specification> ]
+    | BIT [ <asterisk> <length> ]
+    | INTEGER
+    | REAL
+    | DOUBLE PRECISION
+
+<MUMPS variable definition> ::=
+    { <MUMPS numeric variable> | <MUMPS character variable> }
+        <semicolon>
+
+<MUMPS numeric variable> ::=
+    <MUMPS type specification>
+      <MUMPS host identifier> [ { <comma> <MUMPS host identifier> }... ]
+
+<MUMPS type specification> ::=
+      INT
+    | DEC
+          [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
+    | REAL
+
+<MUMPS character variable> ::=
+    VARCHAR <MUMPS host identifier> <MUMPS length specification>
+      [ { <comma> <MUMPS host identifier> <MUMPS length specification> }... ]
+
+<MUMPS length specification> ::=
+    <left paren> <length> <right paren>
+
+<Pascal variable definition> ::=
+    <Pascal host identifier> [ { <comma> <Pascal host identifier> }... ] <colon>
+      <Pascal type specification> <semicolon>
+
+<Pascal type specification> ::=
+      PACKED ARRAY
+          <left bracket> 1 <double period> <length> <right bracket>
+        OF CHAR
+          [ CHARACTER SET [ IS ]
+                <character set specification> ]
+    | PACKED ARRAY
+          <left bracket> 1 <double period> <length> <right bracket>
+        OF BIT
+    | INTEGER
+    | REAL
+    | CHAR [ CHARACTER SET
+                                [ IS ] <character set specification> ]
+    | BIT
+
+<PL/I variable definition> ::=
+    {DCL | DECLARE}
+        {   <PL/I host identifier>
+          | <left paren> <PL/I host identifier>
+                [ { <comma> <PL/I host identifier> }... ] <right paren> }
+    <PL/I type specification>
+    [ <character representation>... ] <semicolon>
+
+<PL/I type specification> ::=
+      { CHAR | CHARACTER } [ VARYING ]
+          <left paren><length><right paren>
+          [ CHARACTER SET
+                [ IS ] <character set specification> ]
+    | BIT [ VARYING ] <left paren><length><right paren>
+    | <PL/I type fixed decimal> <left paren> <precision>
+          [ <comma> <scale> ] <right paren>
+    | <PL/I type fixed binary> [ <left paren> <precision> <right paren> ]
+    | <PL/I type float binary> <left paren> <precision> <right paren>
+
+<PL/I type fixed decimal> ::=
+      { DEC | DECIMAL } FIXED
+    | FIXED { DEC | DECIMAL }
+
+<PL/I type fixed binary> ::=
+      { BIN | BINARY } FIXED
+    | FIXED { BIN | BINARY }
+
+<PL/I type float binary> ::=
+      { BIN | BINARY } FLOAT
+    | FLOAT { BIN | BINARY }
+
+<embedded SQL end declare> ::=
+    <SQL prefix> END DECLARE SECTION
+        [ <SQL terminator> ]
+
+<embedded SQL MUMPS declare> ::=
+    <SQL prefix>
+      BEGIN DECLARE SECTION
+        [ <embedded character set declaration> ]
+        [ <host variable definition>... ]
+      END DECLARE SECTION
+    <SQL terminator>
+
+<embedded SQL statement> ::=
+    <SQL prefix>
+      <statement or declaration>
+    [ <SQL terminator> ]
+
+<statement or declaration> ::=
+      <declare cursor>
+    | <dynamic declare cursor>
+    | <temporary table declaration>
+    | <embedded exception declaration>
+    | <SQL procedure statement>
+
+<embedded exception declaration> ::=
+    WHENEVER <condition> <condition action>
+
+<condition> ::=
+    SQLERROR | NOT FOUND
+
+<condition action> ::=
+    CONTINUE | <go to>
+
+<go to> ::=
+    { GOTO | GO TO } <goto target>
+
+<goto target> ::=
+      <host label identifier>
+    | <unsigned integer>
+    | <host PL/I label variable>
+
+<host label identifier> ::= !!<EMPHASIS>(See the Syntax Rules.)
+
+<host PL/I label variable> ::= !!<EMPHASIS>(See the Syntax Rules.)
+
+<preparable statement> ::=
+      <preparable SQL data statement>
+    | <preparable SQL schema statement>
+    | <preparable SQL transaction statement>
+    | <preparable SQL session statement>
+    | <preparable implementation-defined statement>
+
+<preparable SQL data statement> ::=
+      <delete statement: searched>
+    | <dynamic single row select statement>
+    | <insert statement>
+    | <dynamic select statement>
+    | <update statement: searched>
+    | <preparable dynamic delete statement: positioned>
+    | <preparable dynamic update statement: positioned>
+
+<dynamic single row select statement> ::= <query specification>
+
+<dynamic select statement> ::= <cursor specification>
+
+<preparable dynamic delete statement: positioned> ::=
+   DELETE [ FROM <table name> ]
+      WHERE CURRENT OF <cursor name>
+
+<preparable dynamic update statement: positioned> ::=
+   UPDATE [ <table name> ]
+      SET <set clause list>
+      WHERE CURRENT OF <cursor name>
+
+<preparable SQL schema statement> ::=
+      <SQL schema statement>
+
+<preparable SQL transaction statement> ::=
+      <SQL transaction statement>
+
+<preparable SQL session statement> ::=
+      <SQL session statement>
+
+<preparable implementation-defined statement> ::=
+    !! <EMPHASIS>(See the Syntax Rules.)
+
+<direct SQL statement> ::=
+    <directly executable statement> <semicolon>
+
+<directly executable statement> ::=
+      <direct SQL data statement>
+    | <SQL schema statement>
+    | <SQL transaction statement>
+    | <SQL connection statement>
+    | <SQL session statement>
+    | <direct implementation-defined statement>
+
+<direct SQL data statement> ::=
+      <delete statement: searched>
+    | <direct select statement: multiple rows>
+    | <insert statement>
+    | <update statement: searched>
+    | <temporary table declaration>
+
+<direct select statement: multiple rows> ::=
+    <query expression> [ <order by clause> ]
+
+<direct implementation-defined statement> ::=
+    !!<EMPHASIS>(See the Syntax Rules)
+
+<SQL object identifier> ::=
+    <SQL provenance> <SQL variant>
+
+<SQL provenance> ::= <arc1> <arc2> <arc3>
+
+<arc1> ::= iso | 1 | iso <left paren> 1 <right paren>
+
+<arc2> ::= standard | 0 | standard <left paren> 0 <right paren>
+
+<arc3> ::= 9075
+
+<SQL variant> ::= <SQL edition> <SQL conformance>
+
+<SQL edition> ::= <1987> | <1989> | <1992>
+
+<1987> ::= 0 | edition1987 <left paren> 0 <right paren>
+
+<1989> ::= <1989 base> <1989 package>
+
+<1989 base> ::= 1 | edition1989 <left paren> 1 <right paren>
+
+<1989 package> ::= <integrity no> | <integrity yes>
+
+<integrity no> ::= 0 | IntegrityNo <left paren> 0 <right paren>
+
+<integrity yes> ::= 1 | IntegrityYes <left paren> 1 <right paren>
+
+<1992> ::= 2 | edition1992 <left paren> 2 <right paren>
+
+<SQL conformance> ::= <low> | <intermediate> | <high>
+
+<low> ::= 0 | Low <left paren> 0 <right paren>
+
+<intermediate> ::= 1 | Intermediate <left paren> 1 <right paren>
+
+<high> ::= 2 | High <left paren> 2 <right paren>
+


Property changes on: branches/ddl_sequencer/extensions/dna-sequencer-ddl/target/test-classes/sql2bnf.aug92.txt
___________________________________________________________________
Name: svn:mime-type
   + text/plain



More information about the dna-commits mailing list