* refactor: generic rename to mysql * refactor: g4 with mysql syntax * test: mysql syntax * refactor: remove useless keywords * refactor: remove nonReserved keywords * refactor: lint specificFunction --------- Co-authored-by: liuyi <liuyi@dtstack.com>
This commit is contained in:
@ -1,12 +0,0 @@
|
||||
import GenericSQL from '../../../src/parser/generic';
|
||||
|
||||
describe('GenericSQL Lexer tests', () => {
|
||||
const mysqlParser = new GenericSQL();
|
||||
|
||||
const sql = 'select id,name,sex from user1;';
|
||||
const tokens = mysqlParser.getAllTokens(sql);
|
||||
|
||||
test('token counts', () => {
|
||||
expect(tokens.length).toBe(12);
|
||||
});
|
||||
});
|
12
test/parser/mysql/lexer.test.ts
Normal file
12
test/parser/mysql/lexer.test.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import MySQL from '../../../src/parser/mysql';
|
||||
|
||||
describe('MySQL Lexer tests', () => {
|
||||
const parser = new MySQL();
|
||||
|
||||
const sql = 'select id,name,sex from user1;';
|
||||
const tokens = parser.getAllTokens(sql);
|
||||
|
||||
test('token counts', () => {
|
||||
expect(tokens.length).toBe(12);
|
||||
});
|
||||
});
|
@ -1,17 +1,17 @@
|
||||
import GenericSQL from '../../../src/parser/generic';
|
||||
import { SqlParserListener } from '../../../src/lib/generic/SqlParserListener';
|
||||
import MySQL from '../../../src/parser/mysql';
|
||||
import { MySqlParserListener } from '../../../src/lib/mysql/MySqlParserListener';
|
||||
import { ParseTreeListener } from 'antlr4ts/tree';
|
||||
|
||||
describe('Generic SQL Listener Tests', () => {
|
||||
describe('MySQL Listener Tests', () => {
|
||||
const expectTableName = 'user1';
|
||||
const sql = `select id,name,sex from ${expectTableName};`;
|
||||
const parser = new GenericSQL();
|
||||
const parser = new MySQL();
|
||||
|
||||
const parseTree = parser.parse(sql);
|
||||
|
||||
test('Listener enterTableName', async () => {
|
||||
let result = '';
|
||||
class MyListener implements SqlParserListener {
|
||||
class MyListener implements MySqlParserListener {
|
||||
enterTableName = (ctx): void => {
|
||||
result = ctx.text.toLowerCase();
|
||||
};
|
@ -1,7 +1,7 @@
|
||||
import GenericSQL from '../../../src/parser/generic';
|
||||
import MySQL from '../../../src/parser/mysql';
|
||||
|
||||
describe('Generic SQL Syntax Tests', () => {
|
||||
const parser = new GenericSQL();
|
||||
describe('MySQL Syntax Tests', () => {
|
||||
const parser = new MySQL();
|
||||
|
||||
test('Select Statement', () => {
|
||||
const sql = 'select id,name from user1;';
|
51
test/parser/mysql/syntax/administration.test.ts
Normal file
51
test/parser/mysql/syntax/administration.test.ts
Normal file
@ -0,0 +1,51 @@
|
||||
import MySQL from '../../../../src/parser/mysql';
|
||||
import { readSQL } from '../../../helper';
|
||||
|
||||
const parser = new MySQL();
|
||||
|
||||
const features = {
|
||||
alterUser: readSQL(__dirname, 'alterUser.sql'),
|
||||
createRole: readSQL(__dirname, 'createRole.sql'),
|
||||
createUser: readSQL(__dirname, 'createUser.sql'),
|
||||
dropRole: readSQL(__dirname, 'dropRole.sql'),
|
||||
dropUser: readSQL(__dirname, 'dropUser.sql'),
|
||||
grant: readSQL(__dirname, 'grant.sql'),
|
||||
renameUser: readSQL(__dirname, 'renameUser.sql'),
|
||||
revoke: readSQL(__dirname, 'revoke.sql'),
|
||||
setDefaultRole: readSQL(__dirname, 'setDefaultRole.sql'),
|
||||
setPassword: readSQL(__dirname, 'setPassword.sql'),
|
||||
setRole: readSQL(__dirname, 'setRole.sql'),
|
||||
alterResourceGroup: readSQL(__dirname, 'alterResourceGroup.sql'),
|
||||
createResourceGroup: readSQL(__dirname, 'createResourceGroup.sql'),
|
||||
dropResourceGroup: readSQL(__dirname, 'dropResourceGroup.sql'),
|
||||
setResourceGroup: readSQL(__dirname, 'setResourceGroup.sql'),
|
||||
analyzeTable: readSQL(__dirname, 'analyzeTable.sql'),
|
||||
checkTable: readSQL(__dirname, 'checkTable.sql'),
|
||||
checkSumTable: readSQL(__dirname, 'checkSumTable.sql'),
|
||||
optimizeTable: readSQL(__dirname, 'optimizeTable.sql'),
|
||||
repairTable: readSQL(__dirname, 'repairTable.sql'),
|
||||
installComponent: readSQL(__dirname, 'installComponent.sql'),
|
||||
installPlugin: readSQL(__dirname, 'installPlugin.sql'),
|
||||
uninstallComponent: readSQL(__dirname, 'uninstallComponent.sql'),
|
||||
uninstallPlugin: readSQL(__dirname, 'uninstallPlugin.sql'),
|
||||
clone: readSQL(__dirname, 'clone.sql'),
|
||||
set: readSQL(__dirname, 'set.sql'),
|
||||
setCharacterSet: readSQL(__dirname, 'setCharacterSet.sql'),
|
||||
setNames: readSQL(__dirname, 'setNames.sql'),
|
||||
show: readSQL(__dirname, 'show.sql'),
|
||||
otherAdministrative: readSQL(__dirname, 'otherAdministrative.sql'),
|
||||
};
|
||||
|
||||
describe('MySQL Database Administration Syntax Tests', () => {
|
||||
Object.keys(features).forEach((key) => {
|
||||
features[key].forEach((sql) => {
|
||||
it(sql, () => {
|
||||
const result = parser.validate(sql);
|
||||
if (result.length) {
|
||||
console.log(result, `\n请检查 sql: ${sql}`);
|
||||
}
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
58
test/parser/mysql/syntax/ddl.test.ts
Normal file
58
test/parser/mysql/syntax/ddl.test.ts
Normal file
@ -0,0 +1,58 @@
|
||||
import MySQL from '../../../../src/parser/mysql';
|
||||
import { readSQL } from '../../../helper';
|
||||
|
||||
const parser = new MySQL();
|
||||
|
||||
const features = {
|
||||
alterDatabase: readSQL(__dirname, 'alterDatabase.sql'),
|
||||
alterEvent: readSQL(__dirname, 'alterEvent.sql'),
|
||||
alterFunction: readSQL(__dirname, 'alterFunction.sql'),
|
||||
alterInstance: readSQL(__dirname, 'alterInstance.sql'),
|
||||
alterLogFileGroup: readSQL(__dirname, 'alterLogFileGroup.sql'),
|
||||
alterProcedure: readSQL(__dirname, 'alterProcedure.sql'),
|
||||
alterServer: readSQL(__dirname, 'alterServer.sql'),
|
||||
alterTable: readSQL(__dirname, 'alterTable.sql'),
|
||||
alterTableAndGeneratedColumns: readSQL(__dirname, 'alterTableAndGeneratedColumns.sql'),
|
||||
alterTablePartition: readSQL(__dirname, 'alterTablePartition.sql'),
|
||||
alterTableSpace: readSQL(__dirname, 'alterTableSpace.sql'),
|
||||
alterView: readSQL(__dirname, 'alterView.sql'),
|
||||
createDatabase: readSQL(__dirname, 'createDatabase.sql'),
|
||||
createEvent: readSQL(__dirname, 'createEvent.sql'),
|
||||
createFunction: readSQL(__dirname, 'createFunction.sql'),
|
||||
createIndex: readSQL(__dirname, 'createIndex.sql'),
|
||||
createLogFileGroup: readSQL(__dirname, 'createLogFileGroup.sql'),
|
||||
createProcedure: readSQL(__dirname, 'createProcedure.sql'),
|
||||
createServer: readSQL(__dirname, 'createServer.sql'),
|
||||
createTable: readSQL(__dirname, 'createTable.sql'),
|
||||
createTableSpace: readSQL(__dirname, 'createTableSpace.sql'),
|
||||
createTrigger: readSQL(__dirname, 'createTrigger.sql'),
|
||||
createView: readSQL(__dirname, 'createView.sql'),
|
||||
dropDatabase: readSQL(__dirname, 'dropDatabase.sql'),
|
||||
dropEvent: readSQL(__dirname, 'dropEvent.sql'),
|
||||
dropFunction: readSQL(__dirname, 'dropFunction.sql'),
|
||||
dropIndex: readSQL(__dirname, 'dropIndex.sql'),
|
||||
dropLogFileGroup: readSQL(__dirname, 'dropLogFileGroup.sql'),
|
||||
dropProcedure: readSQL(__dirname, 'dropProcedure.sql'),
|
||||
dropServer: readSQL(__dirname, 'dropServer.sql'),
|
||||
dropSpatialReferenceSystem: readSQL(__dirname, 'dropSpatialReferenceSystem.sql'),
|
||||
dropTable: readSQL(__dirname, 'dropTable.sql'),
|
||||
dropTableSpace: readSQL(__dirname, 'dropTableSpace.sql'),
|
||||
dropTrigger: readSQL(__dirname, 'dropTrigger.sql'),
|
||||
dropView: readSQL(__dirname, 'dropView.sql'),
|
||||
renameTable: readSQL(__dirname, 'renameTable.sql'),
|
||||
truncateTable: readSQL(__dirname, 'truncateTable.sql'),
|
||||
};
|
||||
|
||||
describe('MySQL DDL Syntax Tests', () => {
|
||||
Object.keys(features).forEach((key) => {
|
||||
features[key].forEach((sql) => {
|
||||
it(sql, () => {
|
||||
const result = parser.validate(sql);
|
||||
if (result.length) {
|
||||
console.log(result, `\n请检查 sql: ${sql}`);
|
||||
}
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
42
test/parser/mysql/syntax/dml.test.ts
Normal file
42
test/parser/mysql/syntax/dml.test.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import MySQL from '../../../../src/parser/mysql';
|
||||
import { readSQL } from '../../../helper';
|
||||
|
||||
const parser = new MySQL();
|
||||
|
||||
const features = {
|
||||
call: readSQL(__dirname, 'call.sql'),
|
||||
delete: readSQL(__dirname, 'delete.sql'),
|
||||
do: readSQL(__dirname, 'do.sql'),
|
||||
handler: readSQL(__dirname, 'handler.sql'),
|
||||
importTable: readSQL(__dirname, 'importTable.sql'),
|
||||
insert: readSQL(__dirname, 'insert.sql'),
|
||||
insertSelect: readSQL(__dirname, 'insertSelect.sql'),
|
||||
interSect: readSQL(__dirname, 'interSect.sql'),
|
||||
loadData: readSQL(__dirname, 'loadData.sql'),
|
||||
loadXml: readSQL(__dirname, 'loadXml.sql'),
|
||||
parenthesizedQuery: readSQL(__dirname, 'parenthesizedQuery.sql'),
|
||||
replace: readSQL(__dirname, 'replace.sql'),
|
||||
select: readSQL(__dirname, 'select.sql'),
|
||||
selectJoin: readSQL(__dirname, 'selectJoin.sql'),
|
||||
setOperations: readSQL(__dirname, 'setOperations.sql'),
|
||||
subQueries: readSQL(__dirname, 'subQueries.sql'),
|
||||
table: readSQL(__dirname, 'table.sql'),
|
||||
update: readSQL(__dirname, 'update.sql'),
|
||||
union: readSQL(__dirname, 'union.sql'),
|
||||
values: readSQL(__dirname, 'values.sql'),
|
||||
with: readSQL(__dirname, 'with.sql'),
|
||||
};
|
||||
|
||||
describe('MySQL DML Syntax Tests', () => {
|
||||
Object.keys(features).forEach((key) => {
|
||||
features[key].forEach((sql) => {
|
||||
it(sql, () => {
|
||||
const result = parser.validate(sql);
|
||||
if (result.length) {
|
||||
console.log(result, `\n请检查 sql: ${sql}`);
|
||||
}
|
||||
expect(result.length).toBe(0);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
20
test/parser/mysql/syntax/fixtures/alterDatabase.sql
Normal file
20
test/parser/mysql/syntax/fixtures/alterDatabase.sql
Normal file
@ -0,0 +1,20 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-database.html
|
||||
|
||||
/* ALTER {DATABASE | SCHEMA} [db_name]
|
||||
alter_option ...
|
||||
|
||||
alter_option: {
|
||||
[DEFAULT] CHARACTER SET [=] charset_name
|
||||
| [DEFAULT] COLLATE [=] collation_name
|
||||
| [DEFAULT] ENCRYPTION [=] {'Y' | 'N'}
|
||||
| READ ONLY [=] {DEFAULT | 0 | 1}
|
||||
} */
|
||||
|
||||
|
||||
ALTER DATABASE mydb READ ONLY = 0 DEFAULT COLLATE utf8mb4_bin;
|
||||
ALTER SCHEMA mydb READ ONLY = 1 DEFAULT COLLATE utf8mb4_bin;
|
||||
|
||||
ALTER DATABASE READ ONLY = DEFAULT;
|
||||
|
||||
ALTER DATABASE mydb READ ONLY = 0;
|
||||
ALTER DATABASE mydb READ ONLY = 1;
|
26
test/parser/mysql/syntax/fixtures/alterEvent.sql
Normal file
26
test/parser/mysql/syntax/fixtures/alterEvent.sql
Normal file
@ -0,0 +1,26 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-event.html
|
||||
|
||||
/* ALTER
|
||||
[DEFINER = user]
|
||||
EVENT event_name
|
||||
[ON SCHEDULE schedule]
|
||||
[ON COMPLETION [NOT] PRESERVE]
|
||||
[RENAME TO new_event_name]
|
||||
[ENABLE | DISABLE | DISABLE ON SLAVE]
|
||||
[COMMENT 'string']
|
||||
[DO event_body] */
|
||||
|
||||
|
||||
ALTER EVENT no_such_event ON SCHEDULE EVERY '2:3' DAY_HOUR;
|
||||
|
||||
ALTER EVENT myevent ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;
|
||||
|
||||
ALTER EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO TRUNCATE TABLE myschema.mytable;
|
||||
|
||||
ALTER EVENT myevent DISABLE;
|
||||
|
||||
ALTER EVENT myevent RENAME TO yourevent;
|
||||
|
||||
ALTER EVENT myevent RENAME TO yourevent;
|
||||
|
||||
ALTER EVENT olddb.myevent RENAME TO newdb.myevent;
|
23
test/parser/mysql/syntax/fixtures/alterFunction.sql
Normal file
23
test/parser/mysql/syntax/fixtures/alterFunction.sql
Normal file
@ -0,0 +1,23 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-function.html
|
||||
|
||||
/* ALTER FUNCTION func_name [characteristic ...]
|
||||
|
||||
characteristic: {
|
||||
COMMENT 'string'
|
||||
| LANGUAGE SQL
|
||||
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
|
||||
| SQL SECURITY { DEFINER | INVOKER }
|
||||
} */
|
||||
|
||||
|
||||
ALTER FUNCTION function_name;
|
||||
ALTER FUNCTION function_name COMMENT 'get id';
|
||||
ALTER FUNCTION function_name COMMENT 'get id' LANGUAGE SQL;
|
||||
ALTER FUNCTION function_name LANGUAGE SQL;
|
||||
ALTER FUNCTION function_name NOT DETERMINISTIC;
|
||||
ALTER FUNCTION function_name CONTAINS SQL;
|
||||
ALTER FUNCTION function_name NO SQL;
|
||||
ALTER FUNCTION function_name READS SQL DATA;
|
||||
ALTER FUNCTION function_name MODIFIES SQL DATA;
|
||||
ALTER FUNCTION function_name SQL SECURITY DEFINER;
|
||||
ALTER FUNCTION function_name SQL SECURITY INVOKER;
|
16
test/parser/mysql/syntax/fixtures/alterInstance.sql
Normal file
16
test/parser/mysql/syntax/fixtures/alterInstance.sql
Normal file
@ -0,0 +1,16 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-instance.html
|
||||
|
||||
/* ALTER INSTANCE instance_action
|
||||
|
||||
instance_action: {
|
||||
| {ENABLE|DISABLE} INNODB REDO_LOG
|
||||
| ROTATE INNODB MASTER KEY
|
||||
| ROTATE BINLOG MASTER KEY
|
||||
| RELOAD TLS
|
||||
[FOR CHANNEL {mysql_main | mysql_admin}]
|
||||
[NO ROLLBACK ON ERROR]
|
||||
| RELOAD KEYRING
|
||||
} */
|
||||
|
||||
|
||||
ALTER INSTANCE ROTATE INNODB MASTER KEY;
|
14
test/parser/mysql/syntax/fixtures/alterLogFileGroup.sql
Normal file
14
test/parser/mysql/syntax/fixtures/alterLogFileGroup.sql
Normal file
@ -0,0 +1,14 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-logfile-group.html
|
||||
|
||||
/* ALTER LOGFILE GROUP logfile_group
|
||||
ADD UNDOFILE 'file_name'
|
||||
[INITIAL_SIZE [=] size]
|
||||
[WAIT]
|
||||
ENGINE [=] engine_name */
|
||||
|
||||
|
||||
ALTER LOGFILE GROUP lg_3 ADD UNDOFILE 'undo_10.dat' INITIAL_SIZE=32M ENGINE=NDBCLUSTER;
|
||||
ALTER LOGFILE GROUP lg_3 ADD UNDOFILE 'undo_10.dat' ENGINE=NDBCLUSTER;
|
||||
|
||||
ALTER LOGFILE GROUP lg_3 ADD UNDOFILE 'undo_10.dat' INITIAL_SIZE=32M WAIT ENGINE=NDBCLUSTER;
|
||||
ALTER LOGFILE GROUP lg_3 ADD UNDOFILE 'undo_10.dat' WAIT ENGINE=NDBCLUSTER;
|
25
test/parser/mysql/syntax/fixtures/alterProcedure.sql
Normal file
25
test/parser/mysql/syntax/fixtures/alterProcedure.sql
Normal file
@ -0,0 +1,25 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-procedure.html
|
||||
|
||||
/* ALTER PROCEDURE proc_name [characteristic ...]
|
||||
|
||||
characteristic: {
|
||||
COMMENT 'string'
|
||||
| LANGUAGE SQL
|
||||
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
|
||||
| SQL SECURITY { DEFINER | INVOKER }
|
||||
} */
|
||||
|
||||
|
||||
-- 和 ALTER FUNCTION 语法类似
|
||||
|
||||
ALTER PROCEDURE procedure_name;
|
||||
ALTER PROCEDURE procedure_name COMMENT 'get id';
|
||||
ALTER PROCEDURE procedure_name COMMENT 'get id' LANGUAGE SQL;
|
||||
ALTER PROCEDURE procedure_name LANGUAGE SQL;
|
||||
ALTER PROCEDURE procedure_name NOT DETERMINISTIC;
|
||||
ALTER PROCEDURE procedure_name CONTAINS SQL;
|
||||
ALTER PROCEDURE procedure_name NO SQL;
|
||||
ALTER PROCEDURE procedure_name READS SQL DATA;
|
||||
ALTER PROCEDURE procedure_name MODIFIES SQL DATA;
|
||||
ALTER PROCEDURE procedure_name SQL SECURITY DEFINER;
|
||||
ALTER PROCEDURE procedure_name SQL SECURITY INVOKER;
|
25
test/parser/mysql/syntax/fixtures/alterResourceGroup.sql
Normal file
25
test/parser/mysql/syntax/fixtures/alterResourceGroup.sql
Normal file
@ -0,0 +1,25 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-resource-group.html
|
||||
|
||||
/* ALTER RESOURCE GROUP group_name
|
||||
[VCPU [=] vcpu_spec [, vcpu_spec] ...]
|
||||
[THREAD_PRIORITY [=] N]
|
||||
[ENABLE|DISABLE [FORCE]]
|
||||
|
||||
vcpu_spec: {N | M - N} */
|
||||
|
||||
|
||||
ALTER RESOURCE GROUP group_name VCPU = 2, 3 THREAD_PRIORITY = 5 DISABLE FORCE;
|
||||
ALTER RESOURCE GROUP group_name VCPU = 2, 3 THREAD_PRIORITY = 5 ENABLE FORCE;
|
||||
ALTER RESOURCE GROUP group_name VCPU 2 THREAD_PRIORITY 5 ENABLE FORCE;
|
||||
ALTER RESOURCE GROUP group_name VCPU 2 THREAD_PRIORITY 5 ENABLE;
|
||||
ALTER RESOURCE GROUP group_name VCPU 2 THREAD_PRIORITY 5 DISABLE;
|
||||
ALTER RESOURCE GROUP group_name VCPU 2 THREAD_PRIORITY 5;
|
||||
ALTER RESOURCE GROUP group_name VCPU 2 DISABLE FORCE;
|
||||
ALTER RESOURCE GROUP group_name DISABLE FORCE;
|
||||
ALTER RESOURCE GROUP group_name ENABLE FORCE;
|
||||
ALTER RESOURCE GROUP group_name;
|
||||
|
||||
ALTER RESOURCE GROUP rg1 VCPU = 0-63;
|
||||
ALTER RESOURCE GROUP rg1 VCPU = 0-63, 64-65, 66;
|
||||
ALTER RESOURCE GROUP rg2 THREAD_PRIORITY = 5;
|
||||
ALTER RESOURCE GROUP rg3 DISABLE FORCE;
|
7
test/parser/mysql/syntax/fixtures/alterServer.sql
Normal file
7
test/parser/mysql/syntax/fixtures/alterServer.sql
Normal file
@ -0,0 +1,7 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-server.html
|
||||
|
||||
/* ALTER SERVER server_name
|
||||
OPTIONS (option [, option] ...) */
|
||||
|
||||
|
||||
ALTER SERVER server_name OPTIONS (USER 'sally');
|
105
test/parser/mysql/syntax/fixtures/alterTable.sql
Normal file
105
test/parser/mysql/syntax/fixtures/alterTable.sql
Normal file
@ -0,0 +1,105 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
|
||||
|
||||
|
||||
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
|
||||
ALTER TABLE t1 ENGINE = InnoDB;
|
||||
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
|
||||
ALTER TABLE t1 AUTO_INCREMENT = 13;
|
||||
ALTER TABLE t1 CHARACTER SET = utf8mb4;
|
||||
ALTER TABLE t1 COMMENT = 'New table comment';
|
||||
ALTER TABLE t1 COMMENT = 'NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE';
|
||||
ALTER TABLE t1 CHANGE COLUMN old_col_name new_col_name BLOB COMMENT 'NDB_COLUMN=BLOB_INLINE_SIZE=4096,MAX_BLOB_PART_SIZE';
|
||||
|
||||
ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
|
||||
ALTER TABLE t1 CHANGE b b INT NOT NULL;
|
||||
ALTER TABLE t1 MODIFY b INT NOT NULL;
|
||||
ALTER TABLE t1 CHANGE b a INT NOT NULL;
|
||||
ALTER TABLE t1 RENAME COLUMN b TO a;
|
||||
-- swap a and b
|
||||
ALTER TABLE t1 RENAME COLUMN a TO b,
|
||||
RENAME COLUMN b TO a;
|
||||
-- "rotate" a, b, c through a cycle
|
||||
ALTER TABLE t1 RENAME COLUMN a TO b,
|
||||
RENAME COLUMN b TO c,
|
||||
RENAME COLUMN c TO a;
|
||||
ALTER TABLE t1 MODIFY col1 BIGINT;
|
||||
ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';
|
||||
|
||||
ALTER TABLE tbl_name DROP CHECK symbol;
|
||||
ALTER TABLE tbl_name DROP CONSTRAINT symbol;
|
||||
ALTER TABLE t MODIFY latin1_text_col TEXT CHARACTER SET utf8mb4;
|
||||
|
||||
ALTER TABLE t MODIFY latin1_varchar_col VARCHAR CHARACTER SET utf8mb4;
|
||||
ALTER TABLE tbl_name CONVERT TO CHARSET utf8mb4;
|
||||
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4;
|
||||
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8mb4;
|
||||
ALTER TABLE tbl_name DEFAULT CHARACTER SET 'utf8mb4';
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-table-examples.html
|
||||
|
||||
ALTER TABLE t1 RENAME t2;
|
||||
ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
|
||||
ALTER TABLE t2 ADD d TIMESTAMP;
|
||||
ALTER TABLE t2 ADD INDEX (d), ADD UNIQUE (a);
|
||||
ALTER TABLE t2 DROP COLUMN c;
|
||||
ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (c);
|
||||
ALTER TABLE t1 TABLESPACE ts_1 STORAGE DISK;
|
||||
ALTER TABLE t2 STORAGE DISK;
|
||||
ALTER TABLE t2 TABLESPACE ts_1 STORAGE DISK;
|
||||
ALTER TABLE t3 MODIFY c2 INT STORAGE MEMORY;
|
||||
ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY;
|
||||
ALTER TABLE t2 RENAME t1;
|
||||
|
||||
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN (2002));
|
||||
ALTER TABLE t1 DROP PARTITION p0, p1;
|
||||
ALTER TABLE t1 DISCARD PARTITION p2, p3 TABLESPACE;
|
||||
ALTER TABLE t1 IMPORT PARTITION p2, p3 TABLESPACE;
|
||||
ALTER TABLE t1 TRUNCATE PARTITION p0;
|
||||
ALTER TABLE t1 TRUNCATE PARTITION p1, p3;
|
||||
ALTER TABLE t2 COALESCE PARTITION 2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1, ANALYZE PARTITION p2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1, CHECK PARTITION p2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1, p2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1;
|
||||
ALTER TABLE t1 CHECK PARTITION p2;
|
||||
ALTER TABLE t1 ADD COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;
|
||||
ALTER TABLE t1 MODIFY COLUMN c2 TINYINT GENERATED ALWAYS AS (c1 + 5) STORED;
|
||||
ALTER TABLE t1 CHANGE c2 c3 INT GENERATED ALWAYS AS (c1 + 1) STORED;
|
||||
ALTER TABLE t1 DROP COLUMN c3;
|
||||
ALTER TABLE t1 ADD COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;
|
||||
ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;
|
||||
ALTER TABLE t1 MODIFY COLUMN c2 INT;
|
||||
|
||||
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ADD CONSTRAINT c2_positive CHECK (c2 > 0) NOT ENFORCED;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ADD CHECK (c2 > 0) ENFORCED;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ADD CHECK (c2 > 0);
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ALTER c2 SET VISIBLE;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP DEFAULT;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ALGORITHM = INSTANT;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CHECK c2_positive;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ALTER CHECK c2_positive NOT ENFORCED;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ALTER CONSTRAINT c2_positive NOT ENFORCED;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ALTER CONSTRAINT c2_positive ENFORCED;
|
||||
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, ALTER CONSTRAINT c2_positive ENFORCED, ALTER CONSTRAINT c2_positive NOT ENFORCED;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED;
|
||||
|
||||
ALTER TABLE your_partitioned_table ADD PARTITION (PARTITION p5 VALUES LESS THAN (2030));
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED ADD PARTITION (PARTITION p5 VALUES LESS THAN (2030)) DROP PARTITION p0;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED DISCARD PARTITION p0 TABLESPACE DISCARD PARTITION ALL TABLESPACE;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED IMPORT PARTITION p0 TABLESPACE IMPORT PARTITION ALL TABLESPACE;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED TRUNCATE PARTITION p0 TRUNCATE PARTITION ALL;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED COALESCE PARTITION 10 COALESCE PARTITION 100;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED REORGANIZE PARTITION p0 INTO (PARTITION p5 VALUES LESS THAN (2030), PARTITION p6 VALUES LESS THAN (2030));
|
||||
ALTER TABLE t1 ALTER COLUMN c1 SET VISIBLE, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED EXCHANGE PARTITION p0 WITH TABLE t1 WITH VALIDATION;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 SET VISIBLE, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED EXCHANGE PARTITION p0 WITH TABLE t1 WITHOUT VALIDATION;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED ANALYZE PARTITION p0 ANALYZE PARTITION ALL;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED CHECK PARTITION p0 CHECK PARTITION ALL;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED OPTIMIZE PARTITION p0 OPTIMIZE PARTITION ALL;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED REBUILD PARTITION p0 REBUILD PARTITION ALL;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 DROP DEFAULT, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED REPAIR PARTITION p0 REPAIR PARTITION ALL;
|
||||
ALTER TABLE t1 ALTER COLUMN c1 SET VISIBLE, DROP CONSTRAINT c2_positive, ALTER CHECK c2_positive NOT ENFORCED REMOVE PARTITIONING UPGRADE PARTITIONING;
|
@ -0,0 +1,10 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-table-generated-columns.html
|
||||
|
||||
|
||||
ALTER TABLE t1 ADD COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;
|
||||
ALTER TABLE t1 MODIFY COLUMN c2 TINYINT GENERATED ALWAYS AS (c1 + 5) STORED;
|
||||
ALTER TABLE t1 CHANGE c2 c3 INT GENERATED ALWAYS AS (c1 + 1) STORED;
|
||||
ALTER TABLE t1 DROP COLUMN c3;
|
||||
ALTER TABLE t1 DROP COLUMN c2;
|
||||
ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED;
|
||||
ALTER TABLE t1 MODIFY COLUMN c2 INT;
|
14
test/parser/mysql/syntax/fixtures/alterTablePartition.sql
Normal file
14
test/parser/mysql/syntax/fixtures/alterTablePartition.sql
Normal file
@ -0,0 +1,14 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-table-partition-operations.html
|
||||
|
||||
ALTER TABLE t1 ADD PARTITION (PARTITION p3 VALUES LESS THAN (2002));
|
||||
ALTER TABLE t1 DROP PARTITION p0, p1;
|
||||
ALTER TABLE t1 DISCARD PARTITION p2, p3 TABLESPACE;
|
||||
ALTER TABLE t1 IMPORT PARTITION p2, p3 TABLESPACE;
|
||||
ALTER TABLE t1 TRUNCATE PARTITION p0;
|
||||
ALTER TABLE t1 TRUNCATE PARTITION p1, p3;
|
||||
ALTER TABLE t2 COALESCE PARTITION 2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1, ANALYZE PARTITION p2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1, CHECK PARTITION p2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1, p2;
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1;
|
||||
ALTER TABLE t1 CHECK PARTITION p2;
|
45
test/parser/mysql/syntax/fixtures/alterTableSpace.sql
Normal file
45
test/parser/mysql/syntax/fixtures/alterTableSpace.sql
Normal file
@ -0,0 +1,45 @@
|
||||
-- v5.7: https://dev.mysql.com/doc/refman/5.7/en/alter-tablespace.html
|
||||
|
||||
/* ALTER TABLESPACE tablespace_name
|
||||
{ADD | DROP} DATAFILE 'file_name'
|
||||
[INITIAL_SIZE [=] size]
|
||||
[WAIT]
|
||||
ENGINE [=] engine_name */
|
||||
|
||||
|
||||
ALTER TABLESPACE tablespace_name ADD DATAFILE "file_name" ENGINE 'engine_name';
|
||||
ALTER TABLESPACE tablespace_name DROP DATAFILE "file_name" ENGINE 'engine_name';
|
||||
|
||||
ALTER TABLESPACE tablespace_name DROP DATAFILE "file_name" INITIAL_SIZE = 1G ENGINE 'engine_name';
|
||||
ALTER TABLESPACE tablespace_name DROP DATAFILE "file_name" INITIAL_SIZE 1G ENGINE 'engine_name';
|
||||
ALTER TABLESPACE tablespace_name DROP DATAFILE "file_name" INITIAL_SIZE 1G WAIT ENGINE 'engine_name';
|
||||
ALTER TABLESPACE tablespace_name DROP DATAFILE "file_name" INITIAL_SIZE 1G WAIT ENGINE = 'engine_name';
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-- v8: https://dev.mysql.com/doc/refman/8.0/en/alter-tablespace.html
|
||||
|
||||
/* ALTER [UNDO] TABLESPACE tablespace_name
|
||||
NDB only:
|
||||
{ADD | DROP} DATAFILE 'file_name'
|
||||
[INITIAL_SIZE [=] size]
|
||||
[WAIT]
|
||||
InnoDB and NDB:
|
||||
[RENAME TO tablespace_name]
|
||||
InnoDB only:
|
||||
[AUTOEXTEND_SIZE [=] 'value']
|
||||
[SET {ACTIVE | INACTIVE}]
|
||||
[ENCRYPTION [=] {'Y' | 'N'}]
|
||||
InnoDB and NDB:
|
||||
[ENGINE [=] engine_name]
|
||||
Reserved for future use:
|
||||
[ENGINE_ATTRIBUTE [=] 'string'] */
|
||||
|
||||
|
||||
ALTER UNDO TABLESPACE tablespace_name ADD DATAFILE "file_name" INITIAL_SIZE = 500M WAIT RENAME TO new_tablespace_name AUTOEXTEND_SIZE = 500M SET ACTIVE ENCRYPTION = 'Y' ENGINE 'engine_name' ENGINE_ATTRIBUTE = 'aaa';
|
||||
ALTER TABLESPACE tablespace_name DROP DATAFILE "file_name" INITIAL_SIZE 500M WAIT AUTOEXTEND_SIZE = 500M SET ACTIVE ENCRYPTION = 'N' ENGINE 'engine_name' ENGINE_ATTRIBUTE = 'aaa';
|
||||
ALTER TABLESPACE tablespace_name DROP DATAFILE "file_name";
|
||||
|
||||
|
217
test/parser/mysql/syntax/fixtures/alterUser.sql
Normal file
217
test/parser/mysql/syntax/fixtures/alterUser.sql
Normal file
@ -0,0 +1,217 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
|
||||
|
||||
/* ALTER USER [IF EXISTS]
|
||||
user [auth_option] [, user [auth_option]] ...
|
||||
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
|
||||
[WITH resource_option [resource_option] ...]
|
||||
[password_option | lock_option] ...
|
||||
[COMMENT 'comment_string' | ATTRIBUTE 'json_object']
|
||||
|
||||
ALTER USER [IF EXISTS]
|
||||
USER() user_func_auth_option
|
||||
|
||||
ALTER USER [IF EXISTS]
|
||||
user [registration_option]
|
||||
|
||||
ALTER USER [IF EXISTS]
|
||||
USER() [registration_option]
|
||||
|
||||
ALTER USER [IF EXISTS]
|
||||
user DEFAULT ROLE
|
||||
{NONE | ALL | role [, role ] ...}
|
||||
|
||||
user:
|
||||
(see Section 6.2.4, “Specifying Account Names”)
|
||||
|
||||
auth_option: {
|
||||
IDENTIFIED BY 'auth_string'
|
||||
[REPLACE 'current_auth_string']
|
||||
[RETAIN CURRENT PASSWORD]
|
||||
| IDENTIFIED BY RANDOM PASSWORD
|
||||
[REPLACE 'current_auth_string']
|
||||
[RETAIN CURRENT PASSWORD]
|
||||
| IDENTIFIED WITH auth_plugin
|
||||
| IDENTIFIED WITH auth_plugin BY 'auth_string'
|
||||
[REPLACE 'current_auth_string']
|
||||
[RETAIN CURRENT PASSWORD]
|
||||
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
|
||||
[REPLACE 'current_auth_string']
|
||||
[RETAIN CURRENT PASSWORD]
|
||||
| IDENTIFIED WITH auth_plugin AS 'auth_string'
|
||||
| DISCARD OLD PASSWORD
|
||||
| ADD factor factor_auth_option [ADD factor factor_auth_option]
|
||||
| MODIFY factor factor_auth_option [MODIFY factor factor_auth_option]
|
||||
| DROP factor [DROP factor]
|
||||
}
|
||||
|
||||
user_func_auth_option: {
|
||||
IDENTIFIED BY 'auth_string'
|
||||
[REPLACE 'current_auth_string']
|
||||
[RETAIN CURRENT PASSWORD]
|
||||
| DISCARD OLD PASSWORD
|
||||
}
|
||||
|
||||
factor_auth_option: {
|
||||
IDENTIFIED BY 'auth_string'
|
||||
| IDENTIFIED BY RANDOM PASSWORD
|
||||
| IDENTIFIED WITH auth_plugin BY 'auth_string'
|
||||
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
|
||||
| IDENTIFIED WITH auth_plugin AS 'auth_string'
|
||||
}
|
||||
|
||||
registration_option: {
|
||||
factor INITIATE REGISTRATION
|
||||
| factor FINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'auth_string'
|
||||
| factor UNREGISTER
|
||||
}
|
||||
|
||||
factor: {2 | 3} FACTOR
|
||||
|
||||
tls_option: {
|
||||
SSL
|
||||
| X509
|
||||
| CIPHER 'cipher'
|
||||
| ISSUER 'issuer'
|
||||
| SUBJECT 'subject'
|
||||
}
|
||||
|
||||
resource_option: {
|
||||
MAX_QUERIES_PER_HOUR count
|
||||
| MAX_UPDATES_PER_HOUR count
|
||||
| MAX_CONNECTIONS_PER_HOUR count
|
||||
| MAX_USER_CONNECTIONS count
|
||||
}
|
||||
|
||||
password_option: {
|
||||
PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
|
||||
| PASSWORD HISTORY {DEFAULT | N}
|
||||
| PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
|
||||
| PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
|
||||
| FAILED_LOGIN_ATTEMPTS N
|
||||
| PASSWORD_LOCK_TIME {N | UNBOUNDED}
|
||||
}
|
||||
|
||||
lock_option: {
|
||||
ACCOUNT LOCK
|
||||
| ACCOUNT UNLOCK
|
||||
} */
|
||||
|
||||
|
||||
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password' PASSWORD EXPIRE;
|
||||
ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password' PASSWORD EXPIRE INTERVAL 180 DAY;
|
||||
ALTER USER 'jeffrey'@'localhost' ACCOUNT LOCK;
|
||||
ALTER USER 'jeffrey'@'localhost' ACCOUNT UNLOCK;
|
||||
ALTER USER 'jeffrey'@'localhost' REQUIRE SSL WITH MAX_CONNECTIONS_PER_HOUR 20;
|
||||
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'jeffrey_new_password', 'jeanne'@'localhost', 'josh'@'localhost' IDENTIFIED BY 'josh_new_password' REPLACE 'josh_current_password' RETAIN CURRENT PASSWORD REQUIRE SSL WITH MAX_USER_CONNECTIONS 2 PASSWORD HISTORY 5;
|
||||
ALTER USER 'josh'@'localhost' DISCARD OLD PASSWORD;
|
||||
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
|
||||
ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
|
||||
ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password' REPLACE 'current_password';
|
||||
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'jeffery'@'localhost' DISCARD OLD PASSWORD;
|
||||
ALTER USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
|
||||
ALTER USER 'user' DROP 2 FACTOR DROP 3 FACTOR;
|
||||
ALTER USER 'joe'@'10.0.0.1' DEFAULT ROLE administrator, developer;
|
||||
ALTER USER 'jeffrey'@'localhost' REQUIRE NONE;
|
||||
ALTER USER 'jeffrey'@'localhost' REQUIRE SSL;
|
||||
ALTER USER 'jeffrey'@'localhost' REQUIRE X509;
|
||||
ALTER USER 'jeffrey'@'localhost' REQUIRE ISSUER '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL/CN=CA/emailAddress=ca@example.com';
|
||||
ALTER USER 'jeffrey'@'localhost' REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL demo client certificate/ CN=client/emailAddress=client@example.com';
|
||||
ALTER USER 'jeffrey'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';
|
||||
ALTER USER 'jeffrey'@'localhost' REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL demo client certificate/ CN=client/emailAddress=client@example.com' AND ISSUER '/C=SE/ST=Stockholm/L=Stockholm/ O=MySQL/CN=CA/emailAddress=ca@example.com' AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
|
||||
ALTER USER 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY DEFAULT;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY 6;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL DEFAULT;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL 360 DAY;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT OPTIONAL;
|
||||
ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT DEFAULT;
|
||||
ALTER USER 'jeffrey'@'localhost' FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 2;
|
||||
ALTER USER 'bill'@'localhost' ATTRIBUTE '{"baz": "faz", "foo": "moo"}';
|
||||
ALTER USER 'bill'@'localhost' ATTRIBUTE '{"foo": null}';
|
||||
ALTER USER 'bill'@'localhost' COMMENT 'Something about Bill';
|
||||
ALTER USER 'bill'@'localhost' COMMENT '';
|
||||
ALTER USER 'bill'@'localhost' ATTRIBUTE '{"comment": null}';
|
||||
|
||||
|
||||
ALTER USER IF EXISTS 'user' IDENTIFIED BY 'auth_string' REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED BY 'auth_string' REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED BY 'auth_string' REPLACE 'current_auth_string';
|
||||
ALTER USER 'user' IDENTIFIED BY 'auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED BY 'auth_string';
|
||||
|
||||
ALTER USER IF EXISTS 'user' IDENTIFIED BY RANDOM PASSWORD REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED BY RANDOM PASSWORD REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED BY RANDOM PASSWORD REPLACE 'current_auth_string';
|
||||
ALTER USER 'user' IDENTIFIED BY RANDOM PASSWORD RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED BY RANDOM PASSWORD;
|
||||
|
||||
ALTER USER IF EXISTS 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' REPLACE 'current_auth_string';
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string';
|
||||
|
||||
ALTER USER IF EXISTS 'user' IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD REPLACE 'current_auth_string';
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD;
|
||||
|
||||
ALTER USER IF EXISTS 'user' IDENTIFIED WITH 'auth_plugin' AS 'auth_string' REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' AS 'auth_string' REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' AS 'auth_string' REPLACE 'current_auth_string';
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' AS 'auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin' AS 'auth_string';
|
||||
|
||||
ALTER USER 'user' IDENTIFIED WITH 'auth_plugin';
|
||||
|
||||
ALTER USER USER() DISCARD OLD PASSWORD;
|
||||
ALTER USER 'user' DISCARD OLD PASSWORD;
|
||||
|
||||
ALTER USER IF EXISTS 'user' ADD 2 FACTOR IDENTIFIED BY 'auth_string' ADD 2 FACTOR IDENTIFIED BY 'auth_string';
|
||||
ALTER USER 'user' ADD 2 FACTOR IDENTIFIED BY 'auth_string' ADD 2 FACTOR IDENTIFIED BY 'auth_string';
|
||||
ALTER USER 'user' ADD 2 FACTOR IDENTIFIED BY RANDOM PASSWORD;
|
||||
ALTER USER 'user' ADD 2 FACTOR IDENTIFIED WITH 'auth_plugin' BY 'auth_string';
|
||||
ALTER USER 'user' ADD 3 FACTOR IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD;
|
||||
ALTER USER 'user' ADD 3 FACTOR IDENTIFIED WITH 'auth_plugin' AS 'auth_string';
|
||||
ALTER USER 'user' ADD 3 FACTOR IDENTIFIED WITH 'auth_plugin' AS 'auth_string' ADD 2 FACTOR IDENTIFIED WITH 'auth_plugin' AS 'auth_string';
|
||||
|
||||
ALTER USER IF EXISTS 'user' MODIFY 2 FACTOR IDENTIFIED BY 'auth_string' MODIFY 2 FACTOR IDENTIFIED BY 'auth_string';
|
||||
ALTER USER 'user' MODIFY 2 FACTOR IDENTIFIED BY 'auth_string' MODIFY 2 FACTOR IDENTIFIED BY 'auth_string';
|
||||
ALTER USER 'user' MODIFY 2 FACTOR IDENTIFIED BY RANDOM PASSWORD;
|
||||
ALTER USER 'user' MODIFY 2 FACTOR IDENTIFIED WITH 'auth_plugin' BY 'auth_string';
|
||||
ALTER USER 'user' MODIFY 3 FACTOR IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD;
|
||||
ALTER USER 'user' MODIFY 3 FACTOR IDENTIFIED WITH 'auth_plugin' AS 'auth_string';
|
||||
ALTER USER 'user' MODIFY 3 FACTOR IDENTIFIED WITH 'auth_plugin' AS 'auth_string' MODIFY 2 FACTOR IDENTIFIED WITH 'auth_plugin' AS 'auth_string';
|
||||
|
||||
ALTER USER 'user' DROP 2 FACTOR DROP 3 FACTOR;
|
||||
|
||||
ALTER USER IF EXISTS USER() IDENTIFIED BY 'auth_string';
|
||||
ALTER USER USER() IDENTIFIED BY 'auth_string' REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER USER() IDENTIFIED BY 'auth_string' REPLACE 'current_auth_string';
|
||||
ALTER USER USER() IDENTIFIED BY 'auth_string' RETAIN CURRENT PASSWORD;
|
||||
ALTER USER USER() DISCARD OLD PASSWORD;
|
||||
ALTER USER USER() IDENTIFIED BY 'auth_string';
|
||||
|
||||
ALTER USER IF EXISTS 'user' 2 FACTOR INITIATE REGISTRATION;
|
||||
ALTER USER 'user' 2 FACTOR INITIATE REGISTRATION;
|
||||
ALTER USER 'user' 3 FACTOR FINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'auth_string';
|
||||
ALTER USER 'user' 3 FACTOR UNREGISTER;
|
||||
ALTER USER 'user';
|
||||
|
||||
ALTER USER IF EXISTS USER() 2 FACTOR INITIATE REGISTRATION;
|
||||
ALTER USER USER() 2 FACTOR INITIATE REGISTRATION;
|
||||
ALTER USER USER() 3 FACTOR FINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'auth_string';
|
||||
ALTER USER USER() 3 FACTOR UNREGISTER;
|
||||
ALTER USER USER();
|
||||
|
||||
ALTER USER IF EXISTS 'user' DEFAULT ROLE NONE;
|
||||
ALTER USER 'user' DEFAULT ROLE NONE;
|
||||
ALTER USER 'user' DEFAULT ROLE ALL;
|
||||
ALTER USER 'user' DEFAULT ROLE developer;
|
22
test/parser/mysql/syntax/fixtures/alterView.sql
Normal file
22
test/parser/mysql/syntax/fixtures/alterView.sql
Normal file
@ -0,0 +1,22 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/alter-view.html
|
||||
|
||||
/* ALTER
|
||||
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
|
||||
[DEFINER = user]
|
||||
[SQL SECURITY { DEFINER | INVOKER }]
|
||||
VIEW view_name [(column_list)]
|
||||
AS select_statement
|
||||
[WITH [CASCADED | LOCAL] CHECK OPTION] */
|
||||
|
||||
|
||||
|
||||
ALTER ALGORITHM = UNDEFINED DEFINER = 'user' SQL SECURITY DEFINER VIEW view_name AS SELECT column1, column2, new_column FROM my_table WHERE condition WITH CASCADED CHECK OPTION;
|
||||
ALTER ALGORITHM = MERGE DEFINER = 'user' SQL SECURITY DEFINER VIEW view_name AS SELECT column1, column2, new_column FROM my_table WHERE condition WITH CASCADED CHECK OPTION;
|
||||
ALTER ALGORITHM = TEMPTABLE DEFINER = 'user' SQL SECURITY DEFINER VIEW view_name AS SELECT column1, column2, new_column FROM my_table WHERE condition WITH CASCADED CHECK OPTION;
|
||||
ALTER ALGORITHM = UNDEFINED DEFINER = 'user' SQL SECURITY INVOKER VIEW view_name AS SELECT column1, column2, new_column FROM my_table WHERE condition WITH CASCADED CHECK OPTION;
|
||||
ALTER ALGORITHM = MERGE DEFINER = 'user' SQL SECURITY INVOKER VIEW view_name AS SELECT column1, column2, new_column FROM my_table WHERE condition WITH CASCADED CHECK OPTION;
|
||||
ALTER ALGORITHM = TEMPTABLE DEFINER = 'user' SQL SECURITY INVOKER VIEW view_name AS SELECT column1, column2, new_column FROM my_table WHERE condition WITH CASCADED CHECK OPTION;
|
||||
|
||||
ALTER VIEW my_view AS SELECT column1, column2, new_column FROM my_table WHERE condition;
|
||||
ALTER VIEW my_view AS SELECT column1, column2, new_column FROM my_table;
|
||||
ALTER VIEW my_view AS SELECT column1, column2 AS new_column FROM my_table;
|
48
test/parser/mysql/syntax/fixtures/analyzeTable.sql
Normal file
48
test/parser/mysql/syntax/fixtures/analyzeTable.sql
Normal file
@ -0,0 +1,48 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/analyze-table.html
|
||||
|
||||
/* ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
|
||||
TABLE tbl_name [, tbl_name] ...
|
||||
|
||||
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
|
||||
TABLE tbl_name
|
||||
UPDATE HISTOGRAM ON col_name [, col_name] ...
|
||||
[WITH N BUCKETS]
|
||||
|
||||
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
|
||||
TABLE tbl_name
|
||||
UPDATE HISTOGRAM ON col_name [USING DATA 'json_data']
|
||||
|
||||
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
|
||||
TABLE tbl_name
|
||||
DROP HISTOGRAM ON col_name [, col_name] ... */
|
||||
|
||||
|
||||
ANALYZE TABLE t UPDATE HISTOGRAM ON c1, c2, c3 WITH 10 BUCKETS;
|
||||
ANALYZE TABLE t UPDATE HISTOGRAM ON c1, c3 WITH 10 BUCKETS;
|
||||
ANALYZE TABLE t DROP HISTOGRAM ON c2;
|
||||
ANALYZE TABLE t UPDATE HISTOGRAM ON c1;
|
||||
ANALYZE TABLE t DROP HISTOGRAM ON c1;
|
||||
ANALYZE TABLE t UPDATE HISTOGRAM ON c1 USING DATA '{"buckets": [[206, 0.0625], [456, 0.125], [608, 0.1875]], "data-type": "int", "null-values": 0.0, "collation-id": 8, "last-updated": "2022-10-11 16:13:14.563319", "sampling-rate": 1.0, "histogram-type": "singleton", "number-of-buckets-specified": 100}';
|
||||
|
||||
|
||||
ANALYZE NO_WRITE_TO_BINLOG TABLE t1, t2, t3;
|
||||
ANALYZE LOCAL TABLE t1, t2, t3;
|
||||
ANALYZE TABLE t1, t2, t3;
|
||||
|
||||
ANALYZE NO_WRITE_TO_BINLOG TABLE t1 UPDATE HISTOGRAM ON c1, c2, c3 WITH 12 BUCKETS;
|
||||
ANALYZE NO_WRITE_TO_BINLOG TABLE t1 UPDATE HISTOGRAM ON c1, c2, c3;
|
||||
ANALYZE NO_WRITE_TO_BINLOG TABLE t1 UPDATE HISTOGRAM ON c1 WITH 13 BUCKETS;
|
||||
ANALYZE LOCAL TABLE t1 UPDATE HISTOGRAM ON c1, c2, c3;
|
||||
ANALYZE LOCAL TABLE t1 UPDATE HISTOGRAM ON c1;
|
||||
ANALYZE LOCAL TABLE t1 UPDATE HISTOGRAM ON c1 WITH 14 BUCKETS;
|
||||
ANALYZE TABLE t1 UPDATE HISTOGRAM ON c1 WITH 14 BUCKETS;
|
||||
|
||||
ANALYZE NO_WRITE_TO_BINLOG TABLE t1 UPDATE HISTOGRAM ON c1 USING DATA '{"buckets": [[206, 0.0625], [456, 0.125], [608, 0.1875]], "data-type": "int", "null-values": 0.0, "collation-id": 8, "last-updated": "2022-10-11 16:13:14.563319", "sampling-rate": 1.0, "histogram-type": "singleton", "number-of-buckets-specified": 100}';
|
||||
ANALYZE NO_WRITE_TO_BINLOG TABLE t1 UPDATE HISTOGRAM ON c1;
|
||||
ANALYZE LOCAL TABLE t1 UPDATE HISTOGRAM ON c1 USING DATA '{"buckets": [[206, 0.0625], [456, 0.125], [608, 0.1875]], "data-type": "int", "null-values": 0.0, "collation-id": 8, "last-updated": "2022-10-11 16:13:14.563319", "sampling-rate": 1.0, "histogram-type": "singleton", "number-of-buckets-specified": 100}';
|
||||
ANALYZE LOCAL TABLE t1 UPDATE HISTOGRAM ON c1;
|
||||
ANALYZE TABLE t1 UPDATE HISTOGRAM ON c1;
|
||||
|
||||
ANALYZE NO_WRITE_TO_BINLOG TABLE t1 DROP HISTOGRAM ON c1, c2, c3;
|
||||
ANALYZE LOCAL TABLE t1 DROP HISTOGRAM ON c1, c2, c3;
|
||||
ANALYZE TABLE t1 DROP HISTOGRAM ON c1, c2, c3;
|
8
test/parser/mysql/syntax/fixtures/call.sql
Normal file
8
test/parser/mysql/syntax/fixtures/call.sql
Normal file
@ -0,0 +1,8 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/call.html
|
||||
|
||||
/* CALL sp_name([parameter[,...]])
|
||||
CALL sp_name[()] */
|
||||
|
||||
|
||||
CALL p(@version, @increment);
|
||||
CALL p;
|
89
test/parser/mysql/syntax/fixtures/changeMasterTo.sql
Normal file
89
test/parser/mysql/syntax/fixtures/changeMasterTo.sql
Normal file
@ -0,0 +1,89 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/change-master-to.html
|
||||
|
||||
/* CHANGE MASTER TO option [, option] ... [ channel_option ]
|
||||
|
||||
option: {
|
||||
MASTER_BIND = 'interface_name'
|
||||
| MASTER_HOST = 'host_name'
|
||||
| MASTER_USER = 'user_name'
|
||||
| MASTER_PASSWORD = 'password'
|
||||
| MASTER_PORT = port_num
|
||||
| PRIVILEGE_CHECKS_USER = {'account' | NULL}
|
||||
| REQUIRE_ROW_FORMAT = {0|1}
|
||||
| REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF}
|
||||
| ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}
|
||||
| MASTER_LOG_FILE = 'source_log_name'
|
||||
| MASTER_LOG_POS = source_log_pos
|
||||
| MASTER_AUTO_POSITION = {0|1}
|
||||
| RELAY_LOG_FILE = 'relay_log_name'
|
||||
| RELAY_LOG_POS = relay_log_pos
|
||||
| MASTER_HEARTBEAT_PERIOD = interval
|
||||
| MASTER_CONNECT_RETRY = interval
|
||||
| MASTER_RETRY_COUNT = count
|
||||
| SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
|
||||
| MASTER_DELAY = interval
|
||||
| MASTER_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'
|
||||
| MASTER_ZSTD_COMPRESSION_LEVEL = level
|
||||
| MASTER_SSL = {0|1}
|
||||
| MASTER_SSL_CA = 'ca_file_name'
|
||||
| MASTER_SSL_CAPATH = 'ca_directory_name'
|
||||
| MASTER_SSL_CERT = 'cert_file_name'
|
||||
| MASTER_SSL_CRL = 'crl_file_name'
|
||||
| MASTER_SSL_CRLPATH = 'crl_directory_name'
|
||||
| MASTER_SSL_KEY = 'key_file_name'
|
||||
| MASTER_SSL_CIPHER = 'cipher_list'
|
||||
| MASTER_SSL_VERIFY_SERVER_CERT = {0|1}
|
||||
| MASTER_TLS_VERSION = 'protocol_list'
|
||||
| MASTER_TLS_CIPHERSUITES = 'ciphersuite_list'
|
||||
| MASTER_PUBLIC_KEY_PATH = 'key_file_name'
|
||||
| GET_MASTER_PUBLIC_KEY = {0|1}
|
||||
| NETWORK_NAMESPACE = 'namespace'
|
||||
| IGNORE_SERVER_IDS = (server_id_list),
|
||||
| GTID_ONLY = {0|1}
|
||||
}
|
||||
|
||||
channel_option:
|
||||
FOR CHANNEL channel
|
||||
|
||||
server_id_list:
|
||||
[server_id [, server_id] ... ] */
|
||||
|
||||
|
||||
CHANGE MASTER TO MASTER_BIND = 'interface_name', MASTER_HOST = 'host_name' FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_BIND = 'interface_name';
|
||||
CHANGE MASTER TO MASTER_USER = 'user_name', MASTER_PASSWORD = 'password' FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_PORT = 3011;
|
||||
CHANGE MASTER TO MASTER_CONNECT_RETRY = 10, MASTER_RETRY_COUNT = 5 FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_DELAY = 10, MASTER_HEARTBEAT_PERIOD = 5 FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_LOG_FILE = 'source_log_name', MASTER_LOG_POS = 4 FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_AUTO_POSITION = 1 FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO RELAY_LOG_FILE = 'relay_log_name', RELAY_LOG_POS = 4025, MASTER_SSL = 0, MASTER_SSL = 1 FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_SSL_CA = 'ca_file_name', MASTER_SSL_CAPATH = 'ca_directory_name', MASTER_SSL_CERT = 'cert_file_name' FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_SSL_CRL = 'crl_file_name', MASTER_SSL_CRLPATH = 'crl_directory_name', MASTER_SSL_KEY = 'key_file_name' FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_SSL_CIPHER = 'cipher_list', MASTER_SSL_VERIFY_SERVER_CERT = 0, MASTER_SSL_VERIFY_SERVER_CERT = 1 FOR CHANNEL 'channel';
|
||||
CHANGE MASTER TO MASTER_TLS_VERSION = 'protocol_list', IGNORE_SERVER_IDS = ('127.0.0.1', '127.0.0.1') FOR CHANNEL 'channel';
|
||||
|
||||
CHANGE MASTER TO PRIVILEGE_CHECKS_USER = 'account', PRIVILEGE_CHECKS_USER = NULL, REQUIRE_ROW_FORMAT = 0, REQUIRE_ROW_FORMAT = 1;
|
||||
CHANGE MASTER TO REQUIRE_TABLE_PRIMARY_KEY_CHECK = STREAM, REQUIRE_TABLE_PRIMARY_KEY_CHECK = ON, REQUIRE_TABLE_PRIMARY_KEY_CHECK = OFF;
|
||||
CHANGE MASTER TO ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = OFF, ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = LOCAL, ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = '839fa172-9f8d-4bf2-9a13-88dbc6e3814c';
|
||||
CHANGE MASTER TO SOURCE_CONNECTION_AUTO_FAILOVER = 0, SOURCE_CONNECTION_AUTO_FAILOVER = 1;
|
||||
CHANGE MASTER TO MASTER_COMPRESSION_ALGORITHMS = 'zlib,zstd', MASTER_COMPRESSION_ALGORITHMS = 'zlib';
|
||||
CHANGE MASTER TO MASTER_ZSTD_COMPRESSION_LEVEL = 1, MASTER_TLS_CIPHERSUITES = 'ciphersuite_list', MASTER_PUBLIC_KEY_PATH = 'key_file_name';
|
||||
CHANGE MASTER TO GET_MASTER_PUBLIC_KEY = 0, GET_MASTER_PUBLIC_KEY = 1;
|
||||
CHANGE MASTER TO NETWORK_NAMESPACE = 'namespace', GTID_ONLY = 0, GTID_ONLY = 1;
|
||||
|
||||
CHANGE MASTER TO MASTER_HOST='host1', MASTER_PORT=3002 FOR CHANNEL 'channel2';
|
||||
CHANGE MASTER TO MASTER_PASSWORD='new3cre';
|
||||
|
||||
CHANGE MASTER TO IGNORE_SERVER_IDS = ();
|
||||
|
||||
CHANGE MASTER TO
|
||||
MASTER_HOST='source2.example.com',
|
||||
MASTER_USER='replication',
|
||||
MASTER_PASSWORD='password',
|
||||
MASTER_PORT=3306,
|
||||
MASTER_LOG_FILE='source2-bin.001',
|
||||
MASTER_LOG_POS=4,
|
||||
MASTER_CONNECT_RETRY=10;
|
||||
|
||||
CHANGE MASTER TO RELAY_LOG_FILE='replica-relay-bin.006', RELAY_LOG_POS=4025;
|
@ -0,0 +1,41 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/change-replication-filter.html
|
||||
|
||||
/* CHANGE REPLICATION FILTER filter[, filter]
|
||||
[, ...] [FOR CHANNEL channel]
|
||||
|
||||
filter: {
|
||||
REPLICATE_DO_DB = (db_list)
|
||||
| REPLICATE_IGNORE_DB = (db_list)
|
||||
| REPLICATE_DO_TABLE = (tbl_list)
|
||||
| REPLICATE_IGNORE_TABLE = (tbl_list)
|
||||
| REPLICATE_WILD_DO_TABLE = (wild_tbl_list)
|
||||
| REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)
|
||||
| REPLICATE_REWRITE_DB = (db_pair_list)
|
||||
}
|
||||
|
||||
db_list:
|
||||
db_name[, db_name][, ...]
|
||||
|
||||
tbl_list:
|
||||
db_name.table_name[, db_name.table_name][, ...]
|
||||
wild_tbl_list:
|
||||
'db_pattern.table_pattern'[, 'db_pattern.table_pattern'][, ...]
|
||||
|
||||
db_pair_list:
|
||||
(db_pair)[, (db_pair)][, ...]
|
||||
|
||||
db_pair:
|
||||
from_db, to_db */
|
||||
|
||||
|
||||
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (d1), REPLICATE_IGNORE_DB = (d2);
|
||||
CHANGE REPLICATION FILTER REPLICATE_DO_TABLE = (t1), REPLICATE_IGNORE_TABLE = (t2);
|
||||
|
||||
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (d1) FOR CHANNEL 'channel_1';
|
||||
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2), REPLICATE_DO_DB = (db3, db4);
|
||||
CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db3, db4);
|
||||
CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('db1.old%');
|
||||
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('db1.new%', 'db2.new%');
|
||||
CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('db1.old%'), REPLICATE_WILD_IGNORE_TABLE = ('db1.new%', 'db2.new%');
|
||||
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2));
|
||||
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((dbA, dbB), (dbC, dbD));
|
@ -0,0 +1,58 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/change-replication-source-to.html
|
||||
|
||||
/* CHANGE REPLICATION SOURCE TO option [, option] ... [ channel_option ]
|
||||
|
||||
option: {
|
||||
SOURCE_BIND = 'interface_name'
|
||||
| SOURCE_HOST = 'host_name'
|
||||
| SOURCE_USER = 'user_name'
|
||||
| SOURCE_PASSWORD = 'password'
|
||||
| SOURCE_PORT = port_num
|
||||
| PRIVILEGE_CHECKS_USER = {NULL | 'account'}
|
||||
| REQUIRE_ROW_FORMAT = {0|1}
|
||||
| REQUIRE_TABLE_PRIMARY_KEY_CHECK = {STREAM | ON | OFF | GENERATE}
|
||||
| ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = {OFF | LOCAL | uuid}
|
||||
| SOURCE_LOG_FILE = 'source_log_name'
|
||||
| SOURCE_LOG_POS = source_log_pos
|
||||
| SOURCE_AUTO_POSITION = {0|1}
|
||||
| RELAY_LOG_FILE = 'relay_log_name'
|
||||
| RELAY_LOG_POS = relay_log_pos
|
||||
| SOURCE_HEARTBEAT_PERIOD = interval
|
||||
| SOURCE_CONNECT_RETRY = interval
|
||||
| SOURCE_RETRY_COUNT = count
|
||||
| SOURCE_CONNECTION_AUTO_FAILOVER = {0|1}
|
||||
| SOURCE_DELAY = interval
|
||||
| SOURCE_COMPRESSION_ALGORITHMS = 'algorithm[,algorithm][,algorithm]'
|
||||
| SOURCE_ZSTD_COMPRESSION_LEVEL = level
|
||||
| SOURCE_SSL = {0|1}
|
||||
| SOURCE_SSL_CA = 'ca_file_name'
|
||||
| SOURCE_SSL_CAPATH = 'ca_directory_name'
|
||||
| SOURCE_SSL_CERT = 'cert_file_name'
|
||||
| SOURCE_SSL_CRL = 'crl_file_name'
|
||||
| SOURCE_SSL_CRLPATH = 'crl_directory_name'
|
||||
| SOURCE_SSL_KEY = 'key_file_name'
|
||||
| SOURCE_SSL_CIPHER = 'cipher_list'
|
||||
| SOURCE_SSL_VERIFY_SERVER_CERT = {0|1}
|
||||
| SOURCE_TLS_VERSION = 'protocol_list'
|
||||
| SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list'
|
||||
| SOURCE_PUBLIC_KEY_PATH = 'key_file_name'
|
||||
| GET_SOURCE_PUBLIC_KEY = {0|1}
|
||||
| NETWORK_NAMESPACE = 'namespace'
|
||||
| IGNORE_SERVER_IDS = (server_id_list),
|
||||
| GTID_ONLY = {0|1}
|
||||
}
|
||||
|
||||
channel_option:
|
||||
FOR CHANNEL channel
|
||||
|
||||
server_id_list:
|
||||
[server_id [, server_id] ... ] */
|
||||
|
||||
|
||||
CHANGE REPLICATION SOURCE TO SOURCE_BIND = 'interface_name', SOURCE_HOST = 'host_name', SOURCE_USER = 'user_name', SOURCE_PASSWORD = 'password', SOURCE_PORT = 3011, SOURCE_LOG_FILE = 'source_log_name', SOURCE_LOG_POS = 10, RELAY_LOG_FILE = 'relay_log_name', RELAY_LOG_POS = 5, SOURCE_HEARTBEAT_PERIOD = 6, SOURCE_CONNECT_RETRY = 7, SOURCE_RETRY_COUNT = 4, SOURCE_DELAY = 8, SOURCE_COMPRESSION_ALGORITHMS = 'zlib,zstd', SOURCE_ZSTD_COMPRESSION_LEVEL = 11, SOURCE_SSL_CA = 'ca_file_name', SOURCE_SSL_CAPATH = 'ca_directory_name', SOURCE_SSL_CERT = 'cert_file_name', SOURCE_SSL_CRL = 'crl_file_name', SOURCE_SSL_CRLPATH = 'crl_directory_name', SOURCE_SSL_KEY = 'key_file_name', SOURCE_SSL_CIPHER = 'cipher_list', SOURCE_TLS_VERSION = 'protocol_list', SOURCE_TLS_CIPHERSUITES = 'ciphersuite_list', SOURCE_PUBLIC_KEY_PATH = 'key_file_name', NETWORK_NAMESPACE = 'namespace', IGNORE_SERVER_IDS = ('127.0.0.1', '127.0.0.1') FOR CHANNEL 'channel';
|
||||
CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER = NULL, REQUIRE_ROW_FORMAT = 0, REQUIRE_TABLE_PRIMARY_KEY_CHECK = STREAM, ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = OFF, SOURCE_AUTO_POSITION = 0, SOURCE_CONNECTION_AUTO_FAILOVER = 1, SOURCE_SSL = 1, SOURCE_SSL_VERIFY_SERVER_CERT = 0, GET_SOURCE_PUBLIC_KEY = 1, GTID_ONLY = 1 FOR CHANNEL 'channel';
|
||||
CHANGE REPLICATION SOURCE TO PRIVILEGE_CHECKS_USER = 'account', REQUIRE_ROW_FORMAT = 0, REQUIRE_TABLE_PRIMARY_KEY_CHECK = GENERATE, ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = LOCAL, SOURCE_AUTO_POSITION = 0, SOURCE_CONNECTION_AUTO_FAILOVER = 1, SOURCE_SSL = 1, SOURCE_SSL_VERIFY_SERVER_CERT = 0, GET_SOURCE_PUBLIC_KEY = 1, GTID_ONLY = 1 FOR CHANNEL 'channel';
|
||||
|
||||
CHANGE REPLICATION SOURCE TO SOURCE_HOST='source2.example.com', SOURCE_USER='replication', SOURCE_PASSWORD='password', SOURCE_PORT=3306, SOURCE_LOG_FILE='source2-bin.001', SOURCE_LOG_POS=4, SOURCE_CONNECT_RETRY=10;
|
||||
CHANGE REPLICATION SOURCE TO SOURCE_HOST='source3.example.com', SOURCE_USER='replication', SOURCE_PASSWORD='password', SOURCE_PORT=3306, SOURCE_AUTO_POSITION = 1 FOR CHANNEL "source_3";
|
||||
CHANGE REPLICATION SOURCE TO RELAY_LOG_FILE='replica-relay-bin.006', RELAY_LOG_POS=4025;
|
9
test/parser/mysql/syntax/fixtures/checkSumTable.sql
Normal file
9
test/parser/mysql/syntax/fixtures/checkSumTable.sql
Normal file
@ -0,0 +1,9 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/checksum-table.html
|
||||
|
||||
/* CHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED] */
|
||||
|
||||
|
||||
CHECKSUM TABLE t1, t2, t3 QUICK;
|
||||
CHECKSUM TABLE t1, t2, t3 EXTENDED;
|
||||
CHECKSUM TABLE t1 QUICK;
|
||||
CHECKSUM TABLE t1 EXTENDED;
|
19
test/parser/mysql/syntax/fixtures/checkTable.sql
Normal file
19
test/parser/mysql/syntax/fixtures/checkTable.sql
Normal file
@ -0,0 +1,19 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/check-table.html
|
||||
|
||||
/* CHECK TABLE tbl_name [, tbl_name] ... [option] ...
|
||||
|
||||
option: {
|
||||
FOR UPGRADE
|
||||
| QUICK
|
||||
| FAST
|
||||
| MEDIUM
|
||||
| EXTENDED
|
||||
| CHANGED
|
||||
} */
|
||||
|
||||
|
||||
CHECK TABLE t1, t2, t3 FOR UPGRADE QUICK FAST MEDIUM EXTENDED CHANGED;
|
||||
CHECK TABLE t1 FOR UPGRADE QUICK FAST MEDIUM EXTENDED CHANGED;
|
||||
CHECK TABLE t1 FOR UPGRADE QUICK;
|
||||
CHECK TABLE t1 FAST MEDIUM EXTENDED CHANGED;
|
||||
CHECK TABLE t1;
|
18
test/parser/mysql/syntax/fixtures/clone.sql
Normal file
18
test/parser/mysql/syntax/fixtures/clone.sql
Normal file
@ -0,0 +1,18 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/clone.html
|
||||
|
||||
/* CLONE clone_action
|
||||
|
||||
clone_action: {
|
||||
LOCAL DATA DIRECTORY [=] 'clone_dir'
|
||||
| INSTANCE FROM 'user'@'host':port
|
||||
IDENTIFIED BY 'password'
|
||||
[DATA DIRECTORY [=] 'clone_dir']
|
||||
[REQUIRE [NO] SSL]
|
||||
} */
|
||||
|
||||
|
||||
CLONE LOCAL DATA DIRECTORY = 'clone_dir';
|
||||
CLONE LOCAL DATA DIRECTORY 'clone_dir';
|
||||
|
||||
CLONE INSTANCE FROM root@127.0.0.1:3306 IDENTIFIED BY 'password' DATA DIRECTORY = 'clone_dir' REQUIRE NO SSL;
|
||||
CLONE INSTANCE FROM root@127.0.0.1:3306 IDENTIFIED BY 'password' REQUIRE SSL;
|
48
test/parser/mysql/syntax/fixtures/commit.sql
Normal file
48
test/parser/mysql/syntax/fixtures/commit.sql
Normal file
@ -0,0 +1,48 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/commit.html
|
||||
|
||||
/* START TRANSACTION
|
||||
[transaction_characteristic [, transaction_characteristic] ...]
|
||||
|
||||
transaction_characteristic: {
|
||||
WITH CONSISTENT SNAPSHOT
|
||||
| READ WRITE
|
||||
| READ ONLY
|
||||
}
|
||||
|
||||
BEGIN [WORK]
|
||||
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
|
||||
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
|
||||
SET autocommit = {0 | 1} */
|
||||
|
||||
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT, WITH CONSISTENT SNAPSHOT;
|
||||
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
||||
START TRANSACTION READ WRITE, READ WRITE;
|
||||
START TRANSACTION READ WRITE;
|
||||
START TRANSACTION READ ONLY, READ ONLY;
|
||||
START TRANSACTION READ ONLY;
|
||||
START TRANSACTION;
|
||||
|
||||
BEGIN WORK;
|
||||
BEGIN;
|
||||
|
||||
COMMIT WORK AND NO CHAIN NO RELEASE;
|
||||
COMMIT AND NO CHAIN NO RELEASE;
|
||||
COMMIT WORK AND CHAIN NO RELEASE;
|
||||
COMMIT AND NO CHAIN RELEASE;
|
||||
COMMIT AND CHAIN RELEASE;
|
||||
COMMIT AND CHAIN;
|
||||
COMMIT NO RELEASE;
|
||||
COMMIT RELEASE;
|
||||
|
||||
ROLLBACK WORK AND NO CHAIN NO RELEASE;
|
||||
ROLLBACK AND NO CHAIN NO RELEASE;
|
||||
ROLLBACK WORK AND CHAIN NO RELEASE;
|
||||
ROLLBACK AND NO CHAIN RELEASE;
|
||||
ROLLBACK AND CHAIN RELEASE;
|
||||
ROLLBACK AND CHAIN;
|
||||
ROLLBACK NO RELEASE;
|
||||
ROLLBACK RELEASE;
|
||||
|
||||
SET autocommit=0;
|
||||
SET autocommit=1;
|
34
test/parser/mysql/syntax/fixtures/createDatabase.sql
Normal file
34
test/parser/mysql/syntax/fixtures/createDatabase.sql
Normal file
@ -0,0 +1,34 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-database.html
|
||||
|
||||
/* CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
|
||||
[create_option] ...
|
||||
|
||||
create_option: [DEFAULT] {
|
||||
CHARACTER SET [=] charset_name
|
||||
| COLLATE [=] collation_name
|
||||
| ENCRYPTION [=] {'Y' | 'N'}
|
||||
} */
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/5.7/en/create-database.html
|
||||
|
||||
/* CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
|
||||
[create_option] ...
|
||||
|
||||
create_option: [DEFAULT] {
|
||||
CHARACTER SET [=] charset_name
|
||||
| COLLATE [=] collation_name
|
||||
} */
|
||||
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS db_name;
|
||||
CREATE DATABASE db_name CHARACTER SET utf8mb4;
|
||||
CREATE DATABASE db_name COLLATE utf8mb4_unicode_ci;
|
||||
CREATE DATABASE db_name ENCRYPTION = 'Y';
|
||||
CREATE DATABASE db_name DEFAULT ENCRYPTION 'N';
|
||||
|
||||
CREATE SCHEMA IF NOT EXISTS db_name DEFAULT ENCRYPTION 'Y';
|
||||
CREATE SCHEMA db_name DEFAULT CHARACTER SET utf8mb4;
|
||||
CREATE SCHEMA db_name DEFAULT COLLATE utf8mb4_unicode_ci;
|
||||
CREATE SCHEMA db_name DEFAULT ENCRYPTION = 'Y';
|
||||
CREATE SCHEMA db_name DEFAULT ENCRYPTION 'N';
|
41
test/parser/mysql/syntax/fixtures/createEvent.sql
Normal file
41
test/parser/mysql/syntax/fixtures/createEvent.sql
Normal file
@ -0,0 +1,41 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-event.html
|
||||
|
||||
/* CREATE
|
||||
[DEFINER = user]
|
||||
EVENT
|
||||
[IF NOT EXISTS]
|
||||
event_name
|
||||
ON SCHEDULE schedule
|
||||
[ON COMPLETION [NOT] PRESERVE]
|
||||
[ENABLE | DISABLE | DISABLE ON SLAVE]
|
||||
[COMMENT 'string']
|
||||
DO event_body
|
||||
|
||||
schedule: {
|
||||
AT timestamp [+ INTERVAL interval] ...
|
||||
| EVERY interval
|
||||
[STARTS timestamp [+ INTERVAL interval] ...]
|
||||
[ENDS timestamp [+ INTERVAL interval] ...]
|
||||
}
|
||||
|
||||
interval:
|
||||
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
|
||||
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
|
||||
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} */
|
||||
|
||||
|
||||
CREATE EVENT IF NOT EXISTS my_event ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO UPDATE my_schema.my_table SET mycol = mycol + 1;
|
||||
|
||||
CREATE EVENT e_totals ON SCHEDULE AT '2006-02-10 23:59:00' DO INSERT INTO test.totals VALUES (NOW());
|
||||
|
||||
CREATE EVENT e_hourly ON SCHEDULE EVERY 1 HOUR COMMENT 'Clears out sessions table each hour.' DO DELETE FROM site_activity.sessions;
|
||||
|
||||
CREATE EVENT e_daily
|
||||
ON SCHEDULE
|
||||
EVERY 1 DAY
|
||||
COMMENT 'Saves total number of sessions then clears the table each day'
|
||||
DO INSERT INTO site_activity.totals (time, total)
|
||||
SELECT CURRENT_TIMESTAMP, COUNT(*)
|
||||
FROM site_activity.sessions;
|
||||
|
||||
CREATE EVENT e_call_my ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO CALL myproc(5, 27);
|
13
test/parser/mysql/syntax/fixtures/createFunction.sql
Normal file
13
test/parser/mysql/syntax/fixtures/createFunction.sql
Normal file
@ -0,0 +1,13 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-function-loadable.html
|
||||
|
||||
/* CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name
|
||||
RETURNS {STRING|INTEGER|REAL|DECIMAL}
|
||||
SONAME shared_library_name */
|
||||
|
||||
|
||||
|
||||
CREATE FUNCTION IF NOT EXISTS my_concat_ws RETURNS STRING SONAME 'udf_my_concat_ws.so';
|
||||
CREATE FUNCTION my_concat_ws RETURNS INTEGER SONAME 'udf_my_concat_ws.so';
|
||||
CREATE FUNCTION my_concat_ws RETURNS REAL SONAME 'udf_my_concat_ws.so';
|
||||
CREATE FUNCTION my_concat_ws RETURNS DECIMAL SONAME 'udf_my_concat_ws.so';
|
||||
CREATE FUNCTION IF NOT EXISTS my_concat_ws RETURNS DECIMAL SONAME 'udf_my_concat_ws.so';
|
43
test/parser/mysql/syntax/fixtures/createIndex.sql
Normal file
43
test/parser/mysql/syntax/fixtures/createIndex.sql
Normal file
@ -0,0 +1,43 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-index.html
|
||||
|
||||
/* CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
|
||||
[index_type]
|
||||
ON tbl_name (key_part,...)
|
||||
[index_option]
|
||||
[algorithm_option | lock_option] ...
|
||||
|
||||
key_part: {col_name [(length)] | (expr)} [ASC | DESC]
|
||||
|
||||
index_option: {
|
||||
KEY_BLOCK_SIZE [=] value
|
||||
| index_type
|
||||
| WITH PARSER parser_name
|
||||
| COMMENT 'string'
|
||||
| {VISIBLE | INVISIBLE}
|
||||
| ENGINE_ATTRIBUTE [=] 'string'
|
||||
| SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
|
||||
}
|
||||
|
||||
index_type:
|
||||
USING {BTREE | HASH}
|
||||
|
||||
algorithm_option:
|
||||
ALGORITHM [=] {DEFAULT | INPLACE | COPY}
|
||||
|
||||
lock_option:
|
||||
LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}
|
||||
*/
|
||||
|
||||
|
||||
CREATE UNIQUE INDEX index_name ON table_name (name(10));
|
||||
CREATE FULLTEXT INDEX index_name ON table_name (name(10));
|
||||
CREATE SPATIAL INDEX index_name ON table_name (name(10));
|
||||
|
||||
CREATE INDEX part_of_name ON customer (name(10));
|
||||
|
||||
CREATE INDEX idx1 ON t1 ((col1 + col2));
|
||||
CREATE INDEX idx2 ON t1 ((col1 + col2), (col1 - col2), col1);
|
||||
|
||||
CREATE INDEX id_index ON lookup (id) USING BTREE;
|
||||
CREATE INDEX id_index ON t1 (id) COMMENT 'MERGE_THRESHOLD=40';
|
||||
CREATE INDEX i1 ON t1 (c1) ENGINE_ATTRIBUTE='{"key":"value"}';
|
30
test/parser/mysql/syntax/fixtures/createLogFileGroup.sql
Normal file
30
test/parser/mysql/syntax/fixtures/createLogFileGroup.sql
Normal file
@ -0,0 +1,30 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-logfile-group.html
|
||||
|
||||
/* CREATE LOGFILE GROUP logfile_group
|
||||
ADD UNDOFILE 'undo_file'
|
||||
[INITIAL_SIZE [=] initial_size]
|
||||
[UNDO_BUFFER_SIZE [=] undo_buffer_size]
|
||||
[REDO_BUFFER_SIZE [=] redo_buffer_size]
|
||||
[NODEGROUP [=] nodegroup_id]
|
||||
[WAIT]
|
||||
[COMMENT [=] 'string']
|
||||
ENGINE [=] engine_name */
|
||||
|
||||
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' INITIAL_SIZE = 10M ENGINE = NDB;
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' INITIAL_SIZE 10M ENGINE = NDB;
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' ENGINE = NDB;
|
||||
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' UNDO_BUFFER_SIZE = 10M ENGINE = NDB;
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' UNDO_BUFFER_SIZE 10M ENGINE = NDB;
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' ENGINE = NDB;
|
||||
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' REDO_BUFFER_SIZE = 10M ENGINE = NDB;
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' REDO_BUFFER_SIZE 10M ENGINE = NDB;
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' ENGINE = NDB;
|
||||
|
||||
CREATE LOGFILE GROUP my_logfile_group ADD UNDOFILE 'undo_1.log' INITIAL_SIZE = 1G UNDO_BUFFER_SIZE = 16M ENGINE INNODB;
|
||||
|
||||
CREATE LOGFILE GROUP lg1 ADD UNDOFILE 'undo.dat' INITIAL_SIZE = 10M UNDO_BUFFER_SIZE = 10M REDO_BUFFER_SIZE = 10M NODEGROUP = nodegroup_id WAIT COMMENT = 'logfile' ENGINE = NDB;
|
||||
|
||||
CREATE LOGFILE GROUP myg1 ADD UNDOFILE 'myundo-1.dat' ENGINE=NDB;
|
23
test/parser/mysql/syntax/fixtures/createProcedure.sql
Normal file
23
test/parser/mysql/syntax/fixtures/createProcedure.sql
Normal file
@ -0,0 +1,23 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html
|
||||
|
||||
/* CREATE
|
||||
[DEFINER = user]
|
||||
PROCEDURE [IF NOT EXISTS] sp_name ([proc_parameter[,...]])
|
||||
[characteristic ...] routine_body
|
||||
|
||||
proc_parameter:
|
||||
[ IN | OUT | INOUT ] param_name type
|
||||
|
||||
characteristic: {
|
||||
COMMENT 'string'
|
||||
| LANGUAGE SQL
|
||||
| [NOT] DETERMINISTIC
|
||||
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
|
||||
| SQL SECURITY { DEFINER | INVOKER }
|
||||
} */
|
||||
|
||||
|
||||
CREATE DEFINER = 'admin'@'localhost' PROCEDURE account_count() SQL SECURITY INVOKER SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;
|
||||
|
||||
CREATE PROCEDURE AddTwoNumbers(IN a INT, IN b INT) SELECT a + b AS Sum;
|
||||
CREATE PROCEDURE IF NOT EXISTS AddTwoNumbers(IN a INT, IN b INT) SELECT a + b AS Sum;
|
26
test/parser/mysql/syntax/fixtures/createResourceGroup.sql
Normal file
26
test/parser/mysql/syntax/fixtures/createResourceGroup.sql
Normal file
@ -0,0 +1,26 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-resource-group.html
|
||||
|
||||
/* CREATE RESOURCE GROUP group_name
|
||||
TYPE = {SYSTEM|USER}
|
||||
[VCPU [=] vcpu_spec [, vcpu_spec] ...]
|
||||
[THREAD_PRIORITY [=] N]
|
||||
[ENABLE|DISABLE]
|
||||
|
||||
vcpu_spec: {N | M - N} */
|
||||
|
||||
|
||||
CREATE RESOURCE GROUP group_name TYPE = SYSTEM VCPU = 2, 3 THREAD_PRIORITY = 5 DISABLE;
|
||||
CREATE RESOURCE GROUP group_name TYPE = SYSTEM VCPU = 2, 3 THREAD_PRIORITY = 5 ENABLE;
|
||||
CREATE RESOURCE GROUP group_name TYPE = SYSTEM VCPU 2 THREAD_PRIORITY 5 ENABLE;
|
||||
CREATE RESOURCE GROUP group_name TYPE = SYSTEM VCPU 2 THREAD_PRIORITY 5 ENABLE;
|
||||
CREATE RESOURCE GROUP group_name TYPE = USER VCPU 2 THREAD_PRIORITY 5 DISABLE;
|
||||
CREATE RESOURCE GROUP group_name TYPE = USER VCPU 2 THREAD_PRIORITY 5;
|
||||
CREATE RESOURCE GROUP group_name TYPE = USER VCPU 2 DISABLE;
|
||||
CREATE RESOURCE GROUP group_name TYPE = USER DISABLE;
|
||||
CREATE RESOURCE GROUP group_name TYPE = USER ENABLE;
|
||||
CREATE RESOURCE GROUP group_name TYPE = USER;
|
||||
|
||||
CREATE RESOURCE GROUP rg1 TYPE = USER VCPU = 0-63;
|
||||
CREATE RESOURCE GROUP rg1 TYPE = USER VCPU = 0-63, 64-65, 66;
|
||||
CREATE RESOURCE GROUP rg2 TYPE = USER THREAD_PRIORITY = 5;
|
||||
CREATE RESOURCE GROUP rg3 TYPE = USER DISABLE;
|
7
test/parser/mysql/syntax/fixtures/createRole.sql
Normal file
7
test/parser/mysql/syntax/fixtures/createRole.sql
Normal file
@ -0,0 +1,7 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-role.html
|
||||
|
||||
/* CREATE ROLE [IF NOT EXISTS] role [, role ] ... */
|
||||
|
||||
|
||||
CREATE ROLE 'admin', 'developer';
|
||||
CREATE ROLE 'webapp'@'localhost';
|
17
test/parser/mysql/syntax/fixtures/createServer.sql
Normal file
17
test/parser/mysql/syntax/fixtures/createServer.sql
Normal file
@ -0,0 +1,17 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-server.html
|
||||
|
||||
/* CREATE SERVER server_name
|
||||
FOREIGN DATA WRAPPER wrapper_name
|
||||
OPTIONS (option [, option] ...)
|
||||
|
||||
option: {
|
||||
HOST character-literal
|
||||
| DATABASE character-literal
|
||||
| USER character-literal
|
||||
| PASSWORD character-literal
|
||||
| SOCKET character-literal
|
||||
| OWNER character-literal
|
||||
| PORT numeric-literal
|
||||
} */
|
||||
|
||||
CREATE SERVER server_name FOREIGN DATA WRAPPER mysql OPTIONS (USER 'Remote', HOST '198.51.100.106', DATABASE 'test');
|
119
test/parser/mysql/syntax/fixtures/createTable.sql
Normal file
119
test/parser/mysql/syntax/fixtures/createTable.sql
Normal file
@ -0,0 +1,119 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-table.html
|
||||
|
||||
|
||||
CREATE TEMPORARY TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
|
||||
|
||||
CREATE TABLE new_tbl LIKE orig_tbl;
|
||||
CREATE TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
|
||||
CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl;
|
||||
|
||||
CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (a), KEY(b)) ENGINE=InnoDB SELECT b,c FROM test2;
|
||||
|
||||
CREATE TABLE bar (m INT) SELECT n FROM foo;
|
||||
|
||||
CREATE TABLE artists_and_works SELECT artist.name, COUNT(work.artist_id) AS number_of_works FROM artist LEFT JOIN work ON artist.id = work.artist_id GROUP BY artist.id;
|
||||
|
||||
CREATE TABLE new_tbl AS SELECT * FROM orig_tbl;
|
||||
CREATE TABLE t (c CHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin);
|
||||
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
|
||||
CREATE TABLE t1 (c1 INT) ENGINE_ATTRIBUTE='{"key":"value"}';
|
||||
CREATE TABLE my_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255)) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
CREATE TABLE t1 (c1 INT STORAGE DISK, c2 INT STORAGE MEMORY) TABLESPACE ts_1 ENGINE NDB;
|
||||
CREATE TABLE t1 (c1 INT STORAGE MEMORY, c2 INT STORAGE MEMORY) TABLESPACE ts_1 ENGINE NDB;
|
||||
|
||||
CREATE TABLE lookup (id INT, INDEX USING BTREE (id)) ENGINE = MEMORY;
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c2 VARCHAR(100), c3 VARCHAR(100)) ENGINE=NDB COMMENT="NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RP_BY_NODE";
|
||||
|
||||
CREATE TABLE t1 (col1 INT, col2 CHAR(5)) PARTITION BY HASH(col1);
|
||||
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATETIME) PARTITION BY HASH (YEAR(col3));
|
||||
|
||||
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY KEY(col3) PARTITIONS 4;
|
||||
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR KEY(col3) PARTITIONS 5;
|
||||
CREATE TABLE t1 (year_col INT, some_data INT) PARTITION BY RANGE (year_col) (
|
||||
PARTITION p0 VALUES LESS THAN (1991),
|
||||
PARTITION p1 VALUES LESS THAN (1995),
|
||||
PARTITION p2 VALUES LESS THAN (1999),
|
||||
PARTITION p3 VALUES LESS THAN (2002),
|
||||
PARTITION p4 VALUES LESS THAN (2006),
|
||||
PARTITION p5 VALUES LESS THAN MAXVALUE
|
||||
);
|
||||
CREATE TABLE rc (a INT NOT NULL, b INT NOT NULL) PARTITION BY RANGE COLUMNS(a,b) (
|
||||
PARTITION p0 VALUES LESS THAN (10,5),
|
||||
PARTITION p1 VALUES LESS THAN (20,10),
|
||||
PARTITION p2 VALUES LESS THAN (50,MAXVALUE),
|
||||
PARTITION p3 VALUES LESS THAN (65,MAXVALUE),
|
||||
PARTITION p4 VALUES LESS THAN (MAXVALUE,MAXVALUE)
|
||||
);
|
||||
CREATE TABLE client_firms (id INT, name VARCHAR(35)) PARTITION BY LIST (id) (
|
||||
PARTITION r0 VALUES IN (1, 5, 9, 13, 17, 21),
|
||||
PARTITION r1 VALUES IN (2, 6, 10, 14, 18, 22),
|
||||
PARTITION r2 VALUES IN (3, 7, 11, 15, 19, 23),
|
||||
PARTITION r3 VALUES IN (4, 8, 12, 16, 20, 24)
|
||||
);
|
||||
CREATE TABLE lc (a INT NULL, b INT NULL) PARTITION BY LIST COLUMNS(a,b) (
|
||||
PARTITION p0 VALUES IN( (0,0), (NULL,NULL) ),
|
||||
PARTITION p1 VALUES IN( (0,1), (0,2), (0,3), (1,1), (1,2) ),
|
||||
PARTITION p2 VALUES IN( (1,0), (2,0), (2,1), (3,0), (3,1) ),
|
||||
PARTITION p3 VALUES IN( (1,3), (2,2), (2,3), (3,2), (3,3) )
|
||||
);
|
||||
CREATE TABLE th (id INT, name VARCHAR(30), adate DATE) PARTITION BY LIST(YEAR(adate)) (
|
||||
PARTITION p1999 VALUES IN (1995, 1999, 2003)
|
||||
DATA DIRECTORY = '/var/appdata/95/data'
|
||||
INDEX DIRECTORY = '/var/appdata/95/idx',
|
||||
PARTITION p2000 VALUES IN (1996, 2000, 2004)
|
||||
DATA DIRECTORY = '/var/appdata/96/data'
|
||||
INDEX DIRECTORY = '/var/appdata/96/idx',
|
||||
PARTITION p2001 VALUES IN (1997, 2001, 2005)
|
||||
DATA DIRECTORY = '/var/appdata/97/data'
|
||||
INDEX DIRECTORY = '/var/appdata/97/idx',
|
||||
PARTITION p2002 VALUES IN (1998, 2002, 2006)
|
||||
DATA DIRECTORY = '/var/appdata/98/data'
|
||||
INDEX DIRECTORY = '/var/appdata/98/idx'
|
||||
);
|
||||
CREATE TABLE t1 (s1 INT, s2 INT AS (EXP(s1)) STORED) PARTITION BY LIST (s2) (PARTITION p1 VALUES IN (1));
|
||||
|
||||
CREATE TABLE foo (a TINYINT NOT NULL) SELECT b+1 AS a FROM bar;
|
||||
|
||||
CREATE TABLE parent (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
||||
CREATE TABLE child (id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE product (category INT NOT NULL, id INT NOT NULL, price DECIMAL, PRIMARY KEY(category, id)) ENGINE=INNODB;
|
||||
CREATE TABLE customer (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
||||
CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT, product_category INT NOT NULL, product_id INT NOT NULL, customer_id INT NOT NULL, PRIMARY KEY(no), INDEX (product_category, product_id), INDEX (customer_id), FOREIGN KEY (product_category, product_id) REFERENCES product(category, id) ON UPDATE CASCADE ON DELETE RESTRICT, FOREIGN KEY (customer_id) REFERENCES customer(id)) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE t1 (CHECK (c1 <> c2), c1 INT CHECK (c1 > 10), c2 INT CONSTRAINT c2_positive CHECK (c2 > 0), c3 INT CHECK (c3 < 100), CONSTRAINT c1_nonzero CHECK (c1 <> 0), CHECK (c1 > c3));
|
||||
CREATE TABLE t2 (c1 VARCHAR(10) CHARACTER SET binary, c2 TEXT CHARACTER SET binary, c3 ENUM('a','b','c') CHARACTER SET binary);
|
||||
CREATE TABLE t3 (c1 VARBINARY(10), c2 BLOB, c3 ENUM('a','b','c') CHARACTER SET binary);
|
||||
|
||||
CREATE TABLE triangle (sidea DOUBLE, sideb DOUBLE, sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb)));
|
||||
CREATE VIEW v1 AS SELECT *, CONCAT(first_name,' ',last_name) AS full_name FROM t1;
|
||||
CREATE TABLE t1 (first_name VARCHAR(10), last_name VARCHAR(10), full_name VARCHAR(255) AS (CONCAT(first_name,' ',last_name)));
|
||||
|
||||
CREATE TABLE t1 (c JSON, g INT GENERATED ALWAYS AS (c->"$.id"), INDEX i (g));
|
||||
CREATE TABLE t2 (a BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, c JSON DEFAULT NULL, g INT GENERATED ALWAYS AS (c->"$.id") STORED, INDEX i (g)) ENGINE=NDB;
|
||||
|
||||
CREATE TABLE t1 (i INT, j DATE INVISIBLE) ENGINE = InnoDB;
|
||||
CREATE TABLE t1 (col1 INT, col2 INT INVISIBLE);
|
||||
CREATE TABLE t2 AS SELECT col1, col2 FROM t1;
|
||||
CREATE TABLE t2 (col2 INT INVISIBLE) AS SELECT col1, col2 FROM t1;
|
||||
|
||||
CREATE TABLE auto_0 (c1 VARCHAR(50), c2 INT);
|
||||
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b1 BLOB, b2 BLOB COMMENT 'NDB_COLUMN=BLOB_INLINE_SIZE=8000') ENGINE NDB;
|
||||
CREATE TABLE test.t2 (p INT PRIMARY KEY, c1 BLOB, c2 BLOB COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE') ENGINE NDB;
|
||||
CREATE TABLE test.t3 (p INT NOT NULL PRIMARY KEY, c1 JSON, c2 JSON COMMENT 'NDB_COLUMN=BLOB_INLINE_SIZE=5000,MAX_BLOB_PART_SIZE') ENGINE NDB;
|
||||
CREATE TABLE t1 (c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, c2 VARCHAR(100), c3 VARCHAR(100)) ENGINE=NDB
|
||||
|
||||
CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=REDUNDANT;
|
||||
CREATE TABLE t2 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=COMPACT;
|
||||
CREATE TABLE t3 (c1 INT PRIMARY KEY) TABLESPACE ts1 ROW_FORMAT=DYNAMIC;
|
||||
|
||||
CREATE TABLE t4 (c1 INT PRIMARY KEY) TABLESPACE ts2 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS tbl_name (CONSTRAINT c2_positive CHECK (c2 > 0) NOT ENFORCED);
|
||||
CREATE TABLE IF NOT EXISTS tbl_name (CONSTRAINT c2_positive CHECK (c2 > 0) ENFORCED);
|
||||
CREATE TABLE IF NOT EXISTS tbl_name (CONSTRAINT c2_positive CHECK (c2 > 0));
|
||||
CREATE TABLE IF NOT EXISTS tbl_name (CONSTRAINT CHECK (c2 > 0) NOT ENFORCED);
|
||||
CREATE TABLE IF NOT EXISTS tbl_name (CONSTRAINT CHECK (c2 > 0) ENFORCED);
|
||||
CREATE TABLE IF NOT EXISTS tbl_name (CONSTRAINT CHECK (c2 > 0));
|
||||
CREATE TABLE IF NOT EXISTS tbl_name (CHECK (c2 > 0) ENFORCED);
|
||||
CREATE TABLE IF NOT EXISTS tbl_name (CHECK (c2 > 0));
|
38
test/parser/mysql/syntax/fixtures/createTableSpace.sql
Normal file
38
test/parser/mysql/syntax/fixtures/createTableSpace.sql
Normal file
@ -0,0 +1,38 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-tablespace.html
|
||||
|
||||
/* CREATE [UNDO] TABLESPACE tablespace_name
|
||||
|
||||
InnoDB and NDB:
|
||||
[ADD DATAFILE 'file_name']
|
||||
[AUTOEXTEND_SIZE [=] value]
|
||||
|
||||
InnoDB only:
|
||||
[FILE_BLOCK_SIZE = value]
|
||||
[ENCRYPTION [=] {'Y' | 'N'}]
|
||||
|
||||
NDB only:
|
||||
USE LOGFILE GROUP logfile_group
|
||||
[EXTENT_SIZE [=] extent_size]
|
||||
[INITIAL_SIZE [=] initial_size]
|
||||
[MAX_SIZE [=] max_size]
|
||||
[NODEGROUP [=] nodegroup_id]
|
||||
[WAIT]
|
||||
[COMMENT [=] 'string']
|
||||
|
||||
InnoDB and NDB:
|
||||
[ENGINE [=] engine_name]
|
||||
|
||||
Reserved for future use:
|
||||
[ENGINE_ATTRIBUTE [=] 'string'] */
|
||||
|
||||
|
||||
CREATE TABLESPACE ts1 ADD DATAFILE 'any_directory/../ts1.ibd' AUTOEXTEND_SIZE = 100M;
|
||||
CREATE TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';
|
||||
CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' ENGINE=INNODB;
|
||||
CREATE TABLESPACE `ts2` ADD DATAFILE 'ts2.ibd' FILE_BLOCK_SIZE = 8192 Engine=InnoDB;
|
||||
CREATE TABLESPACE `ts3` ENGINE=INNODB;
|
||||
|
||||
CREATE UNDO TABLESPACE 'undo_003' ADD DATAFILE 'undo_003.ibu';
|
||||
|
||||
|
||||
|
22
test/parser/mysql/syntax/fixtures/createTrigger.sql
Normal file
22
test/parser/mysql/syntax/fixtures/createTrigger.sql
Normal file
@ -0,0 +1,22 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-trigger.html
|
||||
|
||||
/* CREATE
|
||||
[DEFINER = user]
|
||||
TRIGGER [IF NOT EXISTS] trigger_name
|
||||
{ BEFORE | AFTER }
|
||||
{ INSERT | UPDATE | DELETE }
|
||||
ON tbl_name FOR EACH ROW
|
||||
[{ FOLLOWS | PRECEDES } other_trigger_name]
|
||||
trigger_body
|
||||
*/
|
||||
|
||||
|
||||
CREATE TRIGGER IF NOT EXISTS my_trigger BEFORE INSERT ON your_table FOR EACH ROW SET NEW.column_name = some_value;
|
||||
CREATE TRIGGER my_trigger BEFORE INSERT ON your_table FOR EACH ROW SET NEW.column_name = some_value;
|
||||
|
||||
CREATE TRIGGER my_trigger AFTER INSERT ON your_table FOR EACH ROW SET NEW.column_name = some_value;
|
||||
CREATE TRIGGER my_trigger AFTER UPDATE ON your_table FOR EACH ROW SET NEW.column_name = some_value;
|
||||
CREATE TRIGGER my_trigger AFTER DELETE ON your_table FOR EACH ROW SET NEW.column_name = some_value;
|
||||
|
||||
CREATE TRIGGER my_trigger AFTER INSERT ON your_table FOR EACH ROW FOLLOWS other_trigger_name SET NEW.column_name = some_value;
|
||||
CREATE TRIGGER my_trigger AFTER INSERT ON your_table FOR EACH ROW PRECEDES other_trigger_name SET NEW.column_name = some_value;
|
113
test/parser/mysql/syntax/fixtures/createUser.sql
Normal file
113
test/parser/mysql/syntax/fixtures/createUser.sql
Normal file
@ -0,0 +1,113 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-user.html
|
||||
|
||||
/* CREATE USER [IF NOT EXISTS]
|
||||
user [auth_option] [, user [auth_option]] ...
|
||||
DEFAULT ROLE role [, role ] ...
|
||||
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
|
||||
[WITH resource_option [resource_option] ...]
|
||||
[password_option | lock_option] ...
|
||||
[COMMENT 'comment_string' | ATTRIBUTE 'json_object']
|
||||
|
||||
user:
|
||||
(see Section 6.2.4, “Specifying Account Names”)
|
||||
|
||||
auth_option: {
|
||||
IDENTIFIED BY 'auth_string' [AND 2fa_auth_option]
|
||||
| IDENTIFIED BY RANDOM PASSWORD [AND 2fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin [AND 2fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin BY 'auth_string' [AND 2fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD [AND 2fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin AS 'auth_string' [AND 2fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin [initial_auth_option]
|
||||
}
|
||||
|
||||
2fa_auth_option: {
|
||||
IDENTIFIED BY 'auth_string' [AND 3fa_auth_option]
|
||||
| IDENTIFIED BY RANDOM PASSWORD [AND 3fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin [AND 3fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin BY 'auth_string' [AND 3fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD [AND 3fa_auth_option]
|
||||
| IDENTIFIED WITH auth_plugin AS 'auth_string' [AND 3fa_auth_option]
|
||||
}
|
||||
|
||||
3fa_auth_option: {
|
||||
IDENTIFIED BY 'auth_string'
|
||||
| IDENTIFIED BY RANDOM PASSWORD
|
||||
| IDENTIFIED WITH auth_plugin
|
||||
| IDENTIFIED WITH auth_plugin BY 'auth_string'
|
||||
| IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
|
||||
| IDENTIFIED WITH auth_plugin AS 'auth_string'
|
||||
}
|
||||
|
||||
initial_auth_option: {
|
||||
INITIAL AUTHENTICATION IDENTIFIED BY {RANDOM PASSWORD | 'auth_string'}
|
||||
| INITIAL AUTHENTICATION IDENTIFIED WITH auth_plugin AS 'auth_string'
|
||||
}
|
||||
|
||||
tls_option: {
|
||||
SSL
|
||||
| X509
|
||||
| CIPHER 'cipher'
|
||||
| ISSUER 'issuer'
|
||||
| SUBJECT 'subject'
|
||||
}
|
||||
|
||||
resource_option: {
|
||||
MAX_QUERIES_PER_HOUR count
|
||||
| MAX_UPDATES_PER_HOUR count
|
||||
| MAX_CONNECTIONS_PER_HOUR count
|
||||
| MAX_USER_CONNECTIONS count
|
||||
}
|
||||
|
||||
password_option: {
|
||||
PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
|
||||
| PASSWORD HISTORY {DEFAULT | N}
|
||||
| PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
|
||||
| PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
|
||||
| FAILED_LOGIN_ATTEMPTS N
|
||||
| PASSWORD_LOCK_TIME {N | UNBOUNDED}
|
||||
}
|
||||
|
||||
lock_option: {
|
||||
ACCOUNT LOCK
|
||||
| ACCOUNT UNLOCK
|
||||
} */
|
||||
|
||||
|
||||
CREATE USER IF NOT EXISTS USER() IDENTIFIED BY 'auth_string' AND IDENTIFIED BY RANDOM PASSWORD AND IDENTIFIED WITH 'auth_plugin' DEFAULT ROLE 'developer';
|
||||
CREATE USER IF NOT EXISTS 'user' IDENTIFIED BY 'auth_string' AND IDENTIFIED BY RANDOM PASSWORD AND IDENTIFIED WITH 'auth_plugin' DEFAULT ROLE 'developer';
|
||||
CREATE USER IF NOT EXISTS 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' AND IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD AND IDENTIFIED WITH auth_plugin AS 'auth_string' DEFAULT ROLE 'developer';
|
||||
CREATE USER IF NOT EXISTS 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' AND IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD AND IDENTIFIED WITH auth_plugin AS 'auth_string', USER() IDENTIFIED WITH 'auth_plugin' BY 'auth_string' AND IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD DEFAULT ROLE 'developer';
|
||||
CREATE USER IF NOT EXISTS 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' AND IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD AND IDENTIFIED WITH auth_plugin AS 'auth_string', USER() DEFAULT ROLE 'developer';
|
||||
CREATE USER IF NOT EXISTS 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' AND IDENTIFIED WITH 'auth_plugin' BY RANDOM PASSWORD DEFAULT ROLE 'developer';
|
||||
CREATE USER IF NOT EXISTS 'user' IDENTIFIED WITH 'auth_plugin' BY 'auth_string' AND IDENTIFIED WITH auth_plugin AS 'auth_string' DEFAULT ROLE 'developer';
|
||||
CREATE USER IF NOT EXISTS 'user' IDENTIFIED WITH auth_plugin AS 'auth_string' DEFAULT ROLE 'developer';
|
||||
CREATE USER IF NOT EXISTS 'user' IDENTIFIED WITH auth_plugin AS 'auth_string' DEFAULT ROLE 'developer';
|
||||
CREATE USER 'user' DEFAULT ROLE 'developer';
|
||||
|
||||
CREATE USER USER() IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY RANDOM PASSWORD DEFAULT ROLE 'developer';
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer';
|
||||
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE NONE;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SUBJECT 'subject' AND CIPHER 'cipher';
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer';
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD EXPIRE DEFAULT;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD EXPIRE NEVER;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD EXPIRE INTERVAL 5 DAY;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD HISTORY DEFAULT;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD HISTORY 5;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD REUSE INTERVAL DEFAULT;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD REUSE INTERVAL 5 DAY;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD REQUIRE CURRENT DEFAULT;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD REQUIRE CURRENT OPTIONAL;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 FAILED_LOGIN_ATTEMPTS 5;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD_LOCK_TIME 5;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 PASSWORD_LOCK_TIME UNBOUNDED;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 ACCOUNT LOCK;
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 ACCOUNT UNLOCK;
|
||||
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 COMMENT 'comment_string';
|
||||
CREATE USER 'user' IDENTIFIED WITH 'auth_plugin' INITIAL AUTHENTICATION IDENTIFIED BY 'auth_string' DEFAULT ROLE 'developer' REQUIRE SSL AND X509 AND ISSUER 'issuer' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 100 MAX_USER_CONNECTIONS 4 ATTRIBUTE 'comment_string';
|
||||
|
||||
CREATE USER 'user' IDENTIFIED BY PASSWORD 'auth_string';
|
18
test/parser/mysql/syntax/fixtures/createView.sql
Normal file
18
test/parser/mysql/syntax/fixtures/createView.sql
Normal file
@ -0,0 +1,18 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/create-view.html
|
||||
|
||||
/* CREATE
|
||||
[OR REPLACE]
|
||||
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
|
||||
[DEFINER = user]
|
||||
[SQL SECURITY { DEFINER | INVOKER }]
|
||||
VIEW view_name [(column_list)]
|
||||
AS select_statement
|
||||
[WITH [CASCADED | LOCAL] CHECK OPTION] */
|
||||
|
||||
|
||||
CREATE VIEW test.v AS SELECT * FROM t;
|
||||
CREATE VIEW v_today (today) AS SELECT CURRENT_DATE;
|
||||
CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
|
||||
CREATE VIEW v (mycol) AS SELECT 'abc';
|
||||
|
||||
CREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name);
|
44
test/parser/mysql/syntax/fixtures/delete.sql
Normal file
44
test/parser/mysql/syntax/fixtures/delete.sql
Normal file
@ -0,0 +1,44 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/delete.html
|
||||
|
||||
/* DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
[WHERE where_condition]
|
||||
[ORDER BY ...]
|
||||
[LIMIT row_count]
|
||||
|
||||
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
|
||||
tbl_name[.*] [, tbl_name[.*]] ...
|
||||
FROM table_references
|
||||
[WHERE where_condition]
|
||||
|
||||
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
|
||||
FROM tbl_name[.*] [, tbl_name[.*]] ...
|
||||
USING table_references
|
||||
[WHERE where_condition] */
|
||||
|
||||
|
||||
|
||||
DELETE LOW_PRIORITY QUICK IGNORE FROM some_log AS someLog PARTITION (partition_name, partition_name1) WHERE user = 'cole' ORDER BY timestamp_column LIMIT 1;
|
||||
DELETE LOW_PRIORITY IGNORE FROM some_log AS someLog PARTITION (partition_name, partition_name1) WHERE user = 'cole' ORDER BY timestamp_column LIMIT 1;
|
||||
DELETE LOW_PRIORITY QUICK FROM some_log AS someLog PARTITION (partition_name, partition_name1) WHERE user = 'cole' ORDER BY timestamp_column LIMIT 1;
|
||||
DELETE QUICK IGNORE FROM some_log AS someLog PARTITION (partition_name, partition_name1) WHERE user = 'cole' ORDER BY timestamp_column LIMIT 1;
|
||||
DELETE LOW_PRIORITY FROM some_log AS someLog PARTITION (partition_name) WHERE user = 'cole' ORDER BY timestamp_column LIMIT 1;
|
||||
DELETE QUICK FROM some_log AS someLog WHERE user = 'cole' ORDER BY timestamp_column LIMIT 1;
|
||||
DELETE IGNORE FROM some_log AS someLog PARTITION (partition_name) WHERE user = 'cole' ORDER BY timestamp_column LIMIT 1;
|
||||
DELETE FROM some_log AS someLog PARTITION (partition_name) WHERE user = 'cole' ORDER BY timestamp_column LIMIT 1;
|
||||
|
||||
DELETE FROM tbl_name;
|
||||
|
||||
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
|
||||
|
||||
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
|
||||
|
||||
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
|
||||
|
||||
DELETE a1, a2 FROM t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id;
|
||||
DELETE FROM a1, a2 USING t1 AS a1 INNER JOIN t2 AS a2 WHERE a1.id=a2.id;
|
||||
|
||||
DELETE t1, t2 FROM t1 INNER JOIN t2 WHERE a1.id=a2.id;
|
||||
DELETE FROM t1, t2 USING t1 INNER JOIN t2 WHERE a1.id=a2.id;
|
||||
|
||||
DELETE FROM some_log WHERE user = 'cole'
|
6
test/parser/mysql/syntax/fixtures/do.sql
Normal file
6
test/parser/mysql/syntax/fixtures/do.sql
Normal file
@ -0,0 +1,6 @@
|
||||
-- https://dev.mysql.com/doc/refman/5.7/en/do.html
|
||||
|
||||
-- DO expr [, expr] ...
|
||||
|
||||
|
||||
DO SLEEP(5);
|
8
test/parser/mysql/syntax/fixtures/dropDatabase.sql
Normal file
8
test/parser/mysql/syntax/fixtures/dropDatabase.sql
Normal file
@ -0,0 +1,8 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-database.html
|
||||
|
||||
-- DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
|
||||
|
||||
DROP DATABASE IF EXISTS db_name;
|
||||
DROP DATABASE db_name;
|
||||
DROP SCHEMA IF EXISTS db_name;
|
||||
DROP SCHEMA db_name;
|
7
test/parser/mysql/syntax/fixtures/dropEvent.sql
Normal file
7
test/parser/mysql/syntax/fixtures/dropEvent.sql
Normal file
@ -0,0 +1,7 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-event.html
|
||||
|
||||
-- DROP EVENT [IF EXISTS] event_name
|
||||
|
||||
|
||||
DROP EVENT IF EXISTS event_name;
|
||||
DROP EVENT event_name;
|
6
test/parser/mysql/syntax/fixtures/dropFunction.sql
Normal file
6
test/parser/mysql/syntax/fixtures/dropFunction.sql
Normal file
@ -0,0 +1,6 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-function-loadable.html
|
||||
|
||||
-- DROP FUNCTION [IF EXISTS] function_name
|
||||
|
||||
DROP FUNCTION IF EXISTS function_name;
|
||||
DROP FUNCTION function_name;
|
27
test/parser/mysql/syntax/fixtures/dropIndex.sql
Normal file
27
test/parser/mysql/syntax/fixtures/dropIndex.sql
Normal file
@ -0,0 +1,27 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-index.html
|
||||
|
||||
/* DROP INDEX index_name ON tbl_name
|
||||
[algorithm_option | lock_option] ...
|
||||
|
||||
algorithm_option:
|
||||
ALGORITHM [=] {DEFAULT | INPLACE | COPY}
|
||||
|
||||
lock_option:
|
||||
LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE} */
|
||||
|
||||
|
||||
DROP INDEX `PRIMARY` ON t ALGORITHM = DEFAULT;
|
||||
DROP INDEX `PRIMARY` ON t ALGORITHM = INPLACE;
|
||||
DROP INDEX `PRIMARY` ON t ALGORITHM = COPY;
|
||||
DROP INDEX `PRIMARY` ON t LOCK = DEFAULT;
|
||||
DROP INDEX `PRIMARY` ON t LOCK = NONE;
|
||||
DROP INDEX `PRIMARY` ON t LOCK = SHARED;
|
||||
DROP INDEX `PRIMARY` ON t LOCK = EXCLUSIVE;
|
||||
|
||||
DROP INDEX `PRIMARY` ON t ALGORITHM DEFAULT;
|
||||
DROP INDEX `PRIMARY` ON t ALGORITHM INPLACE;
|
||||
DROP INDEX `PRIMARY` ON t ALGORITHM COPY;
|
||||
DROP INDEX `PRIMARY` ON t LOCK DEFAULT;
|
||||
DROP INDEX `PRIMARY` ON t LOCK NONE;
|
||||
DROP INDEX `PRIMARY` ON t LOCK SHARED;
|
||||
DROP INDEX `PRIMARY` ON t LOCK EXCLUSIVE;
|
8
test/parser/mysql/syntax/fixtures/dropLogFileGroup.sql
Normal file
8
test/parser/mysql/syntax/fixtures/dropLogFileGroup.sql
Normal file
@ -0,0 +1,8 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-logfile-group.html
|
||||
|
||||
/* DROP LOGFILE GROUP logfile_group
|
||||
ENGINE [=] engine_name */
|
||||
|
||||
|
||||
DROP LOGFILE GROUP logfile_group ENGINE = engine_name;
|
||||
DROP LOGFILE GROUP logfile_group ENGINE engine_name;
|
8
test/parser/mysql/syntax/fixtures/dropProcedure.sql
Normal file
8
test/parser/mysql/syntax/fixtures/dropProcedure.sql
Normal file
@ -0,0 +1,8 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-procedure.html
|
||||
|
||||
-- DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name
|
||||
|
||||
DROP PROCEDURE IF EXISTS sp_name;
|
||||
DROP PROCEDURE sp_name;
|
||||
DROP FUNCTION IF EXISTS sp_name;
|
||||
DROP FUNCTION sp_name;
|
7
test/parser/mysql/syntax/fixtures/dropResourceGroup.sql
Normal file
7
test/parser/mysql/syntax/fixtures/dropResourceGroup.sql
Normal file
@ -0,0 +1,7 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-resource-group.html
|
||||
|
||||
/* DROP RESOURCE GROUP group_name [FORCE] */
|
||||
|
||||
|
||||
DROP RESOURCE GROUP group_name FORCE;
|
||||
DROP RESOURCE GROUP group_name;
|
9
test/parser/mysql/syntax/fixtures/dropRole.sql
Normal file
9
test/parser/mysql/syntax/fixtures/dropRole.sql
Normal file
@ -0,0 +1,9 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-role.html
|
||||
|
||||
/* DROP ROLE [IF EXISTS] role [, role ] ... */
|
||||
|
||||
|
||||
DROP ROLE IF EXISTS 'developer', 'developer1';
|
||||
DROP ROLE IF EXISTS 'developer';
|
||||
DROP ROLE 'developer';
|
||||
DROP ROLE 'webapp'@'localhost';
|
7
test/parser/mysql/syntax/fixtures/dropServer.sql
Normal file
7
test/parser/mysql/syntax/fixtures/dropServer.sql
Normal file
@ -0,0 +1,7 @@
|
||||
-- https://dev.mysql.com/doc/refman/5.7/en/drop-server.html
|
||||
|
||||
-- DROP SERVER [ IF EXISTS ] server_name
|
||||
|
||||
|
||||
DROP SERVER IF EXISTS server_name;
|
||||
DROP SERVER server_name;
|
@ -0,0 +1,11 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-spatial-reference-system.html
|
||||
|
||||
/* DROP SPATIAL REFERENCE SYSTEM
|
||||
[IF EXISTS]
|
||||
srid
|
||||
|
||||
srid: 32-bit unsigned integer */
|
||||
|
||||
|
||||
DROP SPATIAL REFERENCE SYSTEM IF EXISTS 4120;
|
||||
DROP SPATIAL REFERENCE SYSTEM 4120;
|
17
test/parser/mysql/syntax/fixtures/dropTable.sql
Normal file
17
test/parser/mysql/syntax/fixtures/dropTable.sql
Normal file
@ -0,0 +1,17 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-table.html
|
||||
|
||||
/* DROP [TEMPORARY] TABLE [IF EXISTS]
|
||||
tbl_name [, tbl_name] ...
|
||||
[RESTRICT | CASCADE] */
|
||||
|
||||
|
||||
DROP TEMPORARY TABLE IF EXISTS tbl_name, tbl_name RESTRICT;
|
||||
DROP TEMPORARY TABLE IF EXISTS tbl_name, tbl_name CASCADE;
|
||||
|
||||
DROP TABLE IF EXISTS tbl_name, tbl_name RESTRICT;
|
||||
DROP TABLE tbl_name, tbl_name RESTRICT;
|
||||
DROP TABLE IF EXISTS tbl_name, tbl_name CASCADE;
|
||||
DROP TABLE tbl_name, tbl_name CASCADE;
|
||||
|
||||
DROP TABLE IF EXISTS tbl_name RESTRICT;
|
||||
DROP TABLE tbl_name CASCADE;
|
13
test/parser/mysql/syntax/fixtures/dropTableSpace.sql
Normal file
13
test/parser/mysql/syntax/fixtures/dropTableSpace.sql
Normal file
@ -0,0 +1,13 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-tablespace.html
|
||||
|
||||
/* DROP [UNDO] TABLESPACE tablespace_name
|
||||
[ENGINE [=] engine_name] */
|
||||
|
||||
|
||||
DROP UNDO TABLESPACE tablespace_name ENGINE = engine_name;
|
||||
DROP TABLESPACE tablespace_name ENGINE = engine_name;
|
||||
DROP UNDO TABLESPACE tablespace_name;
|
||||
|
||||
DROP UNDO TABLESPACE tablespace_name ENGINE engine_name;
|
||||
DROP TABLESPACE tablespace_name ENGINE engine_name;
|
||||
DROP TABLESPACE tablespace_name;
|
9
test/parser/mysql/syntax/fixtures/dropTrigger.sql
Normal file
9
test/parser/mysql/syntax/fixtures/dropTrigger.sql
Normal file
@ -0,0 +1,9 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-trigger.html
|
||||
|
||||
-- DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
|
||||
|
||||
|
||||
DROP TRIGGER IF EXISTS schema_name.trigger_name;
|
||||
DROP TRIGGER IF EXISTS trigger_name;
|
||||
DROP TRIGGER schema_name.trigger_name;
|
||||
DROP TRIGGER trigger_name;
|
9
test/parser/mysql/syntax/fixtures/dropUser.sql
Normal file
9
test/parser/mysql/syntax/fixtures/dropUser.sql
Normal file
@ -0,0 +1,9 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-user.html
|
||||
|
||||
/* DROP USER [IF EXISTS] user [, user] ... */
|
||||
|
||||
|
||||
DROP USER IF EXISTS 'user', 'user1';
|
||||
DROP USER IF EXISTS 'user';
|
||||
DROP USER 'user';
|
||||
DROP USER 'jeffrey'@'localhost';
|
12
test/parser/mysql/syntax/fixtures/dropView.sql
Normal file
12
test/parser/mysql/syntax/fixtures/dropView.sql
Normal file
@ -0,0 +1,12 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/drop-view.html
|
||||
|
||||
/* DROP VIEW [IF EXISTS]
|
||||
view_name [, view_name] ...
|
||||
[RESTRICT | CASCADE] */
|
||||
|
||||
|
||||
DROP VIEW IF EXISTS view_name, view_name1, view_name2 RESTRICT;
|
||||
DROP VIEW IF EXISTS view_name, view_name1, view_name2 CASCADE;
|
||||
DROP VIEW view_name, view_name1, view_name2 RESTRICT;
|
||||
DROP VIEW view_name, view_name1, view_name2 CASCADE;
|
||||
DROP VIEW view_name RESTRICT;
|
100
test/parser/mysql/syntax/fixtures/grant.sql
Normal file
100
test/parser/mysql/syntax/fixtures/grant.sql
Normal file
@ -0,0 +1,100 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/grant.html
|
||||
|
||||
/* GRANT
|
||||
priv_type [(column_list)]
|
||||
[, priv_type [(column_list)]] ...
|
||||
ON [object_type] priv_level
|
||||
TO user_or_role [, user_or_role] ...
|
||||
[WITH GRANT OPTION]
|
||||
[AS user
|
||||
[WITH ROLE
|
||||
DEFAULT
|
||||
| NONE
|
||||
| ALL
|
||||
| ALL EXCEPT role [, role ] ...
|
||||
| role [, role ] ...
|
||||
]
|
||||
]
|
||||
}
|
||||
|
||||
GRANT PROXY ON user_or_role
|
||||
TO user_or_role [, user_or_role] ...
|
||||
[WITH GRANT OPTION]
|
||||
|
||||
GRANT role [, role] ...
|
||||
TO user_or_role [, user_or_role] ...
|
||||
[WITH ADMIN OPTION]
|
||||
|
||||
object_type: {
|
||||
TABLE
|
||||
| FUNCTION
|
||||
| PROCEDURE
|
||||
}
|
||||
|
||||
priv_level: {
|
||||
*
|
||||
| *.*
|
||||
| db_name.*
|
||||
| db_name.tbl_name
|
||||
| tbl_name
|
||||
| db_name.routine_name
|
||||
}
|
||||
|
||||
user_or_role: {
|
||||
user (see Section 6.2.4, “Specifying Account Names”)
|
||||
| role (see Section 6.2.5, “Specifying Role Names”)
|
||||
} */
|
||||
|
||||
|
||||
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
|
||||
GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';
|
||||
GRANT SELECT ON world.* TO 'role3';
|
||||
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
|
||||
GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';
|
||||
CREATE USER u;
|
||||
GRANT SELECT ON `d_`.* TO u;
|
||||
GRANT INSERT ON `d%`.* TO u;
|
||||
GRANT ALL ON test.* TO ''@'localhost';
|
||||
GRANT SELECT, INSERT ON *.* TO u1;
|
||||
GRANT SELECT, INSERT, UPDATE ON *.* TO u1;
|
||||
GRANT ALL ON *.* TO 'some_user'@'some_host';
|
||||
GRANT SELECT, INSERT ON *.* TO 'some_user'@'some_host';
|
||||
GRANT ALL ON my_db.* TO 'some_user'@'some_host';
|
||||
GRANT SELECT, INSERT ON my_db.* TO 'some_user'@'some_host';
|
||||
GRANT ALL ON my_db.my_tbl TO 'some_user'@'some_host';
|
||||
GRANT SELECT, INSERT ON my_db.my_tbl TO 'some_user'@'some_host';
|
||||
GRANT SELECT (col1), INSERT (col1, col2) ON my_db.my_tbl TO 'some_user'@'some_host';
|
||||
GRANT CREATE ROUTINE ON my_db.* TO 'some_user'@'some_host';
|
||||
GRANT EXECUTE ON PROCEDURE my_db.my_proc TO 'some_user'@'some_host';
|
||||
GRANT PROXY ON 'local_user'@'localhost' TO 'external_user'@'some_host';
|
||||
GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';
|
||||
GRANT 'u1' TO 'u1';
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO u1;
|
||||
GRANT INSERT ON schema1.* TO r1;
|
||||
GRANT SELECT ON schema2.* TO r1;
|
||||
GRANT r1 TO u1;
|
||||
GRANT SELECT, INSERT, UPDATE ON *.* TO u2;
|
||||
GRANT SELECT, INSERT, UPDATE ON *.* TO u3 AS u4;
|
||||
GRANT SELECT, INSERT, UPDATE ON *.* TO u4 AS u1 WITH ROLE r1;
|
||||
GRANT USAGE ON *.* TO 'some_user'@'some_host' WITH GRANT OPTION;
|
||||
|
||||
GRANT ALL ON db1.t1 TO 'jeffrey'@'localhost' IDENTIFIED BY PASSWORD 'auth_string', 'jeffrey1'@'localhost' IDENTIFIED BY PASSWORD 'auth_string' REQUIRE NONE;
|
||||
GRANT ALL ON db1.t1 TO 'jeffrey'@'localhost' IDENTIFIED BY PASSWORD 'auth_string', 'jeffrey1'@'localhost' IDENTIFIED BY PASSWORD 'auth_string' REQUIRE CIPHER 'cipher' AND ISSUER 'issuer' SUBJECT 'subject' X509;
|
||||
GRANT ALL ON db1.t1 TO 'jeffrey'@'localhost' IDENTIFIED BY PASSWORD 'auth_string', 'jeffrey1'@'localhost' IDENTIFIED BY PASSWORD 'auth_string' REQUIRE CIPHER 'cipher' AND ISSUER 'issuer' SUBJECT 'subject' X509 WITH GRANT OPTION;
|
||||
GRANT ALL ON db1.t1 TO 'jeffrey'@'localhost' IDENTIFIED BY PASSWORD 'auth_string', 'jeffrey1'@'localhost' IDENTIFIED BY PASSWORD 'auth_string' REQUIRE CIPHER 'cipher' AND ISSUER 'issuer' SUBJECT 'subject' X509 WITH MAX_UPDATES_PER_HOUR 100;
|
||||
|
||||
GRANT PROXY ON 'user' TO 'user1', 'user2' WITH GRANT OPTION;
|
||||
GRANT PROXY ON 'user' TO 'user1', 'user2';
|
||||
GRANT PROXY ON 'user' TO 'user1';
|
||||
|
||||
GRANT ALL ON db1.t1 TO 'user' WITH GRANT OPTION AS 'user1' WITH ROLE DEFAULT;
|
||||
GRANT ALL ON db1.t1 TO 'user' WITH GRANT OPTION AS 'user1' WITH ROLE NONE;
|
||||
GRANT ALL ON db1.t1 TO 'user' WITH GRANT OPTION AS 'user1' WITH ROLE ALL;
|
||||
GRANT ALL ON db1.t1 TO 'user' WITH GRANT OPTION AS 'user1' WITH ROLE ALL EXCEPT 'developer';
|
||||
GRANT ALL ON db1.t1 TO 'user' WITH GRANT OPTION AS 'user1' WITH ROLE 'developer';
|
||||
GRANT ALL ON TABLE db1.t1 TO 'user' WITH GRANT OPTION AS 'user1' WITH ROLE 'developer';
|
||||
GRANT ALL ON FUNCTION 'fcName' TO 'user' WITH GRANT OPTION AS 'user1' WITH ROLE 'developer';
|
||||
GRANT ALL ON PROCEDURE 'name' TO 'user' WITH GRANT OPTION AS 'user1' WITH ROLE 'developer';
|
||||
|
||||
GRANT 'developer' TO 'user', 'developer1' WITH ADMIN OPTION;
|
||||
GRANT 'developer' TO 'user';
|
16
test/parser/mysql/syntax/fixtures/groupReplication.sql
Normal file
16
test/parser/mysql/syntax/fixtures/groupReplication.sql
Normal file
@ -0,0 +1,16 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/start-group-replication.html
|
||||
|
||||
/* START GROUP_REPLICATION
|
||||
[USER='user_name']
|
||||
[, PASSWORD='user_pass']
|
||||
[, DEFAULT_AUTH='plugin_name'] */
|
||||
|
||||
START GROUP_REPLICATION USER='user_name', PASSWORD='user_pass', DEFAULT_AUTH='plugin_name';
|
||||
START GROUP_REPLICATION USER='user_name', PASSWORD='user_pass';
|
||||
START GROUP_REPLICATION;
|
||||
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/stop-group-replication.html
|
||||
|
||||
STOP GROUP_REPLICATION;
|
52
test/parser/mysql/syntax/fixtures/handler.sql
Normal file
52
test/parser/mysql/syntax/fixtures/handler.sql
Normal file
@ -0,0 +1,52 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/handler.html
|
||||
|
||||
/* HANDLER tbl_name OPEN [ [AS] alias]
|
||||
|
||||
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
|
||||
[ WHERE where_condition ] [LIMIT ... ]
|
||||
|
||||
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
|
||||
[ WHERE where_condition ] [LIMIT ... ]
|
||||
|
||||
HANDLER tbl_name READ { FIRST | NEXT }
|
||||
[ WHERE where_condition ] [LIMIT ... ]
|
||||
|
||||
HANDLER tbl_name CLOSE */
|
||||
|
||||
|
||||
|
||||
HANDLER tbl_name OPEN AS tbl_name1;
|
||||
HANDLER tbl_name OPEN;
|
||||
|
||||
HANDLER tbl_name READ index_name = ('value1', 'value2');
|
||||
HANDLER tbl_name READ index_name = ('value1', 'value2') WHERE name = 'Tony' LIMIT 10;
|
||||
HANDLER tbl_name READ index_name <= ('value1', 'value2') WHERE name = 'Tony' LIMIT 10;
|
||||
HANDLER tbl_name READ index_name >= ('value1', 'value2') WHERE name = 'Tony' LIMIT 10;
|
||||
HANDLER tbl_name READ index_name < ('value1', 'value2') WHERE name = 'Tony' LIMIT 10;
|
||||
HANDLER tbl_name READ index_name > ('value1', 'value2') WHERE name = 'Tony' LIMIT 10;
|
||||
|
||||
HANDLER tbl_name READ index_name = ('value1', 'value2') WHERE name = 'Tony';
|
||||
HANDLER tbl_name READ index_name <= ('value1', 'value2') WHERE name = 'Tony';
|
||||
HANDLER tbl_name READ index_name >= ('value1', 'value2') WHERE name = 'Tony';
|
||||
HANDLER tbl_name READ index_name < ('value1', 'value2') WHERE name = 'Tony';
|
||||
HANDLER tbl_name READ index_name > ('value1', 'value2') WHERE name = 'Tony';
|
||||
|
||||
HANDLER tbl_name READ index_name FIRST WHERE name = 'Tony' LIMIT 10;
|
||||
HANDLER tbl_name READ index_name NEXT WHERE name = 'Tony' LIMIT 10;
|
||||
HANDLER tbl_name READ index_name PREV WHERE name = 'Tony' LIMIT 10;
|
||||
HANDLER tbl_name READ index_name LAST WHERE name = 'Tony' LIMIT 10;
|
||||
|
||||
HANDLER tbl_name READ index_name FIRST WHERE name = 'Tony';
|
||||
HANDLER tbl_name READ index_name NEXT WHERE name = 'Tony';
|
||||
HANDLER tbl_name READ index_name PREV WHERE name = 'Tony';
|
||||
HANDLER tbl_name READ index_name LAST WHERE name = 'Tony';
|
||||
|
||||
HANDLER tbl_name READ index_name FIRST;
|
||||
HANDLER tbl_name READ index_name NEXT;
|
||||
HANDLER tbl_name READ index_name PREV;
|
||||
HANDLER tbl_name READ index_name LAST;
|
||||
|
||||
HANDLER tbl_name READ FIRST;
|
||||
HANDLER tbl_name READ NEXT;
|
||||
|
||||
HANDLER tbl_name CLOSE;
|
8
test/parser/mysql/syntax/fixtures/importTable.sql
Normal file
8
test/parser/mysql/syntax/fixtures/importTable.sql
Normal file
@ -0,0 +1,8 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/import-table.html
|
||||
|
||||
-- IMPORT TABLE FROM sdi_file [, sdi_file] ...
|
||||
|
||||
|
||||
IMPORT TABLE FROM '/tmp/mysql-files/employees.sdi', '/tmp/mysql-files/managers1.sdi', '/tmp/mysql-files/managers2.sdi';
|
||||
IMPORT TABLE FROM '/tmp/mysql-files/employees.sdi', '/tmp/mysql-files/managers1.sdi';
|
||||
IMPORT TABLE FROM '/tmp/mysql-files/*.sdi';
|
88
test/parser/mysql/syntax/fixtures/insert.sql
Normal file
88
test/parser/mysql/syntax/fixtures/insert.sql
Normal file
@ -0,0 +1,88 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/insert.html
|
||||
|
||||
/* INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
|
||||
[INTO] tbl_name
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
[(col_name [, col_name] ...)]
|
||||
{ {VALUES | VALUE} (value_list) [, (value_list)] ... }
|
||||
[AS row_alias[(col_alias [, col_alias] ...)]]
|
||||
[ON DUPLICATE KEY UPDATE assignment_list]
|
||||
|
||||
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
|
||||
[INTO] tbl_name
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
SET assignment_list
|
||||
[AS row_alias[(col_alias [, col_alias] ...)]]
|
||||
[ON DUPLICATE KEY UPDATE assignment_list]
|
||||
|
||||
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
|
||||
[INTO] tbl_name
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
[(col_name [, col_name] ...)]
|
||||
{ SELECT ...
|
||||
| TABLE table_name
|
||||
| VALUES row_constructor_list
|
||||
}
|
||||
[ON DUPLICATE KEY UPDATE assignment_list]
|
||||
|
||||
|
||||
value:
|
||||
{expr | DEFAULT}
|
||||
|
||||
value_list:
|
||||
value [, value] ...
|
||||
|
||||
row_constructor_list:
|
||||
ROW(value_list)[, ROW(value_list)][, ...]
|
||||
|
||||
assignment:
|
||||
col_name =
|
||||
value
|
||||
| [row_alias.]col_name
|
||||
| [tbl_name.]col_name
|
||||
| [row_alias.]col_alias
|
||||
|
||||
assignment_list:
|
||||
assignment [, assignment] ... */
|
||||
|
||||
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES (KW_DEFAULT, KW_DEFAULT), (KW_DEFAULT, KW_DEFAULT) AS row_alias(col_alias, col_alias1) ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUE (KW_DEFAULT, KW_DEFAULT), (KW_DEFAULT, KW_DEFAULT) AS row_alias(col_alias, col_alias1) ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES (value_list), (value_list1) AS row_alias(col_alias, col_alias1) ON DUPLICATE KEY UPDATE col_name = tbl_name.col_name;
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES (value_list), (value_list1) AS row_alias(col_alias, col_alias1) ON DUPLICATE KEY UPDATE col_name = 'abc', col_name = tbl_name.col_name;
|
||||
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES (value_list), (value_list1) AS row_alias(col_alias) ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES (value_list), (value_list1) AS row_alias ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) SET col_name = 'abc' AS row_alias(col_alias, col_alias1) ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) SET col_name = 'abc' AS row_alias(col_alias) ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) SET col_name = 'abc', col_name1 = tbl_name.col_name AS row_alias ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES ROW(1,2,3), ROW(4,5,6), ROW(7,8,9) ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) TABLE table_name ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
|
||||
INSERT DELAYED IGNORE INTO tbl_name PARTITION (partition_name, partition_name1) (col_name, col_name1) TABLE table_name ON DUPLICATE KEY UPDATE col_name = 'abc';
|
||||
|
||||
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
|
||||
INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
|
||||
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3), (4,5,6), (7,8,9);
|
||||
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3,4,5,6,7,8,9);
|
||||
INSERT INTO tbl_name (a,b,c) VALUES ROW(1,2,3), ROW(4,5,6), ROW(7,8,9);
|
||||
|
||||
|
||||
INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
|
||||
INSERT INTO ta TABLE tb;
|
||||
|
||||
INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
|
||||
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
|
||||
INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3;
|
||||
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new ON DUPLICATE KEY UPDATE c = new.a+new.b;
|
||||
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new(m,n,p) ON DUPLICATE KEY UPDATE c = m+n;
|
||||
INSERT INTO t1 SELECT c, c+d FROM t2 ON DUPLICATE KEY UPDATE b = VALUES(b);
|
||||
INSERT INTO t1 SELECT * FROM (SELECT c, c+d AS e FROM t2) AS dt ON DUPLICATE KEY UPDATE b = e;
|
||||
INSERT INTO t1 SET a=1,b=2,c=3 AS new ON DUPLICATE KEY UPDATE c = new.a+new.b;
|
||||
INSERT INTO t1 SET a=1,b=2,c=3 AS new(m,n,p) ON DUPLICATE KEY UPDATE c = m+n;
|
||||
|
||||
INSERT INTO t1 (a, b) SELECT c, d FROM t2 UNION SELECT e, f FROM t3 ON DUPLICATE KEY UPDATE b = b + c;
|
||||
INSERT INTO t1 (a, b) SELECT * FROM (SELECT c, d FROM t2 UNION SELECT e, f FROM t3) AS dt ON DUPLICATE KEY UPDATE b = b + c;
|
35
test/parser/mysql/syntax/fixtures/insertSelect.sql
Normal file
35
test/parser/mysql/syntax/fixtures/insertSelect.sql
Normal file
@ -0,0 +1,35 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/insert-select.html
|
||||
|
||||
/* INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
|
||||
[INTO] tbl_name
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
[(col_name [, col_name] ...)]
|
||||
{ SELECT ...
|
||||
| TABLE table_name
|
||||
| VALUES row_constructor_list
|
||||
}
|
||||
[ON DUPLICATE KEY UPDATE assignment_list]
|
||||
|
||||
|
||||
value:
|
||||
{expr | DEFAULT}
|
||||
|
||||
value_list:
|
||||
value [, value] ...
|
||||
|
||||
row_constructor_list:
|
||||
ROW(value_list)[, ROW(value_list)][, ...]
|
||||
|
||||
assignment:
|
||||
col_name =
|
||||
value
|
||||
| [row_alias.]col_name
|
||||
| [tbl_name.]col_name
|
||||
| [row_alias.]col_alias
|
||||
|
||||
assignment_list:
|
||||
assignment [, assignment] ... */
|
||||
|
||||
|
||||
INSERT LOW_PRIORITY IGNORE INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
|
||||
INSERT HIGH_PRIORITY IGNORE INTO tbl_temp2 (fld_id) VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8);
|
16
test/parser/mysql/syntax/fixtures/installComponent.sql
Normal file
16
test/parser/mysql/syntax/fixtures/installComponent.sql
Normal file
@ -0,0 +1,16 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/install-component.html
|
||||
|
||||
/* INSTALL COMPONENT component_name [, component_name ...
|
||||
[SET variable = expr [, variable = expr] ...]
|
||||
|
||||
variable: {
|
||||
{GLOBAL | @@GLOBAL.} [component_prefix.]system_var_name
|
||||
| {PERSIST | @@PERSIST.} [component_prefix.]system_var_name
|
||||
} */
|
||||
|
||||
|
||||
INSTALL COMPONENT 'file://component1';
|
||||
INSTALL COMPONENT 'file://component1', 'file://component2';
|
||||
INSTALL COMPONENT 'file://component1', 'file://component2' SET GLOBAL component1.var1 = 12 + 3, PERSIST component2.var2 = 'strings';
|
||||
INSTALL COMPONENT 'file://component1', 'file://component2' SET @@GLOBAL.component1.var1 = 12 + 3, @@PERSIST.component2.var2 = 'strings';
|
||||
INSTALL COMPONENT 'file://component1', 'file://component2' SET PERSIST component1.var1 = 12 + 3, GLOBAL component2.var2 = 'strings';
|
6
test/parser/mysql/syntax/fixtures/installPlugin.sql
Normal file
6
test/parser/mysql/syntax/fixtures/installPlugin.sql
Normal file
@ -0,0 +1,6 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/install-plugin.html
|
||||
|
||||
/* INSTALL PLUGIN plugin_name SONAME 'shared_library_name' */
|
||||
|
||||
|
||||
INSTALL PLUGIN plugin_name SONAME 'shared_library_name';
|
12
test/parser/mysql/syntax/fixtures/interSect.sql
Normal file
12
test/parser/mysql/syntax/fixtures/interSect.sql
Normal file
@ -0,0 +1,12 @@
|
||||
-- https://dev.mysql.com/doc/refman/5.7/en/intersect.html
|
||||
|
||||
/* query_expression_body INTERSECT [ALL | DISTINCT] query_expression_body
|
||||
[INTERSECT [ALL | DISTINCT] query_expression_body]
|
||||
[...]
|
||||
|
||||
query_expression_body:
|
||||
See Section 13.2.14, “Set Operations with UNION, INTERSECT, and EXCEPT” */
|
||||
|
||||
|
||||
(SELECT * FROM table_name1) INTERSECT (SELECT * FROM table_name2);
|
||||
SELECT column_list FROM table_a WHERE age = 12 INTERSECT SELECT column1, COUNT(column2) FROM table_name GROUP BY column1;
|
40
test/parser/mysql/syntax/fixtures/loadData.sql
Normal file
40
test/parser/mysql/syntax/fixtures/loadData.sql
Normal file
@ -0,0 +1,40 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/load-data.html
|
||||
|
||||
/* LOAD DATA
|
||||
[LOW_PRIORITY | CONCURRENT] [LOCAL]
|
||||
INFILE 'file_name'
|
||||
[REPLACE | IGNORE]
|
||||
INTO TABLE tbl_name
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
[CHARACTER SET charset_name]
|
||||
[{FIELDS | COLUMNS}
|
||||
[TERMINATED BY 'string']
|
||||
[[OPTIONALLY] ENCLOSED BY 'char']
|
||||
[ESCAPED BY 'char']
|
||||
]
|
||||
[LINES
|
||||
[STARTING BY 'string']
|
||||
[TERMINATED BY 'string']
|
||||
]
|
||||
[IGNORE number {LINES | ROWS}]
|
||||
[(col_name_or_user_var
|
||||
[, col_name_or_user_var] ...)]
|
||||
[SET col_name={expr | DEFAULT}
|
||||
[, col_name={expr | DEFAULT}] ...] */
|
||||
|
||||
|
||||
LOAD DATA LOW_PRIORITY LOCAL INFILE 'data.txt' REPLACE INTO TABLE db2.my_table PARTITION (partition_name, partition_name1) CHARACTER SET utf8mb4 COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'char' ESCAPED BY 'char' LINES STARTING BY 'xxx' TERMINATED BY ',' IGNORE 1 ROWS (col_name_or_user_var) SET column2 = @var1/100;
|
||||
|
||||
LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;
|
||||
LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test FIELDS TERMINATED BY ',' LINES STARTING BY 'xxx';
|
||||
LOAD DATA INFILE '/tmp/test.txt' INTO TABLE test IGNORE 1 LINES;
|
||||
LOAD DATA INFILE 'data.txt' INTO TABLE table2 FIELDS TERMINATED BY ',';
|
||||
LOAD DATA INFILE 'data.txt' INTO TABLE table2 FIELDS TERMINATED BY '\t';
|
||||
LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
|
||||
LOAD DATA INFILE '/tmp/jokes.txt' INTO TABLE jokes FIELDS TERMINATED BY '' LINES TERMINATED BY '\n%%\n' (joke);
|
||||
LOAD DATA INFILE 'person_data.txt' INTO TABLE person_data;
|
||||
LOAD DATA INFILE 'person_data.txt' INTO TABLE person_data (col_name_or_user_var, col_name_or_user_var1);
|
||||
LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @var1) SET column2 = @var1/100;
|
||||
LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, column2) SET column3 = CURRENT_TIMESTAMP;
|
||||
LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
|
||||
LOAD DATA INFILE '/tmp/bit_test.txt' INTO TABLE bit_test (@var1) SET b = CAST(CONV(MID(@var1, 3, LENGTH(@var1)-3), 2, 10) AS UNSIGNED);
|
29
test/parser/mysql/syntax/fixtures/loadXml.sql
Normal file
29
test/parser/mysql/syntax/fixtures/loadXml.sql
Normal file
@ -0,0 +1,29 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/load-xml.html
|
||||
|
||||
/* LOAD XML
|
||||
[LOW_PRIORITY | CONCURRENT] [LOCAL]
|
||||
INFILE 'file_name'
|
||||
[REPLACE | IGNORE]
|
||||
INTO TABLE [db_name.]tbl_name
|
||||
[CHARACTER SET charset_name]
|
||||
[ROWS IDENTIFIED BY '<tagname>']
|
||||
[IGNORE number {LINES | ROWS}]
|
||||
[(field_name_or_user_var
|
||||
[, field_name_or_user_var] ...)]
|
||||
[SET col_name={expr | DEFAULT}
|
||||
[, col_name={expr | DEFAULT}] ...] */
|
||||
|
||||
LOAD XML LOW_PRIORITY LOCAL INFILE 'person.xml' REPLACE INTO TABLE db_name.person CHARACTER SET utf8mb4 ROWS IDENTIFIED BY '<person>' IGNORE 1 LINES (field_name_or_user_var, field_name_or_user_var1) SET column2 = @var1/100;
|
||||
LOAD XML CONCURRENT INFILE 'person.xml' IGNORE INTO TABLE db_name.person CHARACTER SET utf8mb4 ROWS IDENTIFIED BY '<person>' IGNORE 1 ROWS (field_name_or_user_var, field_name_or_user_var1) SET column2 = @var1/100;
|
||||
|
||||
LOAD XML LOCAL INFILE 'person.xml' INTO TABLE db_name.person ROWS IDENTIFIED BY '<person>';
|
||||
LOAD XML LOCAL INFILE 'person-dump.xml' INTO TABLE person2;
|
||||
LOAD XML INFILE '../bin/person-dump.xml' INTO TABLE test.individual;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
(SELECT 1 AS result UNION SELECT 2)
|
||||
ORDER BY result DESC LIMIT 1 OFFSET 1;
|
25
test/parser/mysql/syntax/fixtures/lockTable.sql
Normal file
25
test/parser/mysql/syntax/fixtures/lockTable.sql
Normal file
@ -0,0 +1,25 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/lock-instance-for-backup.html
|
||||
|
||||
/* LOCK TABLES
|
||||
tbl_name [[AS] alias] lock_type
|
||||
[, tbl_name [[AS] alias] lock_type] ...
|
||||
|
||||
lock_type: {
|
||||
READ [LOCAL]
|
||||
| [LOW_PRIORITY] WRITE
|
||||
}
|
||||
|
||||
UNLOCK TABLES */
|
||||
|
||||
|
||||
LOCK TABLES t1 READ;
|
||||
LOCK TABLE t WRITE, t AS t1 READ;
|
||||
LOCK TABLE t READ;
|
||||
LOCK TABLE t READ LOCAL;
|
||||
LOCK TABLE t AS my_alias READ;
|
||||
LOCK TABLES t1 WRITE, t2 READ;
|
||||
|
||||
LOCK TABLES trans READ, customer LOW_PRIORITY WRITE;
|
||||
LOCK TABLES trans READ, customer WRITE;
|
||||
|
||||
UNLOCK TABLES;
|
13
test/parser/mysql/syntax/fixtures/optimizeTable.sql
Normal file
13
test/parser/mysql/syntax/fixtures/optimizeTable.sql
Normal file
@ -0,0 +1,13 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/optimize-table.html
|
||||
|
||||
/* OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL]
|
||||
TABLE tbl_name [, tbl_name] ... */
|
||||
|
||||
|
||||
OPTIMIZE NO_WRITE_TO_BINLOG TABLE t1, t2, t3;
|
||||
OPTIMIZE LOCAL TABLE t1, t2, t3;
|
||||
OPTIMIZE TABLE t1, t2, t3;
|
||||
|
||||
OPTIMIZE NO_WRITE_TO_BINLOG TABLE t1;
|
||||
OPTIMIZE LOCAL TABLE t1;
|
||||
OPTIMIZE TABLE t1;
|
155
test/parser/mysql/syntax/fixtures/otherAdministrative.sql
Normal file
155
test/parser/mysql/syntax/fixtures/otherAdministrative.sql
Normal file
@ -0,0 +1,155 @@
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/binlog.html */
|
||||
|
||||
BINLOG 'str';
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/cache-index.html */
|
||||
|
||||
/* CACHE INDEX {
|
||||
tbl_index_list [, tbl_index_list] ...
|
||||
| tbl_name PARTITION (partition_list)
|
||||
}
|
||||
IN key_cache_name
|
||||
|
||||
tbl_index_list:
|
||||
tbl_name [{INDEX|KEY} (index_name[, index_name] ...)]
|
||||
|
||||
partition_list: {
|
||||
partition_name[, partition_name] ...
|
||||
| ALL
|
||||
} */
|
||||
|
||||
CACHE INDEX t1, t2, t3 IN hot_cache;
|
||||
CACHE INDEX t1 IN non_existent_cache;
|
||||
CACHE INDEX t1 INDEX (index_name, index_name1), t2 KEY (index_name2, index_name3) IN non_existent_cache;
|
||||
|
||||
CACHE INDEX t1 PARTITION (partition_name, partition_name1) IN non_existent_cache;
|
||||
CACHE INDEX t1 PARTITION (ALL) IN non_existent_cache;
|
||||
|
||||
CACHE INDEX pt PARTITION (p0) IN kc_fast;
|
||||
CACHE INDEX pt PARTITION (p1, p3) IN kc_slow;
|
||||
CACHE INDEX pt PARTITION (ALL) IN kc_all;
|
||||
CACHE INDEX pt IN kc_all;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/flush.html */
|
||||
|
||||
/* FLUSH [NO_WRITE_TO_BINLOG | LOCAL] {
|
||||
flush_option [, flush_option] ...
|
||||
| tables_option
|
||||
}
|
||||
|
||||
flush_option: {
|
||||
BINARY LOGS
|
||||
| DES_KEY_FILE
|
||||
| ENGINE LOGS
|
||||
| ERROR LOGS
|
||||
| GENERAL LOGS
|
||||
| HOSTS
|
||||
| LOGS
|
||||
| PRIVILEGES
|
||||
| OPTIMIZER_COSTS
|
||||
| RELAY LOGS [FOR CHANNEL channel]
|
||||
| SLOW LOGS
|
||||
| STATUS
|
||||
| USER_RESOURCES
|
||||
}
|
||||
|
||||
tables_option: {
|
||||
TABLES
|
||||
| TABLES tbl_name [, tbl_name] ...
|
||||
| TABLES WITH READ LOCK
|
||||
| TABLES tbl_name [, tbl_name] ... WITH READ LOCK
|
||||
| TABLES tbl_name [, tbl_name] ... FOR EXPORT
|
||||
} */
|
||||
|
||||
FLUSH NO_WRITE_TO_BINLOG BINARY LOGS, ENGINE LOGS, ERROR LOGS, GENERAL LOGS, HOSTS, LOGS, PRIVILEGES, OPTIMIZER_COSTS, RELAY LOGS FOR CHANNEL 'channel', SLOW LOGS, STATUS, USER_RESOURCES;
|
||||
FLUSH LOCAL BINARY LOGS, ENGINE LOGS, ERROR LOGS, GENERAL LOGS, HOSTS, LOGS, PRIVILEGES, OPTIMIZER_COSTS, RELAY LOGS, SLOW LOGS, STATUS, USER_RESOURCES;
|
||||
FLUSH LOCAL DES_KEY_FILE, QUERY CACHE;
|
||||
|
||||
FLUSH NO_WRITE_TO_BINLOG TABLES;
|
||||
FLUSH NO_WRITE_TO_BINLOG TABLES t1, t2, t3;
|
||||
FLUSH NO_WRITE_TO_BINLOG TABLES WITH READ LOCK;
|
||||
FLUSH LOCAL TABLES t1, t2, t3 WITH READ LOCK;
|
||||
FLUSH LOCAL TABLES t1, t2, t3 FOR EXPORT;
|
||||
|
||||
FLUSH BINARY LOGS;
|
||||
FLUSH ENGINE LOGS;
|
||||
FLUSH ERROR LOGS;
|
||||
FLUSH GENERAL LOGS;
|
||||
FLUSH RELAY LOGS;
|
||||
FLUSH SLOW LOGS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/kill.html */
|
||||
|
||||
/* KILL [CONNECTION | QUERY] processlist_id */
|
||||
|
||||
KILL CONNECTION processlist_id;
|
||||
KILL QUERY processlist_id;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/load-index.html */
|
||||
|
||||
/* LOAD INDEX INTO CACHE
|
||||
tbl_index_list [, tbl_index_list] ...
|
||||
|
||||
tbl_index_list:
|
||||
tbl_name
|
||||
[PARTITION (partition_list)]
|
||||
[{INDEX|KEY} (index_name[, index_name] ...)]
|
||||
[IGNORE LEAVES]
|
||||
|
||||
partition_list: {
|
||||
partition_name[, partition_name] ...
|
||||
| ALL
|
||||
} */
|
||||
|
||||
LOAD INDEX INTO CACHE t1 PARTITION (p0) INDEX (index_name, index_name1), t2 IGNORE LEAVES;
|
||||
LOAD INDEX INTO CACHE t1 INDEX (index_name, index_name1), t2 IGNORE LEAVES;
|
||||
LOAD INDEX INTO CACHE t1 IGNORE LEAVES;
|
||||
LOAD INDEX INTO CACHE pt PARTITION (p0);
|
||||
LOAD INDEX INTO CACHE pt PARTITION (p1, p3);
|
||||
LOAD INDEX INTO CACHE pt PARTITION (ALL);
|
||||
LOAD INDEX INTO CACHE pt;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/reset.html */
|
||||
|
||||
/* RESET reset_option [, reset_option] ...
|
||||
|
||||
reset_option: {
|
||||
MASTER
|
||||
| REPLICA
|
||||
| QUERY CACHE
|
||||
| SLAVE
|
||||
} */
|
||||
|
||||
RESET MASTER, REPLICA, QUERY CACHE, SLAVE;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/reset-persist.html */
|
||||
|
||||
/* RESET PERSIST [[IF EXISTS] system_var_name] */
|
||||
|
||||
RESET PERSIST IF EXISTS system_var_name;
|
||||
RESET PERSIST system_var_name;
|
||||
RESET PERSIST;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/restart.html */
|
||||
|
||||
RESTART;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/shutdown.html */
|
||||
|
||||
SHUTDOWN;
|
50
test/parser/mysql/syntax/fixtures/parenthesizedQuery.sql
Normal file
50
test/parser/mysql/syntax/fixtures/parenthesizedQuery.sql
Normal file
@ -0,0 +1,50 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/parenthesized-query-expressions.html
|
||||
|
||||
/* parenthesized_query_expression:
|
||||
( query_expression [order_by_clause] [limit_clause] )
|
||||
[order_by_clause]
|
||||
[limit_clause]
|
||||
[into_clause]
|
||||
|
||||
query_expression:
|
||||
query_block [set_op query_block [set_op query_block ...]]
|
||||
[order_by_clause]
|
||||
[limit_clause]
|
||||
[into_clause]
|
||||
|
||||
query_block:
|
||||
SELECT ... | TABLE | VALUES
|
||||
|
||||
order_by_clause:
|
||||
ORDER BY as for SELECT
|
||||
|
||||
limit_clause:
|
||||
LIMIT as for SELECT
|
||||
|
||||
into_clause:
|
||||
INTO as for SELECT
|
||||
|
||||
set_op:
|
||||
UNION | INTERSECT | EXCEPT */
|
||||
|
||||
|
||||
(SELECT 1 AS result UNION SELECT 2);
|
||||
(SELECT 1 AS result UNION SELECT 2) LIMIT 1;
|
||||
(SELECT 1 AS result UNION SELECT 2) LIMIT 1 OFFSET 1;
|
||||
(SELECT 1 AS result UNION SELECT 2) ORDER BY result DESC LIMIT 1;
|
||||
(SELECT 1 AS result UNION SELECT 2) ORDER BY result DESC LIMIT 1 OFFSET 1;
|
||||
(SELECT 1 AS result UNION SELECT 3 UNION SELECT 2) ORDER BY result LIMIT 1 OFFSET 1 INTO @var;
|
||||
SELECT @var;
|
||||
|
||||
SELECT a FROM t1 EXCEPT SELECT b FROM t2 INTERSECT SELECT c FROM t3;
|
||||
SELECT a FROM t1 EXCEPT (SELECT b FROM t2 INTERSECT SELECT c FROM t3);
|
||||
|
||||
(SELECT * FROM t1 ORDER BY a) UNION (SELECT * FROM t2 ORDER BY b) ORDER BY z;
|
||||
|
||||
(SELECT 1 LIMIT 1) UNION (VALUES ROW(2) LIMIT 1);
|
||||
(VALUES ROW(1), ROW(2) LIMIT 2) EXCEPT (SELECT 2 LIMIT 1);
|
||||
VALUES ROW(1), ROW(2) INTERSECT VALUES ROW(2), ROW(1) LIMIT 1;
|
||||
|
||||
(SELECT 1 LIMIT 1) UNION (SELECT 2 LIMIT 1) LIMIT 1;
|
||||
(SELECT 1 LIMIT 1) UNION (SELECT 2) LIMIT 1;
|
||||
(SELECT 'a' UNION SELECT 'b' LIMIT 2) LIMIT 3;
|
30
test/parser/mysql/syntax/fixtures/prepared.sql
Normal file
30
test/parser/mysql/syntax/fixtures/prepared.sql
Normal file
@ -0,0 +1,30 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/prepare.html
|
||||
|
||||
/* PREPARE stmt_name FROM preparable_stmt */
|
||||
PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
|
||||
PREPARE stmt2 FROM @s;
|
||||
|
||||
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/execute.html
|
||||
|
||||
/* EXECUTE stmt_name
|
||||
[USING @var_name [, @var_name] ...] */
|
||||
|
||||
|
||||
EXECUTE stmt1 USING @a, @b;
|
||||
EXECUTE stmt3;
|
||||
|
||||
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/deallocate-prepare.html
|
||||
|
||||
/* {DEALLOCATE | DROP} PREPARE stmt_name */
|
||||
|
||||
DEALLOCATE PREPARE stmt1;
|
||||
DROP PREPARE stmt1;
|
15
test/parser/mysql/syntax/fixtures/renameTable.sql
Normal file
15
test/parser/mysql/syntax/fixtures/renameTable.sql
Normal file
@ -0,0 +1,15 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/rename-table.html
|
||||
|
||||
/* RENAME TABLE
|
||||
tbl_name TO new_tbl_name
|
||||
[, tbl_name2 TO new_tbl_name2] ... */
|
||||
|
||||
|
||||
RENAME TABLE tbl_name TO new_tbl_name, tbl_name1 TO new_tbl_name1;
|
||||
RENAME TABLE tbl_name TO new_tbl_name;
|
||||
|
||||
RENAME TABLE old_table TO tmp_table,
|
||||
new_table TO old_table,
|
||||
tmp_table TO new_table;
|
||||
|
||||
RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
|
7
test/parser/mysql/syntax/fixtures/renameUser.sql
Normal file
7
test/parser/mysql/syntax/fixtures/renameUser.sql
Normal file
@ -0,0 +1,7 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/rename-user.html
|
||||
|
||||
/* RENAME USER old_user TO new_user
|
||||
[, old_user TO new_user] ... */
|
||||
|
||||
RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'127.0.0.1', 'jeffrey1'@'localhost' TO 'jeff1'@'127.0.0.1';
|
||||
RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'127.0.0.1';
|
14
test/parser/mysql/syntax/fixtures/repairTable.sql
Normal file
14
test/parser/mysql/syntax/fixtures/repairTable.sql
Normal file
@ -0,0 +1,14 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/repair-table.html
|
||||
|
||||
/* REPAIR [NO_WRITE_TO_BINLOG | LOCAL]
|
||||
TABLE tbl_name [, tbl_name] ...
|
||||
[QUICK] [EXTENDED] [USE_FRM] */
|
||||
|
||||
|
||||
REPAIR NO_WRITE_TO_BINLOG TABLE t1, t2, t3 QUICK EXTENDED USE_FRM;
|
||||
REPAIR LOCAL TABLE t1, t2, t3 QUICK EXTENDED USE_FRM;
|
||||
REPAIR NO_WRITE_TO_BINLOG TABLE t1, t2, t3 QUICK EXTENDED;
|
||||
REPAIR NO_WRITE_TO_BINLOG TABLE t1 QUICK EXTENDED;
|
||||
REPAIR LOCAL TABLE t1, t2, t3 QUICK;
|
||||
REPAIR TABLE t1, t2, t3;
|
||||
REPAIR TABLE t1;
|
66
test/parser/mysql/syntax/fixtures/replace.sql
Normal file
66
test/parser/mysql/syntax/fixtures/replace.sql
Normal file
@ -0,0 +1,66 @@
|
||||
-- https://dev.mysql.com/doc/refman/5.7/en/replace.html
|
||||
|
||||
/* REPLACE [LOW_PRIORITY | DELAYED]
|
||||
[INTO] tbl_name
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
[(col_name [, col_name] ...)]
|
||||
{ {VALUES | VALUE} (value_list) [, (value_list)] ...
|
||||
|
|
||||
VALUES row_constructor_list
|
||||
}
|
||||
|
||||
REPLACE [LOW_PRIORITY | DELAYED]
|
||||
[INTO] tbl_name
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
SET assignment_list
|
||||
|
||||
REPLACE [LOW_PRIORITY | DELAYED]
|
||||
[INTO] tbl_name
|
||||
[PARTITION (partition_name [, partition_name] ...)]
|
||||
[(col_name [, col_name] ...)]
|
||||
{SELECT ... | TABLE table_name}
|
||||
|
||||
value:
|
||||
{expr | DEFAULT}
|
||||
|
||||
value_list:
|
||||
value [, value] ...
|
||||
|
||||
row_constructor_list:
|
||||
ROW(value_list)[, ROW(value_list)][, ...]
|
||||
|
||||
assignment:
|
||||
col_name = value
|
||||
|
||||
assignment_list:
|
||||
assignment [, assignment] ... */
|
||||
|
||||
|
||||
REPLACE LOW_PRIORITY INTO test PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES (1, 'Old', '2014-08-20 18:47:00'), (2, 'Old', '2014-08-20 18:48:00');
|
||||
REPLACE LOW_PRIORITY test PARTITION (partition_name, partition_name1) (col_name) VALUE ('Old');
|
||||
REPLACE LOW_PRIORITY INTO test PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES ROW(1,2,3), ROW(4,5,6), ROW(7,8,9);
|
||||
REPLACE DELAYED test PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES (1, 'Old', '2014-08-20 18:47:00'), (2, 'Old', '2014-08-20 18:48:00');
|
||||
REPLACE DELAYED INTO test PARTITION (partition_name, partition_name1) (col_name) VALUE ('Old');
|
||||
REPLACE DELAYED test PARTITION (partition_name, partition_name1) (col_name, col_name1) VALUES ROW(1,2,3), ROW(4,5,6), ROW(7,8,9);
|
||||
REPLACE LOW_PRIORITY INTO test VALUES (1, 'Old', '2014-08-20 18:47:00'), (2, 'Old', '2014-08-20 18:48:00');
|
||||
REPLACE LOW_PRIORITY test VALUE ('Old');
|
||||
REPLACE LOW_PRIORITY INTO test VALUES ROW(1,2,3), ROW(4,5,6), ROW(7,8,9);
|
||||
REPLACE DELAYED test VALUES (1, 'Old', '2014-08-20 18:47:00'), (2, 'Old', '2014-08-20 18:48:00');
|
||||
REPLACE DELAYED INTO test VALUE ('Old');
|
||||
REPLACE DELAYED test VALUES ROW(1,2,3), ROW(4,5,6), ROW(7,8,9);
|
||||
|
||||
REPLACE LOW_PRIORITY INTO test PARTITION (partition_name, partition_name1) SET col_name = 'abc', col_name1 = tbl_name.col_name1;
|
||||
REPLACE INTO test PARTITION (partition_name, partition_name1) SET col_name = 'abc', col_name1 = tbl_name.col_name1;
|
||||
REPLACE LOW_PRIORITY test PARTITION (partition_name, partition_name1) SET col_name = tbl_name.col_name;
|
||||
REPLACE DELAYED INTO test PARTITION (partition_name, partition_name1) SET col_name = 'abc', col_name1 = tbl_name.col_name1;
|
||||
REPLACE DELAYED test PARTITION (partition_name, partition_name1) SET col_name = tbl_name.col_name;
|
||||
|
||||
REPLACE LOW_PRIORITY INTO test PARTITION (partition_name, partition_name1) (col_name, col_name1) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
|
||||
REPLACE LOW_PRIORITY INTO test PARTITION (partition_name, partition_name1) (col_name, col_name1) SELECT c, c+d AS e FROM t2;
|
||||
REPLACE LOW_PRIORITY INTO test PARTITION (partition_name, partition_name1) (col_name, col_name1) TABLE table_name;
|
||||
REPLACE DELAYED test SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
|
||||
REPLACE DELAYED test SELECT c, c+d AS e FROM t2;
|
||||
REPLACE DELAYED test TABLE table_name;
|
||||
REPLACE test TABLE table_name;
|
||||
|
||||
REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');
|
16
test/parser/mysql/syntax/fixtures/replication.sql
Normal file
16
test/parser/mysql/syntax/fixtures/replication.sql
Normal file
@ -0,0 +1,16 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/purge-binary-logs.html
|
||||
|
||||
/* PURGE { BINARY | MASTER } LOGS {
|
||||
TO 'log_name'
|
||||
| BEFORE datetime_expr
|
||||
} */
|
||||
|
||||
PURGE BINARY LOGS TO 'mysql-bin.010';
|
||||
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26';
|
||||
PURGE MASTER LOGS TO 'mysql-bin.010';
|
||||
PURGE MASTER LOGS BEFORE '2019-04-02 22:46:26';
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/5.7/en/reset-master.html */
|
||||
|
||||
RESET MASTER;
|
28
test/parser/mysql/syntax/fixtures/resetSlaveOrReplica.sql
Normal file
28
test/parser/mysql/syntax/fixtures/resetSlaveOrReplica.sql
Normal file
@ -0,0 +1,28 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/reset-replica.html
|
||||
|
||||
/* RESET REPLICA [ALL] [channel_option]
|
||||
|
||||
channel_option:
|
||||
FOR CHANNEL channel */
|
||||
|
||||
|
||||
RESET REPLICA ALL FOR CHANNEL 'channel';
|
||||
RESET REPLICA FOR CHANNEL 'channel';
|
||||
RESET REPLICA;
|
||||
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/reset-slave.html
|
||||
|
||||
/* RESET {SLAVE | REPLICA} [ALL] [channel_option]
|
||||
|
||||
channel_option:
|
||||
FOR CHANNEL channel */
|
||||
|
||||
|
||||
RESET SLAVE ALL FOR CHANNEL 'channel';
|
||||
RESET REPLICA ALL FOR CHANNEL 'channel';
|
||||
RESET SLAVE FOR CHANNEL 'channel';
|
||||
RESET REPLICA FOR CHANNEL 'channel';
|
||||
RESET SLAVE;
|
||||
RESET REPLICA;
|
63
test/parser/mysql/syntax/fixtures/revoke.sql
Normal file
63
test/parser/mysql/syntax/fixtures/revoke.sql
Normal file
@ -0,0 +1,63 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/revoke.html
|
||||
|
||||
/* REVOKE [IF EXISTS]
|
||||
priv_type [(column_list)]
|
||||
[, priv_type [(column_list)]] ...
|
||||
ON [object_type] priv_level
|
||||
FROM user_or_role [, user_or_role] ...
|
||||
[IGNORE UNKNOWN USER]
|
||||
|
||||
REVOKE [IF EXISTS] ALL [PRIVILEGES], GRANT OPTION
|
||||
FROM user_or_role [, user_or_role] ...
|
||||
[IGNORE UNKNOWN USER]
|
||||
|
||||
REVOKE [IF EXISTS] PROXY ON user_or_role
|
||||
FROM user_or_role [, user_or_role] ...
|
||||
[IGNORE UNKNOWN USER]
|
||||
|
||||
REVOKE [IF EXISTS] role [, role ] ...
|
||||
FROM user_or_role [, user_or_role ] ...
|
||||
[IGNORE UNKNOWN USER]
|
||||
|
||||
user_or_role: {
|
||||
user (see Section 6.2.4, “Specifying Account Names”)
|
||||
| role (see Section 6.2.5, “Specifying Role Names”
|
||||
} */
|
||||
|
||||
|
||||
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
|
||||
REVOKE 'role1', 'role2' FROM 'user1'@'localhost', 'user2'@'localhost';
|
||||
REVOKE SELECT ON world.* FROM 'role3';
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user_or_role';
|
||||
REVOKE SELECT ON test.t1 FROM jerry@localhost;
|
||||
REVOKE IF EXISTS SELECT ON test.t1 FROM jerry@localhost;
|
||||
REVOKE SELECT ON test FROM jerry@localhost;
|
||||
REVOKE IF EXISTS SELECT ON test FROM jerry@localhost;
|
||||
REVOKE SELECT ON test FROM jerry@localhost IGNORE UNKNOWN USER;
|
||||
REVOKE IF EXISTS SELECT ON test FROM jerry@localhost IGNORE UNKNOWN USER;
|
||||
|
||||
|
||||
REVOKE IF EXISTS SELECT (col1), SELECT (col1) ON TABLE *.* FROM u2, 'developer' IGNORE UNKNOWN USER;
|
||||
REVOKE SELECT (col1), SELECT (col1) ON TABLE *.* FROM u2, 'developer' IGNORE UNKNOWN USER;
|
||||
REVOKE SELECT (col1), SELECT (col1) ON TABLE *.* FROM u2, 'developer';
|
||||
REVOKE SELECT (col1), SELECT (col1) ON TABLE *.* FROM u2 IGNORE UNKNOWN USER;
|
||||
REVOKE SELECT (col1), SELECT (col1) ON *.* FROM u2 IGNORE UNKNOWN USER;
|
||||
|
||||
REVOKE IF EXISTS ALL PRIVILEGES, GRANT OPTION FROM user_or_role, 'developer' IGNORE UNKNOWN USER;
|
||||
REVOKE IF EXISTS ALL PRIVILEGES, GRANT OPTION FROM user_or_role, 'developer';
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user_or_role, 'developer';
|
||||
REVOKE ALL, GRANT OPTION FROM user_or_role, 'developer';
|
||||
REVOKE ALL, GRANT OPTION FROM user_or_role IGNORE UNKNOWN USER;
|
||||
REVOKE ALL, GRANT OPTION FROM user_or_role;
|
||||
|
||||
REVOKE IF EXISTS PROXY ON user_or_role FROM user_or_role, 'developer' IGNORE UNKNOWN USER;
|
||||
REVOKE PROXY ON user_or_role FROM user_or_role, 'developer' IGNORE UNKNOWN USER;
|
||||
REVOKE PROXY ON user_or_role FROM user_or_role, 'developer';
|
||||
REVOKE PROXY ON user_or_role FROM user_or_role IGNORE UNKNOWN USER;
|
||||
REVOKE PROXY ON user_or_role FROM user_or_role;
|
||||
|
||||
REVOKE IF EXISTS 'role', 'role1' FROM user_or_role, 'developer' IGNORE UNKNOWN USER;
|
||||
REVOKE IF EXISTS 'role', 'role1' FROM user_or_role, 'developer';
|
||||
REVOKE 'role' FROM user_or_role, 'developer';
|
||||
REVOKE 'role', 'role1' FROM user_or_role;
|
||||
REVOKE 'role' FROM user_or_role;
|
15
test/parser/mysql/syntax/fixtures/savePoint.sql
Normal file
15
test/parser/mysql/syntax/fixtures/savePoint.sql
Normal file
@ -0,0 +1,15 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/savepoint.html
|
||||
|
||||
/* SAVEPOINT identifier
|
||||
ROLLBACK [WORK] TO [SAVEPOINT] identifier
|
||||
RELEASE SAVEPOINT identifier */
|
||||
|
||||
|
||||
SAVEPOINT identifier;
|
||||
|
||||
ROLLBACK WORK TO SAVEPOINT identifier;
|
||||
ROLLBACK TO SAVEPOINT identifier;
|
||||
ROLLBACK WORK TO identifier;
|
||||
ROLLBACK TO identifier;
|
||||
|
||||
RELEASE SAVEPOINT identifier;
|
72
test/parser/mysql/syntax/fixtures/select.sql
Normal file
72
test/parser/mysql/syntax/fixtures/select.sql
Normal file
@ -0,0 +1,72 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/select.html
|
||||
|
||||
/* SELECT
|
||||
[ALL | DISTINCT | DISTINCTROW ]
|
||||
[HIGH_PRIORITY]
|
||||
[STRAIGHT_JOIN]
|
||||
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
|
||||
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
|
||||
select_expr [, select_expr] ...
|
||||
[into_option]
|
||||
[FROM table_references
|
||||
[PARTITION partition_list]]
|
||||
[WHERE where_condition]
|
||||
[GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]
|
||||
[HAVING where_condition]
|
||||
[WINDOW window_name AS (window_spec)
|
||||
[, window_name AS (window_spec)] ...]
|
||||
[ORDER BY {col_name | expr | position}
|
||||
[ASC | DESC], ... [WITH ROLLUP]]
|
||||
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
|
||||
[into_option]
|
||||
[FOR {UPDATE | SHARE}
|
||||
[OF tbl_name [, tbl_name] ...]
|
||||
[NOWAIT | SKIP LOCKED]
|
||||
| LOCK IN SHARE MODE]
|
||||
[into_option]
|
||||
|
||||
into_option: {
|
||||
INTO OUTFILE 'file_name'
|
||||
[CHARACTER SET charset_name]
|
||||
export_options
|
||||
| INTO DUMPFILE 'file_name'
|
||||
| INTO var_name [, var_name] ...
|
||||
} */
|
||||
|
||||
|
||||
SELECT 1 + 1 FROM DUAL;
|
||||
SELECT AVG(score), t1.* FROM t1;
|
||||
SELECT CONCAT(last_name,', ',first_name) AS full_name FROM my_table ORDER BY full_name;
|
||||
SELECT CONCAT(last_name,', ',first_name) full_name FROM my_table ORDER BY full_name;
|
||||
SELECT column1 column2 FROM my_table;
|
||||
SELECT t1.name, t2.salary FROM employee AS t1, info AS t2 WHERE t1.name = t2.name;
|
||||
SELECT t1.name, t2.salary FROM employee t1, info t2 WHERE t1.name = t2.name;
|
||||
SELECT college, region, seed FROM tournament ORDER BY region, seed;
|
||||
SELECT college, region AS r, seed AS s FROM tournament ORDER BY r, s;
|
||||
SELECT college, region, seed FROM tournament ORDER BY 2, 3;
|
||||
SELECT a, b, COUNT(c) AS t FROM test_table GROUP BY a,b ORDER BY a,t DESC;
|
||||
SELECT COUNT(col1) AS col2 FROM t GROUP BY col2 HAVING col2 = 2;
|
||||
SELECT col_name FROM tbl_name HAVING col_name > 0;
|
||||
SELECT col_name FROM tbl_name WHERE col_name > 0;
|
||||
SELECT user, MAX(salary) FROM users GROUP BY user HAVING MAX(salary) > 10;
|
||||
SELECT 12 AS a, a FROM t GROUP BY a;
|
||||
SELECT * FROM tbl LIMIT 5,10;
|
||||
SELECT * FROM tbl LIMIT 95,18446744073709551615;
|
||||
SELECT * FROM tbl LIMIT 5;
|
||||
SELECT * FROM tbl WINDOW window_name AS (window_spec) LIMIT 5;
|
||||
|
||||
SELECT * FROM t1, t2 FOR SHARE OF t1;
|
||||
SELECT * FROM t1, t2 INTO OUTFILE '/path/to/file_name';
|
||||
SELECT ALL HIGH_PRIORITY STRAIGHT_JOIN SQL_SMALL_RESULT SQL_CACHE * FROM tbl PARTITION (partition_name, partition_name1) LOCK IN SHARE MODE;
|
||||
SELECT DISTINCTROW HIGH_PRIORITY STRAIGHT_JOIN SQL_BIG_RESULT SQL_NO_CACHE * FROM tbl PARTITION (partition_name, partition_name1) FOR UPDATE OF tbl_name SKIP LOCKED;
|
||||
SELECT DISTINCT HIGH_PRIORITY STRAIGHT_JOIN SQL_BUFFER_RESULT SQL_CALC_FOUND_ROWS * FROM tbl PARTITION (partition_name, partition_name1) FOR UPDATE OF tbl_name SKIP LOCKED;
|
||||
|
||||
SELECT * INTO @my_var FROM t1;
|
||||
SELECT * FROM t1 INTO @my_var FOR UPDATE;
|
||||
SELECT 1 FOR UPDATE INTO @my_var;
|
||||
SELECT * FROM t1 FOR UPDATE INTO @my_var;
|
||||
SELECT id, data INTO @x, @y FROM test.t1 LIMIT 1;
|
||||
|
||||
SELECT * FROM t1 AS t INTO @x,@y,@z;
|
||||
SELECT * FROM t1 AS t INTO OUTFILE '/tmp/select-values.txt';
|
||||
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table;
|
104
test/parser/mysql/syntax/fixtures/selectJoin.sql
Normal file
104
test/parser/mysql/syntax/fixtures/selectJoin.sql
Normal file
@ -0,0 +1,104 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/join.html
|
||||
|
||||
/* table_references:
|
||||
escaped_table_reference [, escaped_table_reference] ...
|
||||
|
||||
escaped_table_reference: {
|
||||
table_reference
|
||||
| { OJ table_reference }
|
||||
}
|
||||
|
||||
table_reference: {
|
||||
table_factor
|
||||
| joined_table
|
||||
}
|
||||
|
||||
table_factor: {
|
||||
tbl_name [PARTITION (partition_names)]
|
||||
[[AS] alias] [index_hint_list]
|
||||
| [LATERAL] table_subquery [AS] alias [(col_list)]
|
||||
| ( table_references )
|
||||
}
|
||||
|
||||
joined_table: {
|
||||
table_reference {[INNER | CROSS] JOIN | STRAIGHT_JOIN} table_factor [join_specification]
|
||||
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_specification
|
||||
| table_reference NATURAL [INNER | {LEFT|RIGHT} [OUTER]] JOIN table_factor
|
||||
}
|
||||
|
||||
join_specification: {
|
||||
ON search_condition
|
||||
| USING (join_column_list)
|
||||
}
|
||||
|
||||
join_column_list:
|
||||
column_name [, column_name] ...
|
||||
|
||||
index_hint_list:
|
||||
index_hint [, index_hint] ...
|
||||
|
||||
index_hint: {
|
||||
USE {INDEX|KEY}
|
||||
[FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])
|
||||
| {IGNORE|FORCE} {INDEX|KEY}
|
||||
[FOR {JOIN|ORDER BY|GROUP BY}] (index_list)
|
||||
}
|
||||
|
||||
index_list:
|
||||
index_name [, index_name] ... */
|
||||
|
||||
|
||||
SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c);
|
||||
SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c);
|
||||
|
||||
SELECT t1.name, t2.salary FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name;
|
||||
SELECT t1.name, t2.salary FROM employee t1 INNER JOIN info t2 ON t1.name = t2.name;
|
||||
|
||||
SELECT left_tbl.* FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id WHERE right_tbl.id IS NULL;
|
||||
SELECT left_tbl.* FROM { OJ left_tbl LEFT OUTER JOIN right_tbl ON left_tbl.id = right_tbl.id } WHERE right_tbl.id IS NULL;
|
||||
|
||||
SELECT * FROM table1, table2;
|
||||
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;
|
||||
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;
|
||||
SELECT * FROM table1 LEFT JOIN table2 USING (id);
|
||||
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id LEFT JOIN table3 ON table2.id = table3.id;
|
||||
|
||||
SELECT * FROM t1 NATURAL JOIN t2;
|
||||
SELECT * FROM t1 JOIN t2 USING (j);
|
||||
SELECT * FROM t1 NATURAL LEFT JOIN t2;
|
||||
SELECT * FROM t1 NATURAL RIGHT JOIN t2;
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON (t1.a = t2.a);
|
||||
SELECT * FROM t1 RIGHT JOIN t2 ON (t1.a = t2.a);
|
||||
SELECT * FROM t1 JOIN t2 ON (i1 = i3) JOIN t3;
|
||||
SELECT * FROM t1 JOIN t2 JOIN t3 ON (i1 = i3);
|
||||
SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);
|
||||
SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);
|
||||
SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);
|
||||
|
||||
SELECT * FROM t1 PARTITION (partition_names) AS t USE INDEX FOR JOIN ();
|
||||
SELECT * FROM t1 PARTITION (partition_names) AS t USE INDEX FOR JOIN ();
|
||||
SELECT * FROM t1 PARTITION (partition_names) AS t IGNORE INDEX FOR JOIN (index_name);
|
||||
SELECT * FROM t1 PARTITION (partition_names) AS t IGNORE INDEX FOR GROUP BY (index_name);
|
||||
|
||||
SELECT * FROM LATERAL (SELECT 1, 2, 3) AS t (col_list);
|
||||
SELECT * FROM LATERAL (SELECT 1, 2, 3) AS t;
|
||||
SELECT * FROM (SELECT 1, 2, 3) AS t;
|
||||
SELECT * FROM LATERAL (SELECT 1, 2, 3) t;
|
||||
SELECT * FROM (SELECT 1, 2, 3) t;
|
||||
|
||||
SELECT * FROM t1 PARTITION (partition_names) AS t IGNORE INDEX FOR GROUP BY (index_name) INNER JOIN t1 ON search_condition;
|
||||
SELECT * FROM t1 INNER JOIN t1 ON search_condition;
|
||||
SELECT * FROM t1 CROSS JOIN t1 USING (join_column_list);
|
||||
SELECT * FROM t1 JOIN t1 USING (join_column_list);
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t1 ON search_condition;
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t1;
|
||||
SELECT * FROM t1 STRAIGHT_JOIN t1 USING (join_column_list);
|
||||
|
||||
SELECT * FROM t1 LEFT OUTER JOIN t2 PARTITION (partition_names) AS t IGNORE INDEX FOR GROUP BY (index_name) ON search_condition;
|
||||
SELECT * FROM t1 LEFT OUTER JOIN t2 PARTITION (partition_names) AS t IGNORE INDEX FOR GROUP BY (index_name);
|
||||
SELECT * FROM t1 RIGHT JOIN t2 PARTITION (partition_names) AS t IGNORE INDEX FOR GROUP BY (index_name) USING (join_column_list);
|
||||
|
||||
SELECT * FROM t1 NATURAL INNER OUTER JOIN t2 PARTITION (partition_names) AS t IGNORE INDEX FOR GROUP BY (index_name);
|
||||
SELECT * FROM t1 NATURAL LEFT OUTER JOIN t2 PARTITION (partition_names) AS t;
|
||||
SELECT * FROM t1 NATURAL RIGHT JOIN t2 PARTITION (partition_names) AS t;
|
||||
SELECT * FROM t1 NATURAL JOIN t2;
|
45
test/parser/mysql/syntax/fixtures/set.sql
Normal file
45
test/parser/mysql/syntax/fixtures/set.sql
Normal file
@ -0,0 +1,45 @@
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/set-variable.html */
|
||||
|
||||
/* SET variable = expr [, variable = expr] ...
|
||||
|
||||
variable: {
|
||||
user_var_name
|
||||
| param_name
|
||||
| local_var_name
|
||||
| {GLOBAL | @@GLOBAL.} system_var_name
|
||||
| {PERSIST | @@PERSIST.} system_var_name
|
||||
| {PERSIST_ONLY | @@PERSIST_ONLY.} system_var_name
|
||||
| [SESSION | @@SESSION. | @@] system_var_name
|
||||
} */
|
||||
|
||||
|
||||
|
||||
SET @var_name = expr;
|
||||
SET @name = 43;
|
||||
SET @total_tax = (SELECT SUM(tax) FROM taxable_transactions);
|
||||
SET GLOBAL max_connections = 1000;
|
||||
SET @@GLOBAL.max_connections = 1000;
|
||||
SET SESSION sql_mode = 'TRADITIONAL';
|
||||
SET LOCAL sql_mode = 'TRADITIONAL';
|
||||
SET @@SESSION.sql_mode = 'TRADITIONAL';
|
||||
SET @@LOCAL.sql_mode = 'TRADITIONAL';
|
||||
SET @@sql_mode = 'TRADITIONAL';
|
||||
SET sql_mode = 'TRADITIONAL';
|
||||
SET PERSIST max_connections = 1000;
|
||||
SET @@PERSIST.max_connections = 1000;
|
||||
SET PERSIST_ONLY back_log = 100;
|
||||
SET @@PERSIST_ONLY.back_log = 100;
|
||||
SET @@SESSION.max_join_size = DEFAULT;
|
||||
SET @@SESSION.max_join_size = @@GLOBAL.max_join_size;
|
||||
SET GLOBAL version = 'abc';
|
||||
SET GLOBAL sql_log_bin = ON;
|
||||
SET SESSION max_connections = 1000;
|
||||
SET max_connections = 1000;
|
||||
SET PERSIST port = 3307;
|
||||
SET PERSIST_ONLY port = 3307;
|
||||
SET @x = 1, SESSION sql_mode = '';
|
||||
SET GLOBAL sort_buffer_size = 1000000, SESSION sort_buffer_size = 1000000;
|
||||
SET @@GLOBAL.sort_buffer_size = 1000000, @@LOCAL.sort_buffer_size = 1000000;
|
||||
SET GLOBAL max_connections = 1000, sort_buffer_size = 1000000;
|
||||
SET @@GLOBAL.sort_buffer_size = 50000, sort_buffer_size = 1000000;
|
||||
SELECT @@GLOBAL.sql_mode, @@SESSION.sql_mode, @@sql_mode;
|
11
test/parser/mysql/syntax/fixtures/setCharacterSet.sql
Normal file
11
test/parser/mysql/syntax/fixtures/setCharacterSet.sql
Normal file
@ -0,0 +1,11 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/set-character-set.html
|
||||
|
||||
/* SET {CHARACTER SET | CHARSET}
|
||||
{'charset_name' | DEFAULT} */
|
||||
|
||||
|
||||
SET CHARACTER SET utf8mb4;
|
||||
SET CHARACTER SET DEFAULT;
|
||||
|
||||
SET CHARSET utf8mb4;
|
||||
SET CHARSET DEFAULT;
|
10
test/parser/mysql/syntax/fixtures/setDefaultRole.sql
Normal file
10
test/parser/mysql/syntax/fixtures/setDefaultRole.sql
Normal file
@ -0,0 +1,10 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/set-default-role.html
|
||||
|
||||
/* SET DEFAULT ROLE
|
||||
{NONE | ALL | role [, role ] ...}
|
||||
TO user [, user ] ... */
|
||||
|
||||
|
||||
SET DEFAULT ROLE NONE TO 'user', 'user1';
|
||||
SET DEFAULT ROLE ALL TO 'user';
|
||||
SET DEFAULT ROLE 'role', 'developer' TO 'user', 'user1'
|
9
test/parser/mysql/syntax/fixtures/setNames.sql
Normal file
9
test/parser/mysql/syntax/fixtures/setNames.sql
Normal file
@ -0,0 +1,9 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/set-names.html
|
||||
|
||||
/* SET NAMES {'charset_name'
|
||||
[COLLATE 'collation_name'] | DEFAULT} */
|
||||
|
||||
|
||||
SET NAMES utf8mb4 COLLATE 'collation_name';
|
||||
SET NAMES 'utf8mb4' COLLATE 'collation_name';
|
||||
SET NAMES DEFAULT;
|
35
test/parser/mysql/syntax/fixtures/setOperations.sql
Normal file
35
test/parser/mysql/syntax/fixtures/setOperations.sql
Normal file
@ -0,0 +1,35 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/set-operations.html
|
||||
|
||||
/* query_expression:
|
||||
[with_clause]
|
||||
query_expression_body
|
||||
[order_by_clause] [limit_clause] [into_clause]
|
||||
|
||||
query_expression_body:
|
||||
query_term
|
||||
| query_expression_body UNION [ALL | DISTINCT] query_term
|
||||
| query_expression_body EXCEPT [ALL | DISTINCT] query_term
|
||||
|
||||
query_term:
|
||||
query_primary
|
||||
| query_term INTERSECT [ALL | DISTINCT] query_primary
|
||||
|
||||
query_primary:
|
||||
query_block
|
||||
| '(' query_expression_body [order_by_clause] [limit_clause] [into_clause] ')'*/
|
||||
|
||||
|
||||
(SELECT a FROM t1 WHERE a=10 AND b=1) EXCEPT (SELECT a FROM t2 WHERE a=11 AND b=2 ORDER BY a LIMIT 10);
|
||||
(SELECT * FROM t1 ORDER BY a LIMIT 10) UNION (SELECT * FROM t2 ORDER BY a LIMIT 10);
|
||||
|
||||
(SELECT a FROM t1 WHERE a=10 AND b=1 ORDER BY a LIMIT 10) UNION (SELECT a FROM t2 WHERE a=11 AND b=2 ORDER BY a LIMIT 10);
|
||||
(SELECT * FROM t1 ORDER BY x LIMIT 10) INTERSECT (SELECT * FROM t2 ORDER BY a LIMIT 10);
|
||||
|
||||
SELECT * FROM t1 UNION SELECT * FROM t2;
|
||||
|
||||
VALUES ROW(4,-2), ROW(5,9) UNION SELECT * FROM t2;
|
||||
VALUES ROW(4,-2), ROW(5,9) UNION SELECT * FROM t2;
|
||||
SELECT * FROM t1 UNION VALUES ROW(4,-2),ROW(5,9);
|
||||
SELECT * FROM t1 UNION VALUES ROW(4,-2),ROW(5,9);
|
||||
VALUES ROW(4,-2), ROW(5,9) UNION VALUES ROW(4,-2),ROW(5,9);
|
||||
VALUES ROW(4,-2), ROW(5,9), ROW(-1,3) UNION VALUES ROW(1,2), ROW(3,4), ROW(-1,3) ORDER BY column_0 DESC LIMIT 3;
|
39
test/parser/mysql/syntax/fixtures/setPassword.sql
Normal file
39
test/parser/mysql/syntax/fixtures/setPassword.sql
Normal file
@ -0,0 +1,39 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/set-password.html
|
||||
|
||||
/* SET PASSWORD [FOR user] auth_option
|
||||
[REPLACE 'current_auth_string']
|
||||
[RETAIN CURRENT PASSWORD]
|
||||
|
||||
auth_option: {
|
||||
= 'auth_string'
|
||||
| TO RANDOM
|
||||
} */
|
||||
|
||||
|
||||
SET PASSWORD FOR user = 'auth_string' REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
SET PASSWORD FOR user = 'auth_string' REPLACE 'current_auth_string';
|
||||
SET PASSWORD FOR user TO RANDOM RETAIN CURRENT PASSWORD;
|
||||
SET PASSWORD FOR user TO RANDOM;
|
||||
|
||||
SET PASSWORD TO RANDOM REPLACE 'current_auth_string' RETAIN CURRENT PASSWORD;
|
||||
SET PASSWORD TO RANDOM REPLACE 'current_auth_string';
|
||||
SET PASSWORD TO RANDOM RETAIN CURRENT PASSWORD;
|
||||
|
||||
SET PASSWORD = 'auth_string';
|
||||
SET PASSWORD TO RANDOM;
|
||||
|
||||
SET PASSWORD FOR 'jeffrey'@'localhost' = 'auth_string';
|
||||
SET PASSWORD FOR 'bob'@'%.example.org' = 'auth_string';
|
||||
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/5.7/en/set-password.html */
|
||||
|
||||
/* SET PASSWORD [FOR user] = password_option */
|
||||
|
||||
|
||||
SET PASSWORD FOR user = 'auth_string';
|
||||
SET PASSWORD FOR user = PASSWORD('auth_string');
|
||||
SET PASSWORD = 'auth_string';
|
||||
SET PASSWORD = PASSWORD('auth_string');
|
9
test/parser/mysql/syntax/fixtures/setResourceGroup.sql
Normal file
9
test/parser/mysql/syntax/fixtures/setResourceGroup.sql
Normal file
@ -0,0 +1,9 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/set-resource-group.html
|
||||
|
||||
/* SET RESOURCE GROUP group_name
|
||||
[FOR thread_id [, thread_id] ...] */
|
||||
|
||||
|
||||
SET RESOURCE GROUP rg1;
|
||||
SET RESOURCE GROUP rg2 FOR 14, 78, 4;
|
||||
SET RESOURCE GROUP rg2 FOR 14;
|
16
test/parser/mysql/syntax/fixtures/setRole.sql
Normal file
16
test/parser/mysql/syntax/fixtures/setRole.sql
Normal file
@ -0,0 +1,16 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/set-role.html
|
||||
|
||||
/* SET ROLE {
|
||||
DEFAULT
|
||||
| NONE
|
||||
| ALL
|
||||
| ALL EXCEPT role [, role ] ...
|
||||
| role [, role ] ...
|
||||
} */
|
||||
|
||||
|
||||
SET ROLE DEFAULT;
|
||||
SET ROLE NONE;
|
||||
SET ROLE ALL;
|
||||
SET ROLE ALL EXCEPT 'role', 'role1';
|
||||
SET ROLE 'role', 'role1';
|
34
test/parser/mysql/syntax/fixtures/setTransaction.sql
Normal file
34
test/parser/mysql/syntax/fixtures/setTransaction.sql
Normal file
@ -0,0 +1,34 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/set-transaction.html
|
||||
|
||||
/* SET [GLOBAL | SESSION] TRANSACTION
|
||||
transaction_characteristic [, transaction_characteristic] ...
|
||||
|
||||
transaction_characteristic: {
|
||||
ISOLATION LEVEL level
|
||||
| access_mode
|
||||
}
|
||||
|
||||
level: {
|
||||
REPEATABLE READ
|
||||
| READ COMMITTED
|
||||
| READ UNCOMMITTED
|
||||
| SERIALIZABLE
|
||||
}
|
||||
|
||||
access_mode: {
|
||||
READ WRITE
|
||||
| READ ONLY
|
||||
} */
|
||||
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ, ISOLATION LEVEL REPEATABLE READ;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
SET GLOBAL TRANSACTION READ WRITE;
|
||||
SET SESSION TRANSACTION READ ONLY;
|
||||
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
474
test/parser/mysql/syntax/fixtures/show.sql
Normal file
474
test/parser/mysql/syntax/fixtures/show.sql
Normal file
@ -0,0 +1,474 @@
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-binary-logs.html */
|
||||
|
||||
SHOW BINARY LOGS;
|
||||
SHOW MASTER LOGS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-binlog-events.html */
|
||||
|
||||
/* SHOW BINLOG EVENTS
|
||||
[IN 'log_name']
|
||||
[FROM pos]
|
||||
[LIMIT [offset,] row_count] */
|
||||
|
||||
SHOW BINLOG EVENTS IN 'log_name' FROM 50 LIMIT 100, 500;
|
||||
SHOW BINLOG EVENTS FROM 50 LIMIT 100, 500;
|
||||
SHOW BINLOG EVENTS IN 'log_name' LIMIT 100, 500;
|
||||
SHOW BINLOG EVENTS IN 'log_name' LIMIT 500;
|
||||
SHOW BINLOG EVENTS FROM 50 LIMIT 100, 500;
|
||||
SHOW BINLOG EVENTS LIMIT 100, 500;
|
||||
SHOW BINLOG EVENTS LIMIT 500;
|
||||
SHOW BINLOG EVENTS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-character-set.html */
|
||||
|
||||
/* SHOW {CHARACTER SET | CHARSET}
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW CHARACTER SET WHERE age = 18;
|
||||
SHOW CHARSET LIKE 'pattern';
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-collation.html */
|
||||
|
||||
/* SHOW COLLATION
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
|
||||
SHOW COLLATION LIKE 'pattern';
|
||||
SHOW COLLATION WHERE age = 18;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-columns.html */
|
||||
|
||||
/* SHOW [EXTENDED] [FULL] {COLUMNS | FIELDS}
|
||||
{FROM | IN} tbl_name
|
||||
[{FROM | IN} db_name]
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW EXTENDED COLUMNS FROM tbl_name IN db_name LIKE 'pattern';
|
||||
SHOW EXTENDED FULL COLUMNS FROM tbl_name IN db_name LIKE 'pattern';
|
||||
SHOW EXTENDED COLUMNS FROM tbl_name IN db_name LIKE 'pattern';
|
||||
SHOW FULL COLUMNS FROM tbl_name IN db_name LIKE 'pattern';
|
||||
SHOW FULL COLUMNS FROM tbl_name IN db_name LIKE 'pattern';
|
||||
SHOW COLUMNS FROM tbl_name IN db_name LIKE 'pattern';
|
||||
SHOW COLUMNS IN tbl_name FROM db_name LIKE 'pattern';
|
||||
SHOW COLUMNS IN tbl_name FROM db_name WHERE age = 18;
|
||||
SHOW FIELDS IN tbl_name FROM db_name LIKE 'pattern';
|
||||
SHOW FIELDS IN tbl_name FROM db_name WHERE age = 18;
|
||||
|
||||
SHOW COLUMNS FROM my_table FROM my_db;
|
||||
SHOW COLUMNS FROM my_db.my_table;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-create-database.html */
|
||||
|
||||
/* SHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name */
|
||||
|
||||
SHOW CREATE DATABASE IF NOT EXISTS db_name;
|
||||
SHOW CREATE SCHEMA IF NOT EXISTS db_name;
|
||||
SHOW CREATE DATABASE db_name;
|
||||
SHOW CREATE SCHEMA db_name;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-create-event.html */
|
||||
|
||||
SHOW CREATE EVENT event_name;
|
||||
SHOW CREATE EVENT my_schema.e_daily;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-create-function.html */
|
||||
|
||||
SHOW CREATE FUNCTION func_name;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-create-procedure.html */
|
||||
|
||||
SHOW CREATE PROCEDURE proc_name;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-create-table.html */
|
||||
|
||||
SHOW CREATE TABLE tbl_name;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-create-trigger.html */
|
||||
|
||||
SHOW CREATE TRIGGER trigger_name;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-create-user.html */
|
||||
|
||||
/* SHOW CREATE USER user */
|
||||
|
||||
SHOW CREATE USER user;
|
||||
SHOW CREATE USER 'u1'@'localhost';
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-create-view.html */
|
||||
|
||||
SHOW CREATE VIEW view_name;
|
||||
SHOW CREATE VIEW test.v;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-databases.html */
|
||||
|
||||
/* SHOW {DATABASES | SCHEMAS}
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW DATABASES LIKE 'pattern';
|
||||
SHOW SCHEMAS LIKE 'pattern';
|
||||
SHOW DATABASES WHERE age = 18;
|
||||
SHOW SCHEMAS WHERE age = 18;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-engine.html */
|
||||
|
||||
/* SHOW ENGINE engine_name {STATUS | MUTEX} */
|
||||
|
||||
SHOW ENGINE NDB STATUS;
|
||||
SHOW ENGINE INNODB STATUS;
|
||||
SHOW ENGINE INNODB MUTEX;
|
||||
SHOW ENGINE PERFORMANCE_SCHEMA STATUS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-engines.html */
|
||||
|
||||
/* SHOW [STORAGE] ENGINES */
|
||||
|
||||
SHOW STORAGE ENGINES;
|
||||
SHOW ENGINES;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-errors.html */
|
||||
|
||||
/* SHOW ERRORS [LIMIT [offset,] row_count]
|
||||
SHOW COUNT(*) ERRORS */
|
||||
|
||||
SHOW ERRORS LIMIT 50, 100;
|
||||
SHOW ERRORS LIMIT 100;
|
||||
SHOW ERRORS;
|
||||
SHOW COUNT(*) ERRORS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-events.html */
|
||||
|
||||
/* SHOW EVENTS
|
||||
[{FROM | IN} schema_name]
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW EVENTS FROM schema_name LIKE 'pattern';
|
||||
SHOW EVENTS IN schema_name LIKE 'pattern';
|
||||
SHOW EVENTS IN schema_name WHERE age = 18;
|
||||
SHOW EVENTS WHERE age = 18;
|
||||
SHOW EVENTS IN schema_name;
|
||||
SHOW EVENTS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-function-code.html */
|
||||
|
||||
SHOW FUNCTION CODE func_name;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-function-status.html */
|
||||
|
||||
/* SHOW FUNCTION STATUS
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW FUNCTION STATUS LIKE 'pattern';
|
||||
SHOW FUNCTION STATUS WHERE age = 18;
|
||||
SHOW FUNCTION STATUS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-grants.html */
|
||||
|
||||
/* SHOW GRANTS
|
||||
[FOR user_or_role
|
||||
[USING role [, role] ...]]
|
||||
|
||||
user_or_role: {
|
||||
user (see Section 6.2.4, “Specifying Account Names”)
|
||||
| role (see Section 6.2.5, “Specifying Role Names”.
|
||||
} */
|
||||
|
||||
SHOW GRANTS FOR 'jeffrey'@'localhost';
|
||||
SHOW GRANTS;
|
||||
SHOW GRANTS FOR CURRENT_USER;
|
||||
SHOW GRANTS FOR CURRENT_USER();
|
||||
SHOW GRANTS FOR 'u1'@'localhost' USING 'r2';
|
||||
SHOW GRANTS FOR 'u1'@'localhost' USING 'r1', 'r2';
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-index.html */
|
||||
|
||||
/* SHOW [EXTENDED] {INDEX | INDEXES | KEYS}
|
||||
{FROM | IN} tbl_name
|
||||
[{FROM | IN} db_name]
|
||||
[WHERE expr] */
|
||||
|
||||
SHOW EXTENDED INDEXES FROM tbl_name FROM db_name WHERE age = 18;
|
||||
SHOW EXTENDED INDEXES FROM tbl_name IN db_name WHERE age = 18;
|
||||
SHOW EXTENDED INDEX IN tbl_name IN db_name WHERE age = 18;
|
||||
SHOW INDEXES FROM tbl_name FROM db_name WHERE age = 18;
|
||||
SHOW INDEXES FROM tbl_name IN db_name WHERE age = 18;
|
||||
SHOW INDEX IN tbl_name IN db_name WHERE age = 18;
|
||||
SHOW INDEX IN tbl_name FROM db_name WHERE age = 18;
|
||||
SHOW KEYS IN tbl_name WHERE age = 18;
|
||||
SHOW KEYS IN tbl_name FROM db_name;
|
||||
SHOW KEYS IN tbl_name;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-master-status.html */
|
||||
|
||||
SHOW MASTER STATUS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-open-tables.html */
|
||||
|
||||
/* SHOW OPEN TABLES
|
||||
[{FROM | IN} db_name]
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW OPEN TABLES FROM db_name LIKE 'pattern';
|
||||
SHOW OPEN TABLES FROM db_name WHERE age = 18;
|
||||
SHOW OPEN TABLES IN db_name LIKE 'pattern';
|
||||
SHOW OPEN TABLES IN db_name WHERE age = 18;
|
||||
SHOW OPEN TABLES IN db_name;
|
||||
SHOW OPEN TABLES WHERE age = 18;
|
||||
SHOW OPEN TABLES;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-plugins.html */
|
||||
|
||||
SHOW PLUGINS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-privileges.html */
|
||||
|
||||
SHOW PRIVILEGES;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-procedure-code.html */
|
||||
|
||||
SHOW PROCEDURE CODE proc_name;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-procedure-status.html */
|
||||
|
||||
/* SHOW PROCEDURE STATUS
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW PROCEDURE STATUS WHERE age = 18;
|
||||
SHOW PROCEDURE STATUS LIKE 'pattern';
|
||||
SHOW PROCEDURE STATUS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html */
|
||||
|
||||
/* SHOW [FULL] PROCESSLIST */
|
||||
|
||||
SHOW FULL PROCESSLIST;
|
||||
SHOW PROCESSLIST;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-profile.html */
|
||||
|
||||
/* SHOW PROFILE [type [, type] ... ]
|
||||
[FOR QUERY n]
|
||||
[LIMIT row_count [OFFSET offset]]
|
||||
|
||||
type: {
|
||||
ALL
|
||||
| BLOCK IO
|
||||
| CONTEXT SWITCHES
|
||||
| CPU
|
||||
| IPC
|
||||
| MEMORY
|
||||
| PAGE FAULTS
|
||||
| SOURCE
|
||||
| SWAPS
|
||||
} */
|
||||
|
||||
SHOW PROFILE;
|
||||
SHOW PROFILE FOR QUERY 1;
|
||||
SHOW PROFILE FOR QUERY 1 LIMIT 100 OFFSET 100;
|
||||
SHOW PROFILE FOR QUERY 1 LIMIT 100;
|
||||
SHOW PROFILE ALL FOR QUERY 1 LIMIT 100 OFFSET 100;
|
||||
SHOW PROFILE ALL, BLOCK IO, CONTEXT SWITCHES, CPU, IPC, MEMORY, PAGE FAULTS, SOURCE, SWAPS FOR QUERY 1 LIMIT 100 OFFSET 100;
|
||||
SHOW PROFILE ALL, BLOCK IO, CONTEXT SWITCHES, CPU FOR QUERY 1 LIMIT 100 OFFSET 100;
|
||||
SHOW PROFILE IPC, MEMORY, PAGE FAULTS, SOURCE, SWAPS FOR QUERY 1 LIMIT 100;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-profiles.html */
|
||||
|
||||
SHOW PROFILES;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-relaylog-events.html */
|
||||
|
||||
/* SHOW RELAYLOG EVENTS
|
||||
[IN 'log_name']
|
||||
[FROM pos]
|
||||
[LIMIT [offset,] row_count]
|
||||
[channel_option]
|
||||
|
||||
channel_option:
|
||||
FOR CHANNEL channel */
|
||||
|
||||
|
||||
SHOW RELAYLOG EVENTS IN 'log_name' FROM 50 LIMIT 100, 200 FOR CHANNEL 'channel';
|
||||
SHOW RELAYLOG EVENTS LIMIT 100, 200 FOR CHANNEL 'channel';
|
||||
SHOW RELAYLOG EVENTS IN 'log_name' FROM 50;
|
||||
SHOW RELAYLOG EVENTS FROM 50 LIMIT 100, 200 FOR CHANNEL 'channel';
|
||||
SHOW RELAYLOG EVENTS LIMIT 100, 200 FOR CHANNEL 'channel';
|
||||
SHOW RELAYLOG EVENTS LIMIT 200 FOR CHANNEL 'channel';
|
||||
SHOW RELAYLOG EVENTS FOR CHANNEL 'channel';
|
||||
SHOW RELAYLOG EVENTS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-replicas.html */
|
||||
|
||||
SHOW REPLICAS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-slave-hosts.html */
|
||||
|
||||
/* {SHOW SLAVE HOSTS | SHOW REPLICAS} */
|
||||
|
||||
SHOW SLAVE HOSTS;
|
||||
SHOW REPLICAS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html */
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-slave-status.html */
|
||||
|
||||
/* SHOW {REPLICA | SLAVE} STATUS [FOR CHANNEL channel] */
|
||||
|
||||
SHOW REPLICA STATUS FOR CHANNEL 'channel';
|
||||
SHOW SLAVE STATUS FOR CHANNEL 'channel';
|
||||
SHOW REPLICA STATUS;
|
||||
SHOW SLAVE STATUS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-status.html */
|
||||
|
||||
/* SHOW [GLOBAL | SESSION] STATUS
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW GLOBAL STATUS LIKE 'pattern';
|
||||
SHOW GLOBAL STATUS WHERE age = 18;
|
||||
SHOW SESSION STATUS LIKE 'pattern';
|
||||
SHOW SESSION STATUS WHERE age = 18;
|
||||
SHOW STATUS LIKE 'pattern';
|
||||
SHOW STATUS WHERE age = 18;
|
||||
SHOW GLOBAL STATUS;
|
||||
SHOW SESSION STATUS;
|
||||
SHOW STATUS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-table-status.html */
|
||||
|
||||
/* SHOW TABLE STATUS
|
||||
[{FROM | IN} db_name]
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW TABLE STATUS FROM db_name LIKE 'pattern';
|
||||
SHOW TABLE STATUS IN db_name WHERE age = 18;
|
||||
SHOW TABLE STATUS IN db_name;
|
||||
SHOW TABLE STATUS WHERE age = 18;
|
||||
SHOW TABLE STATUS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-tables.html */
|
||||
|
||||
/* SHOW [EXTENDED] [FULL] TABLES
|
||||
[{FROM | IN} db_name]
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW EXTENDED FULL TABLES FROM db_name LIKE 'pattern';
|
||||
SHOW EXTENDED TABLES FROM db_name LIKE 'pattern';
|
||||
SHOW FULL TABLES IN db_name WHERE age = 18;
|
||||
SHOW TABLES FROM db_name LIKE 'pattern';
|
||||
SHOW TABLES IN db_name WHERE age = 18;
|
||||
SHOW TABLES IN db_name;
|
||||
SHOW TABLES WHERE age = 18;
|
||||
SHOW TABLES;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-triggers.html */
|
||||
|
||||
/* SHOW TRIGGERS
|
||||
[{FROM | IN} db_name]
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
|
||||
SHOW TRIGGERS FROM db_name LIKE 'pattern';
|
||||
SHOW TRIGGERS IN db_name WHERE age = 18;
|
||||
SHOW TRIGGERS IN db_name;
|
||||
SHOW TRIGGERS WHERE age = 18;
|
||||
SHOW TRIGGERS;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-variables.html */
|
||||
|
||||
/* SHOW [GLOBAL | SESSION] VARIABLES
|
||||
[LIKE 'pattern' | WHERE expr] */
|
||||
|
||||
SHOW GLOBAL VARIABLES LIKE 'pattern';
|
||||
SHOW SESSION VARIABLES WHERE age = 18;
|
||||
SHOW VARIABLES LIKE 'pattern';
|
||||
SHOW VARIABLES WHERE age = 18;
|
||||
SHOW VARIABLES;
|
||||
|
||||
|
||||
|
||||
/* https://dev.mysql.com/doc/refman/8.0/en/show-warnings.html */
|
||||
|
||||
/* SHOW WARNINGS [LIMIT [offset,] row_count]
|
||||
SHOW COUNT(*) WARNINGS */
|
||||
|
||||
|
||||
SHOW WARNINGS LIMIT 100, 200;
|
||||
SHOW WARNINGS LIMIT 200;
|
||||
SHOW WARNINGS;
|
||||
SHOW COUNT(*) WARNINGS;
|
70
test/parser/mysql/syntax/fixtures/startSlaveOrReplica.sql
Normal file
70
test/parser/mysql/syntax/fixtures/startSlaveOrReplica.sql
Normal file
@ -0,0 +1,70 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/start-replica.html
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/start-slave.html
|
||||
|
||||
/* START {SLAVE | REPLICA} [thread_types] [until_option] [connection_options] [channel_option]
|
||||
|
||||
thread_types:
|
||||
[thread_type [, thread_type] ... ]
|
||||
|
||||
thread_type:
|
||||
IO_THREAD | SQL_THREAD
|
||||
|
||||
until_option:
|
||||
UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set
|
||||
| MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = log_pos
|
||||
| SOURCE_LOG_FILE = 'log_name', SOURCE_LOG_POS = log_pos
|
||||
| RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = log_pos
|
||||
| SQL_AFTER_MTS_GAPS }
|
||||
|
||||
connection_options:
|
||||
[USER='user_name'] [PASSWORD='user_pass'] [DEFAULT_AUTH='plugin_name'] [PLUGIN_DIR='plugin_dir']
|
||||
|
||||
|
||||
channel_option:
|
||||
FOR CHANNEL channel
|
||||
|
||||
gtid_set:
|
||||
uuid_set [, uuid_set] ...
|
||||
| ''
|
||||
|
||||
uuid_set:
|
||||
uuid:interval[:interval]...
|
||||
|
||||
uuid:
|
||||
hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
|
||||
|
||||
h:
|
||||
[0-9,A-F]
|
||||
|
||||
interval:
|
||||
n[-n]
|
||||
|
||||
(n >= 1) */
|
||||
|
||||
|
||||
START SLAVE IO_THREAD UNTIL SQL_BEFORE_GTIDS = '839fa172-9f8d-4bf2-9a13-88dbc6e3814c' USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
START SLAVE IO_THREAD, SQL_THREAD UNTIL SQL_AFTER_GTIDS = '839fa172-9f8d-4bf2-9a13-88dbc6e3814c' USER='user_name' PASSWORD='user_pass' FOR CHANNEL 'channel';
|
||||
START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS = '839fa172-9f8d-4bf2-9a13-88dbc6e3814c' USER='user_name' PASSWORD='user_pass';
|
||||
|
||||
START SLAVE SQL_THREAD UNTIL MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = 9000 USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
START SLAVE SQL_THREAD UNTIL SOURCE_LOG_FILE = 'log_name', SOURCE_LOG_POS = 9000 USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
START SLAVE IO_THREAD, SQL_THREAD UNTIL RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = 9000 USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
START SLAVE SQL_THREAD UNTIL SQL_AFTER_MTS_GAPS USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
|
||||
START SLAVE UNTIL SQL_AFTER_MTS_GAPS;
|
||||
START SLAVE SQL_THREAD;
|
||||
START SLAVE;
|
||||
|
||||
|
||||
START REPLICA IO_THREAD UNTIL SQL_BEFORE_GTIDS = '839fa172-9f8d-4bf2-9a13-88dbc6e3814c' USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
START REPLICA SQL_THREAD UNTIL SQL_AFTER_GTIDS = '839fa172-9f8d-4bf2-9a13-88dbc6e3814c' USER='user_name' PASSWORD='user_pass' FOR CHANNEL 'channel';
|
||||
START REPLICA SQL_THREAD UNTIL SQL_AFTER_GTIDS = '839fa172-9f8d-4bf2-9a13-88dbc6e3814c' USER='user_name' PASSWORD='user_pass';
|
||||
|
||||
START REPLICA SQL_THREAD UNTIL MASTER_LOG_FILE = 'log_name', MASTER_LOG_POS = 9000 USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
START REPLICA SQL_THREAD UNTIL SOURCE_LOG_FILE = 'log_name', SOURCE_LOG_POS = 9000 USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
START REPLICA IO_THREAD UNTIL RELAY_LOG_FILE = 'log_name', RELAY_LOG_POS = 9000 USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
START REPLICA SQL_THREAD UNTIL SQL_AFTER_MTS_GAPS USER='user_name' PASSWORD='user_pass' DEFAULT_AUTH='plugin_name' PLUGIN_DIR='plugin_dir' FOR CHANNEL 'channel';
|
||||
|
||||
START REPLICA UNTIL SQL_AFTER_MTS_GAPS;
|
||||
START REPLICA SQL_THREAD;
|
||||
START REPLICA;
|
27
test/parser/mysql/syntax/fixtures/stopSlaveOrReplica.sql
Normal file
27
test/parser/mysql/syntax/fixtures/stopSlaveOrReplica.sql
Normal file
@ -0,0 +1,27 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/stop-replica.html
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/stop-slave.html
|
||||
|
||||
/* STOP {SLAVE | REPLICA} [thread_types] [channel_option]
|
||||
|
||||
thread_types:
|
||||
[thread_type [, thread_type] ... ]
|
||||
|
||||
thread_type: IO_THREAD | SQL_THREAD
|
||||
|
||||
channel_option:
|
||||
FOR CHANNEL channel */
|
||||
|
||||
|
||||
STOP SLAVE IO_THREAD, SQL_THREAD FOR CHANNEL 'channel';
|
||||
STOP SLAVE SQL_THREAD FOR CHANNEL 'channel';
|
||||
STOP SLAVE IO_THREAD, SQL_THREAD;
|
||||
STOP SLAVE SQL_THREAD;
|
||||
STOP SLAVE FOR CHANNEL 'channel';
|
||||
STOP SLAVE;
|
||||
|
||||
STOP REPLICA IO_THREAD, SQL_THREAD FOR CHANNEL 'channel';
|
||||
STOP REPLICA SQL_THREAD FOR CHANNEL 'channel';
|
||||
STOP REPLICA IO_THREAD, SQL_THREAD;
|
||||
STOP REPLICA SQL_THREAD;
|
||||
STOP REPLICA FOR CHANNEL 'channel';
|
||||
STOP REPLICA;
|
190
test/parser/mysql/syntax/fixtures/subQueries.sql
Normal file
190
test/parser/mysql/syntax/fixtures/subQueries.sql
Normal file
@ -0,0 +1,190 @@
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/scalar-subqueries.html
|
||||
SELECT (SELECT s2 FROM t1);
|
||||
SELECT (SELECT s1 FROM t2) FROM t1;
|
||||
SELECT (SELECT * FROM t2) FROM t1;
|
||||
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/comparisons-using-subqueries.html
|
||||
SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2);
|
||||
SELECT * FROM t1 AS t WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/any-in-some-subqueries.html
|
||||
SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 <> ANY (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 <> ANY (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 <> SOME (SELECT s1 FROM t2);
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/all-subqueries.html
|
||||
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
|
||||
SELECT * FROM t1 WHERE 1 > ALL (SELECT s1 FROM t2);
|
||||
SELECT * FROM t1 WHERE 1 > (SELECT s1 FROM t2);
|
||||
SELECT * FROM t1 WHERE 1 > ALL (SELECT MAX(s1) FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2);
|
||||
SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/row-subqueries.html
|
||||
SELECT * FROM t1 WHERE (col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);
|
||||
SELECT * FROM t1 WHERE ROW(col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);
|
||||
SELECT * FROM t1 WHERE ROW(1) = (SELECT column1 FROM t2);
|
||||
SELECT * FROM t1 WHERE (column1,column2) = (1,1);
|
||||
SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;
|
||||
SELECT column1,column2,column3 FROM t1 WHERE (column1,column2,column3) IN (SELECT column1,column2,column3 FROM t2);
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/exists-and-not-exists-subqueries.html
|
||||
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
|
||||
SELECT DISTINCT store_type FROM stores WHERE EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type);
|
||||
SELECT DISTINCT store_type FROM stores WHERE NOT EXISTS (SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type);
|
||||
SELECT DISTINCT store_type FROM stores WHERE NOT EXISTS (SELECT * FROM cities WHERE NOT EXISTS (SELECT * FROM cities_stores WHERE cities_stores.city = cities.city AND cities_stores.store_type = stores.store_type));
|
||||
SELECT column1 FROM t1 WHERE EXISTS (SELECT s1 FROM t2);
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/correlated-subqueries.html
|
||||
SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2 WHERE t2.column2 = t1.column2);
|
||||
SELECT column1 FROM t1 AS x WHERE x.column1 = (SELECT column1 FROM t2 AS x WHERE x.column1 = (SELECT column1 FROM t3 WHERE x.column2 = t3.column1));
|
||||
SELECT * FROM t1 WHERE ( SELECT a FROM t2 WHERE t2.a=t1.a ) > 0;
|
||||
SELECT t1.* FROM t1 LEFT OUTER JOIN (SELECT a, COUNT(*) AS ct FROM t2 GROUP BY a) AS derived ON t1.a = derived.a AND REJECT_IF((ct > 1), "ERROR 1242 (21000): Subquery returns more than 1 row") WHERE derived.a > 0;
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/derived-tables.html
|
||||
SELECT c1,c2,c3 FROM (SELECT s1 AS c1, s2 AS c2, s3*2 AS c3 FROM t1) AS t WHERE c1 > 1;
|
||||
SELECT AVG(SUM(column1)) FROM t1 GROUP BY column1;
|
||||
SELECT AVG(sum_column1) FROM (SELECT SUM(column1) AS sum_column1 FROM t1 GROUP BY column1) AS t1;
|
||||
SELECT * FROM (SELECT 1, 2, 3, 4) AS dt;
|
||||
SELECT * FROM (SELECT 1, 2, 3, 4) AS dt (a, b, c, d);
|
||||
SELECT * FROM t1 WHERE t1.d > (SELECT AVG(dt.a) FROM (SELECT SUM(t2.a) AS a FROM t2 WHERE t2.b = t1.b GROUP BY t2.c) dt WHERE dt.a > 10);
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/lateral-derived-tables.html
|
||||
SELECT
|
||||
salesperson.name,
|
||||
-- find maximum sale size for this salesperson
|
||||
(SELECT MAX(amount) AS amount
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id)
|
||||
AS amount,
|
||||
-- find customer for this maximum size
|
||||
(SELECT customer_name
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id
|
||||
AND all_sales.amount =
|
||||
-- find maximum size, again
|
||||
(SELECT MAX(amount) AS amount
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id))
|
||||
AS customer_name
|
||||
FROM
|
||||
salesperson;
|
||||
|
||||
SELECT
|
||||
salesperson.name,
|
||||
max_sale.amount,
|
||||
max_sale_customer.customer_name
|
||||
FROM
|
||||
salesperson,
|
||||
-- calculate maximum size, cache it in transient derived table max_sale
|
||||
(SELECT MAX(amount) AS amount
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id)
|
||||
AS max_sale,
|
||||
-- find customer, reusing cached maximum size
|
||||
(SELECT customer_name
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id
|
||||
AND all_sales.amount =
|
||||
-- the cached maximum size
|
||||
max_sale.amount)
|
||||
AS max_sale_customer;
|
||||
|
||||
SELECT
|
||||
salesperson.name,
|
||||
max_sale.amount,
|
||||
max_sale_customer.customer_name
|
||||
FROM
|
||||
salesperson,
|
||||
-- calculate maximum size, cache it in transient derived table max_sale
|
||||
LATERAL
|
||||
(SELECT MAX(amount) AS amount
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id)
|
||||
AS max_sale,
|
||||
-- find customer, reusing cached maximum size
|
||||
LATERAL
|
||||
(SELECT customer_name
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id
|
||||
AND all_sales.amount =
|
||||
-- the cached maximum size
|
||||
max_sale.amount)
|
||||
AS max_sale_customer;
|
||||
|
||||
SELECT
|
||||
salesperson.name,
|
||||
-- find maximum size and customer at same time
|
||||
(SELECT amount, customer_name
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id
|
||||
ORDER BY amount DESC LIMIT 1)
|
||||
FROM
|
||||
salesperson;
|
||||
|
||||
SELECT
|
||||
salesperson.name,
|
||||
max_sale.amount,
|
||||
max_sale.customer_name
|
||||
FROM
|
||||
salesperson,
|
||||
-- find maximum size and customer at same time
|
||||
(SELECT amount, customer_name
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id
|
||||
ORDER BY amount DESC LIMIT 1)
|
||||
AS max_sale;
|
||||
|
||||
SELECT
|
||||
salesperson.name,
|
||||
max_sale.amount,
|
||||
max_sale.customer_name
|
||||
FROM
|
||||
salesperson,
|
||||
-- find maximum size and customer at same time
|
||||
LATERAL
|
||||
(SELECT amount, customer_name
|
||||
FROM all_sales
|
||||
WHERE all_sales.salesperson_id = salesperson.id
|
||||
ORDER BY amount DESC LIMIT 1)
|
||||
AS max_sale;
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/subquery-errors.html
|
||||
SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1);
|
||||
SELECT (SELECT column1, column2 FROM t2) FROM t1;
|
||||
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
|
||||
SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2);
|
||||
UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/optimizing-subqueries.html
|
||||
SELECT * FROM t1 WHERE s1 IN (SELECT s1 FROM t1 UNION ALL SELECT s1 FROM t2);
|
||||
SELECT * FROM t1 WHERE s1 IN (SELECT s1 FROM t1) OR s1 IN (SELECT s1 FROM t2);
|
||||
SELECT (SELECT column1 + 5 FROM t1) FROM t2;
|
||||
SELECT (SELECT column1 FROM t1) + 5 FROM t2;
|
||||
|
||||
|
||||
-- https://dev.mysql.com/doc/refman/8.0/en/subquery-restrictions.html
|
||||
SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1);
|
||||
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user