/* * 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. */ package org.modeshape.sequencer.ddl.dialect.mysql; import java.util.Arrays; import java.util.List; import org.modeshape.sequencer.ddl.DdlConstants; /** * @author blafond */ public interface MySqlDdlConstants extends DdlConstants { public static final String[] CUSTOM_KEYWORDS = {"DATABASE", "DEFINER", "EVENT", "LOGFILE", "TABLESPACE", "TRIGGER", "TINYINT", "MEDIUMINT", "BIGINT", "FIXED", "BOOL", "BOOLEAN", "BINARY", "VARBINARY", "TINYBLOB", "TINYTEXT", "MEDIUMBLOB", "MEDIUMTEXT", "LONGBLOB", "LONGTEXT", "TEXT", "ENUM", "SET", "DATETIME", "YEAR", "BLOB", "RENAME", "ALGORITHM", "SECURITY"}; static final String[] STMT_ALTER_ALGORITHM = {"ALTER", "ALGORITHM"}; static final String[] STMT_ALTER_DATABASE = {"ALTER", "DATABASE"}; static final String[] STMT_ALTER_DEFINER = {"ALTER", "DEFINER"}; // = ALTER EVENT, ALTER VIEW static final String[] STMT_ALTER_EVENT = {"ALTER", "EVENT"}; static final String[] STMT_ALTER_FUNCTION = {"ALTER", "FUNCTION"}; static final String[] STMT_ALTER_LOGFILE_GROUP = {"ALTER", "LOGFILE", "GROUP"}; static final String[] STMT_ALTER_PROCEDURE = {"ALTER", "PROCEDURE"}; static final String[] STMT_ALTER_SCHEMA = {"ALTER", "SCHEMA"}; static final String[] STMT_ALTER_SERVER = {"ALTER", "SERVER"}; static final String[] STMT_ALTER_SQL_SECURITY = {"ALTER", "SQL", "SECURITY"}; static final String[] STMT_ALTER_TABLESPACE = {"ALTER", "TABLESPACE"}; // ALTER [ONLINE | OFFLINE] [IGNORE] TABLE static final String[] STMT_ALTER_IGNORE_TABLE = {"ALTER", "IGNORE", "TABLE"}; static final String[] STMT_ALTER_ONLINE_TABLE = {"ALTER", "ONLINE", "TABLE"}; static final String[] STMT_ALTER_OFFLINE_TABLE = {"ALTER", "OFFLINE", "TABLE"}; static final String[] STMT_ALTER_ONLINE_IGNORE_TABLE = {"ALTER", "ONLINE", "IGNORE", "TABLE"}; static final String[] STMT_ALTER_OFFLINE_IGNORE_TABLE = {"ALTER", "OFFLINE", "IGNORE", "TABLE"}; interface MySqlStatementStartPhrases { static final String[][] ALTER_PHRASES = {STMT_ALTER_DATABASE, STMT_ALTER_DEFINER, STMT_ALTER_EVENT, STMT_ALTER_FUNCTION, STMT_ALTER_LOGFILE_GROUP, STMT_ALTER_PROCEDURE, STMT_ALTER_SCHEMA, STMT_ALTER_SERVER, STMT_ALTER_TABLESPACE, STMT_ALTER_IGNORE_TABLE, STMT_ALTER_ONLINE_TABLE, STMT_ALTER_OFFLINE_TABLE, STMT_ALTER_ONLINE_IGNORE_TABLE, STMT_ALTER_OFFLINE_IGNORE_TABLE}; static final String[] STMT_CREATE_DATABASE = {"CREATE", "DATABASE"}; static final String[] STMT_CREATE_DEFINER = {"CREATE", "DEFINER"}; // TRIGGER, FUNCTION, PROCEDURE, EVENT static final String[] STMT_CREATE_EVENT = {"CREATE", "EVENT"}; static final String[] STMT_CREATE_FUNCTION = {"CREATE", "FUNCTION"}; static final String[] STMT_CREATE_INDEX = {"CREATE", "INDEX"}; static final String[] STMT_CREATE_LOGFILE_GROUP = {"CREATE", "LOGFILE", "GROUP"}; static final String[] STMT_CREATE_UNIQUE_INDEX = {"CREATE", "UNIQUE", "INDEX"}; static final String[] STMT_CREATE_PROCEDURE = {"CREATE", "PROCEDURE"}; static final String[] STMT_CREATE_SERVER = {"CREATE", "SERVER"}; static final String[] STMT_CREATE_TABLESPACE = {"CREATE", "TABLESPACE"}; static final String[] STMT_CREATE_TRIGGER = {"CREATE", "TRIGGER"}; static final String[][] CREATE_PHRASES = {STMT_CREATE_DATABASE, STMT_CREATE_DEFINER, STMT_CREATE_EVENT, STMT_CREATE_FUNCTION, STMT_CREATE_INDEX, STMT_CREATE_LOGFILE_GROUP, STMT_CREATE_UNIQUE_INDEX, STMT_CREATE_PROCEDURE, STMT_CREATE_SERVER, STMT_CREATE_TABLESPACE, STMT_CREATE_TRIGGER}; /* * TODO: WORK REQUIRED HERE * * NOTE: The CREATE VIEW syntax for MySQL is convoluted as shown below. Basically you have to check for multiple properties * BEFORE the actual "VIEW view_name (...) AS ...." is defined. * Will make it difficult to parse cleanly. * * THIS ALSO affects ALTER VIEW * CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] * * */ static final String[] STMT_DROP_DATABASE = {"DROP", "DATABASE"}; static final String[] STMT_DROP_EVENT = {"DROP", "EVENT"}; static final String[] STMT_DROP_FUNCTION = {"DROP", "FUNCTION"}; static final String[] STMT_DROP_INDEX = {"DROP", "INDEX"}; static final String[] STMT_DROP_ONLINE_INDEX = {"DROP", "ONLINE", "INDEX"}; static final String[] STMT_DROP_OFFLINE_INDEX = {"DROP", "OFFLINE", "INDEX"}; static final String[] STMT_DROP_LOGFILE_GROUP = {"DROP", "LOGFILE", "GROUP"}; static final String[] STMT_DROP_PROCEDURE = {"DROP", "PROCEDURE"}; static final String[] STMT_DROP_SERVER = {"DROP", "SERVER"}; static final String[] STMT_DROP_TABLESPACE = {"DROP", "TABLESPACE"}; static final String[] STMT_DROP_TRIGGER = {"DROP", "TRIGGER"}; static final String[][] DROP_PHRASES = {STMT_DROP_DATABASE, STMT_DROP_EVENT, STMT_DROP_FUNCTION, STMT_DROP_INDEX, STMT_DROP_ONLINE_INDEX, STMT_DROP_OFFLINE_INDEX, STMT_DROP_LOGFILE_GROUP, STMT_DROP_PROCEDURE, STMT_DROP_SERVER, STMT_DROP_TABLESPACE, STMT_DROP_TRIGGER}; static final String[][] SET_PHRASES = { }; // RENAME {DATABASE | SCHEMA} db_name TO new_db_name; static final String[] STMT_RENAME_DATABASE = {"RENAME", "DATABASE"}; static final String[] STMT_RENAME_SCHEMA = {"RENAME", "SCHEMA"}; // RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2] ... static final String[] STMT_RENAME_TABLE = {"RENAME", "TABLE"}; static final String[][] MISC_PHRASES = {STMT_RENAME_DATABASE, STMT_RENAME_SCHEMA, STMT_RENAME_TABLE}; } static final String[] DTYPE_NATIONAL_VARCHAR = {"NATIONAL", "VARCHAR"};// BOOLEAN static final String[] DTYPE_TINYINT = {"TINYINT"}; // TINYINT[(M)] [UNSIGNED] [ZEROFILL] static final String[] DTYPE_MEDIUMINT = {"MEDIUMINT"}; // MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] static final String[] DTYPE_BIGINT = {"BIGINT"}; // BIGINT[(M)] [UNSIGNED] [ZEROFILL] static final String[] DTYPE_FIXED = {"FIXED"};// FIXED[(M[,D])] [UNSIGNED] [ZEROFILL] static final String[] DTYPE_BOOL = {"BOOL"};// BOOL static final String[] DTYPE_BOOLEAN = {"BOOLEAN"};// BOOLEAN static final String[] DTYPE_DOUBLE = {"DOUBLE"}; // DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] static final String[] DTYPE_BINARY = {"BINARY"}; static final String[] DTYPE_VARBINARY = {"VARBINARY"}; static final String[] DTYPE_BLOB = {"BLOB"}; static final String[] DTYPE_TINYBLOB = {"TINYBLOB"}; static final String[] DTYPE_TINYTEXT = {"TINYTEXT"}; static final String[] DTYPE_TEXT = {"TEXT"}; static final String[] DTYPE_MEDIUMBLOB = {"MEDIUMBLOB"}; static final String[] DTYPE_MEDIUMTEXT = {"MEDIUMTEXT"}; static final String[] DTYPE_LONGBLOB = {"LONGBLOB"}; static final String[] DTYPE_LONGTEXT = {"LONGTEXT"}; static final String[] DTYPE_ENUM = {"ENUM"}; static final String[] DTYPE_SET = {"SET"}; static final String[] DTYPE_DATETIME = {"DATETIME"}; static final String[] DTYPE_YEAR = {"YEAR"}; interface MySqlDataTypes { static final List<String[]> CUSTOM_DATATYPE_START_PHRASES = Arrays.asList(new String[][] {DTYPE_BIGINT, DTYPE_BOOL, DTYPE_BOOLEAN, DTYPE_FIXED, DTYPE_DOUBLE, DTYPE_MEDIUMINT, DTYPE_TINYINT, DTYPE_NATIONAL_VARCHAR, DTYPE_BINARY, DTYPE_VARBINARY, DTYPE_TINYBLOB, DTYPE_TINYTEXT, DTYPE_TEXT, DTYPE_MEDIUMBLOB, DTYPE_MEDIUMTEXT, DTYPE_LONGBLOB, DTYPE_LONGTEXT, DTYPE_ENUM, DTYPE_SET, DTYPE_DATETIME, DTYPE_YEAR, DTYPE_BLOB}); static final List<String> CUSTOM_DATATYPE_START_WORDS = Arrays.asList(new String[] {"TINYINT", "MEDIUMINT", "BIGINT", "FIXED", "BOOL", "BOOLEAN", "BINARY", "VARBINARY", "TINYBLOB", "TINYTEXT", "MEDIUMBLOB", "MEDIUMTEXT", "LONGBLOB", "LONGTEXT", "TEXT", "ENUM", "SET", "DATETIME", "YEAR", "BLOB"}); /* * =========================================================================================================================== * DATATYPES 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 * */ } }