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