| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.apache.empire.dbms.mysql; |
| |
| import java.sql.Connection; |
| import java.sql.SQLException; |
| import java.util.GregorianCalendar; |
| |
| import org.apache.empire.commons.StringUtils; |
| import org.apache.empire.data.DataType; |
| import org.apache.empire.db.DBColumnExpr; |
| import org.apache.empire.db.DBCombinedCmd; |
| import org.apache.empire.db.DBCommand; |
| import org.apache.empire.db.DBCommandExpr; |
| import org.apache.empire.db.DBDDLGenerator; |
| import org.apache.empire.db.DBDDLGenerator.DDLActionType; |
| import org.apache.empire.db.DBDatabase; |
| import org.apache.empire.db.DBObject; |
| import org.apache.empire.db.DBRowSet; |
| import org.apache.empire.db.DBSQLScript; |
| import org.apache.empire.db.DBTable; |
| import org.apache.empire.db.DBTableColumn; |
| import org.apache.empire.db.exceptions.EmpireSQLException; |
| import org.apache.empire.dbms.DBMSHandler; |
| import org.apache.empire.dbms.DBMSHandlerBase; |
| import org.apache.empire.dbms.DBMSFeature; |
| import org.apache.empire.dbms.DBSqlPhrase; |
| import org.apache.empire.exceptions.NotSupportedException; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| |
| /** |
| * This class provides support for the MySQL database system. |
| * |
| * |
| */ |
| public class DBMSHandlerMySQL extends DBMSHandlerBase |
| { |
| // *Deprecated* private static final long serialVersionUID = 1L; |
| private static final Logger log = LoggerFactory.getLogger(DBMSHandlerMySQL.class); |
| |
| /** |
| * Defines the MySQL command type. |
| */ |
| public static class DBCommandMySQL extends DBCommand |
| { |
| // *Deprecated* private static final long serialVersionUID = 1L; |
| |
| protected int limit = -1; |
| protected int skip = -1; |
| |
| public DBCommandMySQL(boolean autoPrepareStmt) |
| { |
| super(autoPrepareStmt); |
| } |
| |
| @Override |
| public DBCommand limitRows(int numRows) |
| { |
| limit = numRows; |
| return this; |
| } |
| |
| @Override |
| public DBCommand skipRows(int numRows) |
| { |
| skip = numRows; |
| return this; |
| } |
| |
| @Override |
| public void clearLimit() |
| { |
| limit = -1; |
| skip = -1; |
| } |
| |
| @Override |
| public void getSelect(StringBuilder buf) |
| { // call base class |
| super.getSelect(buf); |
| // add limit and offset |
| if (limit>=0) |
| { buf.append("\r\nLIMIT "); |
| buf.append(String.valueOf(limit)); |
| // Offset |
| if (skip>=0) |
| { buf.append(" OFFSET "); |
| buf.append(String.valueOf(skip)); |
| } |
| } |
| } |
| |
| /** |
| * Creates an MySQL specific delete statement. |
| * @return the delete SQL-Command |
| */ |
| @Override |
| protected void addDeleteWithJoins(StringBuilder buf, DBRowSet table) |
| { |
| // DELETE with Multiple-Table Syntax |
| // http://dev.mysql.com/doc/refman/5.7/en/delete.html |
| buf.append(table.getAlias()); |
| addFrom(buf); |
| addWhere(buf); |
| } |
| } |
| |
| // Properties |
| private String databaseName = null; |
| private String characterSet = "utf8"; |
| |
| // Sequence treatment |
| // When set to 'false' (default) MySQL's autoincrement feature is used. |
| private boolean useSequenceTable = false; |
| private String sequenceTableName = "Sequences"; |
| private String engine; // The database engine to use when creating new tables |
| |
| private DBDDLGenerator<?> ddlGenerator = null; // lazy creation |
| |
| /** |
| * Constructor for the MySQL database dbms.<br> |
| */ |
| public DBMSHandlerMySQL() |
| { |
| // Default Constructor |
| setReservedKeywords(); |
| } |
| |
| private void addReservedKeyWord(final String keyWord){ |
| boolean added = reservedSQLKeywords.add(keyWord.toLowerCase()); |
| if(!added){ |
| log.debug("Existing keyWord added: " + keyWord); |
| } |
| } |
| |
| private void setReservedKeywords(){ |
| // list of reserved keywords |
| // https://dev.mysql.com/doc/refman/5.7/en/keywords.html |
| addReservedKeyWord("ACCESSIBLE".toLowerCase()); |
| addReservedKeyWord("ACCOUNT".toLowerCase()); |
| addReservedKeyWord("ACTION".toLowerCase()); |
| addReservedKeyWord("ADD".toLowerCase()); |
| addReservedKeyWord("AFTER".toLowerCase()); |
| addReservedKeyWord("AGAINST".toLowerCase()); |
| addReservedKeyWord("AGGREGATE".toLowerCase()); |
| addReservedKeyWord("ALGORITHM".toLowerCase()); |
| addReservedKeyWord("ALL".toLowerCase()); |
| addReservedKeyWord("ALTER".toLowerCase()); |
| addReservedKeyWord("ALWAYS".toLowerCase()); |
| addReservedKeyWord("ANALYSE".toLowerCase()); |
| addReservedKeyWord("ANALYZE".toLowerCase()); |
| addReservedKeyWord("AND".toLowerCase()); |
| addReservedKeyWord("ANY".toLowerCase()); |
| addReservedKeyWord("AS".toLowerCase()); |
| addReservedKeyWord("ASC".toLowerCase()); |
| addReservedKeyWord("ASCII".toLowerCase()); |
| addReservedKeyWord("ASENSITIVE".toLowerCase()); |
| addReservedKeyWord("AT".toLowerCase()); |
| addReservedKeyWord("AUTOEXTEND_SIZE".toLowerCase()); |
| addReservedKeyWord("AUTO_INCREMENT".toLowerCase()); |
| addReservedKeyWord("AVG".toLowerCase()); |
| addReservedKeyWord("AVG_ROW_LENGTH".toLowerCase()); |
| addReservedKeyWord("BACKUP".toLowerCase()); |
| addReservedKeyWord("BEFORE".toLowerCase()); |
| addReservedKeyWord("BEGIN".toLowerCase()); |
| addReservedKeyWord("BETWEEN".toLowerCase()); |
| addReservedKeyWord("BIGINT".toLowerCase()); |
| addReservedKeyWord("BINARY".toLowerCase()); |
| addReservedKeyWord("BINLOG".toLowerCase()); |
| addReservedKeyWord("BIT".toLowerCase()); |
| addReservedKeyWord("BLOB".toLowerCase()); |
| addReservedKeyWord("BLOCK".toLowerCase()); |
| addReservedKeyWord("BOOL".toLowerCase()); |
| addReservedKeyWord("BOOLEAN".toLowerCase()); |
| addReservedKeyWord("BOTH".toLowerCase()); |
| addReservedKeyWord("BTREE".toLowerCase()); |
| addReservedKeyWord("BY".toLowerCase()); |
| addReservedKeyWord("BYTE".toLowerCase()); |
| addReservedKeyWord("CACHE".toLowerCase()); |
| addReservedKeyWord("CALL".toLowerCase()); |
| addReservedKeyWord("CASCADE".toLowerCase()); |
| addReservedKeyWord("CASCADED".toLowerCase()); |
| addReservedKeyWord("CASE".toLowerCase()); |
| addReservedKeyWord("CATALOG_NAME".toLowerCase()); |
| addReservedKeyWord("CHAIN".toLowerCase()); |
| addReservedKeyWord("CHANGE".toLowerCase()); |
| addReservedKeyWord("CHANGED".toLowerCase()); |
| addReservedKeyWord("CHANNEL".toLowerCase()); |
| addReservedKeyWord("CHAR".toLowerCase()); |
| addReservedKeyWord("CHARACTER".toLowerCase()); |
| addReservedKeyWord("CHARSET".toLowerCase()); |
| addReservedKeyWord("CHECK".toLowerCase()); |
| addReservedKeyWord("CHECKSUM".toLowerCase()); |
| addReservedKeyWord("CIPHER".toLowerCase()); |
| addReservedKeyWord("CLASS_ORIGIN".toLowerCase()); |
| addReservedKeyWord("CLIENT".toLowerCase()); |
| addReservedKeyWord("CLOSE".toLowerCase()); |
| addReservedKeyWord("COALESCE".toLowerCase()); |
| addReservedKeyWord("CODE".toLowerCase()); |
| addReservedKeyWord("COLLATE".toLowerCase()); |
| addReservedKeyWord("COLLATION".toLowerCase()); |
| addReservedKeyWord("COLUMN".toLowerCase()); |
| addReservedKeyWord("COLUMNS".toLowerCase()); |
| addReservedKeyWord("COLUMN_FORMAT".toLowerCase()); |
| addReservedKeyWord("COLUMN_NAME".toLowerCase()); |
| addReservedKeyWord("COMMENT".toLowerCase()); |
| addReservedKeyWord("COMMIT".toLowerCase()); |
| addReservedKeyWord("COMMITTED".toLowerCase()); |
| addReservedKeyWord("COMPACT".toLowerCase()); |
| addReservedKeyWord("COMPLETION".toLowerCase()); |
| addReservedKeyWord("COMPRESSED".toLowerCase()); |
| addReservedKeyWord("COMPRESSION".toLowerCase()); |
| addReservedKeyWord("CONCURRENT".toLowerCase()); |
| addReservedKeyWord("CONDITION".toLowerCase()); |
| addReservedKeyWord("CONNECTION".toLowerCase()); |
| addReservedKeyWord("CONSISTENT".toLowerCase()); |
| addReservedKeyWord("CONSTRAINT".toLowerCase()); |
| addReservedKeyWord("CONSTRAINT_CATALOG".toLowerCase()); |
| addReservedKeyWord("CONSTRAINT_NAME".toLowerCase()); |
| addReservedKeyWord("CONSTRAINT_SCHEMA".toLowerCase()); |
| addReservedKeyWord("CONTAINS".toLowerCase()); |
| addReservedKeyWord("CONTEXT".toLowerCase()); |
| addReservedKeyWord("CONTINUE".toLowerCase()); |
| addReservedKeyWord("CONVERT".toLowerCase()); |
| addReservedKeyWord("CPU".toLowerCase()); |
| addReservedKeyWord("CREATE".toLowerCase()); |
| addReservedKeyWord("CROSS".toLowerCase()); |
| addReservedKeyWord("CUBE".toLowerCase()); |
| addReservedKeyWord("CURRENT".toLowerCase()); |
| addReservedKeyWord("CURRENT_DATE".toLowerCase()); |
| addReservedKeyWord("CURRENT_TIME".toLowerCase()); |
| addReservedKeyWord("CURRENT_TIMESTAMP".toLowerCase()); |
| addReservedKeyWord("CURRENT_USER".toLowerCase()); |
| addReservedKeyWord("CURSOR".toLowerCase()); |
| addReservedKeyWord("CURSOR_NAME".toLowerCase()); |
| addReservedKeyWord("DATA".toLowerCase()); |
| addReservedKeyWord("DATABASE".toLowerCase()); |
| addReservedKeyWord("DATABASES".toLowerCase()); |
| addReservedKeyWord("DATAFILE".toLowerCase()); |
| addReservedKeyWord("DATE".toLowerCase()); |
| addReservedKeyWord("DATETIME".toLowerCase()); |
| addReservedKeyWord("DAY".toLowerCase()); |
| addReservedKeyWord("DAY_HOUR".toLowerCase()); |
| addReservedKeyWord("DAY_MICROSECOND".toLowerCase()); |
| addReservedKeyWord("DAY_MINUTE".toLowerCase()); |
| addReservedKeyWord("DAY_SECOND".toLowerCase()); |
| addReservedKeyWord("DEALLOCATE".toLowerCase()); |
| addReservedKeyWord("DEC".toLowerCase()); |
| addReservedKeyWord("DECIMAL".toLowerCase()); |
| addReservedKeyWord("DECLARE".toLowerCase()); |
| addReservedKeyWord("DEFAULT".toLowerCase()); |
| addReservedKeyWord("DEFAULT_AUTH".toLowerCase()); |
| addReservedKeyWord("DEFINER".toLowerCase()); |
| addReservedKeyWord("DELAYED".toLowerCase()); |
| addReservedKeyWord("DELAY_KEY_WRITE".toLowerCase()); |
| addReservedKeyWord("DELETE".toLowerCase()); |
| addReservedKeyWord("DESC".toLowerCase()); |
| addReservedKeyWord("DESCRIBE".toLowerCase()); |
| addReservedKeyWord("DES_KEY_FILE".toLowerCase()); |
| addReservedKeyWord("DETERMINISTIC".toLowerCase()); |
| addReservedKeyWord("DIAGNOSTICS".toLowerCase()); |
| addReservedKeyWord("DIRECTORY".toLowerCase()); |
| addReservedKeyWord("DISABLE".toLowerCase()); |
| addReservedKeyWord("DISCARD".toLowerCase()); |
| addReservedKeyWord("DISK".toLowerCase()); |
| addReservedKeyWord("DISTINCT".toLowerCase()); |
| addReservedKeyWord("DISTINCTROW".toLowerCase()); |
| addReservedKeyWord("DIV".toLowerCase()); |
| addReservedKeyWord("DO".toLowerCase()); |
| addReservedKeyWord("DOUBLE".toLowerCase()); |
| addReservedKeyWord("DROP".toLowerCase()); |
| addReservedKeyWord("DUAL".toLowerCase()); |
| addReservedKeyWord("DUMPFILE".toLowerCase()); |
| addReservedKeyWord("DUPLICATE".toLowerCase()); |
| addReservedKeyWord("DYNAMIC".toLowerCase()); |
| addReservedKeyWord("EACH".toLowerCase()); |
| addReservedKeyWord("ELSE".toLowerCase()); |
| addReservedKeyWord("ELSEIF".toLowerCase()); |
| addReservedKeyWord("ENABLE".toLowerCase()); |
| addReservedKeyWord("ENCLOSED".toLowerCase()); |
| addReservedKeyWord("ENCRYPTION".toLowerCase()); |
| addReservedKeyWord("END".toLowerCase()); |
| addReservedKeyWord("ENDS".toLowerCase()); |
| addReservedKeyWord("ENGINE".toLowerCase()); |
| addReservedKeyWord("ENGINES".toLowerCase()); |
| addReservedKeyWord("ENUM".toLowerCase()); |
| addReservedKeyWord("ERROR".toLowerCase()); |
| addReservedKeyWord("ERRORS".toLowerCase()); |
| addReservedKeyWord("ESCAPE".toLowerCase()); |
| addReservedKeyWord("ESCAPED".toLowerCase()); |
| addReservedKeyWord("EVENT".toLowerCase()); |
| addReservedKeyWord("EVENTS".toLowerCase()); |
| addReservedKeyWord("EVERY".toLowerCase()); |
| addReservedKeyWord("EXCHANGE".toLowerCase()); |
| addReservedKeyWord("EXECUTE".toLowerCase()); |
| addReservedKeyWord("EXISTS".toLowerCase()); |
| addReservedKeyWord("EXIT".toLowerCase()); |
| addReservedKeyWord("EXPANSION".toLowerCase()); |
| addReservedKeyWord("EXPIRE".toLowerCase()); |
| addReservedKeyWord("EXPLAIN".toLowerCase()); |
| addReservedKeyWord("EXPORT".toLowerCase()); |
| addReservedKeyWord("EXTENDED".toLowerCase()); |
| addReservedKeyWord("EXTENT_SIZE".toLowerCase()); |
| addReservedKeyWord("FALSE".toLowerCase()); |
| addReservedKeyWord("FAST".toLowerCase()); |
| addReservedKeyWord("FAULTS".toLowerCase()); |
| addReservedKeyWord("FETCH".toLowerCase()); |
| addReservedKeyWord("FIELDS".toLowerCase()); |
| addReservedKeyWord("FILE".toLowerCase()); |
| addReservedKeyWord("FILE_BLOCK_SIZE".toLowerCase()); |
| addReservedKeyWord("FILTER".toLowerCase()); |
| addReservedKeyWord("FIRST".toLowerCase()); |
| addReservedKeyWord("FIXED".toLowerCase()); |
| addReservedKeyWord("FLOAT".toLowerCase()); |
| addReservedKeyWord("FLOAT4".toLowerCase()); |
| addReservedKeyWord("FLOAT8".toLowerCase()); |
| addReservedKeyWord("FLUSH".toLowerCase()); |
| addReservedKeyWord("FOLLOWS".toLowerCase()); |
| addReservedKeyWord("FOR".toLowerCase()); |
| addReservedKeyWord("FORCE".toLowerCase()); |
| addReservedKeyWord("FOREIGN".toLowerCase()); |
| addReservedKeyWord("FORMAT".toLowerCase()); |
| addReservedKeyWord("FOUND".toLowerCase()); |
| addReservedKeyWord("FROM".toLowerCase()); |
| addReservedKeyWord("FULL".toLowerCase()); |
| addReservedKeyWord("FULLTEXT".toLowerCase()); |
| addReservedKeyWord("FUNCTION".toLowerCase()); |
| addReservedKeyWord("GENERAL".toLowerCase()); |
| addReservedKeyWord("GENERATED".toLowerCase()); |
| addReservedKeyWord("GEOMETRY".toLowerCase()); |
| addReservedKeyWord("GEOMETRYCOLLECTION".toLowerCase()); |
| addReservedKeyWord("GET".toLowerCase()); |
| addReservedKeyWord("GET_FORMAT".toLowerCase()); |
| addReservedKeyWord("GLOBAL".toLowerCase()); |
| addReservedKeyWord("GRANT".toLowerCase()); |
| addReservedKeyWord("GRANTS".toLowerCase()); |
| addReservedKeyWord("GROUP".toLowerCase()); |
| addReservedKeyWord("GROUP_REPLICATION".toLowerCase()); |
| addReservedKeyWord("HANDLER".toLowerCase()); |
| addReservedKeyWord("HASH".toLowerCase()); |
| addReservedKeyWord("HAVING".toLowerCase()); |
| addReservedKeyWord("HELP".toLowerCase()); |
| addReservedKeyWord("HIGH_PRIORITY".toLowerCase()); |
| addReservedKeyWord("HOST".toLowerCase()); |
| addReservedKeyWord("HOSTS".toLowerCase()); |
| addReservedKeyWord("HOUR".toLowerCase()); |
| addReservedKeyWord("HOUR_MICROSECOND".toLowerCase()); |
| addReservedKeyWord("HOUR_MINUTE".toLowerCase()); |
| addReservedKeyWord("HOUR_SECOND".toLowerCase()); |
| addReservedKeyWord("IDENTIFIED".toLowerCase()); |
| addReservedKeyWord("IF".toLowerCase()); |
| addReservedKeyWord("IGNORE".toLowerCase()); |
| addReservedKeyWord("IGNORE_SERVER_IDS".toLowerCase()); |
| addReservedKeyWord("IMPORT".toLowerCase()); |
| addReservedKeyWord("IN".toLowerCase()); |
| addReservedKeyWord("INDEX".toLowerCase()); |
| addReservedKeyWord("INDEXES".toLowerCase()); |
| addReservedKeyWord("INFILE".toLowerCase()); |
| addReservedKeyWord("INITIAL_SIZE".toLowerCase()); |
| addReservedKeyWord("INNER".toLowerCase()); |
| addReservedKeyWord("INOUT".toLowerCase()); |
| addReservedKeyWord("INSENSITIVE".toLowerCase()); |
| addReservedKeyWord("INSERT".toLowerCase()); |
| addReservedKeyWord("INSERT_METHOD".toLowerCase()); |
| addReservedKeyWord("INSTALL".toLowerCase()); |
| addReservedKeyWord("INSTANCE".toLowerCase()); |
| addReservedKeyWord("INT".toLowerCase()); |
| addReservedKeyWord("INT1".toLowerCase()); |
| addReservedKeyWord("INT2".toLowerCase()); |
| addReservedKeyWord("INT3".toLowerCase()); |
| addReservedKeyWord("INT4".toLowerCase()); |
| addReservedKeyWord("INT8".toLowerCase()); |
| addReservedKeyWord("INTEGER".toLowerCase()); |
| addReservedKeyWord("INTERVAL".toLowerCase()); |
| addReservedKeyWord("INTO".toLowerCase()); |
| addReservedKeyWord("INVOKER".toLowerCase()); |
| addReservedKeyWord("IO".toLowerCase()); |
| addReservedKeyWord("IO_AFTER_GTIDS".toLowerCase()); |
| addReservedKeyWord("IO_BEFORE_GTIDS".toLowerCase()); |
| addReservedKeyWord("IO_THREAD".toLowerCase()); |
| addReservedKeyWord("IPC".toLowerCase()); |
| addReservedKeyWord("IS".toLowerCase()); |
| addReservedKeyWord("ISOLATION".toLowerCase()); |
| addReservedKeyWord("ISSUER".toLowerCase()); |
| addReservedKeyWord("ITERATE".toLowerCase()); |
| addReservedKeyWord("JOIN".toLowerCase()); |
| addReservedKeyWord("JSON".toLowerCase()); |
| addReservedKeyWord("KEY".toLowerCase()); |
| addReservedKeyWord("KEYS".toLowerCase()); |
| addReservedKeyWord("KEY_BLOCK_SIZE".toLowerCase()); |
| addReservedKeyWord("KILL".toLowerCase()); |
| addReservedKeyWord("LANGUAGE".toLowerCase()); |
| addReservedKeyWord("LAST".toLowerCase()); |
| addReservedKeyWord("LEADING".toLowerCase()); |
| addReservedKeyWord("LEAVE".toLowerCase()); |
| addReservedKeyWord("LEAVES".toLowerCase()); |
| addReservedKeyWord("LEFT".toLowerCase()); |
| addReservedKeyWord("LESS".toLowerCase()); |
| addReservedKeyWord("LEVEL".toLowerCase()); |
| addReservedKeyWord("LIKE".toLowerCase()); |
| addReservedKeyWord("LIMIT".toLowerCase()); |
| addReservedKeyWord("LINEAR".toLowerCase()); |
| addReservedKeyWord("LINES".toLowerCase()); |
| addReservedKeyWord("LINESTRING".toLowerCase()); |
| addReservedKeyWord("LIST".toLowerCase()); |
| addReservedKeyWord("LOAD".toLowerCase()); |
| addReservedKeyWord("LOCAL".toLowerCase()); |
| addReservedKeyWord("LOCALTIME".toLowerCase()); |
| addReservedKeyWord("LOCALTIMESTAMP".toLowerCase()); |
| addReservedKeyWord("LOCK".toLowerCase()); |
| addReservedKeyWord("LOCKS".toLowerCase()); |
| addReservedKeyWord("LOGFILE".toLowerCase()); |
| addReservedKeyWord("LOGS".toLowerCase()); |
| addReservedKeyWord("LONG".toLowerCase()); |
| addReservedKeyWord("LONGBLOB".toLowerCase()); |
| addReservedKeyWord("LONGTEXT".toLowerCase()); |
| addReservedKeyWord("LOOP".toLowerCase()); |
| addReservedKeyWord("LOW_PRIORITY".toLowerCase()); |
| addReservedKeyWord("MASTER".toLowerCase()); |
| addReservedKeyWord("MASTER_AUTO_POSITION".toLowerCase()); |
| addReservedKeyWord("MASTER_BIND".toLowerCase()); |
| addReservedKeyWord("MASTER_CONNECT_RETRY".toLowerCase()); |
| addReservedKeyWord("MASTER_DELAY".toLowerCase()); |
| addReservedKeyWord("MASTER_HEARTBEAT_PERIOD".toLowerCase()); |
| addReservedKeyWord("MASTER_HOST".toLowerCase()); |
| addReservedKeyWord("MASTER_LOG_FILE".toLowerCase()); |
| addReservedKeyWord("MASTER_LOG_POS".toLowerCase()); |
| addReservedKeyWord("MASTER_PASSWORD".toLowerCase()); |
| addReservedKeyWord("MASTER_PORT".toLowerCase()); |
| addReservedKeyWord("MASTER_RETRY_COUNT".toLowerCase()); |
| addReservedKeyWord("MASTER_SERVER_ID".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL_CA".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL_CAPATH".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL_CERT".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL_CIPHER".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL_CRL".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL_CRLPATH".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL_KEY".toLowerCase()); |
| addReservedKeyWord("MASTER_SSL_VERIFY_SERVER_CERT".toLowerCase()); |
| addReservedKeyWord("MASTER_TLS_VERSION".toLowerCase()); |
| addReservedKeyWord("MASTER_USER".toLowerCase()); |
| addReservedKeyWord("MATCH".toLowerCase()); |
| addReservedKeyWord("MAXVALUE".toLowerCase()); |
| addReservedKeyWord("MAX_CONNECTIONS_PER_HOUR".toLowerCase()); |
| addReservedKeyWord("MAX_QUERIES_PER_HOUR".toLowerCase()); |
| addReservedKeyWord("MAX_ROWS".toLowerCase()); |
| addReservedKeyWord("MAX_SIZE".toLowerCase()); |
| addReservedKeyWord("MAX_STATEMENT_TIME".toLowerCase()); |
| addReservedKeyWord("MAX_UPDATES_PER_HOUR".toLowerCase()); |
| addReservedKeyWord("MAX_USER_CONNECTIONS".toLowerCase()); |
| addReservedKeyWord("MEDIUM".toLowerCase()); |
| addReservedKeyWord("MEDIUMBLOB".toLowerCase()); |
| addReservedKeyWord("MEDIUMINT".toLowerCase()); |
| addReservedKeyWord("MEDIUMTEXT".toLowerCase()); |
| addReservedKeyWord("MEMORY".toLowerCase()); |
| addReservedKeyWord("MERGE".toLowerCase()); |
| addReservedKeyWord("MESSAGE_TEXT".toLowerCase()); |
| addReservedKeyWord("MICROSECOND".toLowerCase()); |
| addReservedKeyWord("MIDDLEINT".toLowerCase()); |
| addReservedKeyWord("MIGRATE".toLowerCase()); |
| addReservedKeyWord("MINUTE".toLowerCase()); |
| addReservedKeyWord("MINUTE_MICROSECOND".toLowerCase()); |
| addReservedKeyWord("MINUTE_SECOND".toLowerCase()); |
| addReservedKeyWord("MIN_ROWS".toLowerCase()); |
| addReservedKeyWord("MOD".toLowerCase()); |
| addReservedKeyWord("MODE".toLowerCase()); |
| addReservedKeyWord("MODIFIES".toLowerCase()); |
| addReservedKeyWord("MODIFY".toLowerCase()); |
| addReservedKeyWord("MONTH".toLowerCase()); |
| addReservedKeyWord("MULTILINESTRING".toLowerCase()); |
| addReservedKeyWord("MULTIPOINT".toLowerCase()); |
| addReservedKeyWord("MULTIPOLYGON".toLowerCase()); |
| addReservedKeyWord("MUTEX".toLowerCase()); |
| addReservedKeyWord("MYSQL_ERRNO".toLowerCase()); |
| addReservedKeyWord("NAME".toLowerCase()); |
| addReservedKeyWord("NAMES".toLowerCase()); |
| addReservedKeyWord("NATIONAL".toLowerCase()); |
| addReservedKeyWord("NATURAL".toLowerCase()); |
| addReservedKeyWord("NCHAR".toLowerCase()); |
| addReservedKeyWord("NDB".toLowerCase()); |
| addReservedKeyWord("NDBCLUSTER".toLowerCase()); |
| addReservedKeyWord("NEVER".toLowerCase()); |
| addReservedKeyWord("NEW".toLowerCase()); |
| addReservedKeyWord("NEXT".toLowerCase()); |
| addReservedKeyWord("NO".toLowerCase()); |
| addReservedKeyWord("NODEGROUP".toLowerCase()); |
| addReservedKeyWord("NONBLOCKING".toLowerCase()); |
| addReservedKeyWord("NONE".toLowerCase()); |
| addReservedKeyWord("NOT".toLowerCase()); |
| addReservedKeyWord("NO_WAIT".toLowerCase()); |
| addReservedKeyWord("NO_WRITE_TO_BINLOG".toLowerCase()); |
| addReservedKeyWord("NULL".toLowerCase()); |
| addReservedKeyWord("NUMBER".toLowerCase()); |
| addReservedKeyWord("NUMERIC".toLowerCase()); |
| addReservedKeyWord("NVARCHAR".toLowerCase()); |
| addReservedKeyWord("OFFSET".toLowerCase()); |
| addReservedKeyWord("OLD_PASSWORD".toLowerCase()); |
| addReservedKeyWord("ON".toLowerCase()); |
| addReservedKeyWord("ONE".toLowerCase()); |
| addReservedKeyWord("ONLY".toLowerCase()); |
| addReservedKeyWord("OPEN".toLowerCase()); |
| addReservedKeyWord("OPTIMIZE".toLowerCase()); |
| addReservedKeyWord("OPTIMIZER_COSTS".toLowerCase()); |
| addReservedKeyWord("OPTION".toLowerCase()); |
| addReservedKeyWord("OPTIONALLY".toLowerCase()); |
| addReservedKeyWord("OPTIONS".toLowerCase()); |
| addReservedKeyWord("OR".toLowerCase()); |
| addReservedKeyWord("ORDER".toLowerCase()); |
| addReservedKeyWord("OUT".toLowerCase()); |
| addReservedKeyWord("OUTER".toLowerCase()); |
| addReservedKeyWord("OUTFILE".toLowerCase()); |
| addReservedKeyWord("OWNER".toLowerCase()); |
| addReservedKeyWord("PACK_KEYS".toLowerCase()); |
| addReservedKeyWord("PAGE".toLowerCase()); |
| addReservedKeyWord("PARSER".toLowerCase()); |
| addReservedKeyWord("PARSE_GCOL_EXPR".toLowerCase()); |
| addReservedKeyWord("PARTIAL".toLowerCase()); |
| addReservedKeyWord("PARTITION".toLowerCase()); |
| addReservedKeyWord("PARTITIONING".toLowerCase()); |
| addReservedKeyWord("PARTITIONS".toLowerCase()); |
| addReservedKeyWord("PASSWORD".toLowerCase()); |
| addReservedKeyWord("PHASE".toLowerCase()); |
| addReservedKeyWord("PLUGIN".toLowerCase()); |
| addReservedKeyWord("PLUGINS".toLowerCase()); |
| addReservedKeyWord("PLUGIN_DIR".toLowerCase()); |
| addReservedKeyWord("POINT".toLowerCase()); |
| addReservedKeyWord("POLYGON".toLowerCase()); |
| addReservedKeyWord("PORT".toLowerCase()); |
| addReservedKeyWord("PRECEDES".toLowerCase()); |
| addReservedKeyWord("PRECISION".toLowerCase()); |
| addReservedKeyWord("PREPARE".toLowerCase()); |
| addReservedKeyWord("PRESERVE".toLowerCase()); |
| addReservedKeyWord("PREV".toLowerCase()); |
| addReservedKeyWord("PRIMARY".toLowerCase()); |
| addReservedKeyWord("PRIVILEGES".toLowerCase()); |
| addReservedKeyWord("PROCEDURE".toLowerCase()); |
| addReservedKeyWord("PROCESSLIST".toLowerCase()); |
| addReservedKeyWord("PROFILE".toLowerCase()); |
| addReservedKeyWord("PROFILES".toLowerCase()); |
| addReservedKeyWord("PROXY".toLowerCase()); |
| addReservedKeyWord("PURGE".toLowerCase()); |
| addReservedKeyWord("QUARTER".toLowerCase()); |
| addReservedKeyWord("QUERY".toLowerCase()); |
| addReservedKeyWord("QUICK".toLowerCase()); |
| addReservedKeyWord("RANGE".toLowerCase()); |
| addReservedKeyWord("READ".toLowerCase()); |
| addReservedKeyWord("READS".toLowerCase()); |
| addReservedKeyWord("READ_ONLY".toLowerCase()); |
| addReservedKeyWord("READ_WRITE".toLowerCase()); |
| addReservedKeyWord("REAL".toLowerCase()); |
| addReservedKeyWord("REBUILD".toLowerCase()); |
| addReservedKeyWord("RECOVER".toLowerCase()); |
| addReservedKeyWord("REDOFILE".toLowerCase()); |
| addReservedKeyWord("REDO_BUFFER_SIZE".toLowerCase()); |
| addReservedKeyWord("REDUNDANT".toLowerCase()); |
| addReservedKeyWord("REFERENCES".toLowerCase()); |
| addReservedKeyWord("REGEXP".toLowerCase()); |
| addReservedKeyWord("RELAY".toLowerCase()); |
| addReservedKeyWord("RELAYLOG".toLowerCase()); |
| addReservedKeyWord("RELAY_LOG_FILE".toLowerCase()); |
| addReservedKeyWord("RELAY_LOG_POS".toLowerCase()); |
| addReservedKeyWord("RELAY_THREAD".toLowerCase()); |
| addReservedKeyWord("RELEASE".toLowerCase()); |
| addReservedKeyWord("RELOAD".toLowerCase()); |
| addReservedKeyWord("REMOVE".toLowerCase()); |
| addReservedKeyWord("RENAME".toLowerCase()); |
| addReservedKeyWord("REORGANIZE".toLowerCase()); |
| addReservedKeyWord("REPAIR".toLowerCase()); |
| addReservedKeyWord("REPEAT".toLowerCase()); |
| addReservedKeyWord("REPEATABLE".toLowerCase()); |
| addReservedKeyWord("REPLACE".toLowerCase()); |
| addReservedKeyWord("REPLICATE_DO_DB".toLowerCase()); |
| addReservedKeyWord("REPLICATE_DO_TABLE".toLowerCase()); |
| addReservedKeyWord("REPLICATE_IGNORE_DB".toLowerCase()); |
| addReservedKeyWord("REPLICATE_IGNORE_TABLE".toLowerCase()); |
| addReservedKeyWord("REPLICATE_REWRITE_DB".toLowerCase()); |
| addReservedKeyWord("REPLICATE_WILD_DO_TABLE".toLowerCase()); |
| addReservedKeyWord("REPLICATE_WILD_IGNORE_TABLE".toLowerCase()); |
| addReservedKeyWord("REPLICATION".toLowerCase()); |
| addReservedKeyWord("REQUIRE".toLowerCase()); |
| addReservedKeyWord("RESET".toLowerCase()); |
| addReservedKeyWord("RESIGNAL".toLowerCase()); |
| addReservedKeyWord("RESTORE".toLowerCase()); |
| addReservedKeyWord("RESTRICT".toLowerCase()); |
| addReservedKeyWord("RESUME".toLowerCase()); |
| addReservedKeyWord("RETURN".toLowerCase()); |
| addReservedKeyWord("RETURNED_SQLSTATE".toLowerCase()); |
| addReservedKeyWord("RETURNS".toLowerCase()); |
| addReservedKeyWord("REVERSE".toLowerCase()); |
| addReservedKeyWord("REVOKE".toLowerCase()); |
| addReservedKeyWord("RIGHT".toLowerCase()); |
| addReservedKeyWord("RLIKE".toLowerCase()); |
| addReservedKeyWord("ROLLBACK".toLowerCase()); |
| addReservedKeyWord("ROLLUP".toLowerCase()); |
| addReservedKeyWord("ROTATE".toLowerCase()); |
| addReservedKeyWord("ROUTINE".toLowerCase()); |
| addReservedKeyWord("ROW".toLowerCase()); |
| addReservedKeyWord("ROWS".toLowerCase()); |
| addReservedKeyWord("ROW_COUNT".toLowerCase()); |
| addReservedKeyWord("ROW_FORMAT".toLowerCase()); |
| addReservedKeyWord("RTREE".toLowerCase()); |
| addReservedKeyWord("SAVEPOINT".toLowerCase()); |
| addReservedKeyWord("SCHEDULE".toLowerCase()); |
| addReservedKeyWord("SCHEMA".toLowerCase()); |
| addReservedKeyWord("SCHEMAS".toLowerCase()); |
| addReservedKeyWord("SCHEMA_NAME".toLowerCase()); |
| addReservedKeyWord("SECOND".toLowerCase()); |
| addReservedKeyWord("SECOND_MICROSECOND".toLowerCase()); |
| addReservedKeyWord("SECURITY".toLowerCase()); |
| addReservedKeyWord("SELECT".toLowerCase()); |
| addReservedKeyWord("SENSITIVE".toLowerCase()); |
| addReservedKeyWord("SEPARATOR".toLowerCase()); |
| addReservedKeyWord("SERIAL".toLowerCase()); |
| addReservedKeyWord("SERIALIZABLE".toLowerCase()); |
| addReservedKeyWord("SERVER".toLowerCase()); |
| addReservedKeyWord("SESSION".toLowerCase()); |
| addReservedKeyWord("SET".toLowerCase()); |
| addReservedKeyWord("SHARE".toLowerCase()); |
| addReservedKeyWord("SHOW".toLowerCase()); |
| addReservedKeyWord("SHUTDOWN".toLowerCase()); |
| addReservedKeyWord("SIGNAL".toLowerCase()); |
| addReservedKeyWord("SIGNED".toLowerCase()); |
| addReservedKeyWord("SIMPLE".toLowerCase()); |
| addReservedKeyWord("SLAVE".toLowerCase()); |
| addReservedKeyWord("SLOW".toLowerCase()); |
| addReservedKeyWord("SMALLINT".toLowerCase()); |
| addReservedKeyWord("SNAPSHOT".toLowerCase()); |
| addReservedKeyWord("SOCKET".toLowerCase()); |
| addReservedKeyWord("SOME".toLowerCase()); |
| addReservedKeyWord("SONAME".toLowerCase()); |
| addReservedKeyWord("SOUNDS".toLowerCase()); |
| addReservedKeyWord("SOURCE".toLowerCase()); |
| addReservedKeyWord("SPATIAL".toLowerCase()); |
| addReservedKeyWord("SPECIFIC".toLowerCase()); |
| addReservedKeyWord("SQL".toLowerCase()); |
| addReservedKeyWord("SQLEXCEPTION".toLowerCase()); |
| addReservedKeyWord("SQLSTATE".toLowerCase()); |
| addReservedKeyWord("SQLWARNING".toLowerCase()); |
| addReservedKeyWord("SQL_AFTER_GTIDS".toLowerCase()); |
| addReservedKeyWord("SQL_AFTER_MTS_GAPS".toLowerCase()); |
| addReservedKeyWord("SQL_BEFORE_GTIDS".toLowerCase()); |
| addReservedKeyWord("SQL_BIG_RESULT".toLowerCase()); |
| addReservedKeyWord("SQL_BUFFER_RESULT".toLowerCase()); |
| addReservedKeyWord("SQL_CACHE".toLowerCase()); |
| addReservedKeyWord("SQL_CALC_FOUND_ROWS".toLowerCase()); |
| addReservedKeyWord("SQL_NO_CACHE".toLowerCase()); |
| addReservedKeyWord("SQL_SMALL_RESULT".toLowerCase()); |
| addReservedKeyWord("SQL_THREAD".toLowerCase()); |
| addReservedKeyWord("SQL_TSI_DAY".toLowerCase()); |
| addReservedKeyWord("SQL_TSI_HOUR".toLowerCase()); |
| addReservedKeyWord("SQL_TSI_MINUTE".toLowerCase()); |
| addReservedKeyWord("SQL_TSI_MONTH".toLowerCase()); |
| addReservedKeyWord("SQL_TSI_QUARTER".toLowerCase()); |
| addReservedKeyWord("SQL_TSI_SECOND".toLowerCase()); |
| addReservedKeyWord("SQL_TSI_WEEK".toLowerCase()); |
| addReservedKeyWord("SQL_TSI_YEAR".toLowerCase()); |
| addReservedKeyWord("SSL".toLowerCase()); |
| addReservedKeyWord("STACKED".toLowerCase()); |
| addReservedKeyWord("START".toLowerCase()); |
| addReservedKeyWord("STARTING".toLowerCase()); |
| addReservedKeyWord("STARTS".toLowerCase()); |
| addReservedKeyWord("STATS_AUTO_RECALC".toLowerCase()); |
| addReservedKeyWord("STATS_PERSISTENT".toLowerCase()); |
| addReservedKeyWord("STATS_SAMPLE_PAGES".toLowerCase()); |
| addReservedKeyWord("STATUS".toLowerCase()); |
| addReservedKeyWord("STOP".toLowerCase()); |
| addReservedKeyWord("STORAGE".toLowerCase()); |
| addReservedKeyWord("STORED".toLowerCase()); |
| addReservedKeyWord("STRAIGHT_JOIN".toLowerCase()); |
| addReservedKeyWord("STRING".toLowerCase()); |
| addReservedKeyWord("SUBCLASS_ORIGIN".toLowerCase()); |
| addReservedKeyWord("SUBJECT".toLowerCase()); |
| addReservedKeyWord("SUBPARTITION".toLowerCase()); |
| addReservedKeyWord("SUBPARTITIONS".toLowerCase()); |
| addReservedKeyWord("SUPER".toLowerCase()); |
| addReservedKeyWord("SUSPEND".toLowerCase()); |
| addReservedKeyWord("SWAPS".toLowerCase()); |
| addReservedKeyWord("SWITCHES".toLowerCase()); |
| addReservedKeyWord("TABLE".toLowerCase()); |
| addReservedKeyWord("TABLES".toLowerCase()); |
| addReservedKeyWord("TABLESPACE".toLowerCase()); |
| addReservedKeyWord("TABLE_CHECKSUM".toLowerCase()); |
| addReservedKeyWord("TABLE_NAME".toLowerCase()); |
| addReservedKeyWord("TEMPORARY".toLowerCase()); |
| addReservedKeyWord("TEMPTABLE".toLowerCase()); |
| addReservedKeyWord("TERMINATED".toLowerCase()); |
| addReservedKeyWord("TEXT".toLowerCase()); |
| addReservedKeyWord("THAN".toLowerCase()); |
| addReservedKeyWord("THEN".toLowerCase()); |
| addReservedKeyWord("TIME".toLowerCase()); |
| addReservedKeyWord("TIMESTAMP".toLowerCase()); |
| addReservedKeyWord("TIMESTAMPADD".toLowerCase()); |
| addReservedKeyWord("TIMESTAMPDIFF".toLowerCase()); |
| addReservedKeyWord("TINYBLOB".toLowerCase()); |
| addReservedKeyWord("TINYINT".toLowerCase()); |
| addReservedKeyWord("TINYTEXT".toLowerCase()); |
| addReservedKeyWord("TO".toLowerCase()); |
| addReservedKeyWord("TRAILING".toLowerCase()); |
| addReservedKeyWord("TRANSACTION".toLowerCase()); |
| addReservedKeyWord("TRIGGER".toLowerCase()); |
| addReservedKeyWord("TRIGGERS".toLowerCase()); |
| addReservedKeyWord("TRUE".toLowerCase()); |
| addReservedKeyWord("TRUNCATE".toLowerCase()); |
| addReservedKeyWord("TYPE".toLowerCase()); |
| addReservedKeyWord("TYPES".toLowerCase()); |
| addReservedKeyWord("UNCOMMITTED".toLowerCase()); |
| addReservedKeyWord("UNDEFINED".toLowerCase()); |
| addReservedKeyWord("UNDO".toLowerCase()); |
| addReservedKeyWord("UNDOFILE".toLowerCase()); |
| addReservedKeyWord("UNDO_BUFFER_SIZE".toLowerCase()); |
| addReservedKeyWord("UNICODE".toLowerCase()); |
| addReservedKeyWord("UNINSTALL".toLowerCase()); |
| addReservedKeyWord("UNION".toLowerCase()); |
| addReservedKeyWord("UNIQUE".toLowerCase()); |
| addReservedKeyWord("UNKNOWN".toLowerCase()); |
| addReservedKeyWord("UNLOCK".toLowerCase()); |
| addReservedKeyWord("UNSIGNED".toLowerCase()); |
| addReservedKeyWord("UNTIL".toLowerCase()); |
| addReservedKeyWord("UPDATE".toLowerCase()); |
| addReservedKeyWord("UPGRADE".toLowerCase()); |
| addReservedKeyWord("USAGE".toLowerCase()); |
| addReservedKeyWord("USE".toLowerCase()); |
| addReservedKeyWord("USER".toLowerCase()); |
| addReservedKeyWord("USER_RESOURCES".toLowerCase()); |
| addReservedKeyWord("USE_FRM".toLowerCase()); |
| addReservedKeyWord("USING".toLowerCase()); |
| addReservedKeyWord("UTC_DATE".toLowerCase()); |
| addReservedKeyWord("UTC_TIME".toLowerCase()); |
| addReservedKeyWord("UTC_TIMESTAMP".toLowerCase()); |
| addReservedKeyWord("VALIDATION".toLowerCase()); |
| addReservedKeyWord("VALUE".toLowerCase()); |
| addReservedKeyWord("VALUES".toLowerCase()); |
| addReservedKeyWord("VARBINARY".toLowerCase()); |
| addReservedKeyWord("VARCHAR".toLowerCase()); |
| addReservedKeyWord("VARCHARACTER".toLowerCase()); |
| addReservedKeyWord("VARIABLES".toLowerCase()); |
| addReservedKeyWord("VARYING".toLowerCase()); |
| addReservedKeyWord("VIEW".toLowerCase()); |
| addReservedKeyWord("VIRTUAL".toLowerCase()); |
| addReservedKeyWord("WAIT".toLowerCase()); |
| addReservedKeyWord("WARNINGS".toLowerCase()); |
| addReservedKeyWord("WEEK".toLowerCase()); |
| addReservedKeyWord("WEIGHT_STRING".toLowerCase()); |
| addReservedKeyWord("WHEN".toLowerCase()); |
| addReservedKeyWord("WHERE".toLowerCase()); |
| addReservedKeyWord("WHILE".toLowerCase()); |
| addReservedKeyWord("WITH".toLowerCase()); |
| addReservedKeyWord("WITHOUT".toLowerCase()); |
| addReservedKeyWord("WORK".toLowerCase()); |
| addReservedKeyWord("WRAPPER".toLowerCase()); |
| addReservedKeyWord("WRITE".toLowerCase()); |
| addReservedKeyWord("X509".toLowerCase()); |
| addReservedKeyWord("XA".toLowerCase()); |
| addReservedKeyWord("XID".toLowerCase()); |
| addReservedKeyWord("XML".toLowerCase()); |
| addReservedKeyWord("XOR".toLowerCase()); |
| addReservedKeyWord("YEAR".toLowerCase()); |
| addReservedKeyWord("YEAR_MONTH".toLowerCase()); |
| addReservedKeyWord("ZEROFILL".toLowerCase()); |
| } |
| |
| /** |
| * returns the name for the database / schema |
| * @return the database / schema name |
| */ |
| public String getDatabaseName() |
| { |
| return databaseName; |
| } |
| |
| /** |
| * Sets the name for the database / schema<br> |
| * This names is required for creating a database.<br> |
| * When a name is set, the dbms will automatically execute 'USE dbname' when the database is opened. |
| * @param databaseName the name of the database |
| */ |
| public void setDatabaseName(String databaseName) |
| { |
| this.databaseName = databaseName; |
| } |
| |
| public String getCharacterSet() |
| { |
| return characterSet; |
| } |
| |
| public void setCharacterSet(String characterSet) |
| { |
| this.characterSet = characterSet; |
| } |
| |
| /** |
| * Get the table engine that is used when creating new tables |
| * @return the table engine |
| */ |
| public String getEngine() |
| { |
| return engine; |
| } |
| |
| /** |
| * Set the table engine that is used when creating new tables |
| * @param engine the table engine |
| */ |
| public void setEngine(String engine) |
| { |
| this.engine = engine; |
| } |
| |
| /** |
| * returns whether a sequence table is used for record identity management.<br> |
| * Default is false. In this case the AutoIncrement feature of MySQL is used. |
| * @return true if a sequence table is used instead of identity columns. |
| */ |
| public boolean isUseSequenceTable() |
| { |
| return useSequenceTable; |
| } |
| |
| /** |
| * If set to true a special table is used for sequence number generation.<br> |
| * Otherwise the AutoIncrement feature of MySQL is used identity fields. |
| * @param useSequenceTable true to use a sequence table or false otherwise. |
| */ |
| public void setUseSequenceTable(boolean useSequenceTable) |
| { |
| this.useSequenceTable = useSequenceTable; |
| } |
| |
| /** |
| * returns the name of the sequence table |
| * @return the name of the table used for sequence number generation |
| */ |
| public String getSequenceTableName() |
| { |
| return sequenceTableName; |
| } |
| |
| /** |
| * Sets the name of the sequence table. |
| * Only applicable if useSequenceTable is set to true. |
| * @param sequenceTableName the name of the table used for sequence number generation |
| */ |
| public void setSequenceTableName(String sequenceTableName) |
| { |
| this.sequenceTableName = sequenceTableName; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.apache.empire.db.DBMSHandler#openDatabase(org.apache.empire.db.DBDatabase, java.sql.Connection) |
| */ |
| @SuppressWarnings("unused") |
| @Override |
| public void attachDatabase(DBDatabase db, Connection conn) |
| { |
| // Prepare |
| try |
| { // Set Database |
| if (StringUtils.isNotEmpty(databaseName)) |
| executeSQL("USE " + databaseName, null, conn, null); |
| // Sequence Table |
| if (useSequenceTable && db.getTable(sequenceTableName)==null) |
| new DBSeqTable(sequenceTableName, db); |
| // call Base implementation |
| super.attachDatabase(db, conn); |
| |
| } catch (SQLException e) { |
| // throw exception |
| throw new EmpireSQLException(this, e); |
| } |
| } |
| |
| /** |
| * Creates a new MySQL command object. |
| * |
| * @return the new DBCommandMySQL object |
| */ |
| @Override |
| public DBCommand createCommand(boolean autoPrepareStmt) |
| { |
| // create command object |
| return new DBCommandMySQL(autoPrepareStmt); |
| } |
| |
| @Override |
| /** |
| * Creates a combined command that supports limit() and skip() |
| * @param left the first DBCommandExpr object |
| * @param keyWord the key word between the two DBCommandExpr objects |
| * @param right the second DBCommandExpr object |
| * @return the new DBCommandExpr object |
| */ |
| public DBCommandExpr createCombinedCommand(DBCommandExpr left, String keyWord, DBCommandExpr right) |
| { |
| // Override CombinedCmd |
| return new DBCombinedCmd(left, keyWord, right) { |
| // *Deprecated* private static final long serialVersionUID = 1L; |
| protected int limit = -1; |
| protected int skip = -1; |
| @Override |
| public DBCommandExpr limitRows(int numRows) |
| { |
| limit = numRows; |
| return this; |
| } |
| @Override |
| public DBCommandExpr skipRows(int numRows) |
| { |
| skip = numRows; |
| return this; |
| } |
| @Override |
| public void clearLimit() |
| { |
| limit = -1; |
| skip = -1; |
| } |
| @Override |
| public void getSelect(StringBuilder buf) |
| { // Prepares statement |
| super.getSelect(buf); |
| // add limit and offset |
| if (limit>=0) |
| { buf.append("\r\nLIMIT "); |
| buf.append(String.valueOf(limit)); |
| // Offset |
| if (skip>=0) |
| { buf.append(" OFFSET "); |
| buf.append(String.valueOf(skip)); |
| } |
| } |
| } |
| }; |
| } |
| |
| /** |
| * Returns whether or not a particular feature is supported by this dbms |
| * @param type type of requested feature. @see DBMSFeature |
| * @return true if the features is supported or false otherwise |
| */ |
| @Override |
| public boolean isSupported(DBMSFeature type) |
| { |
| switch (type) |
| { // return support info |
| case CREATE_SCHEMA: return true; |
| case SEQUENCES: return useSequenceTable; |
| case QUERY_LIMIT_ROWS: return true; |
| case QUERY_SKIP_ROWS: return true; |
| default: |
| // All other features are not supported by default |
| return false; |
| } |
| } |
| |
| /** |
| * Gets an sql phrase template for this database system.<br> |
| * @see DBMSHandler#getSQLPhrase(int) |
| * @return the phrase template |
| */ |
| @Override |
| public String getSQLPhrase(DBSqlPhrase phrase) |
| { |
| switch (phrase) |
| { |
| // sql-phrases |
| case SQL_NULL: return "null"; |
| case SQL_PARAMETER: return " ? "; |
| case SQL_RENAME_TABLE: return " "; |
| case SQL_RENAME_COLUMN: return " AS "; |
| case SQL_DATABASE_LINK: return "@"; |
| case SQL_QUOTES_OPEN: return "`"; |
| case SQL_QUOTES_CLOSE: return "`"; |
| case SQL_CONCAT_EXPR: return "concat(?, {0})"; |
| // data types |
| case SQL_BOOLEAN_TRUE: return "1"; |
| case SQL_BOOLEAN_FALSE: return "0"; |
| case SQL_CURRENT_DATE: return "CURRENT_DATE()"; |
| case SQL_DATE_PATTERN: return "yyyy-MM-dd"; |
| case SQL_DATE_TEMPLATE: return "STR_TO_DATE('{0}','%Y-%m-%d')"; |
| case SQL_CURRENT_TIME: return "CURRENT_TIME()"; |
| case SQL_TIME_PATTERN: return "HH:mm:ss"; |
| case SQL_TIME_TEMPLATE: return "STR_TO_DATE('{0}','%H:%i:%s')"; |
| case SQL_DATETIME_PATTERN: return "yyyy-MM-dd HH:mm:ss"; |
| case SQL_DATETIME_TEMPLATE: return "STR_TO_DATE('{0}','%Y-%m-%d %H:%i:%s')"; |
| case SQL_CURRENT_TIMESTAMP: return "CURRENT_TIMESTAMP()"; |
| case SQL_TIMESTAMP_PATTERN: return "yyyy-MM-dd HH:mm:ss.SSS"; |
| case SQL_TIMESTAMP_TEMPLATE: return "STR_TO_DATE('{0}','%Y-%m-%d %H:%i:%s.%f')"; |
| // functions |
| case SQL_FUNC_COALESCE: return "coalesce(?, {0})"; |
| case SQL_FUNC_SUBSTRING: return "substring(?, {0})"; |
| case SQL_FUNC_SUBSTRINGEX: return "substring(?, {0}, {1})"; |
| case SQL_FUNC_REPLACE: return "replace(?, {0}, {1})"; |
| case SQL_FUNC_REVERSE: return "reverse(?)"; |
| case SQL_FUNC_STRINDEX: return "instr(?, {0})"; |
| case SQL_FUNC_STRINDEXFROM: return "locate({0}, ?, {1})"; |
| case SQL_FUNC_LENGTH: return "length(?)"; |
| case SQL_FUNC_UPPER: return "upper(?)"; |
| case SQL_FUNC_LOWER: return "lcase(?)"; |
| case SQL_FUNC_TRIM: return "trim(?)"; |
| case SQL_FUNC_LTRIM: return "ltrim(?)"; |
| case SQL_FUNC_RTRIM: return "rtrim(?)"; |
| case SQL_FUNC_ESCAPE: return "? escape '{0}'"; |
| // Numeric |
| case SQL_FUNC_ABS: return "abs(?)"; |
| case SQL_FUNC_ROUND: return "round(?,{0})"; |
| case SQL_FUNC_TRUNC: return "truncate(?,{0})"; |
| case SQL_FUNC_CEILING: return "ceiling(?)"; |
| case SQL_FUNC_FLOOR: return "floor(?)"; |
| case SQL_FUNC_MODULO: return "mod(?,{0})"; |
| case SQL_FUNC_FORMAT: return "format(?, {0:INTEGER})"; /* TODO: supports only decimal places. Add support for a format string */ |
| // Date |
| case SQL_FUNC_DAY: return "day(?)"; |
| case SQL_FUNC_MONTH: return "month(?)"; |
| case SQL_FUNC_YEAR: return "year(?)"; |
| // Aggregation |
| case SQL_FUNC_SUM: return "sum(?)"; |
| case SQL_FUNC_MAX: return "max(?)"; |
| case SQL_FUNC_MIN: return "min(?)"; |
| case SQL_FUNC_AVG: return "avg(?)"; |
| // Others |
| case SQL_FUNC_DECODE: return "case ? {0} end"; |
| case SQL_FUNC_DECODE_SEP: return " "; |
| case SQL_FUNC_DECODE_PART: return "when {0} then {1}"; |
| case SQL_FUNC_DECODE_ELSE: return "else {0}"; |
| // Not defined |
| default: |
| // log.warn("SQL phrase " + phrase.name() + " is not defined!"); |
| return phrase.getSqlDefault(); |
| } |
| } |
| |
| /** |
| * @see DBMSHandler#getConvertPhrase(DataType, DataType, Object) |
| */ |
| @Override |
| public String getConvertPhrase(DataType destType, DataType srcType, Object format) |
| { |
| switch(destType) |
| { |
| case BOOL: return "CAST(? AS UNSIGNED)"; |
| case INTEGER: return "CAST(? AS SIGNED)"; |
| case DECIMAL: return "CAST(? AS DECIMAL)"; |
| case FLOAT: return "CAST(? AS DECIMAL)"; |
| case DATE: return "CAST(? AS DATE)"; |
| case TIME: return "CAST(? AS TIME)"; |
| case DATETIME: |
| case TIMESTAMP: return "CAST(? AS DATETIME)"; |
| // Convert to text |
| case VARCHAR: |
| case CHAR: |
| if (format != null) |
| { // Convert using a format string |
| return "CAST(? AS CHAR " + format.toString() + ")"; |
| } else |
| { |
| return "CAST(? AS CHAR)"; |
| } |
| case BLOB: |
| return "CAST(? AS BLOB)"; |
| // Unknown Type |
| default: |
| log.error("getConvertPhrase: unknown type " + destType); |
| return "?"; |
| } |
| } |
| |
| /** |
| * @see DBMSHandler#getNextSequenceValue(DBDatabase, String, int, Connection) |
| */ |
| @Override |
| public Object getNextSequenceValue(DBDatabase db, String seqName, int minValue, Connection conn) |
| { |
| if (useSequenceTable) |
| { // Use a sequence Table to generate Sequences |
| DBTable t = db.getTable(sequenceTableName); |
| return ((DBSeqTable)t).getNextValue(seqName, minValue, conn); |
| } |
| else |
| { // Post Detection |
| return null; |
| } |
| } |
| |
| /** |
| * @see DBMSHandler#getNextSequenceValueExpr(DBTableColumn col) |
| */ |
| @Override |
| public DBColumnExpr getNextSequenceValueExpr(DBTableColumn column) |
| { |
| throw new NotSupportedException(this, "getNextSequenceValueExpr"); |
| } |
| |
| /** |
| * Overridden. Returns a timestamp that is used for record updates created by the database server. |
| * |
| * @return the current date and time of the database server. |
| */ |
| @Override |
| public java.sql.Timestamp getUpdateTimestamp(Connection conn) |
| { |
| // Default implementation |
| GregorianCalendar cal = new GregorianCalendar(); |
| return new java.sql.Timestamp(cal.getTimeInMillis()); |
| } |
| |
| /** |
| * @see DBMSHandler#getDDLScript(DDLActionType, DBObject, DBSQLScript) |
| */ |
| @Override |
| public void getDDLScript(DDLActionType type, DBObject dbo, DBSQLScript script) |
| { |
| if (ddlGenerator==null) |
| ddlGenerator = new MySQLDDLGenerator(this); |
| // forward request |
| ddlGenerator.getDDLScript(type, dbo, script); |
| } |
| |
| /** |
| * this helper function doubles up single quotes for SQL |
| */ |
| @Override |
| protected void appendSQLTextValue(StringBuilder buf, String value) |
| { |
| if (value.indexOf('\'') >= 0 || value.indexOf('\\') >= 0) |
| { |
| int len = value.length(); |
| for (int i = 0; i < len; i++) |
| { |
| if (value.charAt(i) == '\'') |
| { // a routine to double up single quotes for SQL |
| buf.append("''"); |
| } |
| else if (value.charAt(i) == '\\') |
| { // a routine to double up backslashes for MySQL |
| buf.append("\\\\"); |
| } else |
| { |
| buf.append(value.charAt(i)); |
| } |
| } |
| } else |
| { |
| buf.append(value); |
| } |
| } |
| |
| } |