diff options
Diffstat (limited to 'mysql-test/suite/storage_engine/create_table.inc')
-rw-r--r-- | mysql-test/suite/storage_engine/create_table.inc | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/mysql-test/suite/storage_engine/create_table.inc b/mysql-test/suite/storage_engine/create_table.inc new file mode 100644 index 00000000..9a1cba51 --- /dev/null +++ b/mysql-test/suite/storage_engine/create_table.inc @@ -0,0 +1,174 @@ +################################## +# +# This include file will be used for all CREATE TABLE statements in the suite. +# If you need to add additional steps or change the logic, copy the file +# to storage/<engine>/mysql-test/storage_engine/ folder and modify it there. +# +################## +# +# Parameters: +# +# --let $create_definition = <column names, types, indexes) # optional, default a $int_col, b $char_col (based on defaults) +# --let $table_name = <table name> # optional, default t1 +# --let $table_options = <table options> # optional, default based on define_engine.inc +# --let $partition_options = <partitioning definition> # optional, default none +# --let $as_select = <SELECT statement> # optional, default empty +# --let $error_codes = <expected error codes, as in --error> # optional, default 0 +# --let $if_not_exists = [0|1] # optional, default 0 (1 adds IF NOT EXISTS clause) +# --let $default_engine = [0|1] # optional, default 0 (with 1 will rely on default engine, no ENGINE=) +# --let $temporary = [0|1] # optional, default 0 (1 adds TEMPORARY) +# --let $disable_query_log = [0|1] # optional, default 0 (1 disables logging of CREATE) +# +# Usage examples: +# +# --source create_table.inc -- creates a default table +# +# --let $create_definition = a INT NOT NULL, b CHAR(1) PRIMARY KEY, INDEX(a) +# --let $table_options = AUTO_INCREMENT = 100 +# --let $partition_options = PARTITION BY HASH(a) PARTITIONS 2 +# --let $as_select = SELECT 1, 'a' +# --source create_table.inc +# +# Additionally, a test can define $extra_tbl_options. The difference with $table_options +# is that its value is persistent and will be used until it is unset explicitly, or +# until the test ends. The purpose of it is to allow one test to call another test, +# when the called test does not know about specific options the calling test might require, +# and thus cannot set them on per-create basis. + +--let $create_statement = CREATE + +if ($temporary) +{ + --let $create_statement = $create_statement TEMPORARY +} + +--let $create_statement = $create_statement TABLE + +if ($if_not_exists) +{ + --let $create_statement = $create_statement IF NOT EXISTS +} + +if (!$table_name) +{ + --let $table_name = t1 +} + +--let $create_statement = $create_statement $table_name + +if (!$create_definition) +{ + # If $create_definition is not defined, and AS SELECT is requested, + # we should not set $create_definition to the default value, + # because it might be inconsistent with the SELECT. + if (!$as_select) + { + --let $create_definition = a $int_col, b $char_col + } +} + +if ($create_definition) +{ + --let $create_statement = $create_statement ($create_definition) +} + +# If $default_engine is set, we will rely on the default storage engine + +if (!$default_engine) +{ + --let $create_statement = $create_statement ENGINE=$storage_engine +} + +# Default table options from define_engine.inc +--let $create_statement = $create_statement $default_tbl_opts + +# The calling script could request additional table options +if ($table_options) +{ + --let $create_statement = $create_statement $table_options +} + +# The difference between $extra_tbl_opts and $table_options +# is that its $extra_tbl_opts is persistent -- it will not be unset at the end of this file, +# and will be used until it is unset explicitly by the calling test, +# or until the test ends. The purpose of it is to allow one test to call another test, +# when the called test does not know about specific options the calling test might require, +# and thus cannot set them on per-create basis. + +if ($extra_tbl_opts) +{ + --let $create_statement = $create_statement $extra_tbl_opts +} + +if ($as_select) +{ + --let $create_statement = $create_statement AS $as_select +} + +if ($partition_options) +{ + --let $create_statement = $create_statement $partition_options +} + +# We now have the complete CREATE statement in $create_statement. +# If your CREATE statement should be composed differently, +# modify the logic above. + +##################### +# Here you can add logic needed BEFORE the main table creation +# (e.g. the table needs a base table, a reference table, etc.). +# Surround it by --disable_query_log/--enable_query_log +# if you don't want it to appear in the result output. +##################### + +if ($disable_query_log) +{ + --disable_query_log +} + +--source obfuscate.inc + +eval $create_statement; +--source strict_check_errors.inc + +# Make sure you don't add any statements between the main CREATE (above) +# and saving mysql_errno and mysql_errname (below) +# They are saved in case you want to add more logic after the main CREATE, +# because we need the result code of the table creation. +# Also, do not change $create_statement after it is executed! + +--let $my_errno = $mysql_errno +--let $my_errname = $mysql_errname + + +if ($disable_query_log) +{ + --enable_query_log +} + +##################### +# Here you can add logic needed AFTER the main table creation, +# e.g. triggers creation. +# Surround it by --disable_query_log/--enable_query_log +# if you don't want it to appear in the result output. +##################### + + +# Unset the parameters, we don't want them to be accidentally reused later +--let $create_definition = +--let $table_name = t1 +--let $table_options = +--let $partition_options = +--let $as_select = 0 +--let $error_codes = +--let $if_not_exists = 0 +--let $default_engine = 0 +--let $temporary = 0 +--let $disable_query_log = 0 + +# Restore the error codes of the main statement +--let $mysql_errno = $my_errno +--let $mysql_errname = $my_errname +# Make sure you don't add any SQL statements after restoring +# mysql_errno and mysql_errname (above) + |