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.mysql; 017 018import java.util.Arrays; 019import java.util.List; 020import org.modeshape.sequencer.ddl.DdlConstants; 021 022/** 023 * @author blafond 024 */ 025public interface MySqlDdlConstants extends DdlConstants { 026 public static final String[] CUSTOM_KEYWORDS = {"DATABASE", "DEFINER", "EVENT", "LOGFILE", "TABLESPACE", "TRIGGER", 027 "TINYINT", "MEDIUMINT", "BIGINT", "FIXED", "BOOL", "BOOLEAN", "BINARY", "VARBINARY", "TINYBLOB", "TINYTEXT", 028 "MEDIUMBLOB", "MEDIUMTEXT", "LONGBLOB", "LONGTEXT", "TEXT", "ENUM", "SET", "DATETIME", "YEAR", "BLOB", "RENAME", 029 "ALGORITHM", "SECURITY"}; 030 031 static final String[] STMT_ALTER_ALGORITHM = {"ALTER", "ALGORITHM"}; 032 static final String[] STMT_ALTER_DATABASE = {"ALTER", "DATABASE"}; 033 static final String[] STMT_ALTER_DEFINER = {"ALTER", "DEFINER"}; // = ALTER EVENT, ALTER VIEW 034 static final String[] STMT_ALTER_EVENT = {"ALTER", "EVENT"}; 035 static final String[] STMT_ALTER_FUNCTION = {"ALTER", "FUNCTION"}; 036 static final String[] STMT_ALTER_LOGFILE_GROUP = {"ALTER", "LOGFILE", "GROUP"}; 037 static final String[] STMT_ALTER_PROCEDURE = {"ALTER", "PROCEDURE"}; 038 static final String[] STMT_ALTER_SCHEMA = {"ALTER", "SCHEMA"}; 039 static final String[] STMT_ALTER_SERVER = {"ALTER", "SERVER"}; 040 static final String[] STMT_ALTER_SQL_SECURITY = {"ALTER", "SQL", "SECURITY"}; 041 static final String[] STMT_ALTER_TABLESPACE = {"ALTER", "TABLESPACE"}; 042 043 // ALTER [ONLINE | OFFLINE] [IGNORE] TABLE 044 static final String[] STMT_ALTER_IGNORE_TABLE = {"ALTER", "IGNORE", "TABLE"}; 045 static final String[] STMT_ALTER_ONLINE_TABLE = {"ALTER", "ONLINE", "TABLE"}; 046 static final String[] STMT_ALTER_OFFLINE_TABLE = {"ALTER", "OFFLINE", "TABLE"}; 047 static final String[] STMT_ALTER_ONLINE_IGNORE_TABLE = {"ALTER", "ONLINE", "IGNORE", "TABLE"}; 048 static final String[] STMT_ALTER_OFFLINE_IGNORE_TABLE = {"ALTER", "OFFLINE", "IGNORE", "TABLE"}; 049 050 interface MySqlStatementStartPhrases { 051 static final String[][] ALTER_PHRASES = {STMT_ALTER_DATABASE, STMT_ALTER_DEFINER, STMT_ALTER_EVENT, STMT_ALTER_FUNCTION, 052 STMT_ALTER_LOGFILE_GROUP, STMT_ALTER_PROCEDURE, STMT_ALTER_SCHEMA, STMT_ALTER_SERVER, STMT_ALTER_TABLESPACE, 053 STMT_ALTER_IGNORE_TABLE, STMT_ALTER_ONLINE_TABLE, STMT_ALTER_OFFLINE_TABLE, STMT_ALTER_ONLINE_IGNORE_TABLE, 054 STMT_ALTER_OFFLINE_IGNORE_TABLE}; 055 056 static final String[] STMT_CREATE_DATABASE = {"CREATE", "DATABASE"}; 057 static final String[] STMT_CREATE_DEFINER = {"CREATE", "DEFINER"}; // TRIGGER, FUNCTION, PROCEDURE, EVENT 058 static final String[] STMT_CREATE_EVENT = {"CREATE", "EVENT"}; 059 static final String[] STMT_CREATE_FUNCTION = {"CREATE", "FUNCTION"}; 060 static final String[] STMT_CREATE_INDEX = {"CREATE", "INDEX"}; 061 static final String[] STMT_CREATE_LOGFILE_GROUP = {"CREATE", "LOGFILE", "GROUP"}; 062 static final String[] STMT_CREATE_UNIQUE_INDEX = {"CREATE", "UNIQUE", "INDEX"}; 063 static final String[] STMT_CREATE_PROCEDURE = {"CREATE", "PROCEDURE"}; 064 static final String[] STMT_CREATE_SERVER = {"CREATE", "SERVER"}; 065 static final String[] STMT_CREATE_TABLESPACE = {"CREATE", "TABLESPACE"}; 066 static final String[] STMT_CREATE_TRIGGER = {"CREATE", "TRIGGER"}; 067 068 static final String[][] CREATE_PHRASES = {STMT_CREATE_DATABASE, STMT_CREATE_DEFINER, STMT_CREATE_EVENT, 069 STMT_CREATE_FUNCTION, STMT_CREATE_INDEX, STMT_CREATE_LOGFILE_GROUP, STMT_CREATE_UNIQUE_INDEX, STMT_CREATE_PROCEDURE, 070 STMT_CREATE_SERVER, STMT_CREATE_TABLESPACE, STMT_CREATE_TRIGGER}; 071 072 /* 073 * TODO: WORK REQUIRED HERE 074 * 075 * NOTE: The CREATE VIEW syntax for MySQL is convoluted as shown below. Basically you have to check for multiple properties 076 * BEFORE the actual "VIEW view_name (...) AS ...." is defined. 077 * Will make it difficult to parse cleanly. 078 * 079 * THIS ALSO affects ALTER VIEW 080 * 081 CREATE 082 [OR REPLACE] 083 [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 084 [DEFINER = { user | CURRENT_USER }] 085 [SQL SECURITY { DEFINER | INVOKER }] 086 VIEW view_name [(column_list)] 087 AS select_statement 088 [WITH [CASCADED | LOCAL] CHECK OPTION] 089 * 090 * 091 */ 092 093 static final String[] STMT_DROP_DATABASE = {"DROP", "DATABASE"}; 094 static final String[] STMT_DROP_EVENT = {"DROP", "EVENT"}; 095 static final String[] STMT_DROP_FUNCTION = {"DROP", "FUNCTION"}; 096 static final String[] STMT_DROP_INDEX = {"DROP", "INDEX"}; 097 static final String[] STMT_DROP_ONLINE_INDEX = {"DROP", "ONLINE", "INDEX"}; 098 static final String[] STMT_DROP_OFFLINE_INDEX = {"DROP", "OFFLINE", "INDEX"}; 099 static final String[] STMT_DROP_LOGFILE_GROUP = {"DROP", "LOGFILE", "GROUP"}; 100 static final String[] STMT_DROP_PROCEDURE = {"DROP", "PROCEDURE"}; 101 static final String[] STMT_DROP_SERVER = {"DROP", "SERVER"}; 102 static final String[] STMT_DROP_TABLESPACE = {"DROP", "TABLESPACE"}; 103 static final String[] STMT_DROP_TRIGGER = {"DROP", "TRIGGER"}; 104 105 static final String[][] DROP_PHRASES = {STMT_DROP_DATABASE, STMT_DROP_EVENT, STMT_DROP_FUNCTION, STMT_DROP_INDEX, 106 STMT_DROP_ONLINE_INDEX, STMT_DROP_OFFLINE_INDEX, STMT_DROP_LOGFILE_GROUP, STMT_DROP_PROCEDURE, STMT_DROP_SERVER, 107 STMT_DROP_TABLESPACE, STMT_DROP_TRIGGER}; 108 static final String[][] SET_PHRASES = { 109 110 }; 111 112 // RENAME {DATABASE | SCHEMA} db_name TO new_db_name; 113 static final String[] STMT_RENAME_DATABASE = {"RENAME", "DATABASE"}; 114 static final String[] STMT_RENAME_SCHEMA = {"RENAME", "SCHEMA"}; 115 // RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2] ... 116 static final String[] STMT_RENAME_TABLE = {"RENAME", "TABLE"}; 117 118 static final String[][] MISC_PHRASES = {STMT_RENAME_DATABASE, STMT_RENAME_SCHEMA, STMT_RENAME_TABLE}; 119 } 120 121 static final String[] DTYPE_NATIONAL_VARCHAR = {"NATIONAL", "VARCHAR"};// BOOLEAN 122 123 static final String[] DTYPE_TINYINT = {"TINYINT"}; // TINYINT[(M)] [UNSIGNED] [ZEROFILL] 124 static final String[] DTYPE_MEDIUMINT = {"MEDIUMINT"}; // MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 125 static final String[] DTYPE_BIGINT = {"BIGINT"}; // BIGINT[(M)] [UNSIGNED] [ZEROFILL] 126 static final String[] DTYPE_FIXED = {"FIXED"};// FIXED[(M[,D])] [UNSIGNED] [ZEROFILL] 127 static final String[] DTYPE_BOOL = {"BOOL"};// BOOL 128 static final String[] DTYPE_BOOLEAN = {"BOOLEAN"};// BOOLEAN 129 130 static final String[] DTYPE_DOUBLE = {"DOUBLE"}; // DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 131 132 static final String[] DTYPE_BINARY = {"BINARY"}; 133 static final String[] DTYPE_VARBINARY = {"VARBINARY"}; 134 static final String[] DTYPE_BLOB = {"BLOB"}; 135 static final String[] DTYPE_TINYBLOB = {"TINYBLOB"}; 136 static final String[] DTYPE_TINYTEXT = {"TINYTEXT"}; 137 static final String[] DTYPE_TEXT = {"TEXT"}; 138 static final String[] DTYPE_MEDIUMBLOB = {"MEDIUMBLOB"}; 139 static final String[] DTYPE_MEDIUMTEXT = {"MEDIUMTEXT"}; 140 static final String[] DTYPE_LONGBLOB = {"LONGBLOB"}; 141 static final String[] DTYPE_LONGTEXT = {"LONGTEXT"}; 142 static final String[] DTYPE_ENUM = {"ENUM"}; 143 static final String[] DTYPE_SET = {"SET"}; 144 145 static final String[] DTYPE_DATETIME = {"DATETIME"}; 146 static final String[] DTYPE_YEAR = {"YEAR"}; 147 148 interface MySqlDataTypes { 149 static final List<String[]> CUSTOM_DATATYPE_START_PHRASES = Arrays.asList(new String[][] {DTYPE_BIGINT, DTYPE_BOOL, 150 DTYPE_BOOLEAN, DTYPE_FIXED, DTYPE_DOUBLE, DTYPE_MEDIUMINT, DTYPE_TINYINT, DTYPE_NATIONAL_VARCHAR, DTYPE_BINARY, 151 DTYPE_VARBINARY, DTYPE_TINYBLOB, DTYPE_TINYTEXT, DTYPE_TEXT, DTYPE_MEDIUMBLOB, DTYPE_MEDIUMTEXT, DTYPE_LONGBLOB, 152 DTYPE_LONGTEXT, DTYPE_ENUM, DTYPE_SET, DTYPE_DATETIME, DTYPE_YEAR, DTYPE_BLOB}); 153 154 static final List<String> CUSTOM_DATATYPE_START_WORDS = Arrays.asList(new String[] {"TINYINT", "MEDIUMINT", "BIGINT", 155 "FIXED", "BOOL", "BOOLEAN", "BINARY", "VARBINARY", "TINYBLOB", "TINYTEXT", "MEDIUMBLOB", "MEDIUMTEXT", "LONGBLOB", 156 "LONGTEXT", "TEXT", "ENUM", "SET", "DATETIME", "YEAR", "BLOB"}); 157 /* 158 * =========================================================================================================================== 159 * DATATYPES 160 161 data_type: 162 BIT[(length)] 163 | TINYINT[(length)] [UNSIGNED] [ZEROFILL] 164 | SMALLINT[(length)] [UNSIGNED] [ZEROFILL] 165 | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] 166 | INT[(length)] [UNSIGNED] [ZEROFILL] 167 | INTEGER[(length)] [UNSIGNED] [ZEROFILL] 168 | BIGINT[(length)] [UNSIGNED] [ZEROFILL] 169 | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] 170 | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] 171 | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] 172 | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL] 173 | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL] 174 | DATE 175 | TIME 176 | TIMESTAMP 177 | DATETIME 178 | YEAR 179 | CHAR[(length)] 180 [CHARACTER SET charset_name] [COLLATE collation_name] 181 | VARCHAR(length) 182 [CHARACTER SET charset_name] [COLLATE collation_name] 183 | BINARY[(length)] 184 | VARBINARY(length) 185 | TINYBLOB 186 | BLOB 187 | MEDIUMBLOB 188 | LONGBLOB 189 | TINYTEXT [BINARY] 190 [CHARACTER SET charset_name] [COLLATE collation_name] 191 | TEXT [BINARY] 192 [CHARACTER SET charset_name] [COLLATE collation_name] 193 | MEDIUMTEXT [BINARY] 194 [CHARACTER SET charset_name] [COLLATE collation_name] 195 | LONGTEXT [BINARY] 196 [CHARACTER SET charset_name] [COLLATE collation_name] 197 | ENUM(value1,value2,value3,...) 198 [CHARACTER SET charset_name] [COLLATE collation_name] 199 | SET(value1,value2,value3,...) 200 [CHARACTER SET charset_name] [COLLATE collation_name] 201 | spatial_type 202 203 204 * 205 */ 206 } 207}