View Javadoc

1   /*
2    * ModeShape (http://www.modeshape.org)
3    * See the COPYRIGHT.txt file distributed with this work for information
4    * regarding copyright ownership.  Some portions may be licensed
5    * to Red Hat, Inc. under one or more contributor license agreements.
6    * See the AUTHORS.txt file in the distribution for a full listing of 
7    * individual contributors.
8    *
9    * ModeShape is free software. Unless otherwise indicated, all code in ModeShape
10   * is licensed to you under the terms of the GNU Lesser General Public License as
11   * published by the Free Software Foundation; either version 2.1 of
12   * the License, or (at your option) any later version.
13   * 
14   * ModeShape is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17   * Lesser General Public License for more details.
18   *
19   * You should have received a copy of the GNU Lesser General Public
20   * License along with this software; if not, write to the Free
21   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
23   */
24  package org.modeshape.sequencer.ddl.dialect.mysql;
25  
26  import java.util.Arrays;
27  import java.util.List;
28  
29  import org.modeshape.sequencer.ddl.DdlConstants;
30  
31  /**
32   * @author blafond
33   *
34   */
35  public interface MySqlDdlConstants extends DdlConstants {
36  	public static final String[] CUSTOM_KEYWORDS = {
37  		"DATABASE", "DEFINER", "EVENT", "LOGFILE", "TABLESPACE", "TRIGGER",
38  		"TINYINT", "MEDIUMINT", "BIGINT", "FIXED", "BOOL", "BOOLEAN", "BINARY", "VARBINARY", "TINYBLOB",
39    		"TINYTEXT", "MEDIUMBLOB", "MEDIUMTEXT", "LONGBLOB", "LONGTEXT", "TEXT", "ENUM", "SET", "DATETIME", "YEAR", "BLOB", "RENAME",
40    		"ALGORITHM", "SECURITY"
41  	};
42  
43  	static final String[] STMT_ALTER_ALGORITHM 			= {"ALTER", "ALGORITHM"};
44  	static final String[] STMT_ALTER_DATABASE 			= {"ALTER", "DATABASE"};
45  	static final String[] STMT_ALTER_DEFINER 			= {"ALTER", "DEFINER"}; // = ALTER EVENT, ALTER VIEW
46  	static final String[] STMT_ALTER_EVENT	 			= {"ALTER", "EVENT"};
47  	static final String[] STMT_ALTER_FUNCTION 			= {"ALTER", "FUNCTION"};
48  	static final String[] STMT_ALTER_LOGFILE_GROUP		= {"ALTER", "LOGFILE", "GROUP"};
49  	static final String[] STMT_ALTER_PROCEDURE 			= {"ALTER", "PROCEDURE"};
50  	static final String[] STMT_ALTER_SCHEMA 			= {"ALTER", "SCHEMA"};
51  	static final String[] STMT_ALTER_SERVER 			= {"ALTER", "SERVER"};
52  	static final String[] STMT_ALTER_SQL_SECURITY 		= {"ALTER", "SQL", "SECURITY"};
53  	static final String[] STMT_ALTER_TABLESPACE			= {"ALTER", "TABLESPACE"};
54  	
55  	// ALTER [ONLINE | OFFLINE] [IGNORE] TABLE
56  	static final String[] STMT_ALTER_IGNORE_TABLE			= {"ALTER", "IGNORE", "TABLE"};
57  	static final String[] STMT_ALTER_ONLINE_TABLE			= {"ALTER", "ONLINE", "TABLE"};
58  	static final String[] STMT_ALTER_OFFLINE_TABLE			= {"ALTER", "OFFLINE", "TABLE"};
59  	static final String[] STMT_ALTER_ONLINE_IGNORE_TABLE	= {"ALTER", "ONLINE", "IGNORE", "TABLE"};
60  	static final String[] STMT_ALTER_OFFLINE_IGNORE_TABLE	= {"ALTER", "OFFLINE", "IGNORE", "TABLE"};
61  	
62  	interface MySqlStatementStartPhrases {
63  	    static final String[][] ALTER_PHRASES = {
64  	    	STMT_ALTER_DATABASE,
65  	    	STMT_ALTER_DEFINER,
66  	    	STMT_ALTER_EVENT,
67  	    	STMT_ALTER_FUNCTION,
68  	    	STMT_ALTER_LOGFILE_GROUP,
69  	    	STMT_ALTER_PROCEDURE,
70  	    	STMT_ALTER_SCHEMA,
71  	    	STMT_ALTER_SERVER,
72  	    	STMT_ALTER_TABLESPACE,
73  	    	STMT_ALTER_IGNORE_TABLE, 
74  	    	STMT_ALTER_ONLINE_TABLE,
75  	    	STMT_ALTER_OFFLINE_TABLE,
76  	    	STMT_ALTER_ONLINE_IGNORE_TABLE,
77  	    	STMT_ALTER_OFFLINE_IGNORE_TABLE
78  		};
79  	    
80  		static final String[] STMT_CREATE_DATABASE 			= {"CREATE", "DATABASE"};
81  		static final String[] STMT_CREATE_DEFINER 			= {"CREATE", "DEFINER"}; // TRIGGER, FUNCTION, PROCEDURE, EVENT
82  		static final String[] STMT_CREATE_EVENT 			= {"CREATE", "EVENT"};
83  		static final String[] STMT_CREATE_FUNCTION 			= {"CREATE", "FUNCTION"};
84  		static final String[] STMT_CREATE_INDEX 			= {"CREATE", "INDEX"};
85  		static final String[] STMT_CREATE_LOGFILE_GROUP 	= {"CREATE", "LOGFILE", "GROUP"};
86  		static final String[] STMT_CREATE_UNIQUE_INDEX 		= {"CREATE", "UNIQUE", "INDEX"};
87  		static final String[] STMT_CREATE_PROCEDURE 		= {"CREATE", "PROCEDURE"};
88  		static final String[] STMT_CREATE_SERVER 			= {"CREATE", "SERVER"};
89  		static final String[] STMT_CREATE_TABLESPACE 		= {"CREATE", "TABLESPACE"};
90  		static final String[] STMT_CREATE_TRIGGER 			= {"CREATE", "TRIGGER"};
91  
92  	    static final String[][] CREATE_PHRASES = { 
93  	    	STMT_CREATE_DATABASE,
94  	    	STMT_CREATE_DEFINER,
95  	    	STMT_CREATE_EVENT,
96  	    	STMT_CREATE_FUNCTION,
97  	    	STMT_CREATE_INDEX,
98  	    	STMT_CREATE_LOGFILE_GROUP,
99  	    	STMT_CREATE_UNIQUE_INDEX,
100 	    	STMT_CREATE_PROCEDURE,
101 	    	STMT_CREATE_SERVER,
102 	    	STMT_CREATE_TABLESPACE,
103 	    	STMT_CREATE_TRIGGER
104 		};
105 	    
106 	    /*
107 	     * TODO:  WORK REQUIRED HERE
108 	     * 
109 	     * NOTE:  The CREATE VIEW syntax for MySQL is convoluted as shown below. Basically you have to check for multiple properties
110 	     * BEFORE the actual "VIEW view_name (...) AS ...." is defined.
111 	     * Will make it difficult to parse cleanly.
112 	     * 
113 	     * THIS ALSO affects ALTER VIEW
114 	     * 
115 				CREATE
116 				    [OR REPLACE]
117 				    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
118 				    [DEFINER = { user | CURRENT_USER }]
119 				    [SQL SECURITY { DEFINER | INVOKER }]
120 				    VIEW view_name [(column_list)]
121 				    AS select_statement
122 				    [WITH [CASCADED | LOCAL] CHECK OPTION]
123 	     * 
124 	     * 
125 	     */
126 	    
127 		static final String[] STMT_DROP_DATABASE 		= {"DROP", "DATABASE"};
128 		static final String[] STMT_DROP_EVENT 			= {"DROP", "EVENT"};
129 		static final String[] STMT_DROP_FUNCTION 		= {"DROP", "FUNCTION"};
130 		static final String[] STMT_DROP_INDEX 			= {"DROP", "INDEX"};
131 		static final String[] STMT_DROP_ONLINE_INDEX 	= {"DROP", "ONLINE", "INDEX"};
132 		static final String[] STMT_DROP_OFFLINE_INDEX 	= {"DROP", "OFFLINE", "INDEX"};
133 		static final String[] STMT_DROP_LOGFILE_GROUP 	= {"DROP", "LOGFILE", "GROUP"};
134 		static final String[] STMT_DROP_PROCEDURE 		= {"DROP", "PROCEDURE"};
135 		static final String[] STMT_DROP_SERVER 			= {"DROP", "SERVER"};
136 		static final String[] STMT_DROP_TABLESPACE 		= {"DROP", "TABLESPACE"};
137 		static final String[] STMT_DROP_TRIGGER 		= {"DROP", "TRIGGER"};
138 	    
139 	    static final String[][] DROP_PHRASES = {
140 	    	STMT_DROP_DATABASE,
141 	    	STMT_DROP_EVENT,
142 	    	STMT_DROP_FUNCTION,
143 	    	STMT_DROP_INDEX,
144 	    	STMT_DROP_ONLINE_INDEX,
145 	    	STMT_DROP_OFFLINE_INDEX,
146 	    	STMT_DROP_LOGFILE_GROUP,
147 	    	STMT_DROP_PROCEDURE,
148 	    	STMT_DROP_SERVER,
149 	    	STMT_DROP_TABLESPACE,
150 	    	STMT_DROP_TRIGGER
151 		};
152 	    static final String[][] SET_PHRASES = { 
153 	
154 		};
155 
156 	    // RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
157 	    static final String[] STMT_RENAME_DATABASE 		= {"RENAME", "DATABASE"};
158 	    static final String[] STMT_RENAME_SCHEMA 		= {"RENAME", "SCHEMA"};
159 	    // RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2] ...
160 	    static final String[] STMT_RENAME_TABLE 		= {"RENAME", "TABLE"};
161 	    
162 	    static final String[][] MISC_PHRASES = {
163 	    	STMT_RENAME_DATABASE, STMT_RENAME_SCHEMA, STMT_RENAME_TABLE
164 		};
165 	}
166 	
167 	static final String[] DTYPE_NATIONAL_VARCHAR 			= {"NATIONAL", "VARCHAR"};// BOOLEAN
168 	
169 	static final String[] DTYPE_TINYINT 					= {"TINYINT"}; // TINYINT[(M)] [UNSIGNED] [ZEROFILL]
170 	static final String[] DTYPE_MEDIUMINT 					= {"MEDIUMINT"}; // MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
171 	static final String[] DTYPE_BIGINT 						= {"BIGINT"}; // BIGINT[(M)] [UNSIGNED] [ZEROFILL]
172 	static final String[] DTYPE_FIXED 						= {"FIXED"};// FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
173 	static final String[] DTYPE_BOOL 						= {"BOOL"};// BOOL
174 	static final String[] DTYPE_BOOLEAN 					= {"BOOLEAN"};// BOOLEAN
175 	
176 	static final String[] DTYPE_DOUBLE 						= {"DOUBLE"}; // DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
177 	
178 	static final String[] DTYPE_BINARY 						= {"BINARY"};
179 	static final String[] DTYPE_VARBINARY 					= {"VARBINARY"};
180 	static final String[] DTYPE_BLOB 						= {"BLOB"};
181 	static final String[] DTYPE_TINYBLOB 					= {"TINYBLOB"};
182 	static final String[] DTYPE_TINYTEXT 					= {"TINYTEXT"};
183 	static final String[] DTYPE_TEXT 						= {"TEXT"};
184 	static final String[] DTYPE_MEDIUMBLOB 					= {"MEDIUMBLOB"};
185 	static final String[] DTYPE_MEDIUMTEXT 					= {"MEDIUMTEXT"};
186 	static final String[] DTYPE_LONGBLOB 					= {"LONGBLOB"};
187 	static final String[] DTYPE_LONGTEXT 					= {"LONGTEXT"};
188 	static final String[] DTYPE_ENUM 						= {"ENUM"};
189 	static final String[] DTYPE_SET 						= {"SET"};
190 	
191 	static final String[] DTYPE_DATETIME 					= {"DATETIME"};
192 	static final String[] DTYPE_YEAR 						= {"YEAR"};
193 	
194 	interface MySqlDataTypes {
195 		static final List<String[]> CUSTOM_DATATYPE_START_PHRASES = 
196 	  		Arrays.asList(new String[][] {
197 	  				DTYPE_BIGINT, DTYPE_BOOL, DTYPE_BOOLEAN, DTYPE_FIXED, DTYPE_DOUBLE, DTYPE_MEDIUMINT, DTYPE_TINYINT,
198 	  				DTYPE_NATIONAL_VARCHAR, DTYPE_BINARY, DTYPE_VARBINARY, DTYPE_TINYBLOB, DTYPE_TINYTEXT, DTYPE_TEXT,
199 	  				DTYPE_MEDIUMBLOB, DTYPE_MEDIUMTEXT, DTYPE_LONGBLOB, DTYPE_LONGTEXT, DTYPE_ENUM, DTYPE_SET,
200 	  				DTYPE_DATETIME, DTYPE_YEAR, DTYPE_BLOB
201 	  	  	});
202 		
203 	  	static final List<String> CUSTOM_DATATYPE_START_WORDS = 
204 	  		Arrays.asList(new String[] {
205 	  			"TINYINT", "MEDIUMINT", "BIGINT", "FIXED", "BOOL", "BOOLEAN", "BINARY", "VARBINARY", "TINYBLOB",
206 	  			"TINYTEXT", "MEDIUMBLOB", "MEDIUMTEXT", "LONGBLOB", "LONGTEXT", "TEXT", "ENUM", "SET", "DATETIME", "YEAR", "BLOB"
207 	  	  	});
208 		/* 
209 		 * ===========================================================================================================================
210 		 * DATATYPES
211 
212 				data_type:
213 				    BIT[(length)]
214 				  | TINYINT[(length)] [UNSIGNED] [ZEROFILL]
215 				  | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
216 				  | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
217 				  | INT[(length)] [UNSIGNED] [ZEROFILL]
218 				  | INTEGER[(length)] [UNSIGNED] [ZEROFILL]
219 				  | BIGINT[(length)] [UNSIGNED] [ZEROFILL]
220 				  | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
221 				  | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
222 				  | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
223 				  | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]
224 				  | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]
225 				  | DATE
226 				  | TIME
227 				  | TIMESTAMP
228 				  | DATETIME
229 				  | YEAR
230 				  | CHAR[(length)]
231 				      [CHARACTER SET charset_name] [COLLATE collation_name]
232 				  | VARCHAR(length)
233 				      [CHARACTER SET charset_name] [COLLATE collation_name]
234 				  | BINARY[(length)]
235 				  | VARBINARY(length)
236 				  | TINYBLOB
237 				  | BLOB
238 				  | MEDIUMBLOB
239 				  | LONGBLOB
240 				  | TINYTEXT [BINARY]
241 				      [CHARACTER SET charset_name] [COLLATE collation_name]
242 				  | TEXT [BINARY]
243 				      [CHARACTER SET charset_name] [COLLATE collation_name]
244 				  | MEDIUMTEXT [BINARY]
245 				      [CHARACTER SET charset_name] [COLLATE collation_name]
246 				  | LONGTEXT [BINARY]
247 				      [CHARACTER SET charset_name] [COLLATE collation_name]
248 				  | ENUM(value1,value2,value3,...)
249 				      [CHARACTER SET charset_name] [COLLATE collation_name]
250 				  | SET(value1,value2,value3,...)
251 				      [CHARACTER SET charset_name] [COLLATE collation_name]
252 				  | spatial_type
253 
254 
255 			 * 
256 			 */
257 	}
258 }