Skip to content

Commit

Permalink
sqlparser: column option and table option #615
Browse files Browse the repository at this point in the history
[summary]
reference: https://dev.mysql.com/doc/refman/5.7/en/create-table.html

1. complete more columnn options, add `STORAGE DEFAULT` which is not descriped on official 5.7 document, but actually mysql support it.
see: https://github.com/mysql/mysql-server/blob/5.7/sql/sql_yacc.yy#L6953
and extra option suppored by mysql: `ON UPDATE ...`
see: https://github.com/mysql/mysql-server/blob/5.7/sql/sql_yacc.yy#L6888
```
column_definition:
    data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]
      [COMMENT 'string']
      [COLLATE collation_name]
      [COLUMN_FORMAT {FIXED | DYNAMIC | DEFAULT}]
      [STORAGE {DISK | MEMORY}]
      [ON UPDATE NOW_SYM]
  | data_type
      [COLLATE collation_name]
      [VIRTUAL | STORED] [NOT NULL | NULL]
      [UNIQUE [KEY]] [[PRIMARY] KEY]
      [COMMENT 'string']
```
Currently we do not support  column option ` [reference_definition]`, ` [GENERATED ALWAYS] AS (expr)`
also : some `DEFAULT now_or_signed_literal` and `SERIAL_SYM DEFAULT VALUE_SYM` options not in 5.7 document, but acctually mysql support them.
see:
https://github.com/mysql/mysql-server/blob/5.7/sql/sql_yacc.yy#L6897
https://github.com/mysql/mysql-server/blob/5.7/sql/sql_yacc.yy#L6887

2. complete more table options.
```
table_option:
    AUTO_INCREMENT [=] value
  | AVG_ROW_LENGTH [=] value
  | [DEFAULT] CHARACTER SET [=] charset_name
  | CHECKSUM [=] {0 | 1}
  | [DEFAULT] COLLATE [=] collation_name
  | COMMENT [=] 'string'
  | COMPRESSION [=] {'ZLIB' | 'LZ4' | 'NONE'}
  | CONNECTION [=] 'connect_string'
  | {DATA | INDEX} DIRECTORY [=] 'absolute path to directory'
  | DELAY_KEY_WRITE [=] {0 | 1}
  | ENCRYPTION [=] {'Y' | 'N'}
  | ENGINE [=] engine_name
  | INSERT_METHOD [=] { NO | FIRST | LAST }
  | KEY_BLOCK_SIZE [=] value
  | MAX_ROWS [=] value
  | MIN_ROWS [=] value
  | PACK_KEYS [=] {0 | 1 | DEFAULT}
  | PASSWORD [=] 'string'
  | ROW_FORMAT [=] {DEFAULT | DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT | TOKUDB...}
  | STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}
  | STATS_PERSISTENT [=] {DEFAULT | 0 | 1}
  | STATS_SAMPLE_PAGES [=] value
  | TABLESPACE tablespace_name [STORAGE {DISK | MEMORY}]
```
Currently we do not support  table options:
`UNION [=] (tbl_name[,tbl_name]...)`
[test case]
sqlparser/parse_test.go
sqlparser/ddl_test.go
proxy/ddl_test.go
[patch codecov]
N/A
  • Loading branch information
hustjieke committed Apr 29, 2020
1 parent a9389ff commit 9d10791
Show file tree
Hide file tree
Showing 7 changed files with 4,351 additions and 2,346 deletions.
4 changes: 4 additions & 0 deletions src/proxy/ddl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,10 @@ func TestProxyDDLCreateTable(t *testing.T) {
"create table t4(a int, b int)engine=tokudb PARTITION BY hash(a) ",
"create table t5(a int, b int) default charset=utf8 PARTITION BY hash(a) ",
"create table t6(a int, b int)engine=tokudb auto_increment=10 default charset=utf8 PARTITION BY hash(a) ",
"create table t7(a int collate utf8_bin Collate 'utf8_bin' collate \"utf8_bin\") partition by hash(a)",
"create table t8(a int, b int) partition by hash(a)",
"create table t9(a int, b timestamp(5) on update current_timestamp(5) column_format fixed column_format default column_format dynamic) partition by hash(a)",
"create table t10(a int column_format fixed column_format default column_format dynamic) partition by hash(a) comment='comment option' engine=tokudb default charset='utf8' avg_row_length=123 checksum=1 collate='utf8_bin' compression='lz4' connection='id' data directory='/data' index directory='/index' delay_key_write=1 encryption='n' insert_method=First key_block_size=1 max_rows=3 min_rows=2 pack_keys=default password='pwd' row_format=dynamic stats_auto_recalc=1 stats_persistent=default stats_sample_pages=65535 tablespace=storage",
}

for _, query := range querys {
Expand Down
282 changes: 264 additions & 18 deletions src/vendor/github.com/xelabs/go-mysqlstack/sqlparser/ast.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 9d10791

Please sign in to comment.