NAME
SQL::Translator::Parser::MySQL - parser for MySQL
SYNOPSIS
use SQL::Translator;use SQL::Translator::Parser::MySQL;my $translator = SQL::Translator->new;$translator->parser("SQL::Translator::Parser::MySQL");
DESCRIPTION
The grammar is influenced heavily by Tim Bunce's "mysql2ora" grammar.
Here's the word from the MySQL site (http://www.mysql.com/doc/en/CREATE_TABLE.html):
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)][table_options] [select_statement]orCREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name LIKE old_table_name;create_definition:col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT][PRIMARY KEY] [reference_definition]or PRIMARY KEY (index_col_name,...)or KEY [index_name] (index_col_name,...)or INDEX [index_name] (index_col_name,...)or UNIQUE [INDEX] [index_name] (index_col_name,...)or FULLTEXT [INDEX] [index_name] (index_col_name,...)or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)[reference_definition]or CHECK (expr)type:TINYINT[(length)] [UNSIGNED] [ZEROFILL]or SMALLINT[(length)] [UNSIGNED] [ZEROFILL]or MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]or INT[(length)] [UNSIGNED] [ZEROFILL]or INTEGER[(length)] [UNSIGNED] [ZEROFILL]or BIGINT[(length)] [UNSIGNED] [ZEROFILL]or REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]or DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]or FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]or DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]or NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]or CHAR(length) [BINARY]or VARCHAR(length) [BINARY]or DATEor TIMEor TIMESTAMPor DATETIMEor TINYBLOBor BLOBor MEDIUMBLOBor LONGBLOBor TINYTEXTor TEXTor MEDIUMTEXTor LONGTEXTor ENUM(value1,value2,value3,...)or SET(value1,value2,value3,...)index_col_name:col_name [(length)]reference_definition:REFERENCES tbl_name [(index_col_name,...)][MATCH FULL | MATCH PARTIAL][ON DELETE reference_option][ON UPDATE reference_option]reference_option:RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULTtable_options:TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }or ENGINE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }or AUTO_INCREMENT = #or AVG_ROW_LENGTH = #or [ DEFAULT ] CHARACTER SET charset_nameor CHECKSUM = {0 | 1}or COLLATE collation_nameor COMMENT = "string"or MAX_ROWS = #or MIN_ROWS = #or PACK_KEYS = {0 | 1 | DEFAULT}or PASSWORD = "string"or DELAY_KEY_WRITE = {0 | 1}or ROW_FORMAT= { default | dynamic | fixed | compressed }or RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=#or UNION = (table_name,[table_name...])or INSERT_METHOD= {NO | FIRST | LAST }or DATA DIRECTORY="absolute path to directory"or INDEX DIRECTORY="absolute path to directory"
A subset of the ALTER TABLE syntax that allows addition of foreign keys:
ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ...alter_specification:ADD [CONSTRAINT [symbol]]FOREIGN KEY [index_name] (index_col_name,...)[reference_definition]
A subset of INSERT that we ignore:
INSERT anything
ARGUMENTS
This parser takes a single optional parser_arg "mysql_parser_version", which provides the desired version for the target database. Any statement in the processed dump file, that is commented with a version higher than the one supplied, will be stripped.
The default "mysql_parser_version" is set to the conservative value of 40000 (MySQL 4.0)
Valid version specifiers for "mysql_parser_version" are listed here
More information about the MySQL comment-syntax: <http://dev.mysql.com/doc/refman/5.0/en/comments.html>
AUTHOR
Ken Youens-Clark <[email protected]>, Chris Mungall <[email protected]>.
SEE ALSO
Parse::RecDescent, SQL::Translator::Schema.