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.dialect.derby;
017
018import java.util.Arrays;
019import java.util.List;
020import org.modeshape.sequencer.ddl.DdlConstants;
021import org.modeshape.sequencer.ddl.StandardDdlLexicon;
022
023/**
024 * @author blafond
025 */
026public interface DerbyDdlConstants extends DdlConstants {
027    public static final String[] CUSTOM_KEYWORDS = {"TRIGGER", "SYNOMYM", "LOCK", "ISOLATION", "SQLID", INDEX, "RENAME",
028        "DECLARE", "RESTART", "LOCKSIZE", "INCREMENT", "GENERATED", "ALWAYS", "BIGINT", "CLOB", "BLOB", "EXCLUSIVE",
029        "REFERENCING"};
030
031    interface DerbyStatementStartPhrases {
032
033        static final String[][] ALTER_PHRASES = {};
034
035        static final String[] STMT_CREATE_FUNCTION = {CREATE, "FUNCTION"};
036        static final String[] STMT_CREATE_INDEX = {CREATE, "INDEX"};
037        static final String[] STMT_CREATE_UNIQUE_INDEX = {CREATE, "UNIQUE", INDEX};
038        static final String[] STMT_CREATE_PROCEDURE = {CREATE, "PROCEDURE"};
039        static final String[] STMT_CREATE_ROLE = {CREATE, "ROLE"};
040        static final String[] STMT_CREATE_SYNONYM = {CREATE, "SYNONYM"};
041        static final String[] STMT_CREATE_TRIGGER = {CREATE, "TRIGGER"};
042
043        static final String[][] CREATE_PHRASES = {STMT_CREATE_FUNCTION, STMT_CREATE_INDEX, STMT_CREATE_UNIQUE_INDEX,
044            STMT_CREATE_PROCEDURE, STMT_CREATE_ROLE, STMT_CREATE_SYNONYM, STMT_CREATE_TRIGGER};
045
046        static final String[] STMT_DECLARE_GLOBAL_TEMP_TABLE = {"DECLARE", "GLOBAL", "TEMPORARY", "TABLE"};
047        static final String[] STMT_DROP_FUNCTION = {DROP, "FUNCTION"};
048        static final String[] STMT_DROP_INDEX = {DROP, "INDEX"};
049        static final String[] STMT_DROP_PROCEDURE = {DROP, "PROCEDURE"};
050        static final String[] STMT_DROP_ROLE = {DROP, "ROLE"};
051        static final String[] STMT_DROP_SYNONYM = {DROP, "SYNONYM"};
052        static final String[] STMT_DROP_TRIGGER = {DROP, "TRIGGER"};
053
054        static final String[][] DROP_PHRASES = {STMT_DROP_FUNCTION, STMT_DROP_INDEX, STMT_DROP_PROCEDURE, STMT_DROP_ROLE,
055            STMT_DROP_SYNONYM, STMT_DROP_TRIGGER};
056
057        static final String[] STMT_LOCK_TABLE = {"LOCK", TABLE};
058        static final String[] STMT_RENAME_TABLE = {"RENAME", TABLE};
059        static final String[] STMT_RENAME_INDEX = {"RENAME", INDEX};
060
061        static final String[] STMT_SET_ISOLATION = {SET, "ISOLATION"};
062        static final String[] STMT_SET_CURRENT_ISOLATION = {SET, "CURRENT", "ISOLATION"};
063        static final String[] STMT_SET_ROLE = {SET, "ROLE"};
064        static final String[] STMT_SET_SCHEMA = {SET, "SCHEMA"};
065        static final String[] STMT_SET_CURRENT_SCHEMA = {SET, "CURRENT", SCHEMA};
066        static final String[] STMT_SET_CURRENT_SQLID = {SET, "CURRENT", "SQLID"};
067
068        static final String[][] SET_PHRASES = {STMT_SET_ISOLATION, STMT_SET_CURRENT_ISOLATION, STMT_SET_ROLE, STMT_SET_SCHEMA,
069            STMT_SET_CURRENT_SCHEMA, STMT_SET_CURRENT_SQLID};
070
071        static final String[][] MISC_PHRASES = {STMT_LOCK_TABLE, STMT_RENAME_TABLE, STMT_RENAME_INDEX,
072            STMT_DECLARE_GLOBAL_TEMP_TABLE};
073
074        // COULD NOT FIND ACTUAL REFERENCE... assuming the following....
075
076        public final static String[] VALID_SCHEMA_CHILD_STMTS = {StandardDdlLexicon.TYPE_CREATE_TABLE_STATEMENT,
077            StandardDdlLexicon.TYPE_CREATE_VIEW_STATEMENT, StandardDdlLexicon.TYPE_GRANT_ON_TABLE_STATEMENT};
078    }
079
080    interface DerbyDataTypes {
081        static final String[] DTYPE_BIGINT = {"BIGINT"};
082        static final String[] DTYPE_LONG_VARCHAR = {"LONG", "VARCHAR"};
083        static final String[] DTYPE_LONG_VARCHAR_FBD = {"LONG", "VARCHAR", "FOR", "BIT", "DATA"};
084
085        static final String[] DTYPE_DOUBLE = {"DOUBLE"};
086        static final String[] DTYPE_XML = {"XML"};
087        static final String[] DTYPE_CLOB = {"CLOB"}; // CLOB [ ( length [{K |M |G }] ) ]
088        static final String[] DTYPE_CHARACTER_LARGE_OBJECT = {"CHARACTER", "LARGE", "OBJECT"}; // [ ( length [{K |M |G }] ) ]
089        static final String[] DTYPE_BLOB = {"BLOB"}; // BLOB [ ( length [{K |M |G }] ) ]
090        static final String[] DTYPE_BINARY_LARGE_OBJECT = {"BINARY", "LARGE", "OBJECT"}; // [ ( length [{K |M |G }] ) ]
091
092        static final List<String[]> CUSTOM_DATATYPE_START_PHRASES = Arrays.asList(DTYPE_BIGINT,
093                                                                                  DTYPE_LONG_VARCHAR,
094                                                                                  DTYPE_LONG_VARCHAR_FBD,
095                                                                                  DTYPE_DOUBLE,
096                                                                                  DTYPE_XML,
097                                                                                  DTYPE_CLOB,
098                                                                                  DTYPE_CHARACTER_LARGE_OBJECT,
099                                                                                  DTYPE_BLOB,
100                                                                                  DTYPE_BINARY_LARGE_OBJECT);
101
102        static final List<String> CUSTOM_DATATYPE_START_WORDS = Arrays.asList("BIGINT",
103                                                                              "LONG",
104                                                                              "DOUBLE",
105                                                                              "XML",
106                                                                              "CLOB",
107                                                                              "CHARACTER",
108                                                                              "BLOB",
109                                                                              "BINARY");
110    }
111}