Skip to content

Commit

Permalink
Support MySQL index hints (#3099)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alec Strong authored and renovate[bot] committed Apr 24, 2022
1 parent cad4e7a commit e6657b9
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ overrides ::= type_name
| table_constraint
| default_constraint
| table_option
| table_or_subquery
| qualified_table_name
| extension_stmt
| alter_table_rules
| alter_table_add_column
Expand Down Expand Up @@ -164,6 +166,31 @@ table_option ::= 'ENGINE' ['='] {identifier} |

row_format_clause ::= 'ROW_FORMAT' [ '=' ] ( DEFAULT | 'DYNAMIC' | 'FIXED' | 'COMPRESSED' | 'REDUNDANT' | 'COMPACT' )

table_or_subquery ::= ( [ {database_name} '.' ] {table_name} [ [ 'AS' ] {table_alias} ] [ index_hint_list ]
| '(' ( {table_or_subquery} ( ',' {table_or_subquery} ) * | {join_clause} ) ')'
| '(' {compound_select_stmt} ')' [ [ 'AS' ] {table_alias} ] ) {
extends = "com.alecstrong.sql.psi.core.psi.impl.SqlTableOrSubqueryImpl"
implements = "com.alecstrong.sql.psi.core.psi.SqlTableOrSubquery"
override = true
}

qualified_table_name ::= [ {database_name} '.' ] {table_name} [ index_hint_list ] {
extends = "com.alecstrong.sql.psi.core.psi.impl.SqlQualifiedTableNameImpl"
implements = "com.alecstrong.sql.psi.core.psi.SqlQualifiedTableName"
override = true
}

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 ) {
pin = 1
}

index_list ::= '(' {index_name} ( ',' {index_name} ) * ')'

alter_table_rules ::= (
alter_table_add_column
| {alter_table_rename_table}
Expand Down
31 changes: 31 additions & 0 deletions dialects/mysql/src/test/fixtures_mysql/index-hints/Test.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
CREATE TABLE t1(
a VARCHAR(8) NOT NULL
);

CREATE INDEX i1 ON t1(a);

CREATE INDEX i2 ON t1(a);

SELECT * FROM t1 USE INDEX;

SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX FOR ORDER BY (i2) ORDER BY a;

SELECT * FROM t1 USE INDEX (i1) USE INDEX (i1,i1);

SELECT * FROM t1 USE INDEX FOR JOIN (i1) FORCE INDEX FOR JOIN (i2);

CREATE TABLE table1(
col1 TEXT,
col2 TEXT,
col3 TEXT
);

CREATE INDEX col1_index ON table1(col1);
CREATE INDEX col2_index ON table1(col2);
CREATE INDEX col3_index ON table1(col3);

SELECT * FROM table1 USE INDEX (col1_index,col2_index)
WHERE col1=1 AND col2=2 AND col3=3;

SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;

0 comments on commit e6657b9

Please sign in to comment.