Commit 9a9a952c authored by marko's avatar marko

branches/zip: Return a meaningful error message when refusing to create

a compressed table in the system tablespace.

db0err.h: Introduce the error code DB_TABLE_ZIP_NO_IBD.  Replace the
#define directives with an enum, to ease future code merges.  These
error codes are never written out to files or displayed to the user.
Thus they need not remain constant.

dict_build_table_def_step(): Return DB_TABLE_ZIP_NO_IBD instead of DB_ERROR.

create_table_def(): Report ER_ILLEGAL_HA_CREATE_OPTION "KEY_BLOCK_SIZE"
when the table creation fails with DB_TABLE_ZIP_NO_IBD.
parent 2a106e0f
...@@ -274,7 +274,7 @@ dict_build_table_def_step( ...@@ -274,7 +274,7 @@ dict_build_table_def_step(
} else { } else {
/* Create in the system tablespace: disallow compression */ /* Create in the system tablespace: disallow compression */
if (table->flags & DICT_TF_COMPRESSED_MASK) { if (table->flags & DICT_TF_COMPRESSED_MASK) {
return(DB_ERROR); return(DB_TABLE_ZIP_NO_IBD);
} }
} }
......
...@@ -4796,6 +4796,11 @@ create_table_def( ...@@ -4796,6 +4796,11 @@ create_table_def(
innodb_check_for_record_too_big_error(flags & DICT_TF_COMPACT, error); innodb_check_for_record_too_big_error(flags & DICT_TF_COMPACT, error);
if (error == DB_TABLE_ZIP_NO_IBD) {
my_error(ER_ILLEGAL_HA_CREATE_OPTION, MYF(0),
innobase_hton_name, "KEY_BLOCK_SIZE");
}
error = convert_error_code_to_mysql(error, NULL); error = convert_error_code_to_mysql(error, NULL);
DBUG_RETURN(error); DBUG_RETURN(error);
......
...@@ -10,77 +10,81 @@ Created 5/24/1996 Heikki Tuuri ...@@ -10,77 +10,81 @@ Created 5/24/1996 Heikki Tuuri
#define db0err_h #define db0err_h
#define DB_SUCCESS 10 enum db_err {
DB_SUCCESS = 10,
/* The following are error codes */ /* The following are error codes */
#define DB_ERROR 11 DB_ERROR,
#define DB_OUT_OF_MEMORY 12 DB_OUT_OF_MEMORY,
#define DB_OUT_OF_FILE_SPACE 13 DB_OUT_OF_FILE_SPACE,
#define DB_LOCK_WAIT 14 DB_LOCK_WAIT,
#define DB_DEADLOCK 15 DB_DEADLOCK,
#define DB_ROLLBACK 16 DB_ROLLBACK,
#define DB_DUPLICATE_KEY 17 DB_DUPLICATE_KEY,
#define DB_QUE_THR_SUSPENDED 18 DB_QUE_THR_SUSPENDED,
#define DB_MISSING_HISTORY 19 /* required history data has been DB_MISSING_HISTORY, /* required history data has been
deleted due to lack of space in deleted due to lack of space in
rollback segment */ rollback segment */
#define DB_CLUSTER_NOT_FOUND 30 DB_CLUSTER_NOT_FOUND,
#define DB_TABLE_NOT_FOUND 31 DB_TABLE_NOT_FOUND,
#define DB_MUST_GET_MORE_FILE_SPACE 32 /* the database has to be stopped DB_MUST_GET_MORE_FILE_SPACE, /* the database has to be stopped
and restarted with more file space */ and restarted with more file space */
#define DB_TABLE_IS_BEING_USED 33 DB_TABLE_IS_BEING_USED,
#define DB_TOO_BIG_RECORD 34 /* a record in an index would not fit DB_TOO_BIG_RECORD, /* a record in an index would not fit
on a compressed page, or it would on a compressed page, or it would
become bigger than 1/2 free space in become bigger than 1/2 free space in
an uncompressed page frame */ an uncompressed page frame */
#define DB_LOCK_WAIT_TIMEOUT 35 /* lock wait lasted too long */ DB_LOCK_WAIT_TIMEOUT, /* lock wait lasted too long */
#define DB_NO_REFERENCED_ROW 36 /* referenced key value not found DB_NO_REFERENCED_ROW, /* referenced key value not found
for a foreign key in an insert or for a foreign key in an insert or
update of a row */ update of a row */
#define DB_ROW_IS_REFERENCED 37 /* cannot delete or update a row DB_ROW_IS_REFERENCED, /* cannot delete or update a row
because it contains a key value because it contains a key value
which is referenced */ which is referenced */
#define DB_CANNOT_ADD_CONSTRAINT 38 /* adding a foreign key constraint DB_CANNOT_ADD_CONSTRAINT, /* adding a foreign key constraint
to a table failed */ to a table failed */
#define DB_CORRUPTION 39 /* data structure corruption noticed */ DB_CORRUPTION, /* data structure corruption noticed */
#define DB_COL_APPEARS_TWICE_IN_INDEX 40/* InnoDB cannot handle an index DB_COL_APPEARS_TWICE_IN_INDEX, /* InnoDB cannot handle an index
where same column appears twice */ where same column appears twice */
#define DB_CANNOT_DROP_CONSTRAINT 41 /* dropping a foreign key constraint DB_CANNOT_DROP_CONSTRAINT, /* dropping a foreign key constraint
from a table failed */ from a table failed */
#define DB_NO_SAVEPOINT 42 /* no savepoint exists with the given DB_NO_SAVEPOINT, /* no savepoint exists with the given
name */ name */
#define DB_TABLESPACE_ALREADY_EXISTS 43 /* we cannot create a new single-table DB_TABLESPACE_ALREADY_EXISTS, /* we cannot create a new single-table
tablespace because a file of the same tablespace because a file of the same
name already exists */ name already exists */
#define DB_TABLESPACE_DELETED 44 /* tablespace does not exist or is DB_TABLESPACE_DELETED, /* tablespace does not exist or is
being dropped right now */ being dropped right now */
#define DB_LOCK_TABLE_FULL 45 /* lock structs have exhausted the DB_LOCK_TABLE_FULL, /* lock structs have exhausted the
buffer pool (for big transactions, buffer pool (for big transactions,
InnoDB stores the lock structs in the InnoDB stores the lock structs in the
buffer pool) */ buffer pool) */
#define DB_FOREIGN_DUPLICATE_KEY 46 /* foreign key constraints DB_FOREIGN_DUPLICATE_KEY, /* foreign key constraints
activated by the operation would activated by the operation would
lead to a duplicate key in some lead to a duplicate key in some
table */ table */
#define DB_TOO_MANY_CONCURRENT_TRXS 47 /* when InnoDB runs out of the DB_TOO_MANY_CONCURRENT_TRXS, /* when InnoDB runs out of the
preconfigured undo slots, this can preconfigured undo slots, this can
only happen when there are too many only happen when there are too many
concurrent transactions */ concurrent transactions */
#define DB_PRIMARY_KEY_IS_NULL 48 /* a column in the PRIMARY KEY DB_PRIMARY_KEY_IS_NULL, /* a column in the PRIMARY KEY
was found to be NULL */ was found to be NULL */
DB_TABLE_ZIP_NO_IBD, /* trying to create a compressed
table in the system tablespace */
#define DB_UNSUPPORTED 49 /* when InnoDB sees any artefact or DB_UNSUPPORTED, /* when InnoDB sees any artefact or
a feature that it can't recoginize or a feature that it can't recoginize or
work with e.g., FT indexes created by work with e.g., FT indexes created by
a later version of the engine. */ a later version of the engine. */
/* The following are partial failure codes */ /* The following are partial failure codes */
#define DB_FAIL 1000 DB_FAIL,
#define DB_OVERFLOW 1001 DB_OVERFLOW,
#define DB_UNDERFLOW 1002 DB_UNDERFLOW,
#define DB_STRONG_FAIL 1003 DB_STRONG_FAIL,
#define DB_ZIP_OVERFLOW 1004 DB_ZIP_OVERFLOW,
#define DB_RECORD_NOT_FOUND 1500 DB_RECORD_NOT_FOUND,
#define DB_END_OF_INDEX 1501 DB_END_OF_INDEX
};
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment