/* * ModeShape (http://www.modeshape.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * The classes that make up the DDL sequencer, which is capable of parsing the more important DDL statements * from SQL-92, Oracle, Derby, and PostgreSQL, and constructing a graph structure containing a structured * representation of these statements. * The resulting graph structure is largely the same for all dialects, though some dialects have non-standard * additions to their grammar, and thus require dialect-specific additions to the graph structure. * <p> * The sequencer is designed to behave as intelligently as possible with as little configuration. * Thus, the sequencer automatically determines the dialect used by a given DDL stream. This can be tricky, * of course, since most dialects are very similar and the distinguishing features of a dialect may only be * apparent in some of the statements. * </p> * <p> * To get around this, the sequencer uses a "best fit" algorithm: run the DDL stream through the parser for * each of the dialects, and determine which parser was able to successfully read the greatest number of * statements and tokens. * </p> * <p> * One very interesting capability of this sequencer is that, although only a subset of the (more common) * DDL statements are supported, the sequencer is still extremely functional since it does still add all * statements into the output graph, just without much detail other than just the statement text and the * position in the DDL file. Thus, if a DDL file contains statements the sequencer understands and statements * the sequencer does not understand, the graph will still contain all statements, where those statements * understood by the sequencer will have full detail. Since the underlying parsers are able to operate * upon a single statement, it is possible to go back later (after the parsers have been enhanced to * support additional DDL statements) and re-parse only those incomplete statements in the graph. * </p> * <p> * At this time, the sequencer supports SQL-92 standard DDL as well as dialects from Oracle, Derby, and PostgreSQL. * It supports: * <ul> * <li>Detailed parsing of CREATE SCHEMA, CREATE TABLE and ALTER TABLE.</li> * <li>Partial parsing of DROP statements</li> * <li>General parsing of remaining schema definition statements (i.e. CREATE VIEW, CREATE DOMAIN, etc.</li> * </ul> * Note that the sequencer does not perform detailed parsing of SQL (i.e. SELECT, INSERT, UPDATE, etc....) statements. * </p> */ package org.modeshape.sequencer.ddl;