001/*
002 * ModeShape (http://www.modeshape.org)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *       http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.modeshape.sequencer.ddl;
017
018import java.util.Arrays;
019import java.util.List;
020
021public interface DdlConstants {
022
023    public static final long KILO = 1024;
024    public static final long MEGA = KILO * 1024;
025    public static final long GIGA = MEGA * 1024;
026
027    public static final String DEFAULT_TERMINATOR = ";";
028
029    /*
030     * Character Strings
031     */
032    public static final String SPACE = " ";
033    public static final String PERIOD = ".";
034    public static final String COMMA = ",";
035    public static final String SEMICOLON = ";";
036    public static final String L_PAREN = "(";
037    public static final String R_PAREN = ")";
038    public static final String L_SQUOTE = "’";
039    public static final String LS_BRACE = "[";
040    public static final String RS_BRACE = "]";
041
042    /*
043     * Table Constraint ID's
044     */
045    public static final int CONSTRAINT_UC = 0;
046    public static final int CONSTRAINT_FK = 1;
047    public static final int CONSTRAINT_PK = 2;
048    public static final int CONSTRAINT_C = 3;
049
050    public static final String PRIMARY_KEY = "PRIMARY KEY";
051    public static final String FOREIGN_KEY = "FOREIGN KEY";
052
053    String UNNAMED_CHECK_NODE_NAME = "CHECK_1";
054    /*
055     * Common DDL Keywords
056     */
057    public static final String ALTER = "ALTER";
058    public static final String CHECK = "CHECK";
059    public static final String COLUMN = "COLUMN";
060    public static final String CONSTRAINT = "CONSTRAINT";
061    public static final String CREATE = "CREATE";
062    public static final String DECLARE = "DECLARE";
063    public static final String DROP = "DROP";
064    public static final String FOREIGN = "FOREIGN";
065    public static final String GRANT = "GRANT";
066    public static final String REVOKE = "REVOKE";
067    public static final String INDEX = "INDEX";
068    public static final String INSERT = "INSERT";
069    public static final String UPDATE = "UPDATE";
070    public static final String DELETE = "DELETE";
071    public static final String SELECT = "SELECT";
072    public static final String KEY = "KEY";
073    public static final String OFF = "OFF";
074    public static final String ON = "ON";
075    public static final String PRIMARY = "PRIMARY";
076    public static final String SCHEMA = "SCHEMA";
077    public static final String SET = "SET";
078    public static final String TABLE = "TABLE";
079    public static final String UNIQUE = "UNIQUE";
080    public static final String VIEW = "VIEW";
081    public static final String NOT = "NOT";
082    public static final String NULL = "NULL";
083
084    public static final String MISSING_TERMINATOR_NODE_LITERAL = "missingTerminator";
085    
086    interface DropBehavior {
087        public static final String CASCADE = "CASCADE";
088        public static final String RESTRICT = "RESTRICT";
089    }
090
091    interface MatchType {
092        public static final String FULL = "FULL";
093        public static final String PARTIAL = "PARTIAL";
094    }
095
096    interface ReferencialAction {
097        public static final String CASCADE = "CASCADE";
098        public static final String SET_NULL = "SET NULL";
099        public static final String SET_DEFAULT = "SET DEFAULT";
100        public static final String NO_ACTION = "NO ACTION";
101    }
102
103    // Basic SQL 92 statement start phrases
104    interface StatementStartPhrases {
105        public static final String[] STMT_CREATE_SCHEMA = {CREATE, SCHEMA};
106        public static final String[] STMT_CREATE_TABLE = {CREATE, TABLE}; // { GLOBAL | LOCAL } TEMPORARY ] TABLE
107        public static final String[] STMT_CREATE_GLOBAL_TEMPORARY_TABLE = {CREATE, "GLOBAL", "TEMPORARY", TABLE};
108        public static final String[] STMT_CREATE_LOCAL_TEMPORARY_TABLE = {CREATE, "LOCAL", "TEMPORARY", TABLE};
109        public static final String[] STMT_CREATE_VIEW = {CREATE, VIEW};
110        public static final String[] STMT_CREATE_OR_REPLACE_VIEW = {CREATE, "OR", "REPLACE", VIEW};
111        public static final String[] STMT_CREATE_ASSERTION = {CREATE, "ASSERTION"};
112        public static final String[] STMT_CREATE_CHARACTER_SET = {CREATE, "CHARACTER", SET};
113        public static final String[] STMT_CREATE_COLLATION = {CREATE, "COLLATION"};
114        public static final String[] STMT_CREATE_DOMAIN = {CREATE, "DOMAIN"};
115        public static final String[] STMT_CREATE_TRANSLATION = {CREATE, "TRANSLATION"};
116        public static final String[] STMT_ALTER_TABLE = {ALTER, TABLE};
117        public static final String[] STMT_ALTER_DOMAIN = {ALTER, "DOMAIN"};
118        public static final String[] STMT_GRANT = {GRANT};
119        public static final String[] STMT_REVOKE = {REVOKE};
120        public static final String[] STMT_DROP_SCHEMA = {DROP, SCHEMA};
121        public static final String[] STMT_DROP_TABLE = {DROP, TABLE};
122        public static final String[] STMT_DROP_VIEW = {DROP, VIEW};
123        public static final String[] STMT_DROP_DOMAIN = {DROP, "DOMAIN"};
124        public static final String[] STMT_DROP_CHARACTER_SET = {DROP, "CHARACTER", SET};
125        public static final String[] STMT_DROP_COLLATION = {DROP, "COLLATION"};
126        public static final String[] STMT_DROP_TRANSLATION = {DROP, "TRANSLATION"};
127        public static final String[] STMT_DROP_ASSERTION = {DROP, "ASSERTION"};
128        public static final String[] STMT_INSERT_INTO = {"INSERT", "INTO"};
129        public static final String[] STMT_SET_DEFINE = {"SET", "DEFINE"};
130
131        public final static String[][] SQL_92_ALL_PHRASES = {STMT_CREATE_SCHEMA, STMT_CREATE_TABLE,
132            STMT_CREATE_GLOBAL_TEMPORARY_TABLE, STMT_CREATE_LOCAL_TEMPORARY_TABLE, STMT_CREATE_VIEW, STMT_CREATE_OR_REPLACE_VIEW,
133            STMT_CREATE_ASSERTION, STMT_CREATE_CHARACTER_SET, STMT_CREATE_COLLATION, STMT_CREATE_TRANSLATION, STMT_CREATE_DOMAIN,
134            STMT_ALTER_TABLE, STMT_ALTER_DOMAIN, STMT_GRANT, STMT_REVOKE, STMT_DROP_SCHEMA, STMT_DROP_TABLE, STMT_DROP_VIEW,
135            STMT_DROP_DOMAIN, STMT_DROP_CHARACTER_SET, STMT_DROP_COLLATION, STMT_DROP_TRANSLATION, STMT_DROP_ASSERTION,
136            STMT_INSERT_INTO, STMT_SET_DEFINE};
137
138        // <schema definition>
139        // | <table definition>
140        // | <view definition>
141        // | <grant statement>
142        // | <domain definition>
143        // | <character set definition>
144        // | <collation definition>
145        // | <translation definition>
146        // | <assertion definition>
147        public final static String[] VALID_SCHEMA_CHILD_TYPES = {StandardDdlLexicon.TYPE_CREATE_TABLE_STATEMENT,
148            StandardDdlLexicon.TYPE_CREATE_VIEW_STATEMENT, StandardDdlLexicon.TYPE_GRANT_ON_TABLE_STATEMENT,
149            StandardDdlLexicon.TYPE_GRANT_ON_DOMAIN_STATEMENT, StandardDdlLexicon.TYPE_GRANT_ON_TRANSLATION_STATEMENT,
150            StandardDdlLexicon.TYPE_GRANT_ON_COLLATION_STATEMENT, StandardDdlLexicon.TYPE_GRANT_ON_CHARACTER_SET_STATEMENT,
151            StandardDdlLexicon.TYPE_CREATE_DOMAIN_STATEMENT, StandardDdlLexicon.TYPE_CREATE_CHARACTER_SET_STATEMENT,
152            StandardDdlLexicon.TYPE_CREATE_COLLATION_STATEMENT, StandardDdlLexicon.TYPE_CREATE_TRANSLATION_STATEMENT,
153            StandardDdlLexicon.TYPE_CREATE_ASSERTION_STATEMENT};
154    }
155
156    /**
157     * Constants related to Data Types
158     */
159    interface DataTypes {
160        public static final int DTYPE_CODE_ANY = -1;
161        public static final int DTYPE_CODE_CHAR_STRING = 0;
162        public static final int DTYPE_CODE_NCHAR_STRING = 1;
163        public static final int DTYPE_CODE_BIT_STRING = 2;
164        public static final int DTYPE_CODE_EXACT_NUMERIC = 3;
165        public static final int DTYPE_CODE_APROX_NUMERIC = 4;
166        public static final int DTYPE_CODE_DATE_TIME = 5;
167        public static final int DTYPE_CODE_MISC = 6;
168        public static final int DTYPE_CODE_CUSTOM = 7;
169
170        // CHAR
171        public static final String[] DTYPE_CHARACTER = {"CHARACTER"};
172        public static final String[] DTYPE_CHAR = {"CHAR"};
173        public static final String[] DTYPE_CHARACTER_VARYING = {"CHARACTER", "VARYING"};
174        public static final String[] DTYPE_CHAR_VARYING = {"CHAR", "VARYING"};
175        public static final String[] DTYPE_VARCHAR = {"VARCHAR"};
176        // NATIONAL CHAR
177        public static final String[] DTYPE_NATIONAL_CHARACTER = {"NATIONAL", "CHARACTER"};
178        public static final String[] DTYPE_NATIONAL_CHAR = {"NATIONAL", "CHAR"};
179        public static final String[] DTYPE_NATIONAL_CHARACTER_VARYING = {"NATIONAL", "CHARACTER", "VARYING"};
180        public static final String[] DTYPE_NATIONAL_CHAR_VARYING = {"NATIONAL", "CHAR", "VARYING"};
181        public static final String[] DTYPE_NCHAR_VARYING = {"NCHAR", "VARYING"};
182        public static final String[] DTYPE_NCHAR = {"NCHAR"};
183        // BIT STRING
184        public static final String[] DTYPE_BIT = {"BIT"};
185        public static final String[] DTYPE_BIT_VARYING = {"BIT", "VARYING"};
186        // EXACT NUMERIC
187        public static final String[] DTYPE_NUMERIC = {"NUMERIC"};
188        public static final String[] DTYPE_DEC = {"DEC"};
189        public static final String[] DTYPE_DECIMAL = {"DECIMAL"};
190        public static final String[] DTYPE_INTEGER = {"INTEGER"};
191        public static final String[] DTYPE_INT = {"INT"};
192        public static final String[] DTYPE_SMALLINT = {"SMALLINT"};
193        // APPROXIMATE NUMERIC
194        public static final String[] DTYPE_FLOAT = {"FLOAT"};
195        public static final String[] DTYPE_REAL = {"REAL"};
196        public static final String[] DTYPE_DOUBLE_PRECISION = {"DOUBLE", "PRECISION"};
197        // DATE-TIME
198        public static final String[] DTYPE_DATE = {"DATE"};
199        public static final String[] DTYPE_TIME = {"TIME"};
200        public static final String[] DTYPE_TIMESTAMP = {"TIMESTAMP"};
201        // INTERVAL
202        public static final String[] DTYPE_INTERVAL = {"INTERVAL"};
203
204        public final static List<String> DATATYPE_START_WORDS = Arrays.asList(new String[] {"CHAR", "CHARACTER", "VARCHAR",
205            "NATIONAL", "NCHAR", "BIT", "NUMERIC", "DEC", "DECIMAL", "INT", "INTEGER", "SMALLINT", "FLOAT", "REAL", "DOUBLE",
206            "DATE", "TIME", "TIMESTAMP", "INTERVAL"});
207    }
208
209    @SuppressWarnings( "nls" )
210    public final static String[] SQL_92_RESERVED_WORDS = {"ABSOLUTE", "ACTION", "ADD", "ALL", "ALLOCATE", ALTER, "AND", "ANY",
211        "ARE", "AS", "ASC", "ASSERTION", "AT", "AUTHORIZATION", "AVG", "BEGIN", "BETWEEN", "BIT", "BIT_LENGTH", "BOTH", "BY",
212        "CASCADE", "CASCADED", "CASE", "CAST", "CATALOG", "CHAR", "CHARACTER", "CHAR_LENGTH", "CHARACTER_LENGTH", CHECK, "CLOSE",
213        "COALESCE", "COLLATE", "COLLATION", COLUMN, "COMMIT", "CONNECT", "CONNECTION", CONSTRAINT, "CONSTRAINTS", "CONTINUE",
214        "CONVERT", "CORRESPONDING", "COUNT", CREATE, "CROSS", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP",
215        "CURRENT_USER", "CURSOR", "DATE", "DAY", "DEALLOCATE", "DEC", "DECIMAL", DECLARE, "DEFAULT", "DEFERRABLE", "DEFERRED",
216        "DELETE", "DESC", "DESCRIBE", "DESCRIPTOR", "DIAGNOSTICS", "DISCONNECT", "DISTINCT", "DOMAIN", "DOUBLE", DROP, "ELSE",
217        "END", "END_EXEC", "ESCAPE", "EXCEPT", "EXCEPTION", "EXEC", "EXECUTE", "EXISTS", "EXTERNAL", "EXTRACT", "FALSE", "FETCH",
218        "FIRST", "FLOAT", "FOR", FOREIGN, "FOUND", "FROM", "FULL", "GET", "GLOBAL", "GO", "GOTO", GRANT, "GROUP", "HAVING",
219        "HOUR", "IDENTITY", "IMMEDIATE", "IN", "INDICATOR", "INITIALLY", "INNER", "INPUT", "INSENSITIVE", INSERT, "INT",
220        "INTEGER", "INTERSECT", "INTERVAL", "INTO", "IS", "ISOLATION", "JOIN", KEY, "LANGUAGE", "LAST", "LEADING", "LEFT",
221        "LEVEL", "LIKE", "LOCAL", "LOWER", "MATCH", "MAX", "MIN", "MINUTE", "MODULE", "MONTH", "NAMES", "NATIONAL", "NATURAL",
222        "NCHAR", "NEXT", "NO", "NOT", "NULL", "NULLIF", "NUMERIC", "OCTET_LENGTH", "OF", ON, "ONLY", "OPEN", "OPTION", "OR",
223        "ORDER", "OUTER", "OUTPUT", "OVERLAPS", "PAD", "PARTIAL", "POSITION", "PRECISION", "PREPARE", "PRESERVE", PRIMARY,
224        "PRIOR", "PRIVILEGES", "PROCEDURE", "PUBLIC", "READ", "REAL", "REFERENCES", "RELATIVE", "RESTRICT", "REVOKE", "RIGHT",
225        "ROLLBACK", "ROWS", SCHEMA, "SCROLL", "SECOND", "SECTION", "SELECT", "SESSION", "SESSION_USER", SET, "SIZE", "SMALLINT",
226        "SOME", "SPACE", "SQL", "SQLCODE", "SQLERROR", "SQLSTATE", "SUBSTRING", "SUM", "SYSTEM_USER", TABLE, "TEMPORARY", "THEN",
227        "TIME", "TIMESTAMP", "TIMEZONE_HOUR", "TIMEZONE_MINUTE", "TO", "TRAILING", "TRANSACTION", "TRANSLATE", "TRANSLATION",
228        "TRIM", "TRUE", "UNION", UNIQUE, "UNKNOWN", "UPDATE", "UPPER", "USAGE", "USER", "USING", "VALUE", "VALUES", "VARCHAR",
229        "VARYING", VIEW, "WHEN", "WHENEVER", "WHERE", "WITH", "WORK", "WRITE", "YEAR", "ZONE"};
230
231    interface Problems {
232        public static final int OK = 0;
233        public static final int WARNING = 1;
234        public static final int ERROR = 2;
235    }
236
237    interface AstNodeNames {
238        public static final String TABLE_DEFINITION = "TABLE_DEFINITION";
239        public static final String ALTER_TABLE_DEFINITION = "ALTER_TABLE_DEFINITION";
240        public static final String COLUMN_DEFINITION = "COLUMN_DEFINITION";
241        public static final String COLUMN_REFERENCE = "COLUMN_REFERENCE";
242        public static final String TABLE_CONSTRAINT = "TABLE_CONSTRAINT";
243        // public static final String TABLE_OPTION = "TABLE_OPTION";
244        public static final String ADD_COLUMN_DEFINITION = "ADD_COLUMN_DEFINITION";
245        public static final String ADD_TABLE_CONSTRAINT = "ADD_TABLE_CONSTRAINT";
246        public static final String DROP_COLUMN_DEFINITION = "DROP_COLUMN_DEFINITION";
247        public static final String DROP_TABLE_CONSTRAINT = "DROP_TABLE_CONSTRAINT";
248        public static final String ALTER_COLUMN_DEFINITION = "ALTER_COLUMN_DEFINITION";
249
250    }
251}