summaryrefslogtreecommitdiff
path: root/storage/xtradb
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-01-03 19:32:47 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2017-01-03 19:32:47 +0200
commit80d5d1452a4a6b7bd1627116f2a5a950003fc3cb (patch)
tree15a86eab06593ce0195a18172aac9d093c5a6651 /storage/xtradb
parent3871477c40efc826805f4c4e35b006c2c233dd26 (diff)
downloadmariadb-git-bb-10.0-mdev-11694.tar.gz
MDEV-11694 InnoDB tries to create unused table SYS_ZIP_DICTbb-10.0-mdev-11694
MariaDB Server 10.0.28 and 10.1.19 merged code from Percona XtraDB that introduced support for compressed columns. Much but not all of this code was disabled by placing #ifdef HAVE_PERCONA_COMPRESSED_COLUMNS around it. Among the unused but not disabled code is code to access some new system tables related to compressed columns. The creation of these system tables SYS_ZIP_DICT and SYS_ZIP_DICT_COLS would cause a crash in --innodb-read-only mode when upgrading from an earlier version to 10.0.28 or 10.1.19. Let us remove all the dead code related to compressed columns. Users who already upgraded to 10.0.28 and 10.1.19 will have the two above mentioned empty tables in their InnoDB system tablespace. Subsequent versions of MariaDB Server will completely ignore those tables.
Diffstat (limited to 'storage/xtradb')
-rw-r--r--storage/xtradb/dict/dict0boot.cc5
-rw-r--r--storage/xtradb/dict/dict0crea.cc583
-rw-r--r--storage/xtradb/dict/dict0dict.cc160
-rw-r--r--storage/xtradb/dict/dict0load.cc160
-rw-r--r--storage/xtradb/handler/ha_innodb.cc415
-rw-r--r--storage/xtradb/handler/ha_innodb.h38
-rw-r--r--storage/xtradb/handler/handler0alter.cc62
-rw-r--r--storage/xtradb/handler/xtradb_i_s.cc330
-rw-r--r--storage/xtradb/handler/xtradb_i_s.h3
-rw-r--r--storage/xtradb/include/data0type.h15
-rw-r--r--storage/xtradb/include/data0type.ic16
-rw-r--r--storage/xtradb/include/dict0boot.h33
-rw-r--r--storage/xtradb/include/dict0boot.ic3
-rw-r--r--storage/xtradb/include/dict0crea.h90
-rw-r--r--storage/xtradb/include/dict0dict.h48
-rw-r--r--storage/xtradb/include/dict0load.h29
-rw-r--r--storage/xtradb/include/row0mysql.h85
-rw-r--r--storage/xtradb/rem/rem0rec.cc18
-rw-r--r--storage/xtradb/row/row0merge.cc7
-rw-r--r--storage/xtradb/row/row0mysql.cc583
-rw-r--r--storage/xtradb/row/row0sel.cc39
-rw-r--r--storage/xtradb/srv/srv0start.cc7
22 files changed, 60 insertions, 2669 deletions
diff --git a/storage/xtradb/dict/dict0boot.cc b/storage/xtradb/dict/dict0boot.cc
index c0bb0298bea..20ab5d75205 100644
--- a/storage/xtradb/dict/dict0boot.cc
+++ b/storage/xtradb/dict/dict0boot.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -272,10 +273,6 @@ dict_boot(void)
ut_ad(DICT_NUM_FIELDS__SYS_FOREIGN_FOR_NAME == 2);
ut_ad(DICT_NUM_COLS__SYS_FOREIGN_COLS == 4);
ut_ad(DICT_NUM_FIELDS__SYS_FOREIGN_COLS == 6);
- ut_ad(DICT_NUM_COLS__SYS_ZIP_DICT == 3);
- ut_ad(DICT_NUM_FIELDS__SYS_ZIP_DICT == 5);
- ut_ad(DICT_NUM_COLS__SYS_ZIP_DICT_COLS == 3);
- ut_ad(DICT_NUM_FIELDS__SYS_ZIP_DICT_COLS == 5);
mtr_start(&mtr);
diff --git a/storage/xtradb/dict/dict0crea.cc b/storage/xtradb/dict/dict0crea.cc
index db0ca638de4..9a4040421d7 100644
--- a/storage/xtradb/dict/dict0crea.cc
+++ b/storage/xtradb/dict/dict0crea.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -1932,135 +1933,6 @@ dict_create_or_check_sys_tablespace(void)
return(err);
}
-/** Creates the zip_dict system table inside InnoDB
-at server bootstrap or server start if it is not found or is
-not of the right form.
-@return DB_SUCCESS or error code */
-UNIV_INTERN
-dberr_t
-dict_create_or_check_sys_zip_dict(void)
-{
- trx_t* trx;
- my_bool srv_file_per_table_backup;
- dberr_t err;
- dberr_t sys_zip_dict_err;
- dberr_t sys_zip_dict_cols_err;
-
- ut_a(srv_get_active_thread_type() == SRV_NONE);
-
- /* Note: The master thread has not been started at this point. */
-
- sys_zip_dict_err = dict_check_if_system_table_exists(
- "SYS_ZIP_DICT", DICT_NUM_FIELDS__SYS_ZIP_DICT + 1, 2);
- sys_zip_dict_cols_err = dict_check_if_system_table_exists(
- "SYS_ZIP_DICT_COLS", DICT_NUM_FIELDS__SYS_ZIP_DICT_COLS + 1,
- 1);
-
- if (sys_zip_dict_err == DB_SUCCESS &&
- sys_zip_dict_cols_err == DB_SUCCESS)
- return (DB_SUCCESS);
-
- trx = trx_allocate_for_mysql();
-
- trx_set_dict_operation(trx, TRX_DICT_OP_TABLE);
-
- trx->op_info = "creating zip_dict and zip_dict_cols sys tables";
-
- row_mysql_lock_data_dictionary(trx);
-
- /* Check which incomplete table definition to drop. */
-
- if (sys_zip_dict_err == DB_CORRUPTION) {
- ib_logf(IB_LOG_LEVEL_WARN,
- "Dropping incompletely created "
- "SYS_ZIP_DICT table.");
- row_drop_table_for_mysql("SYS_ZIP_DICT", trx, TRUE, TRUE);
- }
- if (sys_zip_dict_cols_err == DB_CORRUPTION) {
- ib_logf(IB_LOG_LEVEL_WARN,
- "Dropping incompletely created "
- "SYS_ZIP_DICT_COLS table.");
- row_drop_table_for_mysql("SYS_ZIP_DICT_COLS", trx, TRUE, TRUE);
- }
-
- ib_logf(IB_LOG_LEVEL_INFO,
- "Creating zip_dict and zip_dict_cols system tables.");
-
- /* We always want SYSTEM tables to be created inside the system
- tablespace. */
- srv_file_per_table_backup = srv_file_per_table;
- srv_file_per_table = 0;
-
- err = que_eval_sql(
- NULL,
- "PROCEDURE CREATE_SYS_ZIP_DICT_PROC () IS\n"
- "BEGIN\n"
- "CREATE TABLE SYS_ZIP_DICT(\n"
- " ID INT UNSIGNED NOT NULL,\n"
- " NAME CHAR("
- STRINGIFY_ARG(ZIP_DICT_MAX_NAME_LENGTH)
- ") NOT NULL,\n"
- " DATA BLOB NOT NULL\n"
- ");\n"
- "CREATE UNIQUE CLUSTERED INDEX SYS_ZIP_DICT_ID"
- " ON SYS_ZIP_DICT (ID);\n"
- "CREATE UNIQUE INDEX SYS_ZIP_DICT_NAME"
- " ON SYS_ZIP_DICT (NAME);\n"
- "CREATE TABLE SYS_ZIP_DICT_COLS(\n"
- " TABLE_ID INT UNSIGNED NOT NULL,\n"
- " COLUMN_POS INT UNSIGNED NOT NULL,\n"
- " DICT_ID INT UNSIGNED NOT NULL\n"
- ");\n"
- "CREATE UNIQUE CLUSTERED INDEX SYS_ZIP_DICT_COLS_COMPOSITE"
- " ON SYS_ZIP_DICT_COLS (TABLE_ID, COLUMN_POS);\n"
- "END;\n",
- FALSE, trx);
-
- if (err != DB_SUCCESS) {
- ib_logf(IB_LOG_LEVEL_ERROR,
- "Creation of SYS_ZIP_DICT and SYS_ZIP_DICT_COLS"
- "has failed with error %lu. Tablespace is full. "
- "Dropping incompletely created tables.",
- (ulong) err);
-
- ut_a(err == DB_OUT_OF_FILE_SPACE
- || err == DB_TOO_MANY_CONCURRENT_TRXS);
-
- row_drop_table_for_mysql("SYS_ZIP_DICT", trx, TRUE, TRUE);
- row_drop_table_for_mysql("SYS_ZIP_DICT_COLS", trx, TRUE, TRUE);
-
- if (err == DB_OUT_OF_FILE_SPACE) {
- err = DB_MUST_GET_MORE_FILE_SPACE;
- }
- }
-
- trx_commit_for_mysql(trx);
-
- row_mysql_unlock_data_dictionary(trx);
-
- trx_free_for_mysql(trx);
-
- srv_file_per_table = srv_file_per_table_backup;
-
- if (err == DB_SUCCESS) {
- ib_logf(IB_LOG_LEVEL_INFO,
- "zip_dict and zip_dict_cols system tables created.");
- }
-
- /* Note: The master thread has not been started at this point. */
- /* Confirm and move to the non-LRU part of the table LRU list. */
-
- sys_zip_dict_err = dict_check_if_system_table_exists(
- "SYS_ZIP_DICT", DICT_NUM_FIELDS__SYS_ZIP_DICT + 1, 2);
- ut_a(sys_zip_dict_err == DB_SUCCESS);
- sys_zip_dict_cols_err = dict_check_if_system_table_exists(
- "SYS_ZIP_DICT_COLS",
- DICT_NUM_FIELDS__SYS_ZIP_DICT_COLS + 1, 1);
- ut_a(sys_zip_dict_cols_err == DB_SUCCESS);
-
- return(err);
-}
-
/********************************************************************//**
Add a single tablespace definition to the data dictionary tables in the
database.
@@ -2114,456 +1986,3 @@ dict_create_add_tablespace_to_dictionary(
return(error);
}
-
-/** Add a single compression dictionary definition to the SYS_ZIP_DICT
-InnoDB system table.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_add_zip_dict(
- const char* name, /*!< in: dict name */
- ulint name_len, /*!< in: dict name length */
- const char* data, /*!< in: dict data */
- ulint data_len, /*!< in: dict data length */
- trx_t* trx) /*!< in/out: transaction */
-{
- ut_ad(name);
- ut_ad(data);
-
- pars_info_t* info = pars_info_create();
-
- pars_info_add_literal(info, "name", name, name_len,
- DATA_VARCHAR, DATA_ENGLISH);
- pars_info_add_literal(info, "data", data, data_len,
- DATA_BLOB, DATA_BINARY_TYPE | DATA_NOT_NULL);
-
- dberr_t error = que_eval_sql(info,
- "PROCEDURE P () IS\n"
- " max_id INT;\n"
- "DECLARE CURSOR cur IS\n"
- " SELECT ID FROM SYS_ZIP_DICT\n"
- " ORDER BY ID DESC;\n"
- "BEGIN\n"
- " max_id := 0;\n"
- " OPEN cur;\n"
- " FETCH cur INTO max_id;\n"
- " IF (cur % NOTFOUND) THEN\n"
- " max_id := 0;\n"
- " END IF;\n"
- " CLOSE cur;\n"
- " INSERT INTO SYS_ZIP_DICT VALUES"
- " (max_id + 1, :name, :data);\n"
- "END;\n",
- FALSE, trx);
-
- return error;
-}
-
-/** Fetch callback, just stores extracted zip_dict id in the external
-variable.
-@return TRUE if all OK */
-static
-ibool
-dict_create_extract_int_aux(
- void* row, /*!< in: sel_node_t* */
- void* user_arg) /*!< in: int32 id */
-{
- sel_node_t* node = static_cast<sel_node_t*>(row);
- dfield_t* dfield = que_node_get_val(node->select_list);
- dtype_t* type = dfield_get_type(dfield);
- ulint len = dfield_get_len(dfield);
-
- ut_a(dtype_get_mtype(type) == DATA_INT);
- ut_a(len == sizeof(ib_uint32_t));
-
- memcpy(user_arg, dfield_get_data(dfield), sizeof(ib_uint32_t));
-
- return(TRUE);
-}
-
-/** Add a single compression dictionary reference to the SYS_ZIP_DICT_COLS
-InnoDB system table.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_add_zip_dict_reference(
- ulint table_id, /*!< in: table id */
- ulint column_pos, /*!< in: column position */
- ulint dict_id, /*!< in: dict id */
- trx_t* trx) /*!< in/out: transaction */
-{
- pars_info_t* info = pars_info_create();
-
- pars_info_add_int4_literal(info, "table_id", table_id);
- pars_info_add_int4_literal(info, "column_pos", column_pos);
- pars_info_add_int4_literal(info, "dict_id", dict_id);
-
- dberr_t error = que_eval_sql(info,
- "PROCEDURE P () IS\n"
- "BEGIN\n"
- " INSERT INTO SYS_ZIP_DICT_COLS VALUES"
- " (:table_id, :column_pos, :dict_id);\n"
- "END;\n",
- FALSE, trx);
- return error;
-}
-
-/** Get a single compression dictionary id for the given
-(table id, column pos) pair.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_get_zip_dict_id_by_reference(
- ulint table_id, /*!< in: table id */
- ulint column_pos, /*!< in: column position */
- ulint* dict_id, /*!< out: dict id */
- trx_t* trx) /*!< in/out: transaction */
-{
- ut_ad(dict_id);
-
- pars_info_t* info = pars_info_create();
-
- ib_uint32_t dict_id_buf;
- mach_write_to_4(reinterpret_cast<byte*>(&dict_id_buf ),
- ULINT32_UNDEFINED);
-
- pars_info_add_int4_literal(info, "table_id", table_id);
- pars_info_add_int4_literal(info, "column_pos", column_pos);
- pars_info_bind_function(
- info, "my_func", dict_create_extract_int_aux, &dict_id_buf);
-
- dberr_t error = que_eval_sql(info,
- "PROCEDURE P () IS\n"
- "DECLARE FUNCTION my_func;\n"
- "DECLARE CURSOR cur IS\n"
- " SELECT DICT_ID FROM SYS_ZIP_DICT_COLS\n"
- " WHERE TABLE_ID = :table_id AND\n"
- " COLUMN_POS = :column_pos;\n"
- "BEGIN\n"
- " OPEN cur;\n"
- " FETCH cur INTO my_func();\n"
- " CLOSE cur;\n"
- "END;\n",
- FALSE, trx);
- if (error == DB_SUCCESS) {
- ib_uint32_t local_dict_id = mach_read_from_4(
- reinterpret_cast<const byte*>(&dict_id_buf));
- if (local_dict_id == ULINT32_UNDEFINED)
- error = DB_RECORD_NOT_FOUND;
- else
- *dict_id = local_dict_id;
- }
- return error;
-}
-
-/** Get compression dictionary id for the given name.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_get_zip_dict_id_by_name(
- const char* dict_name, /*!< in: dict name */
- ulint dict_name_len, /*!< in: dict name length */
- ulint* dict_id, /*!< out: dict id */
- trx_t* trx) /*!< in/out: transaction */
-{
- ut_ad(dict_name);
- ut_ad(dict_name_len);
- ut_ad(dict_id);
-
- pars_info_t* info = pars_info_create();
-
- pars_info_add_literal(info, "dict_name", dict_name, dict_name_len,
- DATA_VARCHAR, DATA_ENGLISH);
-
- ib_uint32_t dict_id_buf;
- mach_write_to_4(reinterpret_cast<byte*>(&dict_id_buf),
- ULINT32_UNDEFINED);
- pars_info_bind_function(
- info, "my_func", dict_create_extract_int_aux, &dict_id_buf);
-
- dberr_t error = que_eval_sql(info,
- "PROCEDURE P () IS\n"
- "DECLARE FUNCTION my_func;\n"
- "DECLARE CURSOR cur IS\n"
- " SELECT ID FROM SYS_ZIP_DICT\n"
- " WHERE NAME = :dict_name;\n"
- "BEGIN\n"
- " OPEN cur;\n"
- " FETCH cur INTO my_func();\n"
- " CLOSE cur;\n"
- "END;\n",
- FALSE, trx);
- if (error == DB_SUCCESS) {
- ib_uint32_t local_dict_id = mach_read_from_4(
- reinterpret_cast<const byte*>(&dict_id_buf));
- if (local_dict_id == ULINT32_UNDEFINED)
- error = DB_RECORD_NOT_FOUND;
- else
- *dict_id = local_dict_id;
- }
- return error;
-}
-
-/** Auxiliary enum used to indicate zip dict data extraction result code */
-enum zip_dict_info_aux_code {
- zip_dict_info_success, /*!< success */
- zip_dict_info_not_found, /*!< zip dict record not found */
- zip_dict_info_oom, /*!< out of memory */
- zip_dict_info_corrupted_name, /*!< corrupted zip dict name */
- zip_dict_info_corrupted_data /*!< corrupted zip dict data */
-};
-
-/** Auxiliary struct used to return zip dict info aling with result code */
-struct zip_dict_info_aux {
- LEX_STRING name; /*!< zip dict name */
- LEX_STRING data; /*!< zip dict data */
- int code; /*!< result code (0 - success) */
-};
-
-/** Fetch callback, just stores extracted zip_dict data in the external
-variable.
-@return always returns TRUE */
-static
-ibool
-dict_create_get_zip_dict_info_by_id_aux(
- void* row, /*!< in: sel_node_t* */
- void* user_arg) /*!< in: pointer to zip_dict_info_aux* */
-{
- sel_node_t* node = static_cast<sel_node_t*>(row);
- zip_dict_info_aux* result =
- static_cast<zip_dict_info_aux*>(user_arg);
-
- result->code = zip_dict_info_success;
- result->name.str = 0;
- result->name.length = 0;
- result->data.str = 0;
- result->data.length = 0;
-
- /* NAME field */
- que_node_t* exp = node->select_list;
- ut_a(exp != 0);
-
- dfield_t* dfield = que_node_get_val(exp);
- dtype_t* type = dfield_get_type(dfield);
- ut_a(dtype_get_mtype(type) == DATA_VARCHAR);
-
- ulint len = dfield_get_len(dfield);
- void* data = dfield_get_data(dfield);
-
-
- if (len == UNIV_SQL_NULL) {
- result->code = zip_dict_info_corrupted_name;
- }
- else {
- result->name.str =
- static_cast<char*>(my_malloc(len + 1, MYF(0)));
- if (result->name.str == 0) {
- result->code = zip_dict_info_oom;
- }
- else {
- memcpy(result->name.str, data, len);
- result->name.str[len] = '\0';
- result->name.length = len;
- }
- }
-
- /* DATA field */
- exp = que_node_get_next(exp);
- ut_a(exp != 0);
-
- dfield = que_node_get_val(exp);
- type = dfield_get_type(dfield);
- ut_a(dtype_get_mtype(type) == DATA_BLOB);
-
- len = dfield_get_len(dfield);
- data = dfield_get_data(dfield);
-
- if (len == UNIV_SQL_NULL) {
- result->code = zip_dict_info_corrupted_data;
- }
- else {
- result->data.str =
- static_cast<char*>(my_malloc(
- len == 0 ? 1 : len, MYF(0)));
- if (result->data.str == 0) {
- result->code = zip_dict_info_oom;
- }
- else {
- memcpy(result->data.str, data, len);
- result->data.length = len;
- }
- }
-
- ut_ad(que_node_get_next(exp) == 0);
-
- if (result->code != zip_dict_info_success) {
- if (result->name.str == 0) {
- mem_free(result->name.str);
- result->name.str = 0;
- result->name.length = 0;
- }
- if (result->data.str == 0) {
- mem_free(result->data.str);
- result->data.str = 0;
- result->data.length = 0;
- }
- }
-
- return TRUE;
-}
-
-/** Get compression dictionary info (name and data) for the given id.
-Allocates memory for name and data on success.
-Must be freed with mem_free().
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_get_zip_dict_info_by_id(
- ulint dict_id, /*!< in: dict id */
- char** name, /*!< out: dict name */
- ulint* name_len, /*!< out: dict name length*/
- char** data, /*!< out: dict data */
- ulint* data_len, /*!< out: dict data length*/
- trx_t* trx) /*!< in/out: transaction */
-{
- ut_ad(name);
- ut_ad(data);
-
- zip_dict_info_aux rec;
- rec.code = zip_dict_info_not_found;
- pars_info_t* info = pars_info_create();
-
- pars_info_add_int4_literal(info, "id", dict_id);
- pars_info_bind_function(
- info, "my_func", dict_create_get_zip_dict_info_by_id_aux,
- &rec);
-
- dberr_t error = que_eval_sql(info,
- "PROCEDURE P () IS\n"
- "DECLARE FUNCTION my_func;\n"
- "DECLARE CURSOR cur IS\n"
- " SELECT NAME, DATA FROM SYS_ZIP_DICT\n"
- " WHERE ID = :id;\n"
- "BEGIN\n"
- " OPEN cur;\n"
- " FETCH cur INTO my_func();\n"
- " CLOSE cur;\n"
- "END;\n",
- FALSE, trx);
- if (error == DB_SUCCESS) {
- switch (rec.code) {
- case zip_dict_info_success:
- *name = rec.name.str;
- *name_len = rec.name.length;
- *data = rec.data.str;
- *data_len = rec.data.length;
- break;
- case zip_dict_info_not_found:
- error = DB_RECORD_NOT_FOUND;
- break;
- case zip_dict_info_oom:
- error = DB_OUT_OF_MEMORY;
- break;
- case zip_dict_info_corrupted_name:
- case zip_dict_info_corrupted_data:
- error = DB_INVALID_NULL;
- break;
- default:
- ut_error;
- }
- }
- return error;
-}
-
-/** Remove a single compression dictionary from the data dictionary
-tables in the database.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_remove_zip_dict(
- const char* name, /*!< in: dict name */
- ulint name_len, /*!< in: dict name length */
- trx_t* trx) /*!< in/out: transaction */
-{
- ut_ad(name);
-
- pars_info_t* info = pars_info_create();
-
- ib_uint32_t dict_id_buf;
- mach_write_to_4(reinterpret_cast<byte*>(&dict_id_buf),
- ULINT32_UNDEFINED);
- ib_uint32_t counter_buf;
- mach_write_to_4(reinterpret_cast<byte*>(&counter_buf),
- ULINT32_UNDEFINED);
-
- pars_info_add_literal(info, "name", name, name_len,
- DATA_VARCHAR, DATA_ENGLISH);
- pars_info_bind_int4_literal(info, "dict_id", &dict_id_buf);
- pars_info_bind_function(info, "find_dict_func",
- dict_create_extract_int_aux, &dict_id_buf);
- pars_info_bind_function(info, "count_func",
- dict_create_extract_int_aux, &counter_buf);
-
- dberr_t error = que_eval_sql(info,
- "PROCEDURE P () IS\n"
- "DECLARE FUNCTION find_dict_func;\n"
- "DECLARE FUNCTION count_func;\n"
- "DECLARE CURSOR dict_cur IS\n"
- " SELECT ID FROM SYS_ZIP_DICT\n"
- " WHERE NAME = :name\n"
- " FOR UPDATE;\n"
- "DECLARE CURSOR ref_cur IS\n"
- " SELECT 1 FROM SYS_ZIP_DICT_COLS\n"
- " WHERE DICT_ID = :dict_id;\n"
- "BEGIN\n"
- " OPEN dict_cur;\n"
- " FETCH dict_cur INTO find_dict_func();\n"
- " IF NOT (SQL % NOTFOUND) THEN\n"
- " OPEN ref_cur;\n"
- " FETCH ref_cur INTO count_func();\n"
- " IF SQL % NOTFOUND THEN\n"
- " DELETE FROM SYS_ZIP_DICT WHERE CURRENT OF dict_cur;\n"
- " END IF;\n"
- " CLOSE ref_cur;\n"
- " END IF;\n"
- " CLOSE dict_cur;\n"
- "END;\n",
- FALSE, trx);
- if (error == DB_SUCCESS) {
- ib_uint32_t local_dict_id = mach_read_from_4(
- reinterpret_cast<const byte*>(&dict_id_buf));
- if (local_dict_id == ULINT32_UNDEFINED) {
- error = DB_RECORD_NOT_FOUND;
- }
- else {
- ib_uint32_t local_counter = mach_read_from_4(
- reinterpret_cast<const byte*>(&counter_buf));
- if (local_counter != ULINT32_UNDEFINED)
- error = DB_ROW_IS_REFERENCED;
- }
- }
- return error;
-}
-
-/** Remove all compression dictionary references for the given table ID from
-the data dictionary tables in the database.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_remove_zip_dict_references_for_table(
- ulint table_id, /*!< in: table id */
- trx_t* trx) /*!< in/out: transaction */
-{
- pars_info_t* info = pars_info_create();
-
- pars_info_add_int4_literal(info, "table_id", table_id);
-
- dberr_t error = que_eval_sql(info,
- "PROCEDURE P () IS\n"
- "BEGIN\n"
- " DELETE FROM SYS_ZIP_DICT_COLS\n"
- " WHERE TABLE_ID = :table_id;\n"
- "END;\n",
- FALSE, trx);
- return error;
-}
diff --git a/storage/xtradb/dict/dict0dict.cc b/storage/xtradb/dict/dict0dict.cc
index 3845138c8bf..339e5615bea 100644
--- a/storage/xtradb/dict/dict0dict.cc
+++ b/storage/xtradb/dict/dict0dict.cc
@@ -2,7 +2,7 @@
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2012, Facebook Inc.
-Copyright (c) 2014, 2015, MariaDB Corporation.
+Copyright (c) 2014, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -7288,161 +7288,3 @@ dict_tf_to_row_format_string(
return(0);
}
#endif /* !UNIV_HOTBACKUP */
-
-/** Insert a records into SYS_ZIP_DICT.
-@retval DB_SUCCESS if OK
-@retval dberr_t if the insert failed */
-UNIV_INTERN
-dberr_t
-dict_create_zip_dict(
- const char* name, /*!< in: zip_dict name */
- ulint name_len, /*!< in: zip_dict name length*/
- const char* data, /*!< in: zip_dict data */
- ulint data_len) /*!< in: zip_dict data length */
-{
- dberr_t err = DB_SUCCESS;
- trx_t* trx;
-
- ut_ad(name);
- ut_ad(data);
-
- rw_lock_x_lock(&dict_operation_lock);
- dict_mutex_enter_for_mysql();
-
- trx = trx_allocate_for_background();
- trx->op_info = "insert zip_dict";
- trx->dict_operation_lock_mode = RW_X_LATCH;
- trx_start_if_not_started(trx);
-
- err = dict_create_add_zip_dict(name, name_len, data, data_len, trx);
-
- if (err == DB_SUCCESS) {
- trx_commit_for_mysql(trx);
- }
- else {
- trx->op_info = "rollback of internal trx on zip_dict table";
- trx_rollback_to_savepoint(trx, NULL);
- ut_a(trx->error_state == DB_SUCCESS);
- }
- trx->op_info = "";
- trx->dict_operation_lock_mode = 0;
- trx_free_for_background(trx);
-
- dict_mutex_exit_for_mysql();
- rw_lock_x_unlock(&dict_operation_lock);
-
- return err;
-}
-/** Get single compression dictionary id for the given
-(table id, column pos) pair.
-@retval DB_SUCCESS if OK
-@retval DB_RECORD_NOT_FOUND if not found */
-UNIV_INTERN
-dberr_t
-dict_get_dictionary_id_by_key(
- ulint table_id, /*!< in: table id */
- ulint column_pos, /*!< in: column position */
- ulint* dict_id) /*!< out: zip_dict id */
-{
- dberr_t err = DB_SUCCESS;
- trx_t* trx;
-
- rw_lock_s_lock(&dict_operation_lock);
- dict_mutex_enter_for_mysql();
-
- trx = trx_allocate_for_background();
- trx->op_info = "get zip dict id by composite key";
- trx->dict_operation_lock_mode = RW_S_LATCH;
- trx_start_if_not_started(trx);
-
- err = dict_create_get_zip_dict_id_by_reference(table_id, column_pos,
- dict_id, trx);
-
- trx_commit_for_mysql(trx);
- trx->dict_operation_lock_mode = 0;
- trx_free_for_background(trx);
-
- dict_mutex_exit_for_mysql();
- rw_lock_s_unlock(&dict_operation_lock);
-
- return err;
-}
-/** Get compression dictionary info (name and data) for the given id.
-Allocates memory in name->str and data->str on success.
-Must be freed with mem_free().
-@retval DB_SUCCESS if OK
-@retval DB_RECORD_NOT_FOUND if not found */
-UNIV_INTERN
-dberr_t
-dict_get_dictionary_info_by_id(
- ulint dict_id, /*!< in: table name */
- char** name, /*!< out: dictionary name */
- ulint* name_len, /*!< out: dictionary name length*/
- char** data, /*!< out: dictionary data */
- ulint* data_len) /*!< out: dictionary data length*/
-{
- dberr_t err = DB_SUCCESS;
- trx_t* trx;
-
- rw_lock_s_lock(&dict_operation_lock);
- dict_mutex_enter_for_mysql();
-
- trx = trx_allocate_for_background();
- trx->op_info = "get zip dict name and data by id";
- trx->dict_operation_lock_mode = RW_S_LATCH;
- trx_start_if_not_started(trx);
-
- err = dict_create_get_zip_dict_info_by_id(dict_id, name, name_len,
- data, data_len, trx);
-
- trx_commit_for_mysql(trx);
- trx->dict_operation_lock_mode = 0;
- trx_free_for_background(trx);
-
- dict_mutex_exit_for_mysql();
- rw_lock_s_unlock(&dict_operation_lock);
-
- return err;
-}
-/** Delete a record in SYS_ZIP_DICT with the given name.
-@retval DB_SUCCESS if OK
-@retval DB_RECORD_NOT_FOUND if not found
-@retval DB_ROW_IS_REFERENCED if in use */
-UNIV_INTERN
-dberr_t
-dict_drop_zip_dict(
- const char* name, /*!< in: zip_dict name */
- ulint name_len) /*!< in: zip_dict name length*/
-{
- dberr_t err = DB_SUCCESS;
- trx_t* trx;
-
- ut_ad(name);
-
- rw_lock_x_lock(&dict_operation_lock);
- dict_mutex_enter_for_mysql();
-
- trx = trx_allocate_for_background();
- trx->op_info = "delete zip_dict";
- trx->dict_operation_lock_mode = RW_X_LATCH;
- trx_start_if_not_started(trx);
-
- err = dict_create_remove_zip_dict(name, name_len, trx);
-
- if (err == DB_SUCCESS) {
- trx_commit_for_mysql(trx);
- }
- else {
- trx->op_info = "rollback of internal trx on zip_dict table";
- trx_rollback_to_savepoint(trx, NULL);
- ut_a(trx->error_state == DB_SUCCESS);
- }
- trx->op_info = "";
- trx->dict_operation_lock_mode = 0;
- trx_free_for_background(trx);
-
- dict_mutex_exit_for_mysql();
- rw_lock_x_unlock(&dict_operation_lock);
-
- return err;
-}
diff --git a/storage/xtradb/dict/dict0load.cc b/storage/xtradb/dict/dict0load.cc
index 9ea4f4d873a..6cbd0a3d488 100644
--- a/storage/xtradb/dict/dict0load.cc
+++ b/storage/xtradb/dict/dict0load.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -56,9 +57,7 @@ static const char* SYSTEM_TABLE_NAME[] = {
"SYS_FOREIGN",
"SYS_FOREIGN_COLS",
"SYS_TABLESPACES",
- "SYS_DATAFILES",
- "SYS_ZIP_DICT",
- "SYS_ZIP_DICT_COLS"
+ "SYS_DATAFILES"
};
/* If this flag is TRUE, then we will load the cluster index's (and tables')
@@ -730,161 +729,6 @@ err_len:
return(NULL);
}
-/** This function parses a SYS_ZIP_DICT record, extracts necessary
-information from the record and returns to caller.
-@return error message, or NULL on success */
-UNIV_INTERN
-const char*
-dict_process_sys_zip_dict(
- mem_heap_t* heap, /*!< in/out: heap memory */
- ulint zip_size, /*!< in: nonzero=compressed BLOB page size */
- const rec_t* rec, /*!< in: current SYS_ZIP_DICT rec */
- ulint* id, /*!< out: dict id */
- const char** name, /*!< out: dict name */
- const char** data, /*!< out: dict data */
- ulint* data_len) /*!< out: dict data length */
-{
- ulint len;
- const byte* field;
-
- /* Initialize the output values */
- *id = ULINT_UNDEFINED;
- *name = NULL;
- *data = NULL;
- *data_len = 0;
-
- if (UNIV_UNLIKELY(rec_get_deleted_flag(rec, 0))) {
- return("delete-marked record in SYS_ZIP_DICT");
- }
-
- if (UNIV_UNLIKELY(
- rec_get_n_fields_old(rec)!= DICT_NUM_FIELDS__SYS_ZIP_DICT)) {
- return("wrong number of columns in SYS_ZIP_DICT record");
- }
-
- field = rec_get_nth_field_old(
- rec, DICT_FLD__SYS_ZIP_DICT__ID, &len);
- if (UNIV_UNLIKELY(len != DICT_FLD_LEN_SPACE)) {
- goto err_len;
- }
- *id = mach_read_from_4(field);
-
- rec_get_nth_field_offs_old(
- rec, DICT_FLD__SYS_ZIP_DICT__DB_TRX_ID, &len);
- if (UNIV_UNLIKELY(len != DATA_TRX_ID_LEN && len != UNIV_SQL_NULL)) {
- goto err_len;
- }
-
- rec_get_nth_field_offs_old(
- rec, DICT_FLD__SYS_ZIP_DICT__DB_ROLL_PTR, &len);
- if (UNIV_UNLIKELY(len != DATA_ROLL_PTR_LEN && len != UNIV_SQL_NULL)) {
- goto err_len;
- }
-
- field = rec_get_nth_field_old(
- rec, DICT_FLD__SYS_ZIP_DICT__NAME, &len);
- if (UNIV_UNLIKELY(len == 0 || len == UNIV_SQL_NULL)) {
- goto err_len;
- }
- *name = mem_heap_strdupl(heap, (char*) field, len);
-
- field = rec_get_nth_field_old(
- rec, DICT_FLD__SYS_ZIP_DICT__DATA, &len);
- if (UNIV_UNLIKELY(len == UNIV_SQL_NULL)) {
- goto err_len;
- }
-
- if (rec_get_1byte_offs_flag(rec) == 0 &&
- rec_2_is_field_extern(rec, DICT_FLD__SYS_ZIP_DICT__DATA)) {
- ut_a(len >= BTR_EXTERN_FIELD_REF_SIZE);
-
- if (UNIV_UNLIKELY
- (!memcmp(field + len - BTR_EXTERN_FIELD_REF_SIZE,
- field_ref_zero,
- BTR_EXTERN_FIELD_REF_SIZE))) {
- goto err_len;
- }
- *data = reinterpret_cast<char*>(
- btr_copy_externally_stored_field(data_len, field,
- zip_size, len, heap, 0));
- }
- else {
- *data_len = len;
- *data = static_cast<char*>(mem_heap_dup(heap, field, len));
- }
-
- return(NULL);
-
-err_len:
- return("incorrect column length in SYS_ZIP_DICT");
-}
-
-/** This function parses a SYS_ZIP_DICT_COLS record, extracts necessary
-information from the record and returns to caller.
-@return error message, or NULL on success */
-UNIV_INTERN
-const char*
-dict_process_sys_zip_dict_cols(
- mem_heap_t* heap, /*!< in/out: heap memory */
- const rec_t* rec, /*!< in: current SYS_ZIP_DICT rec */
- ulint* table_id, /*!< out: table id */
- ulint* column_pos, /*!< out: column position */
- ulint* dict_id) /*!< out: dict id */
-{
- ulint len;
- const byte* field;
-
- /* Initialize the output values */
- *table_id = ULINT_UNDEFINED;
- *column_pos = ULINT_UNDEFINED;
- *dict_id = ULINT_UNDEFINED;
-
- if (UNIV_UNLIKELY(rec_get_deleted_flag(rec, 0))) {
- return("delete-marked record in SYS_ZIP_DICT_COLS");
- }
-
- if (UNIV_UNLIKELY(rec_get_n_fields_old(rec) !=
- DICT_NUM_FIELDS__SYS_ZIP_DICT_COLS)) {
- return("wrong number of columns in SYS_ZIP_DICT_COLS"
- " record");
- }
-
- field = rec_get_nth_field_old(
- rec, DICT_FLD__SYS_ZIP_DICT_COLS__TABLE_ID, &len);
- if (UNIV_UNLIKELY(len != DICT_FLD_LEN_SPACE)) {
-err_len:
- return("incorrect column length in SYS_ZIP_DICT_COLS");
- }
- *table_id = mach_read_from_4(field);
-
- field = rec_get_nth_field_old(
- rec, DICT_FLD__SYS_ZIP_DICT_COLS__COLUMN_POS, &len);
- if (UNIV_UNLIKELY(len != DICT_FLD_LEN_SPACE)) {
- goto err_len;
- }
- *column_pos = mach_read_from_4(field);
-
- rec_get_nth_field_offs_old(
- rec, DICT_FLD__SYS_ZIP_DICT_COLS__DB_TRX_ID, &len);
- if (UNIV_UNLIKELY(len != DATA_TRX_ID_LEN && len != UNIV_SQL_NULL)) {
- goto err_len;
- }
-
- rec_get_nth_field_offs_old(
- rec, DICT_FLD__SYS_ZIP_DICT_COLS__DB_ROLL_PTR, &len);
- if (UNIV_UNLIKELY(len != DATA_ROLL_PTR_LEN && len != UNIV_SQL_NULL)) {
- goto err_len;
- }
-
- field = rec_get_nth_field_old(
- rec, DICT_FLD__SYS_ZIP_DICT_COLS__DICT_ID, &len);
- if (UNIV_UNLIKELY(len != DICT_FLD_LEN_SPACE)) {
- goto err_len;
- }
- *dict_id = mach_read_from_4(field);
-
- return(NULL);
-}
/********************************************************************//**
Determine the flags of a table as stored in SYS_TABLES.TYPE and N_COLS.
@return ULINT_UNDEFINED if error, else a valid dict_table_t::flags. */
diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc
index d072e61a237..ff4f218b557 100644
--- a/storage/xtradb/handler/ha_innodb.cc
+++ b/storage/xtradb/handler/ha_innodb.cc
@@ -4,7 +4,7 @@ Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, 2009 Google Inc.
Copyright (c) 2009, Percona Inc.
Copyright (c) 2012, Facebook Inc.
-Copyright (c) 2013, 2016, MariaDB Corporation.
+Copyright (c) 2013, 2017, MariaDB Corporation.
Portions of this file contain modifications contributed and copyrighted by
Google, Inc. Those modifications are gratefully acknowledged and are described
@@ -107,14 +107,6 @@ this program; if not, write to the Free Software Foundation, Inc.,
#define thd_get_trx_isolation(X) ((enum_tx_isolation)thd_tx_isolation(X))
-#ifndef HAVE_PERCONA_COMPRESSED_COLUMNS
-#define COLUMN_FORMAT_TYPE_COMPRESSED 0xBADF00D
-#define SQLCOM_CREATE_COMPRESSION_DICTIONARY 0xDECAF
-#define SQLCOM_DROP_COMPRESSION_DICTIONARY 0xC0FFEE
-#define ER_COMPRESSION_DICTIONARY_DOES_NOT_EXIST 0xDEADFACE
-const static LEX_CSTRING null_lex_cstr={0,0};
-#endif
-
#ifdef MYSQL_DYNAMIC_PLUGIN
#define tc_size 400
#define tdc_size 400
@@ -1476,30 +1468,6 @@ normalize_table_name_low(
ibool set_lower_case); /* in: TRUE if we want to set
name to lower case */
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
-/** Creates a new compression dictionary. */
-static
-handler_create_zip_dict_result
-innobase_create_zip_dict(
- handlerton* hton, /*!< in: innobase handlerton */
- THD* thd, /*!< in: handle to the MySQL thread */
- const char* name, /*!< in: zip dictionary name */
- ulint* name_len,
- /*!< in/out: zip dictionary name length */
- const char* data, /*!< in: zip dictionary data */
- ulint* data_len);
- /*!< in/out: zip dictionary data length */
-
-/** Drops a existing compression dictionary. */
-static
-handler_drop_zip_dict_result
-innobase_drop_zip_dict(
- handlerton* hton, /*!< in: innobase handlerton */
- THD* thd, /*!< in: handle to the MySQL thread */
- const char* name, /*!< in: zip dictionary name */
- ulint* name_len);
- /*!< in/out: zip dictionary name length */
-#endif
/*************************************************************//**
Checks if buffer pool is big enough to enable backoff algorithm.
InnoDB empty free list algorithm backoff requires free pages
@@ -3591,10 +3559,6 @@ innobase_init(
if (srv_file_per_table)
innobase_hton->tablefile_extensions = ha_innobase_exts;
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- innobase_hton->create_zip_dict = innobase_create_zip_dict;
- innobase_hton->drop_zip_dict = innobase_drop_zip_dict;
-#endif
ut_a(DATA_MYSQL_TRUE_VARCHAR == (ulint)MYSQL_TYPE_VARCHAR);
#ifndef DBUG_OFF
@@ -4288,90 +4252,6 @@ innobase_purge_changed_page_bitmaps(
return (my_bool)log_online_purge_changed_page_bitmaps(lsn);
}
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
-/** Creates a new compression dictionary. */
-static
-handler_create_zip_dict_result
-innobase_create_zip_dict(
- handlerton* hton, /*!< in: innobase handlerton */
- THD* thd, /*!< in: handle to the MySQL thread */
- const char* name, /*!< in: zip dictionary name */
- ulint* name_len,
- /*!< in/out: zip dictionary name length */
- const char* data, /*!< in: zip dictionary data */
- ulint* data_len)
- /*!< in/out: zip dictionary data length */
-{
- handler_create_zip_dict_result result =
- HA_CREATE_ZIP_DICT_UNKNOWN_ERROR;
-
- DBUG_ENTER("innobase_create_zip_dict");
- DBUG_ASSERT(hton == innodb_hton_ptr);
-
- if (UNIV_UNLIKELY(high_level_read_only)) {
- DBUG_RETURN(HA_CREATE_ZIP_DICT_READ_ONLY);
- }
-
- if (UNIV_UNLIKELY(*name_len > ZIP_DICT_MAX_NAME_LENGTH)) {
- *name_len = ZIP_DICT_MAX_NAME_LENGTH;
- DBUG_RETURN(HA_CREATE_ZIP_DICT_NAME_TOO_LONG);
- }
-
- if (UNIV_UNLIKELY(*data_len > ZIP_DICT_MAX_DATA_LENGTH)) {
- *data_len = ZIP_DICT_MAX_DATA_LENGTH;
- DBUG_RETURN(HA_CREATE_ZIP_DICT_DATA_TOO_LONG);
- }
-
- switch (dict_create_zip_dict(name, *name_len, data, *data_len)) {
- case DB_SUCCESS:
- result = HA_CREATE_ZIP_DICT_OK;
- break;
- case DB_DUPLICATE_KEY:
- result = HA_CREATE_ZIP_DICT_ALREADY_EXISTS;
- break;
- default:
- ut_ad(0);
- result = HA_CREATE_ZIP_DICT_UNKNOWN_ERROR;
- }
- DBUG_RETURN(result);
-}
-
-/** Drops a existing compression dictionary. */
-static
-handler_drop_zip_dict_result
-innobase_drop_zip_dict(
- handlerton* hton, /*!< in: innobase handlerton */
- THD* thd, /*!< in: handle to the MySQL thread */
- const char* name, /*!< in: zip dictionary name */
- ulint* name_len)
- /*!< in/out: zip dictionary name length */
-{
- handler_drop_zip_dict_result result = HA_DROP_ZIP_DICT_UNKNOWN_ERROR;
-
- DBUG_ENTER("innobase_drop_zip_dict");
- DBUG_ASSERT(hton == innodb_hton_ptr);
-
- if (UNIV_UNLIKELY(high_level_read_only)) {
- DBUG_RETURN(HA_DROP_ZIP_DICT_READ_ONLY);
- }
-
- switch (dict_drop_zip_dict(name, *name_len)) {
- case DB_SUCCESS:
- result = HA_DROP_ZIP_DICT_OK;
- break;
- case DB_RECORD_NOT_FOUND:
- result = HA_DROP_ZIP_DICT_DOES_NOT_EXIST;
- break;
- case DB_ROW_IS_REFERENCED:
- result = HA_DROP_ZIP_DICT_IS_REFERENCED;
- break;
- default:
- ut_ad(0);
- result = HA_DROP_ZIP_DICT_UNKNOWN_ERROR;
- }
- DBUG_RETURN(result);
-}
-#endif
/*****************************************************************//**
Check whether this is a fake change transaction.
@return TRUE if a fake change transaction */
@@ -5941,88 +5821,6 @@ func_exit:
DBUG_RETURN(ret);
}
-/** This function checks if all the compression dictionaries referenced
-in table->fields exist in SYS_ZIP_DICT InnoDB system table.
-@return true if all referenced dictionaries exist */
-UNIV_INTERN
-bool
-innobase_check_zip_dicts(
- const TABLE* table, /*!< in: table in MySQL data
- dictionary */
- ulint* dict_ids, /*!< out: identified zip dict ids
- (at least n_fields long) */
- trx_t* trx, /*!< in: transaction */
- const char** err_dict_name) /*!< out: the name of the
- zip_dict which does not exist. */
-{
- DBUG_ENTER("innobase_check_zip_dicts");
-
- bool res = true;
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- dberr_t err = DB_SUCCESS;
- const size_t n_fields = table->s->fields;
-
- Field* field_ptr;
- for (size_t field_idx = 0; err == DB_SUCCESS && field_idx < n_fields;
- ++field_idx)
- {
- field_ptr = table->field[field_idx];
- if (field_ptr->has_associated_compression_dictionary()) {
- err = dict_create_get_zip_dict_id_by_name(
- field_ptr->zip_dict_name.str,
- field_ptr->zip_dict_name.length,
- &dict_ids[field_idx],
- trx);
- ut_a(err == DB_SUCCESS || err == DB_RECORD_NOT_FOUND);
- }
- else {
- dict_ids[field_idx] = ULINT_UNDEFINED;
- }
-
- }
-
- if (err != DB_SUCCESS) {
- res = false;
- *err_dict_name = field_ptr->zip_dict_name.str;
- }
-
-#endif
- DBUG_RETURN(res);
-}
-
-/** This function creates compression dictionary references in
-SYS_ZIP_DICT_COLS InnoDB system table for table_id based on info
-in table->fields and provided zip dict ids. */
-UNIV_INTERN
-void
-innobase_create_zip_dict_references(
- const TABLE* table, /*!< in: table in MySQL data
- dictionary */
- table_id_t ib_table_id, /*!< in: table ID in Innodb data
- dictionary */
- ulint* zip_dict_ids, /*!< in: zip dict ids
- (at least n_fields long) */
- trx_t* trx) /*!< in: transaction */
-{
- DBUG_ENTER("innobase_create_zip_dict_references");
-
- dberr_t err = DB_SUCCESS;
- const size_t n_fields = table->s->fields;
-
- for (size_t field_idx = 0; err == DB_SUCCESS && field_idx < n_fields;
- ++field_idx)
- {
- if (zip_dict_ids[field_idx] != ULINT_UNDEFINED) {
- err = dict_create_add_zip_dict_reference(ib_table_id,
- table->field[field_idx]->field_index,
- zip_dict_ids[field_idx], trx);
- ut_a(err == DB_SUCCESS);
- }
- }
-
- DBUG_VOID_RETURN;
-}
-
/*******************************************************************//**
This function uses index translation table to quickly locate the
requested index structure.
@@ -7289,16 +7087,7 @@ ha_innobase::store_key_val_for_row(
blob_data = row_mysql_read_blob_ref(&blob_len,
(byte*) (record
+ (ulint) get_field_offset(table, field)),
- (ulint) field->pack_length(),
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- field->column_format() ==
- COLUMN_FORMAT_TYPE_COMPRESSED,
- reinterpret_cast<const byte*>(
- field->zip_dict_data.str),
- field->zip_dict_data.length, prebuilt);
-#else
- 0, 0, 0, prebuilt);
-#endif
+ (ulint) field->pack_length());
true_len = blob_len;
@@ -7613,14 +7402,6 @@ build_template_field(
templ->mbminlen = dict_col_get_mbminlen(col);
templ->mbmaxlen = dict_col_get_mbmaxlen(col);
templ->is_unsigned = col->prtype & DATA_UNSIGNED;
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- templ->compressed = (field->column_format()
- == COLUMN_FORMAT_TYPE_COMPRESSED);
- templ->zip_dict_data = field->zip_dict_data;
-#else
- templ->compressed = 0;
- templ->zip_dict_data = null_lex_cstr;
-#endif
if (!dict_index_is_clust(index)
&& templ->rec_field_no == ULINT_UNDEFINED) {
@@ -8409,10 +8190,8 @@ calc_row_difference(
case DATA_BLOB:
/* Do not compress blob column while comparing*/
- o_ptr = row_mysql_read_blob_ref(&o_len, o_ptr, o_len,
- false, 0, 0, prebuilt);
- n_ptr = row_mysql_read_blob_ref(&n_len, n_ptr, n_len,
- false, 0, 0, prebuilt);
+ o_ptr = row_mysql_read_blob_ref(&o_len, o_ptr, o_len);
+ n_ptr = row_mysql_read_blob_ref(&n_len, n_ptr, n_len);
break;
@@ -8482,17 +8261,7 @@ calc_row_difference(
TRUE,
new_mysql_row_col,
col_pack_len,
- dict_table_is_comp(prebuilt->table),
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- field->column_format() ==
- COLUMN_FORMAT_TYPE_COMPRESSED,
- reinterpret_cast<const byte*>(
- field->zip_dict_data.str),
- field->zip_dict_data.length,
-#else
- 0, 0, 0,
-#endif
- prebuilt);
+ dict_table_is_comp(prebuilt->table));
dfield_copy(&ufield->new_val, &dfield);
} else {
dfield_set_null(&ufield->new_val);
@@ -10179,7 +9948,6 @@ create_table_def(
ulint unsigned_type;
ulint binary_type;
ulint long_true_varchar;
- ulint compressed;
ulint charset_no;
ulint i;
ulint doc_id_col = 0;
@@ -10329,13 +10097,6 @@ create_table_def(
}
}
- /* Check if the the field has COMPRESSED attribute */
- compressed = 0;
- if (field->column_format() ==
- COLUMN_FORMAT_TYPE_COMPRESSED) {
- compressed = DATA_COMPRESSED;
- }
-
/* First check whether the column to be added has a
system reserved name. */
if (dict_col_name_is_reserved(field->field_name)){
@@ -10356,8 +10117,7 @@ err_col:
dtype_form_prtype(
(ulint) field->type()
| nulls_allowed | unsigned_type
- | binary_type | long_true_varchar
- | compressed,
+ | binary_type | long_true_varchar,
charset_no),
col_len);
}
@@ -11187,9 +10947,6 @@ ha_innobase::create(
const char* stmt;
size_t stmt_len;
- mem_heap_t* heap = 0;
- ulint* zip_dict_ids = 0;
-
DBUG_ENTER("ha_innobase::create");
DBUG_ASSERT(thd != NULL);
@@ -11280,25 +11037,6 @@ ha_innobase::create(
row_mysql_lock_data_dictionary(trx);
- heap = mem_heap_create(form->s->fields * sizeof(ulint));
- zip_dict_ids = static_cast<ulint*>(
- mem_heap_alloc(heap, form->s->fields * sizeof(ulint)));
-
- /* This is currently required for valgrind because MariaDB does
- not currently support compressed columns. */
- for (size_t field_idx = 0; field_idx < form->s->fields; ++field_idx) {
- zip_dict_ids[field_idx] = ULINT_UNDEFINED;
- }
-
- const char* err_zip_dict_name = 0;
- if (!innobase_check_zip_dicts(form, zip_dict_ids,
- trx, &err_zip_dict_name)) {
- error = -1;
- my_error(ER_COMPRESSION_DICTIONARY_DOES_NOT_EXIST,
- MYF(0), err_zip_dict_name);
- goto cleanup;
- }
-
error = create_table_def(trx, form, norm_name, temp_path,
remote_path, flags, flags2);
if (error) {
@@ -11406,22 +11144,6 @@ ha_innobase::create(
dict_table_get_all_fts_indexes(innobase_table, fts->indexes);
}
- /*
- Adding compression dictionary <-> compressed table column links
- to the SYS_ZIP_DICT_COLS table.
- */
- ut_a(zip_dict_ids != 0);
- {
- dict_table_t* local_table = dict_table_open_on_name(
- norm_name, TRUE, FALSE, DICT_ERR_IGNORE_NONE);
-
- ut_a(local_table);
- table_id_t table_id = local_table->id;
- dict_table_close(local_table, TRUE, FALSE);
- innobase_create_zip_dict_references(form,
- table_id, zip_dict_ids, trx);
- }
-
stmt = innobase_get_stmt(thd, &stmt_len);
if (stmt) {
@@ -11538,9 +11260,6 @@ ha_innobase::create(
trx_free_for_mysql(trx);
- if (heap != 0)
- mem_heap_free(heap);
-
DBUG_RETURN(0);
cleanup:
@@ -11550,9 +11269,6 @@ cleanup:
trx_free_for_mysql(trx);
- if (heap != 0)
- mem_heap_free(heap);
-
DBUG_RETURN(error);
}
@@ -13834,10 +13550,6 @@ ha_innobase::extra(
row_mysql_prebuilt_free_blob_heap(prebuilt);
}
- if (prebuilt->compress_heap) {
- row_mysql_prebuilt_free_compress_heap(prebuilt);
- }
-
break;
case HA_EXTRA_RESET_STATE:
reset_template();
@@ -13889,10 +13601,6 @@ ha_innobase::reset()
row_mysql_prebuilt_free_blob_heap(prebuilt);
}
- if (prebuilt->compress_heap) {
- row_mysql_prebuilt_free_compress_heap(prebuilt);
- }
-
reset_template();
ds_mrr.dsmrr_close();
@@ -14092,11 +13800,7 @@ ha_innobase::external_lock(
&& lock_type == F_WRLCK)
|| thd_sql_command(thd) == SQLCOM_CREATE_INDEX
|| thd_sql_command(thd) == SQLCOM_DROP_INDEX
- || thd_sql_command(thd) == SQLCOM_DELETE
- || thd_sql_command(thd) ==
- SQLCOM_CREATE_COMPRESSION_DICTIONARY
- || thd_sql_command(thd) ==
- SQLCOM_DROP_COMPRESSION_DICTIONARY)) {
+ || thd_sql_command(thd) == SQLCOM_DELETE)) {
if (thd_sql_command(thd) == SQLCOM_CREATE_TABLE)
{
@@ -14864,9 +14568,7 @@ ha_innobase::store_lock(
&& lock_type <= TL_WRITE))
|| sql_command == SQLCOM_CREATE_INDEX
|| sql_command == SQLCOM_DROP_INDEX
- || sql_command == SQLCOM_DELETE
- || sql_command == SQLCOM_CREATE_COMPRESSION_DICTIONARY
- || sql_command == SQLCOM_DROP_COMPRESSION_DICTIONARY)) {
+ || sql_command == SQLCOM_DELETE)) {
ib_senderrf(trx->mysql_thd,
IB_LOG_LEVEL_WARN, ER_READ_ONLY_MODE);
@@ -15807,84 +15509,6 @@ ha_innobase::check_if_incompatible_data(
return(COMPATIBLE_DATA_YES);
}
-/** This function reads zip dict-related info from SYS_ZIP_DICT
-and SYS_ZIP_DICT_COLS for all columns marked with
-COLUMN_FORMAT_TYPE_COMPRESSED flag and updates
-zip_dict_name / zip_dict_data for those which have associated
-compression dictionaries.
-*/
-UNIV_INTERN
-void
-ha_innobase::update_field_defs_with_zip_dict_info()
-{
- DBUG_ENTER("update_field_defs_with_zip_dict_info");
- ut_ad(!mutex_own(&dict_sys->mutex));
-
- char norm_name[FN_REFLEN];
- normalize_table_name(norm_name, table_share->normalized_path.str);
-
- dict_table_t* ib_table = dict_table_open_on_name(
- norm_name, FALSE, FALSE, DICT_ERR_IGNORE_NONE);
-
- /* if dict_table_open_on_name() returns NULL, then it means that
- TABLE_SHARE is populated for a table being created and we can
- skip filling zip dict info here */
- if (ib_table == 0)
- DBUG_VOID_RETURN;
-
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- table_id_t ib_table_id = ib_table->id;
- dict_table_close(ib_table, FALSE, FALSE);
- Field* field;
- for (uint i = 0; i < table_share->fields; ++i) {
- field = table_share->field[i];
- if (field->column_format() ==
- COLUMN_FORMAT_TYPE_COMPRESSED) {
- bool reference_found = false;
- ulint dict_id = 0;
- switch (dict_get_dictionary_id_by_key(ib_table_id, i,
- &dict_id)) {
- case DB_SUCCESS:
- reference_found = true;
- break;
- case DB_RECORD_NOT_FOUND:
- reference_found = false;
- break;
- default:
- ut_error;
- }
- if (reference_found) {
- char* local_name = 0;
- ulint local_name_len = 0;
- char* local_data = 0;
- ulint local_data_len = 0;
- if (dict_get_dictionary_info_by_id(dict_id,
- &local_name, &local_name_len,
- &local_data, &local_data_len) !=
- DB_SUCCESS) {
- ut_error;
- }
- else {
- field->zip_dict_name.str =
- local_name;
- field->zip_dict_name.length =
- local_name_len;
- field->zip_dict_data.str =
- local_data;
- field->zip_dict_data.length =
- local_data_len;
- }
- }
- else {
- field->zip_dict_name = null_lex_cstr;
- field->zip_dict_data = null_lex_cstr;
- }
- }
- }
-#endif
- DBUG_VOID_RETURN;
-}
-
/****************************************************************//**
Update the system variable innodb_io_capacity_max using the "saved"
value. This function is registered as a callback with MySQL. */
@@ -19276,21 +18900,6 @@ static MYSQL_SYSVAR_BOOL(use_stacktrace, srv_use_stacktrace,
"Print stacktrace on long semaphore wait (off by default supported only on linux)",
NULL, NULL, FALSE);
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
-static MYSQL_SYSVAR_UINT(compressed_columns_zip_level,
- srv_compressed_columns_zip_level,
- PLUGIN_VAR_RQCMDARG,
- "Compression level used for compressed columns. 0 is no compression"
- ", 1 is fastest and 9 is best compression. Default is 6.",
- NULL, NULL, DEFAULT_COMPRESSION_LEVEL, 0, 9, 0);
-
-static MYSQL_SYSVAR_ULONG(compressed_columns_threshold,
- srv_compressed_columns_threshold,
- PLUGIN_VAR_RQCMDARG,
- "Compress column data if its length exceeds this value. Default is 96",
- NULL, NULL, 96, 1, ~0UL, 0);
-#endif
-
static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(log_block_size),
MYSQL_SYSVAR(additional_mem_pool_size),
@@ -19494,10 +19103,6 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
MYSQL_SYSVAR(tmpdir),
MYSQL_SYSVAR(use_stacktrace),
MYSQL_SYSVAR(simulate_comp_failures),
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- MYSQL_SYSVAR(compressed_columns_zip_level),
- MYSQL_SYSVAR(compressed_columns_threshold),
-#endif
NULL
};
@@ -19520,10 +19125,6 @@ maria_declare_plugin(xtradb)
i_s_xtradb_read_view,
i_s_xtradb_internal_hash_tables,
i_s_xtradb_rseg,
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
-i_s_xtradb_zip_dict,
-i_s_xtradb_zip_dict_cols,
-#endif
i_s_innodb_trx,
i_s_innodb_locks,
i_s_innodb_lock_waits,
diff --git a/storage/xtradb/handler/ha_innodb.h b/storage/xtradb/handler/ha_innodb.h
index f01faaf41d8..f4c73fda89d 100644
--- a/storage/xtradb/handler/ha_innodb.h
+++ b/storage/xtradb/handler/ha_innodb.h
@@ -1,7 +1,7 @@
/*****************************************************************************
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved.
-Copyright (c) 2013, 2016, MariaDB Corporation.
+Copyright (c) 2013, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -290,14 +290,6 @@ class ha_innobase: public handler
bool check_if_supported_virtual_columns(void) { return TRUE; }
- /** This function reads zip dict-related info from SYS_ZIP_DICT
- and SYS_ZIP_DICT_COLS for all columns marked with
- COLUMN_FORMAT_TYPE_COMPRESSED flag and updates
- zip_dict_name / zip_dict_data for those which have associated
- compression dictionaries.
- */
- virtual void update_field_defs_with_zip_dict_info();
-
private:
/** Builds a 'template' to the prebuilt struct.
@@ -691,31 +683,3 @@ ib_push_frm_error(
TABLE* table, /*!< in: MySQL table */
ulint n_keys, /*!< in: InnoDB #keys */
bool push_warning); /*!< in: print warning ? */
-
-/** This function checks if all the compression dictionaries referenced
-in table->fields exist in SYS_ZIP_DICT InnoDB system table.
-@return true if all referenced dictionaries exist */
-UNIV_INTERN
-bool
-innobase_check_zip_dicts(
- const TABLE* table, /*!< in: table in MySQL data
- dictionary */
- ulint* dict_ids, /*!< out: identified zip dict ids
- (at least n_fields long) */
- trx_t* trx, /*!< in: transaction */
- const char** err_dict_name); /*!< out: the name of the
- zip_dict which does not exist. */
-
-/** This function creates compression dictionary references in
-SYS_ZIP_DICT_COLS InnoDB system table for table_id based on info
-in table->fields and provided zip dict ids. */
-UNIV_INTERN
-void
-innobase_create_zip_dict_references(
- const TABLE* table, /*!< in: table in MySQL data
- dictionary */
- table_id_t ib_table_id, /*!< in: table ID in Innodb data
- dictionary */
- ulint* zip_dict_ids, /*!< in: zip dict ids
- (at least n_fields long) */
- trx_t* trx); /*!< in: transaction */
diff --git a/storage/xtradb/handler/handler0alter.cc b/storage/xtradb/handler/handler0alter.cc
index 362ac9c1b89..c5ac48dc4e3 100644
--- a/storage/xtradb/handler/handler0alter.cc
+++ b/storage/xtradb/handler/handler0alter.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -21,11 +22,6 @@ this program; if not, write to the Free Software Foundation, Inc.,
Smart ALTER TABLE
*******************************************************/
-#ifndef HAVE_PERCONA_COMPRESSED_COLUMNS
-#define COLUMN_FORMAT_TYPE_COMPRESSED 0xBADF00D
-#define ER_COMPRESSION_DICTIONARY_DOES_NOT_EXIST 0xDEADFACE
-#endif
-
#include <my_global.h>
#include <unireg.h>
#include <mysqld_error.h>
@@ -1185,15 +1181,6 @@ innobase_col_to_mysql(
field->reset();
if (field->type() == MYSQL_TYPE_VARCHAR) {
- if (field->column_format() ==
- COLUMN_FORMAT_TYPE_COMPRESSED) {
- /* Skip compressed varchar column when
- reporting an erroneous row
- during index creation or table rebuild. */
- field->set_null();
- break;
- }
-
/* This is a >= 5.0.3 type true VARCHAR. Store the
length of the data to the first byte or the first
two bytes of dest. */
@@ -2492,14 +2479,7 @@ innobase_build_col_map_add(
byte* buf = static_cast<byte*>(mem_heap_alloc(heap, size));
row_mysql_store_col_in_innobase_format(
- dfield, buf, TRUE, field->ptr, size, comp,
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- field->column_format() == COLUMN_FORMAT_TYPE_COMPRESSED,
- reinterpret_cast<const byte*>(field->zip_dict_data.str),
- field->zip_dict_data.length, prebuilt);
-#else
- 0,0,0, prebuilt);
-#endif
+ dfield, buf, TRUE, field->ptr, size, comp);
}
/** Construct the translation table for reordering, dropping or
@@ -2753,7 +2733,6 @@ prepare_inplace_alter_table_dict(
ulint num_fts_index;
ha_innobase_inplace_ctx*ctx;
uint sql_idx;
- ulint* zip_dict_ids = 0;
DBUG_ENTER("prepare_inplace_alter_table_dict");
@@ -2890,26 +2869,6 @@ prepare_inplace_alter_table_dict(
ulint n_cols;
dtuple_t* add_cols;
- zip_dict_ids = static_cast<ulint*>(
- mem_heap_alloc(ctx->heap,
- altered_table->s->fields * sizeof(ulint)));
-
- /* This is currently required for valgrind because MariaDB does
- not currently support compressed columns. */
- for (size_t field_idx = 0;
- field_idx < altered_table->s->fields;
- ++field_idx) {
- zip_dict_ids[field_idx] = ULINT_UNDEFINED;
- }
-
- const char* err_zip_dict_name = 0;
- if (!innobase_check_zip_dicts(altered_table, zip_dict_ids,
- ctx->trx, &err_zip_dict_name)) {
- my_error(ER_COMPRESSION_DICTIONARY_DOES_NOT_EXIST,
- MYF(0), err_zip_dict_name);
- goto new_clustered_failed;
- }
-
if (innobase_check_foreigns(
ha_alter_info, altered_table, old_table,
user_table, ctx->drop_fk, ctx->num_to_drop_fk)) {
@@ -3016,12 +2975,6 @@ prepare_inplace_alter_table_dict(
}
}
- if (field->column_format() ==
- COLUMN_FORMAT_TYPE_COMPRESSED) {
- field_type |= DATA_COMPRESSED;
- }
-
-
if (dict_col_name_is_reserved(field->field_name)) {
dict_mem_table_free(ctx->new_table);
my_error(ER_WRONG_COLUMN_NAME, MYF(0),
@@ -3279,17 +3232,6 @@ op_ok:
DBUG_ASSERT(error == DB_SUCCESS);
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
- /*
- Adding compression dictionary <-> compressed table column links
- to the SYS_ZIP_DICT_COLS table.
- */
- if (zip_dict_ids != 0) {
- innobase_create_zip_dict_references(altered_table,
- ctx->trx->table_id, zip_dict_ids, ctx->trx);
- }
-#endif
-
/* Commit the data dictionary transaction in order to release
the table locks on the system tables. This means that if
MySQL crashes while creating a new primary key inside
diff --git a/storage/xtradb/handler/xtradb_i_s.cc b/storage/xtradb/handler/xtradb_i_s.cc
index eb6637dad03..84c1e5852bc 100644
--- a/storage/xtradb/handler/xtradb_i_s.cc
+++ b/storage/xtradb/handler/xtradb_i_s.cc
@@ -2,6 +2,7 @@
Copyright (c) 2007, 2012, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2010-2012, Percona Inc. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -36,7 +37,6 @@ this program; if not, write to the Free Software Foundation, Inc.,
#include <btr0sea.h> /* btr_search_sys */
#include <log0recv.h> /* recv_sys */
#include <fil0fil.h>
-#include <dict0crea.h> /* for ZIP_DICT_MAX_* constants */
/* for XTRADB_RSEG table */
#include "trx0trx.h" /* for TRX_QUE_STATE_STR_MAX_LEN */
@@ -629,331 +629,3 @@ UNIV_INTERN struct st_mysql_plugin i_s_xtradb_rseg =
STRUCT_FLD(version_info, INNODB_VERSION_STR),
STRUCT_FLD(maturity, MariaDB_PLUGIN_MATURITY_STABLE),
};
-
-
-#ifdef HAVE_PERCONA_COMPRESSED_COLUMNS
-/************************************************************************/
-enum zip_dict_field_type
-{
- zip_dict_field_id,
- zip_dict_field_name,
- zip_dict_field_zip_dict
-};
-
-static ST_FIELD_INFO xtradb_sys_zip_dict_fields_info[] =
-{
- { STRUCT_FLD(field_name, "id"),
- STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
- STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
- STRUCT_FLD(value, 0),
- STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
- STRUCT_FLD(old_name, ""),
- STRUCT_FLD(open_method, SKIP_OPEN_TABLE) },
-
- { STRUCT_FLD(field_name, "name"),
- STRUCT_FLD(field_length, ZIP_DICT_MAX_NAME_LENGTH),
- STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
- STRUCT_FLD(value, 0),
- STRUCT_FLD(field_flags, 0),
- STRUCT_FLD(old_name, ""),
- STRUCT_FLD(open_method, SKIP_OPEN_TABLE) },
-
- { STRUCT_FLD(field_name, "zip_dict"),
- STRUCT_FLD(field_length, ZIP_DICT_MAX_DATA_LENGTH),
- STRUCT_FLD(field_type, MYSQL_TYPE_BLOB),
- STRUCT_FLD(value, 0),
- STRUCT_FLD(field_flags, 0),
- STRUCT_FLD(old_name, ""),
- STRUCT_FLD(open_method, SKIP_OPEN_TABLE) },
-
- END_OF_ST_FIELD_INFO
-};
-
-/** Function to fill INFORMATION_SCHEMA.XTRADB_ZIP_DICT with information
-collected by scanning SYS_ZIP_DICT table.
-@return 0 on success */
-static
-int
-xtradb_i_s_dict_fill_sys_zip_dict(
- THD* thd, /*!< in: thread */
- ulint id, /*!< in: dict ID */
- const char* name, /*!< in: dict name */
- const char* data, /*!< in: dict data */
- ulint data_len, /*!< in: dict data length */
- TABLE* table_to_fill) /*!< in/out: fill this table */
-{
- DBUG_ENTER("xtradb_i_s_dict_fill_sys_zip_dict");
-
- Field** fields = table_to_fill->field;
-
- OK(field_store_ulint(fields[zip_dict_field_id], id));
- OK(field_store_string(fields[zip_dict_field_name], name));
- OK(field_store_blob(fields[zip_dict_field_zip_dict], data,
- data_len));
-
- OK(schema_table_store_record(thd, table_to_fill));
-
- DBUG_RETURN(0);
-}
-
-/** Function to populate INFORMATION_SCHEMA.XTRADB_ZIP_DICT table.
-Loop through each record in SYS_ZIP_DICT, and extract the column
-information and fill the INFORMATION_SCHEMA.XTRADB_ZIP_DICT table.
-@return 0 on success */
-static
-int
-xtradb_i_s_sys_zip_dict_fill_table(
- THD* thd, /*!< in: thread */
- TABLE_LIST* tables, /*!< in/out: tables to fill */
- Item* ) /*!< in: condition (not used) */
-{
- btr_pcur_t pcur;
- const rec_t* rec;
- mem_heap_t* heap;
- mtr_t mtr;
-
- DBUG_ENTER("xtradb_i_s_sys_zip_dict_fill_table");
- RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
-
- /* deny access to user without SUPER_ACL privilege */
- if (check_global_access(thd, SUPER_ACL)) {
- DBUG_RETURN(0);
- }
-
- heap = mem_heap_create(1000);
- mutex_enter(&dict_sys->mutex);
- mtr_start(&mtr);
-
- rec = dict_startscan_system(&pcur, &mtr, SYS_ZIP_DICT);
- ulint zip_size = dict_table_zip_size(pcur.btr_cur.index->table);
-
- while (rec) {
- const char* err_msg;
- ulint id;
- const char* name;
- const char* data;
- ulint data_len;
-
- /* Extract necessary information from a SYS_ZIP_DICT row */
- err_msg = dict_process_sys_zip_dict(
- heap, zip_size, rec, &id, &name, &data, &data_len);
-
- mtr_commit(&mtr);
- mutex_exit(&dict_sys->mutex);
-
- if (!err_msg) {
- xtradb_i_s_dict_fill_sys_zip_dict(
- thd, id, name, data, data_len,
- tables->table);
- } else {
- push_warning_printf(thd,
- Sql_condition::WARN_LEVEL_WARN,
- ER_CANT_FIND_SYSTEM_REC, "%s", err_msg);
- }
-
- mem_heap_empty(heap);
-
- /* Get the next record */
- mutex_enter(&dict_sys->mutex);
- mtr_start(&mtr);
- rec = dict_getnext_system(&pcur, &mtr);
- }
-
- mtr_commit(&mtr);
- mutex_exit(&dict_sys->mutex);
- mem_heap_free(heap);
-
- DBUG_RETURN(0);
-}
-
-static int i_s_xtradb_zip_dict_init(void* p)
-{
- DBUG_ENTER("i_s_xtradb_zip_dict_init");
-
- ST_SCHEMA_TABLE* schema = static_cast<ST_SCHEMA_TABLE*>(p);
-
- schema->fields_info = xtradb_sys_zip_dict_fields_info;
- schema->fill_table = xtradb_i_s_sys_zip_dict_fill_table;
-
- DBUG_RETURN(0);
-}
-
-UNIV_INTERN struct st_mysql_plugin i_s_xtradb_zip_dict =
-{
- STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
- STRUCT_FLD(info, &i_s_info),
- STRUCT_FLD(name, "XTRADB_ZIP_DICT"),
- STRUCT_FLD(author, PLUGIN_AUTHOR),
- STRUCT_FLD(descr, "InnoDB compression dictionaries information"),
- STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
- STRUCT_FLD(init, i_s_xtradb_zip_dict_init),
- STRUCT_FLD(deinit, i_s_common_deinit),
- STRUCT_FLD(version, INNODB_VERSION_SHORT),
- STRUCT_FLD(status_vars, NULL),
- STRUCT_FLD(system_vars, NULL),
- STRUCT_FLD(__reserved1, NULL),
- STRUCT_FLD(flags, 0UL),
-};
-
-enum zip_dict_cols_field_type
-{
- zip_dict_cols_field_table_id,
- zip_dict_cols_field_column_pos,
- zip_dict_cols_field_dict_id
-};
-
-static ST_FIELD_INFO xtradb_sys_zip_dict_cols_fields_info[] =
-{
- { STRUCT_FLD(field_name, "table_id"),
- STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
- STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
- STRUCT_FLD(value, 0),
- STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
- STRUCT_FLD(old_name, ""),
- STRUCT_FLD(open_method, SKIP_OPEN_TABLE) },
-
- { STRUCT_FLD(field_name, "column_pos"),
- STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
- STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
- STRUCT_FLD(value, 0),
- STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
- STRUCT_FLD(old_name, ""),
- STRUCT_FLD(open_method, SKIP_OPEN_TABLE) },
-
- { STRUCT_FLD(field_name, "dict_id"),
- STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
- STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
- STRUCT_FLD(value, 0),
- STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
- STRUCT_FLD(old_name, ""),
- STRUCT_FLD(open_method, SKIP_OPEN_TABLE) },
-
- END_OF_ST_FIELD_INFO
-};
-
-/** Function to fill INFORMATION_SCHEMA.XTRADB_ZIP_DICT_COLS with information
-collected by scanning SYS_ZIP_DICT_COLS table.
-@return 0 on success */
-static
-int
-xtradb_i_s_dict_fill_sys_zip_dict_cols(
- THD* thd, /*!< in: thread */
- ulint table_id, /*!< in: table ID */
- ulint column_pos, /*!< in: column position */
- ulint dict_id, /*!< in: dict ID */
- TABLE* table_to_fill) /*!< in/out: fill this table */
-{
- DBUG_ENTER("xtradb_i_s_dict_fill_sys_zip_dict_cols");
-
- Field** fields = table_to_fill->field;
-
- OK(field_store_ulint(fields[zip_dict_cols_field_table_id],
- table_id));
- OK(field_store_ulint(fields[zip_dict_cols_field_column_pos],
- column_pos));
- OK(field_store_ulint(fields[zip_dict_cols_field_dict_id],
- dict_id));
-
- OK(schema_table_store_record(thd, table_to_fill));
-
- DBUG_RETURN(0);
-}
-
-/** Function to populate INFORMATION_SCHEMA.XTRADB_ZIP_DICT_COLS table.
-Loop through each record in SYS_ZIP_DICT_COLS, and extract the column
-information and fill the INFORMATION_SCHEMA.XTRADB_ZIP_DICT_COLS table.
-@return 0 on success */
-static
-int
-xtradb_i_s_sys_zip_dict_cols_fill_table(
- THD* thd, /*!< in: thread */
- TABLE_LIST* tables, /*!< in/out: tables to fill */
- Item* ) /*!< in: condition (not used) */
-{
- btr_pcur_t pcur;
- const rec_t* rec;
- mem_heap_t* heap;
- mtr_t mtr;
-
- DBUG_ENTER("xtradb_i_s_sys_zip_dict_cols_fill_table");
- RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
-
- /* deny access to user without SUPER_ACL privilege */
- if (check_global_access(thd, SUPER_ACL)) {
- DBUG_RETURN(0);
- }
-
- heap = mem_heap_create(1000);
- mutex_enter(&dict_sys->mutex);
- mtr_start(&mtr);
-
- rec = dict_startscan_system(&pcur, &mtr, SYS_ZIP_DICT_COLS);
-
- while (rec) {
- const char* err_msg;
- ulint table_id;
- ulint column_pos;
- ulint dict_id;
-
- /* Extract necessary information from a SYS_ZIP_DICT_COLS
- row */
- err_msg = dict_process_sys_zip_dict_cols(
- heap, rec, &table_id, &column_pos, &dict_id);
-
- mtr_commit(&mtr);
- mutex_exit(&dict_sys->mutex);
-
- if (!err_msg) {
- xtradb_i_s_dict_fill_sys_zip_dict_cols(
- thd, table_id, column_pos, dict_id,
- tables->table);
- } else {
- push_warning_printf(thd,
- Sql_condition::WARN_LEVEL_WARN,
- ER_CANT_FIND_SYSTEM_REC, "%s", err_msg);
- }
-
- mem_heap_empty(heap);
-
- /* Get the next record */
- mutex_enter(&dict_sys->mutex);
- mtr_start(&mtr);
- rec = dict_getnext_system(&pcur, &mtr);
- }
-
- mtr_commit(&mtr);
- mutex_exit(&dict_sys->mutex);
- mem_heap_free(heap);
-
- DBUG_RETURN(0);
-}
-
-static int i_s_xtradb_zip_dict_cols_init(void* p)
-{
- DBUG_ENTER("i_s_xtradb_zip_dict_cols_init");
-
- ST_SCHEMA_TABLE* schema = static_cast<ST_SCHEMA_TABLE*>(p);
-
- schema->fields_info = xtradb_sys_zip_dict_cols_fields_info;
- schema->fill_table = xtradb_i_s_sys_zip_dict_cols_fill_table;
-
- DBUG_RETURN(0);
-}
-
-UNIV_INTERN struct st_mysql_plugin i_s_xtradb_zip_dict_cols =
-{
- STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
- STRUCT_FLD(info, &i_s_info),
- STRUCT_FLD(name, "XTRADB_ZIP_DICT_COLS"),
- STRUCT_FLD(author, PLUGIN_AUTHOR),
- STRUCT_FLD(descr, "InnoDB compressed columns information"),
- STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
- STRUCT_FLD(init, i_s_xtradb_zip_dict_cols_init),
- STRUCT_FLD(deinit, i_s_common_deinit),
- STRUCT_FLD(version, INNODB_VERSION_SHORT),
- STRUCT_FLD(status_vars, NULL),
- STRUCT_FLD(system_vars, NULL),
- STRUCT_FLD(__reserved1, NULL),
- STRUCT_FLD(flags, 0UL),
-};
-#endif
diff --git a/storage/xtradb/handler/xtradb_i_s.h b/storage/xtradb/handler/xtradb_i_s.h
index 905d84587af..994bc11c1b8 100644
--- a/storage/xtradb/handler/xtradb_i_s.h
+++ b/storage/xtradb/handler/xtradb_i_s.h
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 2010-2012, Percona Inc. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -22,7 +23,5 @@ this program; if not, write to the Free Software Foundation, Inc.,
extern struct st_mysql_plugin i_s_xtradb_read_view;
extern struct st_mysql_plugin i_s_xtradb_internal_hash_tables;
extern struct st_mysql_plugin i_s_xtradb_rseg;
-extern struct st_mysql_plugin i_s_xtradb_zip_dict;
-extern struct st_mysql_plugin i_s_xtradb_zip_dict_cols;
#endif /* XTRADB_I_S_H */
diff --git a/storage/xtradb/include/data0type.h b/storage/xtradb/include/data0type.h
index f269c266efb..df6b6a41c11 100644
--- a/storage/xtradb/include/data0type.h
+++ b/storage/xtradb/include/data0type.h
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -170,9 +171,6 @@ be less than 256 */
type when the column is true VARCHAR where
MySQL uses 2 bytes to store the data len;
for shorter VARCHARs MySQL uses only 1 byte */
-#define DATA_COMPRESSED 16384 /* this is ORed to the precise data
- type when the column has COLUMN_FORMAT =
- COMPRESSED attribute*/
/*-------------------------------------------*/
/* This many bytes we need to store the type information affecting the
@@ -503,17 +501,6 @@ dtype_print(
/*========*/
const dtype_t* type); /*!< in: type */
-/**
-Calculates the number of extra bytes needed for compression header
-depending on precise column type.
-@reval 0 if prtype does not include DATA_COMPRESSED flag
-@reval ZIP_COLUMN_HEADER_LENGTH if prtype includes DATA_COMPRESSED flag
-*/
-UNIV_INLINE
-ulint
-prtype_get_compression_extra(
- ulint prtype); /*!< in: precise type */
-
/* Structure for an SQL data type.
If you add fields to this structure, be sure to initialize them everywhere.
This structure is initialized in the following functions:
diff --git a/storage/xtradb/include/data0type.ic b/storage/xtradb/include/data0type.ic
index 29dc480a19c..555852474aa 100644
--- a/storage/xtradb/include/data0type.ic
+++ b/storage/xtradb/include/data0type.ic
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -710,18 +711,3 @@ dtype_get_sql_null_size(
0, 0));
#endif /* !UNIV_HOTBACKUP */
}
-
-/**
-Calculates the number of extra bytes needed for compression header
-depending on precise column type.
-@reval 0 if prtype does not include DATA_COMPRESSED flag
-@reval ZIP_COLUMN_HEADER_LENGTH if prtype includes DATA_COMPRESSED flag
-*/
-UNIV_INLINE
-ulint
-prtype_get_compression_extra(
- ulint prtype) /*!< in: precise type */
-{
- return (prtype & DATA_COMPRESSED) != 0 ?
- ZIP_COLUMN_HEADER_LENGTH : 0;
-}
diff --git a/storage/xtradb/include/dict0boot.h b/storage/xtradb/include/dict0boot.h
index d5bee886cbf..4fd9b0b7f98 100644
--- a/storage/xtradb/include/dict0boot.h
+++ b/storage/xtradb/include/dict0boot.h
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -324,38 +325,6 @@ enum dict_fld_sys_datafiles_enum {
DICT_FLD__SYS_DATAFILES__PATH = 3,
DICT_NUM_FIELDS__SYS_DATAFILES = 4
};
-/* The columns in SYS_DICT */
-enum dict_col_sys_zip_dict_enum {
- DICT_COL__SYS_ZIP_DICT__ID = 0,
- DICT_COL__SYS_ZIP_DICT__NAME = 1,
- DICT_COL__SYS_ZIP_DICT__DATA = 2,
- DICT_NUM_COLS__SYS_ZIP_DICT = 3
-};
-/* The field numbers in the SYS_DICT clustered index */
-enum dict_fld_sys_zip_dict_enum {
- DICT_FLD__SYS_ZIP_DICT__ID = 0,
- DICT_FLD__SYS_ZIP_DICT__DB_TRX_ID = 1,
- DICT_FLD__SYS_ZIP_DICT__DB_ROLL_PTR = 2,
- DICT_FLD__SYS_ZIP_DICT__NAME = 3,
- DICT_FLD__SYS_ZIP_DICT__DATA = 4,
- DICT_NUM_FIELDS__SYS_ZIP_DICT = 5
-};
-/* The columns in SYS_DICT_COLS */
-enum dict_col_sys_zip_dict_cols_enum {
- DICT_COL__SYS_ZIP_DICT_COLS__TABLE_ID = 0,
- DICT_COL__SYS_ZIP_DICT_COLS__COLUMN_POS = 1,
- DICT_COL__SYS_ZIP_DICT_COLS__DICT_ID = 2,
- DICT_NUM_COLS__SYS_ZIP_DICT_COLS = 3
-};
-/* The field numbers in the SYS_DICT_COLS clustered index */
-enum dict_fld_sys_zip_dict_cols_enum {
- DICT_FLD__SYS_ZIP_DICT_COLS__TABLE_ID = 0,
- DICT_FLD__SYS_ZIP_DICT_COLS__COLUMN_POS = 1,
- DICT_FLD__SYS_ZIP_DICT_COLS__DB_TRX_ID = 2,
- DICT_FLD__SYS_ZIP_DICT_COLS__DB_ROLL_PTR = 3,
- DICT_FLD__SYS_ZIP_DICT_COLS__DICT_ID = 4,
- DICT_NUM_FIELDS__SYS_ZIP_DICT_COLS = 5
-};
/* A number of the columns above occur in multiple tables. These are the
length of thos fields. */
diff --git a/storage/xtradb/include/dict0boot.ic b/storage/xtradb/include/dict0boot.ic
index 2b156a4f672..42e91ee930e 100644
--- a/storage/xtradb/include/dict0boot.ic
+++ b/storage/xtradb/include/dict0boot.ic
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -92,5 +93,3 @@ dict_is_sys_table(
{
return(id < DICT_HDR_FIRST_ID);
}
-
-
diff --git a/storage/xtradb/include/dict0crea.h b/storage/xtradb/include/dict0crea.h
index 686f56ad58c..e5977cbabf6 100644
--- a/storage/xtradb/include/dict0crea.h
+++ b/storage/xtradb/include/dict0crea.h
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -164,18 +165,6 @@ dberr_t
dict_create_or_check_sys_tablespace(void);
/*=====================================*/
-#define ZIP_DICT_MAX_NAME_LENGTH 64
-/* Max window size (2^15) minus 262 */
-#define ZIP_DICT_MAX_DATA_LENGTH 32506
-
-/** Creates the zip_dict system table inside InnoDB
-at server bootstrap or server start if it is not found or is
-not of the right form.
-@return DB_SUCCESS or error code */
-UNIV_INTERN
-dberr_t
-dict_create_or_check_sys_zip_dict(void);
-
/********************************************************************//**
Add a single tablespace definition to the data dictionary tables in the
database.
@@ -192,83 +181,6 @@ dict_create_add_tablespace_to_dictionary(
bool commit); /*!< in: if true then commit the
transaction */
-/** Add a single compression dictionary definition to the SYS_ZIP_DICT
-InnoDB system table.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_add_zip_dict(
- const char* name, /*!< in: dict name */
- ulint name_len, /*!< in: dict name length */
- const char* data, /*!< in: dict data */
- ulint data_len, /*!< in: dict data length */
- trx_t* trx); /*!< in/out: transaction */
-
-/** Add a single compression dictionary reference to the SYS_ZIP_DICT_COLS
-InnoDB system table.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_add_zip_dict_reference(
- ulint table_id, /*!< in: table id */
- ulint column_pos, /*!< in: column position */
- ulint dict_id, /*!< in: dict id */
- trx_t* trx); /*!< in/out: transaction */
-
-/** Get a single compression dictionary id for the given
-(table id, column pos) pair.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_get_zip_dict_id_by_reference(
- ulint table_id, /*!< in: table id */
- ulint column_pos, /*!< in: column position */
- ulint* dict_id, /*!< out: dict id */
- trx_t* trx); /*!< in/out: transaction */
-
-/** Get compression dictionary id for the given name.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_get_zip_dict_id_by_name(
- const char* dict_name, /*!< in: dict name */
- ulint dict_name_len, /*!< in: dict name length */
- ulint* dict_id, /*!< out: dict id */
- trx_t* trx); /*!< in/out: transaction */
-
-/** Get compression dictionary info (name and data) for the given id.
-Allocates memory for name and data on success.
-Must be freed with mem_free().
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_get_zip_dict_info_by_id(
- ulint dict_id, /*!< in: dict id */
- char** name, /*!< out: dict name */
- ulint* name_len, /*!< out: dict name length */
- char** data, /*!< out: dict data */
- ulint* data_len, /*!< out: dict data length */
- trx_t* trx); /*!< in/out: transaction */
-
-/** Remove a single compression dictionary from the data dictionary
-tables in the database.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_remove_zip_dict(
- const char* name, /*!< in: dict name */
- ulint name_len, /*!< in: dict name length */
- trx_t* trx); /*!< in/out: transaction */
-
-/** Remove all compression dictionary references for the given table ID from
-the data dictionary tables in the database.
-@return error code or DB_SUCCESS */
-UNIV_INTERN
-dberr_t
-dict_create_remove_zip_dict_references_for_table(
- ulint table_id, /*!< in: table id */
- trx_t* trx); /*!< in/out: transaction */
-
/********************************************************************//**
Add a foreign key definition to the data dictionary tables.
@return error code or DB_SUCCESS */
diff --git a/storage/xtradb/include/dict0dict.h b/storage/xtradb/include/dict0dict.h
index 1b6110dd010..a85f6f1eef9 100644
--- a/storage/xtradb/include/dict0dict.h
+++ b/storage/xtradb/include/dict0dict.h
@@ -2,7 +2,7 @@
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2012, Facebook Inc.
-Copyright (c) 2014, 2015, MariaDB Corporation.
+Copyright (c) 2014, 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -1871,52 +1871,6 @@ dict_table_set_corrupt_by_space(
ulint space_id,
ibool need_mutex);
-/** Insert a records into SYS_ZIP_DICT.
-@retval DB_SUCCESS if OK
-@retval dberr_t if the insert failed */
-UNIV_INTERN
-dberr_t
-dict_create_zip_dict(
- const char* name, /*!< in: zip_dict name */
- ulint name_len, /*!< in: zip_dict name length*/
- const char* data, /*!< in: zip_dict data */
- ulint data_len); /*!< in: zip_dict data length */
-
-/** Get single compression dictionary id for the given
-(table id, column pos) pair.
-@retval DB_SUCCESS if OK
-@retval DB_RECORD_NOT_FOUND if not found */
-UNIV_INTERN
-dberr_t
-dict_get_dictionary_id_by_key(
- ulint table_id, /*!< in: table id */
- ulint column_pos, /*!< in: column position */
- ulint* dict_id); /*!< out: zip_dict id */
-
-/** Get compression dictionary info (name and data) for the given id.
-Allocates memory in name->str and data->str on success.
-Must be freed with mem_free().
-@retval DB_SUCCESS if OK
-@retval DB_RECORD_NOT_FOUND if not found */
-UNIV_INTERN
-dberr_t
-dict_get_dictionary_info_by_id(
- ulint dict_id, /*!< in: table name */
- char** name, /*!< out: dictionary name */
- ulint* name_len, /*!< out: dictionary name length*/
- char** data, /*!< out: dictionary data */
- ulint* data_len); /*!< out: dictionary data length*/
-
-/** Delete a record in SYS_ZIP_DICT with the given name.
-@retval DB_SUCCESS if OK
-@retval DB_RECORD_NOT_FOUND if not found
-@retval DB_ROW_IS_REFERENCED if in use */
-UNIV_INTERN
-dberr_t
-dict_drop_zip_dict(
- const char* name, /*!< in: zip_dict name */
- ulint name_len); /*!< in: zip_dict name length*/
-
#ifndef UNIV_NONINL
#include "dict0dict.ic"
#endif
diff --git a/storage/xtradb/include/dict0load.h b/storage/xtradb/include/dict0load.h
index 85e3e565637..1a720de5bb6 100644
--- a/storage/xtradb/include/dict0load.h
+++ b/storage/xtradb/include/dict0load.h
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -44,8 +45,6 @@ enum dict_system_id_t {
SYS_FOREIGN_COLS,
SYS_TABLESPACES,
SYS_DATAFILES,
- SYS_ZIP_DICT,
- SYS_ZIP_DICT_COLS,
/* This must be last item. Defines the number of system tables. */
SYS_NUM_SYSTEM_TABLES
@@ -389,32 +388,6 @@ dict_process_sys_datafiles(
ulint* space, /*!< out: pace id */
const char** path); /*!< out: datafile path */
-/** This function parses a SYS_ZIP_DICT record, extracts necessary
-information from the record and returns to caller.
-@return error message, or NULL on success */
-UNIV_INTERN
-const char*
-dict_process_sys_zip_dict(
- mem_heap_t* heap, /*!< in/out: heap memory */
- ulint zip_size, /*!< in: nonzero=compressed BLOB page size */
- const rec_t* rec, /*!< in: current SYS_ZIP_DICT rec */
- ulint* id, /*!< out: dict id */
- const char** name, /*!< out: dict name */
- const char** data, /*!< out: dict data */
- ulint* data_len); /*!< out: dict data length */
-
-/** This function parses a SYS_ZIP_DICT_COLS record, extracts necessary
-information from the record and returns to caller.
-@return error message, or NULL on success */
-UNIV_INTERN
-const char*
-dict_process_sys_zip_dict_cols(
- mem_heap_t* heap, /*!< in/out: heap memory */
- const rec_t* rec, /*!< in: current SYS_ZIP_DICT rec */
- ulint* table_id, /*!< out: table id */
- ulint* column_pos, /*!< out: column position */
- ulint* dict_id); /*!< out: dict id */
-
/********************************************************************//**
Get the filepath for a spaceid from SYS_DATAFILES. This function provides
a temporary heap which is used for the table lookup, but not for the path.
diff --git a/storage/xtradb/include/row0mysql.h b/storage/xtradb/include/row0mysql.h
index 70da84640e5..e1148517d99 100644
--- a/storage/xtradb/include/row0mysql.h
+++ b/storage/xtradb/include/row0mysql.h
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -41,9 +42,6 @@ struct SysIndexCallback;
extern ibool row_rollback_on_timeout;
-extern uint srv_compressed_columns_zip_level;
-extern ulong srv_compressed_columns_threshold;
-
struct row_prebuilt_t;
/*******************************************************************//**
@@ -55,48 +53,6 @@ row_mysql_prebuilt_free_blob_heap(
row_prebuilt_t* prebuilt); /*!< in: prebuilt struct of a
ha_innobase:: table handle */
-/** Frees the compress heap in prebuilt when no longer needed. */
-UNIV_INTERN
-void
-row_mysql_prebuilt_free_compress_heap(
- row_prebuilt_t* prebuilt); /*!< in: prebuilt struct of a
- ha_innobase:: table handle */
-
-/** Uncompress blob/text/varchar column using zlib
-@return pointer to the uncompressed data */
-const byte*
-row_decompress_column(
- const byte* data, /*!< in: data in innodb(compressed) format */
- ulint *len, /*!< in: data length; out: length of
- decompressed data*/
- const byte* dict_data,
- /*!< in: optional dictionary data used for
- decompression */
- ulint dict_data_len,
- /*!< in: optional dictionary data length */
- row_prebuilt_t* prebuilt);
- /*!< in: use prebuilt->compress_heap only
- here*/
-
-/** Compress blob/text/varchar column using zlib
-@return pointer to the compressed data */
-byte*
-row_compress_column(
- const byte* data, /*!< in: data in mysql(uncompressed)
- format */
- ulint *len, /*!< in: data length; out: length of
- compressed data*/
- ulint lenlen, /*!< in: bytes used to store the length of
- data */
- const byte* dict_data,
- /*!< in: optional dictionary data used for
- compression */
- ulint dict_data_len,
- /*!< in: optional dictionary data length */
- row_prebuilt_t* prebuilt);
- /*!< in: use prebuilt->compress_heap only
- here*/
-
/*******************************************************************//**
Stores a >= 5.0.3 format true VARCHAR length to dest, in the MySQL row
format.
@@ -135,21 +91,10 @@ row_mysql_store_blob_ref(
to 4 bytes */
const void* data, /*!< in: BLOB data; if the value to store
is SQL NULL this should be NULL pointer */
- ulint len, /*!< in: BLOB length; if the value to store
+ ulint len); /*!< in: BLOB length; if the value to store
is SQL NULL this should be 0; remember
also to set the NULL bit in the MySQL record
header! */
- bool need_decompression,
- /*!< in: if the data need to be compressed*/
- const byte* dict_data,
- /*!< in: optional compression dictionary
- data */
- ulint dict_data_len,
- /*!< in: optional compression dictionary data
- length */
- row_prebuilt_t* prebuilt);
- /*<! in: use prebuilt->compress_heap only
- here */
/*******************************************************************//**
Reads a reference to a BLOB in the MySQL format.
@return pointer to BLOB data */
@@ -160,17 +105,8 @@ row_mysql_read_blob_ref(
ulint* len, /*!< out: BLOB length */
const byte* ref, /*!< in: BLOB reference in the
MySQL format */
- ulint col_len, /*!< in: BLOB reference length
+ ulint col_len); /*!< in: BLOB reference length
(not BLOB length) */
- bool need_compression,
- /*!< in: if the data need to be
- compressed*/
- const byte* dict_data, /*!< in: optional compression
- dictionary data */
- ulint dict_data_len, /*!< in: optional compression
- dictionary data length */
- row_prebuilt_t* prebuilt); /*!< in: use prebuilt->compress_heap
- only here */
/**************************************************************//**
Pad a column with spaces. */
UNIV_INTERN
@@ -218,16 +154,7 @@ row_mysql_store_col_in_innobase_format(
necessarily the length of the actual
payload data; if the column is a true
VARCHAR then this is irrelevant */
- ulint comp, /*!< in: nonzero=compact format */
- bool need_compression,
- /*!< in: if the data need to be
- compressed */
- const byte* dict_data, /*!< in: optional compression
- dictionary data */
- ulint dict_data_len, /*!< in: optional compression
- dictionary data length */
- row_prebuilt_t* prebuilt); /*!< in: use prebuilt->compress_heap
- only here */
+ ulint comp); /*!< in: nonzero=compact format */
/****************************************************************//**
Handles user errors and lock waits detected by the database engine.
@return true if it was a lock wait and we should continue running the
@@ -721,8 +648,6 @@ struct mysql_row_templ_t {
ulint is_unsigned; /*!< if a column type is an integer
type and this field is != 0, then
it is an unsigned integer type */
- bool compressed; /*!< if column format is compressed */
- LEX_CSTRING zip_dict_data; /*!< associated compression dictionary */
};
#define MYSQL_FETCH_CACHE_SIZE 8
@@ -920,8 +845,6 @@ struct row_prebuilt_t {
in fetch_cache */
mem_heap_t* blob_heap; /*!< in SELECTS BLOB fields are copied
to this heap */
- mem_heap_t* compress_heap; /*!< memory heap used to compress
- /decompress blob column*/
mem_heap_t* old_vers_heap; /*!< memory heap where a previous
version is built in consistent read */
bool in_fts_query; /*!< Whether we are in a FTS query */
diff --git a/storage/xtradb/rem/rem0rec.cc b/storage/xtradb/rem/rem0rec.cc
index 09cd810cd7b..6db11be18e9 100644
--- a/storage/xtradb/rem/rem0rec.cc
+++ b/storage/xtradb/rem/rem0rec.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -320,8 +321,7 @@ rec_init_offsets_comp_ordinary(
stored in one byte for 0..127. The length
will be encoded in two bytes when it is 128 or
more, or when the field is stored externally. */
- if (UNIV_UNLIKELY(col->len > 255 -
- prtype_get_compression_extra(col->prtype))
+ if (UNIV_UNLIKELY(col->len > 255)
|| UNIV_UNLIKELY(col->mtype
== DATA_BLOB)) {
if (len & 0x80) {
@@ -846,8 +846,7 @@ rec_get_converted_size_comp_prefix_low(
((col->mtype == DATA_VARCHAR || col->mtype == DATA_BINARY
|| col->mtype == DATA_VARMYSQL)
&& (col->len == 0
- || len <= col->len +
- prtype_get_compression_extra(col->prtype))));
+ || len <= col->len)));
fixed_len = field->fixed_len;
if (temp && fixed_len
@@ -879,8 +878,7 @@ rec_get_converted_size_comp_prefix_low(
ut_ad(col->len >= 256 || col->mtype == DATA_BLOB);
extra_size += 2;
} else if (len < 128
- || (col->len < 256 -
- prtype_get_compression_extra(col->prtype)
+ || (col->len < 256
&& col->mtype != DATA_BLOB)) {
extra_size++;
} else {
@@ -1276,16 +1274,12 @@ rec_convert_dtuple_to_rec_comp(
*lens-- = (byte) (len >> 8) | 0xc0;
*lens-- = (byte) len;
} else {
- ut_ad(len <= dtype_get_len(type) +
- prtype_get_compression_extra(
- dtype_get_prtype(type))
+ ut_ad(len <= dtype_get_len(type)
|| dtype_get_mtype(type) == DATA_BLOB
|| !strcmp(index->name,
FTS_INDEX_TABLE_IND_NAME));
if (len < 128
- || (dtype_get_len(type) < 256 -
- prtype_get_compression_extra(
- dtype_get_prtype(type))
+ || (dtype_get_len(type) < 256
&& dtype_get_mtype(type) != DATA_BLOB)) {
*lens-- = (byte) len;
diff --git a/storage/xtradb/row/row0merge.cc b/storage/xtradb/row/row0merge.cc
index e397053949e..c1436f9e1b7 100644
--- a/storage/xtradb/row/row0merge.cc
+++ b/storage/xtradb/row/row0merge.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -529,8 +530,7 @@ row_merge_buf_add(
((col->mtype == DATA_VARCHAR || col->mtype == DATA_BINARY
|| col->mtype == DATA_VARMYSQL)
&& (col->len == 0
- || len <= col->len +
- prtype_get_compression_extra(col->prtype))));
+ || len <= col->len)));
fixed_len = ifield->fixed_len;
if (fixed_len && !dict_table_is_comp(index->table)
@@ -559,8 +559,7 @@ row_merge_buf_add(
} else if (dfield_is_ext(field)) {
extra_size += 2;
} else if (len < 128
- || (col->len < 256 -
- prtype_get_compression_extra(col->prtype)
+ || (col->len < 256
&& col->mtype != DATA_BLOB)) {
extra_size++;
} else {
diff --git a/storage/xtradb/row/row0mysql.cc b/storage/xtradb/row/row0mysql.cc
index 46bf523750c..b366a55b2d9 100644
--- a/storage/xtradb/row/row0mysql.cc
+++ b/storage/xtradb/row/row0mysql.cc
@@ -1,6 +1,7 @@
/*****************************************************************************
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All Rights Reserved.
+Copyright (c) 2017, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
@@ -69,48 +70,6 @@ Created 9/17/2000 Heikki Tuuri
/** Provide optional 4.x backwards compatibility for 5.0 and above */
UNIV_INTERN ibool row_rollback_on_timeout = FALSE;
-/**
-Z_NO_COMPRESSION = 0
-Z_BEST_SPEED = 1
-Z_BEST_COMPRESSION = 9
-Z_DEFAULT_COMPRESSION = -1
-Compression level to be used by zlib for compressed-blob columns.
-Settable by user.
-*/
-UNIV_INTERN uint srv_compressed_columns_zip_level = DEFAULT_COMPRESSION_LEVEL;
-/**
-(Z_FILTERED | Z_HUFFMAN_ONLY | Z_RLE | Z_FIXED | Z_DEFAULT_STRATEGY)
-
-The strategy parameter is used to tune the compression algorithm. Use the
-value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
-filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only
-(no string match), or Z_RLE to limit match distances to one
-(run-length encoding). Filtered data consists mostly of small values with a
-somewhat random distribution. In this case, the compression algorithm is
-tuned to compress them better.
-The effect of Z_FILTERED is to force more Huffman coding and less string
-matching; it is somewhat intermediate between Z_DEFAULT_STRATEGY and
-Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as Z_HUFFMAN_ONLY,
-but give better compression for PNG image data. The strategy parameter only
-affects the compression ratio but not the correctness of the compressed
-output even if it is not set appropriately. Z_FIXED prevents the use of
-dynamic Huffman codes, allowing for a simpler decoder for special
-applications.
-*/
-const uint srv_compressed_columns_zlib_strategy = Z_DEFAULT_STRATEGY;
-/** Compress the column if the data length exceeds this value. */
-UNIV_INTERN ulong srv_compressed_columns_threshold = 96;
-/**
-Determine if zlib needs to compute adler32 value for the compressed data.
-This variables is similar to page_zip_zlib_wrap, but only used by
-compressed blob columns.
-*/
-const bool srv_compressed_columns_zlib_wrap = true;
-/**
-Determine if zlib will use custom memory allocation functions based on
-InnoDB memory heap routines (mem_heap_t*).
-*/
-const bool srv_compressed_columns_zlib_use_heap = false;
/** Chain node of the list of tables to drop in the background. */
struct row_mysql_drop_t{
char* table_name; /*!< table name */
@@ -214,17 +173,6 @@ row_mysql_prebuilt_free_blob_heap(
prebuilt->blob_heap = NULL;
}
-/** Frees the compress heap in prebuilt when no longer needed. */
-UNIV_INTERN
-void
-row_mysql_prebuilt_free_compress_heap(
- row_prebuilt_t* prebuilt) /*!< in: prebuilt struct of a
- ha_innobase:: table handle */
-{
- mem_heap_free(prebuilt->compress_heap);
- prebuilt->compress_heap = NULL;
-}
-
/*******************************************************************//**
Stores a >= 5.0.3 format true VARCHAR length to dest, in the MySQL row
format.
@@ -281,425 +229,6 @@ row_mysql_read_true_varchar(
return(field + 1);
}
-/**
- Compressed BLOB header format:
- ---------------------------------------------------------------
- | reserved | wrap | algorithm | len-len | compressed | unused |
- | [1] | [1] | [5] | [3] | [1] | [5] |
- ---------------------------------------------------------------
- | 0 0 | 1 1 | 2 6 | 7 9 | 10 10 | 11 15 |
- ---------------------------------------------------------------
- * 'reserved' bit is planned to be used in future versions of the BLOB
- header. In this version it must always be
- 'default_zip_column_reserved_value' (0).
- * 'wrap' identifies if compression algorithm calculated a checksum
- (adler32 in case of zlib) and appended it to the compressed data.
- * 'algorithm' identifies which algoritm was used to compress this BLOB.
- Currently, the only value 'default_zip_column_algorithm_value' (0) is
- supported.
- * 'len-len' field identifies the length of the column length data portion
- followed by this header (see below).
- * If 'compressed' bit is set to 1, then this header is immediately followed
- by 1..8 bytes (depending on the value of 'len-len' bitfield) which
- determine original (uncompressed) block size. These 'len-len' bytes are
- followed by compressed representation of the original data.
- * If 'compressed' bit is set to 0, every other bitfield ('wrap',
- 'algorithm' and 'le-len') must be ignored. In this case the header is
- immediately followed by uncompressed (original) data.
-*/
-
-/**
- Currently the only supported value for the 'reserved' field is
- false (0).
-*/
-static const bool default_zip_column_reserved_value = false;
-
-/**
- Currently the only supported value for the 'algorithm' field is 0, which
- means 'zlib'.
-*/
-static const uint default_zip_column_algorithm_value = 0;
-
-static const size_t zip_column_prefix_max_length =
- ZIP_COLUMN_HEADER_LENGTH + 8;
-static const size_t zip_column_header_length = ZIP_COLUMN_HEADER_LENGTH;
-
-/* 'reserved', bit 0 */
-static const uint zip_column_reserved = 0;
-/* 0000 0000 0000 0001 */
-static const uint zip_column_reserved_mask = 0x0001;
-
-/* 'wrap', bit 1 */
-static const uint zip_column_wrap = 1;
-/* 0000 0000 0000 0010 */
-static const uint zip_column_wrap_mask = 0x0002;
-
-/* 'algorithm', bit 2,3,4,5,6 */
-static const uint zip_column_algorithm = 2;
-/* 0000 0000 0111 1100 */
-static const uint zip_column_algorithm_mask = 0x007C;
-
-/* 'len-len', bit 7,8,9 */
-static const uint zip_column_data_length = 7;
-/* 0000 0011 1000 0000 */
-static const uint zip_column_data_length_mask = 0x0380;
-
-/* 'compressed', bit 10 */
-static const uint zip_column_compressed = 10;
-/* 0000 0100 0000 0000 */
-static const uint zip_column_compressed_mask = 0x0400;
-
-/** Updates compressed block header with the given components */
-static void
-column_set_compress_header(
- byte* data,
- bool compressed,
- ulint lenlen,
- uint alg,
- bool wrap,
- bool reserved)
-{
- ulint header = 0;
- header |= (compressed << zip_column_compressed);
- header |= (lenlen << zip_column_data_length);
- header |= (alg << zip_column_algorithm);
- header |= (wrap << zip_column_wrap);
- header |= (reserved << zip_column_reserved);
- mach_write_to_2(data, header);
-}
-
-/** Parse compressed block header into components */
-static void
-column_get_compress_header(
- const byte* data,
- bool* compressed,
- ulint* lenlen,
- uint* alg,
- bool* wrap,
- bool* reserved
-)
-{
- ulint header = mach_read_from_2(data);
- *compressed = ((header & zip_column_compressed_mask) >>
- zip_column_compressed);
- *lenlen = ((header & zip_column_data_length_mask) >>
- zip_column_data_length);
- *alg = ((header & zip_column_algorithm_mask) >>
- zip_column_algorithm);
- *wrap = ((header & zip_column_wrap_mask) >>
- zip_column_wrap);
- *reserved = ((header & zip_column_reserved_mask) >>
- zip_column_reserved);
-}
-
-/** Allocate memory for zlib. */
-static
-void*
-column_zip_zalloc(
- void* opaque, /*!< in/out: memory heap */
- uInt items, /*!< in: number of items to allocate */
- uInt size) /*!< in: size of an item in bytes */
-{
- return(mem_heap_zalloc(static_cast<mem_heap_t*>(opaque),
- items * size));
-}
-
-/** Deallocate memory for zlib. */
-static
-void
-column_zip_free(
- void* opaque MY_ATTRIBUTE((unused)), /*!< in: memory heap */
- void* address MY_ATTRIBUTE((unused))) /*!< in: object to free */
-{
-}
-
-/** Configure the zlib allocator to use the given memory heap. */
-UNIV_INTERN
-void
-column_zip_set_alloc(
- void* stream, /*!< in/out: zlib stream */
- mem_heap_t* heap) /*!< in: memory heap to use */
-{
- z_stream* strm = static_cast<z_stream*>(stream);
-
- if (srv_compressed_columns_zlib_use_heap) {
- strm->zalloc = column_zip_zalloc;
- strm->zfree = column_zip_free;
- strm->opaque = heap;
- } else {
- strm->zalloc = (alloc_func)0;
- strm->zfree = (free_func)0;
- strm->opaque = (voidpf)0;
- }
-}
-
-/** Compress blob/text/varchar column using zlib
-@return pointer to the compressed data */
-byte*
-row_compress_column(
- const byte* data, /*!< in: data in mysql(uncompressed)
- format */
- ulint *len, /*!< in: data length; out: length of
- compressed data*/
- ulint lenlen, /*!< in: bytes used to store the length of
- data */
- const byte* dict_data,
- /*!< in: optional dictionary data used for
- compression */
- ulint dict_data_len,
- /*!< in: optional dictionary data length */
- row_prebuilt_t* prebuilt)
- /*!< in: use prebuilt->compress_heap only
- here*/
-{
- int err = 0;
- ulint comp_len = *len;
- ulint buf_len = *len + zip_column_prefix_max_length;
- byte* buf;
- byte* ptr;
- z_stream c_stream;
- bool wrap = srv_compressed_columns_zlib_wrap;
-
- int window_bits = wrap ? MAX_WBITS : -MAX_WBITS;
-
- if (!prebuilt->compress_heap) {
- prebuilt->compress_heap =
- mem_heap_create(max(UNIV_PAGE_SIZE, buf_len));
- }
-
- buf = static_cast<byte*>(mem_heap_zalloc(
- prebuilt->compress_heap,buf_len));
-
- if (*len < srv_compressed_columns_threshold ||
- srv_compressed_columns_zip_level == Z_NO_COMPRESSION)
- goto do_not_compress;
-
- ptr = buf + zip_column_header_length + lenlen;
-
- /*init deflate object*/
- c_stream.next_in = const_cast<Bytef*>(data);
- c_stream.avail_in = *len;
- c_stream.next_out = ptr;
- c_stream.avail_out = comp_len;
-
- column_zip_set_alloc(&c_stream, prebuilt->compress_heap);
-
- err = deflateInit2(&c_stream, srv_compressed_columns_zip_level,
- Z_DEFLATED, window_bits, MAX_MEM_LEVEL,
- srv_compressed_columns_zlib_strategy);
- ut_a(err == Z_OK);
-
- if (dict_data != 0 && dict_data_len != 0) {
- err = deflateSetDictionary(&c_stream, dict_data,
- dict_data_len);
- ut_a(err == Z_OK);
- }
-
- err = deflate(&c_stream, Z_FINISH);
- if (err != Z_STREAM_END) {
- deflateEnd(&c_stream);
- if (err == Z_OK)
- err = Z_BUF_ERROR;
- } else {
- comp_len = c_stream.total_out;
- err = deflateEnd(&c_stream);
- }
-
- switch (err) {
- case Z_OK:
- break;
- case Z_BUF_ERROR:
- /* data after compress is larger than uncompressed data*/
- break;
- default:
- ib_logf(IB_LOG_LEVEL_ERROR,
- "failed to compress the column, error: %d\n", err);
- }
-
- /* make sure the compressed data size is smaller than
- uncompressed data */
- if (err == Z_OK &&
- *len > (comp_len + zip_column_header_length + lenlen)) {
- column_set_compress_header(buf, true, lenlen - 1,
- default_zip_column_algorithm_value, wrap,
- default_zip_column_reserved_value);
- ptr = buf + zip_column_header_length;
- /*store the uncompressed data length*/
- switch (lenlen) {
- case 1:
- mach_write_to_1(ptr, *len);
- break;
- case 2:
- mach_write_to_2(ptr, *len);
- break;
- case 3:
- mach_write_to_3(ptr, *len);
- break;
- case 4:
- mach_write_to_4(ptr, *len);
- break;
- default:
- ut_error;
- }
-
- *len = comp_len + zip_column_header_length + lenlen;
- return buf;
- }
-
-do_not_compress:
- ptr = buf;
- column_set_compress_header(ptr, false, 0,
- default_zip_column_algorithm_value, false,
- default_zip_column_reserved_value);
- ptr += zip_column_header_length;
- memcpy(ptr, data, *len);
- *len += zip_column_header_length;
- return buf;
-}
-
-/** Uncompress blob/text/varchar column using zlib
-@return pointer to the uncompressed data */
-const byte*
-row_decompress_column(
- const byte* data, /*!< in: data in innodb(compressed) format */
- ulint *len, /*!< in: data length; out: length of
- decompressed data*/
- const byte* dict_data,
- /*!< in: optional dictionary data used for
- decompression */
- ulint dict_data_len,
- /*!< in: optional dictionary data length */
- row_prebuilt_t* prebuilt)
- /*!< in: use prebuilt->compress_heap only
- here*/
-{
- ulint buf_len = 0;
- byte* buf;
- int err = 0;
- int window_bits = 0;
- z_stream d_stream;
- bool is_compressed = false;
- bool wrap = false;
- bool reserved = false;
- ulint lenlen = 0;
- uint alg = 0;
-
- ut_ad(*len != ULINT_UNDEFINED);
- ut_ad(*len >= zip_column_header_length);
-
- column_get_compress_header(data, &is_compressed, &lenlen, &alg,
- &wrap, &reserved);
-
- if (reserved != default_zip_column_reserved_value) {
- ib_logf(IB_LOG_LEVEL_FATAL,
- "unsupported compressed BLOB header format\n");
- }
-
- if (alg != default_zip_column_algorithm_value) {
- ib_logf(IB_LOG_LEVEL_FATAL,
- "unsupported 'algorithm' value in the"
- " compressed BLOB header\n");
- }
-
- ut_a(lenlen < 4);
-
- data += zip_column_header_length;
- if (!is_compressed) { /* column not compressed */
- *len -= zip_column_header_length;
- return data;
- }
-
- lenlen++;
-
- ulint comp_len = *len - zip_column_header_length - lenlen;
-
- ulint uncomp_len = 0;
- switch (lenlen) {
- case 1:
- uncomp_len = mach_read_from_1(data);
- break;
- case 2:
- uncomp_len = mach_read_from_2(data);
- break;
- case 3:
- uncomp_len = mach_read_from_3(data);
- break;
- case 4:
- uncomp_len = mach_read_from_4(data);
- break;
- default:
- ut_error;
- }
-
- data += lenlen;
-
- /* data is compressed, decompress it*/
- if (!prebuilt->compress_heap) {
- prebuilt->compress_heap =
- mem_heap_create(max(UNIV_PAGE_SIZE, uncomp_len));
- }
-
- buf_len = uncomp_len;
- buf = static_cast<byte*>(mem_heap_zalloc(
- prebuilt->compress_heap, buf_len));
-
- /* init d_stream */
- d_stream.next_in = const_cast<Bytef*>(data);
- d_stream.avail_in = comp_len;
- d_stream.next_out = buf;
- d_stream.avail_out = buf_len;
-
- column_zip_set_alloc(&d_stream, prebuilt->compress_heap);
-
- window_bits = wrap ? MAX_WBITS : -MAX_WBITS;
- err = inflateInit2(&d_stream, window_bits);
- ut_a(err == Z_OK);
-
- err = inflate(&d_stream, Z_FINISH);
- if (err == Z_NEED_DICT) {
- ut_a(dict_data != 0 && dict_data_len != 0);
- err = inflateSetDictionary(&d_stream, dict_data,
- dict_data_len);
- ut_a(err == Z_OK);
- err = inflate(&d_stream, Z_FINISH);
- }
-
- if (err != Z_STREAM_END) {
- inflateEnd(&d_stream);
- if (err == Z_BUF_ERROR && d_stream.avail_in == 0)
- err = Z_DATA_ERROR;
- } else {
- buf_len = d_stream.total_out;
- err = inflateEnd(&d_stream);
- }
-
- switch (err) {
- case Z_OK:
- break;
- case Z_BUF_ERROR:
- ib_logf(IB_LOG_LEVEL_FATAL,
- "zlib buf error, this shouldn't happen\n");
- break;
- default:
- ib_logf(IB_LOG_LEVEL_FATAL,
- "failed to decompress column, error: %d\n", err);
- }
-
- if (err == Z_OK) {
- if (buf_len != uncomp_len) {
- ib_logf(IB_LOG_LEVEL_FATAL,
- "failed to decompress blob column, may"
- " be corrupted\n");
- }
- *len = buf_len;
- return buf;
- }
-
- *len -= (zip_column_header_length + lenlen);
- return data;
-}
-
-
/*******************************************************************//**
Stores a reference to a BLOB in the MySQL format. */
UNIV_INTERN
@@ -713,21 +242,10 @@ row_mysql_store_blob_ref(
to 4 bytes */
const void* data, /*!< in: BLOB data; if the value to store
is SQL NULL this should be NULL pointer */
- ulint len, /*!< in: BLOB length; if the value to store
+ ulint len) /*!< in: BLOB length; if the value to store
is SQL NULL this should be 0; remember
also to set the NULL bit in the MySQL record
header! */
- bool need_decompression,
- /*!< in: if the data need to be compressed*/
- const byte* dict_data,
- /*!< in: optional compression dictionary
- data */
- ulint dict_data_len,
- /*!< in: optional compression dictionary data
- length */
- row_prebuilt_t* prebuilt)
- /*<! in: use prebuilt->compress_heap only
- here */
{
/* MySQL might assume the field is set to zero except the length and
the pointer fields */
@@ -739,27 +257,11 @@ row_mysql_store_blob_ref(
In 32-bit architectures we only use the first 4 bytes of the pointer
slot. */
- ut_a(col_len - 8 > 1 ||
- len < 256 +
- (need_decompression ? ZIP_COLUMN_HEADER_LENGTH : 0));
- ut_a(col_len - 8 > 2 ||
- len < 256 * 256 +
- (need_decompression ? ZIP_COLUMN_HEADER_LENGTH : 0));
- ut_a(col_len - 8 > 3 ||
- len < 256 * 256 * 256 +
- (need_decompression ? ZIP_COLUMN_HEADER_LENGTH : 0));
-
- const byte *ptr = NULL;
-
- if (need_decompression)
- ptr = row_decompress_column((const byte*)data, &len,
- dict_data, dict_data_len, prebuilt);
-
- if (ptr)
- memcpy(dest + col_len - 8, &ptr, sizeof ptr);
- else
- memcpy(dest + col_len - 8, &data, sizeof data);
+ ut_a(col_len - 8 > 1 || len < 256);
+ ut_a(col_len - 8 > 2 || len < 256 * 256);
+ ut_a(col_len - 8 > 3 || len < 256 * 256 * 256);
+ memcpy(dest + col_len - 8, &data, sizeof data);
mach_write_to_n_little_endian(dest, col_len - 8, len);
}
@@ -773,32 +275,15 @@ row_mysql_read_blob_ref(
ulint* len, /*!< out: BLOB length */
const byte* ref, /*!< in: BLOB reference in the
MySQL format */
- ulint col_len, /*!< in: BLOB reference length
+ ulint col_len) /*!< in: BLOB reference length
(not BLOB length) */
- bool need_compression,
- /*!< in: if the data need to be
- compressed*/
- const byte* dict_data, /*!< in: optional compression
- dictionary data */
- ulint dict_data_len, /*!< in: optional compression
- dictionary data length */
- row_prebuilt_t* prebuilt) /*!< in: use prebuilt->compress_heap
- only here */
{
byte* data = NULL;
- byte* ptr = NULL;
*len = mach_read_from_n_little_endian(ref, col_len - 8);
memcpy(&data, ref + col_len - 8, sizeof data);
- if (need_compression) {
- ptr = row_compress_column(data, len, col_len - 8, dict_data,
- dict_data_len, prebuilt);
- if (ptr)
- data = ptr;
- }
-
return(data);
}
@@ -881,16 +366,7 @@ row_mysql_store_col_in_innobase_format(
necessarily the length of the actual
payload data; if the column is a true
VARCHAR then this is irrelevant */
- ulint comp, /*!< in: nonzero=compact format */
- bool need_compression,
- /*!< in: if the data need to be
- compressed*/
- const byte* dict_data, /*!< in: optional compression
- dictionary data */
- ulint dict_data_len, /*!< in: optional compression
- dictionary data length */
- row_prebuilt_t* prebuilt) /*!< in: use prebuilt->compress_heap
- only here */
+ ulint comp) /*!< in: nonzero=compact format */
{
const byte* ptr = mysql_data;
const dtype_t* dtype;
@@ -943,14 +419,8 @@ row_mysql_store_col_in_innobase_format(
lenlen = 2;
}
- const byte* tmp_ptr = row_mysql_read_true_varchar(
+ ptr = row_mysql_read_true_varchar(
&col_len, mysql_data, lenlen);
- if (need_compression)
- ptr = row_compress_column(tmp_ptr, &col_len,
- lenlen, dict_data, dict_data_len,
- prebuilt);
- else
- ptr = tmp_ptr;
} else {
/* Remove trailing spaces from old style VARCHAR
columns. */
@@ -1032,9 +502,7 @@ row_mysql_store_col_in_innobase_format(
}
} else if (type == DATA_BLOB && row_format_col) {
- ptr = row_mysql_read_blob_ref(&col_len, mysql_data, col_len,
- need_compression, dict_data, dict_data_len,
- prebuilt);
+ ptr = row_mysql_read_blob_ref(&col_len, mysql_data, col_len);
}
dfield_set_data(dfield, ptr, col_len);
@@ -1092,11 +560,7 @@ row_mysql_convert_row_to_innobase(
TRUE, /* MySQL row format data */
mysql_rec + templ->mysql_col_offset,
templ->mysql_col_len,
- dict_table_is_comp(prebuilt->table),
- templ->compressed,
- reinterpret_cast<const byte*>(
- templ->zip_dict_data.str),
- templ->zip_dict_data.length, prebuilt);
+ dict_table_is_comp(prebuilt->table));
next_column:
;
}
@@ -1442,10 +906,6 @@ row_prebuilt_free(
mem_heap_free(prebuilt->blob_heap);
}
- if (prebuilt->compress_heap) {
- mem_heap_free(prebuilt->compress_heap);
- }
-
if (prebuilt->old_vers_heap) {
mem_heap_free(prebuilt->old_vers_heap);
}
@@ -1875,9 +1335,6 @@ row_insert_for_mysql(
return(DB_READ_ONLY);
}
- if (UNIV_LIKELY_NULL(prebuilt->compress_heap))
- mem_heap_empty(prebuilt->compress_heap);
-
trx->op_info = "inserting";
row_mysql_delay_if_needed();
@@ -3443,8 +2900,6 @@ row_mysql_table_id_reassign(
" WHERE TABLE_ID = :old_id;\n"
"UPDATE SYS_INDEXES SET TABLE_ID = :new_id\n"
" WHERE TABLE_ID = :old_id;\n"
- "UPDATE SYS_ZIP_DICT_COLS SET TABLE_ID = :new_id_narrow\n"
- " WHERE TABLE_ID = :old_id_narrow;\n"
"END;\n", FALSE, trx);
return(err);
@@ -4228,9 +3683,6 @@ next_rec:
"UPDATE SYS_INDEXES"
" SET TABLE_ID = :new_id, SPACE = :new_space\n"
" WHERE TABLE_ID = :old_id;\n"
- "UPDATE SYS_ZIP_DICT_COLS\n"
- " SET TABLE_ID = :new_id_narrow\n"
- " WHERE TABLE_ID = :old_id_narrow;\n"
"END;\n"
, FALSE, trx);
@@ -4858,19 +4310,6 @@ row_drop_table_for_mysql(
filepath = fil_make_ibd_name(tablename, false);
}
- /* Remove all compression dictionary references for the
- table */
- err = dict_create_remove_zip_dict_references_for_table(
- table->id, trx);
- if (err != DB_SUCCESS) {
- ib_logf(IB_LOG_LEVEL_ERROR, "Error: (%s) not "
- "able to remove compression dictionary "
- "references for table %s", ut_strerr(err),
- tablename);
-
- goto funct_exit;
- }
-
if (dict_table_has_fts_index(table)
|| DICT_TF2_FLAG_IS_SET(table, DICT_TF2_FTS_HAS_DOC_ID)) {
ut_ad(table->n_ref_count == 0);
diff --git a/storage/xtradb/row/row0sel.cc b/storage/xtradb/row/row0sel.cc
index ad1e9e2bf9d..fd23d83e0e5 100644
--- a/storage/xtradb/row/row0sel.cc
+++ b/storage/xtradb/row/row0sel.cc
@@ -2,6 +2,7 @@
Copyright (c) 1997, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, Google Inc.
+Copyright (c) 2017, MariaDB Corporation.
Portions of this file contain modifications contributed and copyrighted by
Google, Inc. Those modifications are gratefully acknowledged and are described
@@ -2459,8 +2460,7 @@ row_sel_convert_mysql_key_to_innobase(
/* MySQL key value format col */
FALSE,
key_ptr + data_offset, data_len,
- dict_table_is_comp(index->table),
- false, 0, 0 ,0);
+ dict_table_is_comp(index->table));
ut_a(buf <= original_buf + buf_len);
}
@@ -2554,15 +2554,15 @@ row_sel_store_row_id_to_prebuilt(
#ifdef UNIV_DEBUG
/** Convert a non-SQL-NULL field from Innobase format to MySQL format. */
# define row_sel_field_store_in_mysql_format( \
- dest,templ,idx,field,src,len,prebuilt) \
+ dest,templ,idx,field,src,len) \
row_sel_field_store_in_mysql_format_func \
- (dest,templ,idx,field,src,len, prebuilt)
+ (dest,templ,idx,field,src,len)
#else /* UNIV_DEBUG */
/** Convert a non-SQL-NULL field from Innobase format to MySQL format. */
# define row_sel_field_store_in_mysql_format( \
- dest,templ,idx,field,src,len,prebuilt) \
+ dest,templ,idx,field,src,len) \
row_sel_field_store_in_mysql_format_func \
- (dest,templ,src,len, prebuilt)
+ (dest,templ,src,len)
#endif /* UNIV_DEBUG */
/**************************************************************//**
@@ -2592,10 +2592,7 @@ row_sel_field_store_in_mysql_format_func(
templ->icp_rec_field_no */
#endif /* UNIV_DEBUG */
const byte* data, /*!< in: data to store */
- ulint len, /*!< in: length of the data */
- row_prebuilt_t* prebuilt)
- /*!< in: use prebuilt->compress_heap
- only here */
+ ulint len) /*!< in: length of the data */
{
byte* ptr;
#ifdef UNIV_DEBUG
@@ -2639,15 +2636,6 @@ row_sel_field_store_in_mysql_format_func(
field_end = dest + templ->mysql_col_len;
if (templ->mysql_type == DATA_MYSQL_TRUE_VARCHAR) {
- /* If this is a compressed column,
- decompress it first */
- if (templ->compressed)
- data = row_decompress_column(data, &len,
- reinterpret_cast<const byte*>(
- templ->zip_dict_data.str),
- templ->zip_dict_data.length,
- prebuilt);
-
/* This is a >= 5.0.3 type true VARCHAR. Store the
length of the data to the first byte or the first
two bytes of dest. */
@@ -2698,11 +2686,7 @@ row_sel_field_store_in_mysql_format_func(
already copied to the buffer in row_sel_store_mysql_rec */
row_mysql_store_blob_ref(dest, templ->mysql_col_len, data,
- len, templ->compressed,
- reinterpret_cast<const byte*>(
- templ->zip_dict_data.str),
- templ->zip_dict_data.length,
- prebuilt);
+ len);
break;
case DATA_MYSQL:
@@ -2855,7 +2839,7 @@ row_sel_store_mysql_field_func(
row_sel_field_store_in_mysql_format(
mysql_rec + templ->mysql_col_offset,
- templ, index, field_no, data, len, prebuilt);
+ templ, index, field_no, data, len);
if (heap != prebuilt->blob_heap) {
mem_heap_free(heap);
@@ -2905,7 +2889,7 @@ row_sel_store_mysql_field_func(
row_sel_field_store_in_mysql_format(
mysql_rec + templ->mysql_col_offset,
- templ, index, field_no, data, len, prebuilt);
+ templ, index, field_no, data, len);
}
ut_ad(len != UNIV_SQL_NULL);
@@ -2953,9 +2937,6 @@ row_sel_store_mysql_rec(
prebuilt->blob_heap = NULL;
}
- if (UNIV_LIKELY_NULL(prebuilt->compress_heap))
- mem_heap_empty(prebuilt->compress_heap);
-
for (i = 0; i < prebuilt->n_template; i++) {
const mysql_row_templ_t*templ = &prebuilt->mysql_template[i];
const ulint field_no
diff --git a/storage/xtradb/srv/srv0start.cc b/storage/xtradb/srv/srv0start.cc
index cae3b71c2bb..9f426a8b513 100644
--- a/storage/xtradb/srv/srv0start.cc
+++ b/storage/xtradb/srv/srv0start.cc
@@ -3,6 +3,7 @@
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
Copyright (c) 2008, Google Inc.
Copyright (c) 2009, Percona Inc.
+Copyright (c) 2017, MariaDB Corporation.
Portions of this file contain modifications contributed and copyrighted by
Google, Inc. Those modifications are gratefully acknowledged and are described
@@ -2776,12 +2777,6 @@ files_checked:
}
}
- /* Create the SYS_ZIP_DICT system table */
- err = dict_create_or_check_sys_zip_dict();
- if (err != DB_SUCCESS) {
- return(err);
- }
-
srv_is_being_started = FALSE;
ut_a(trx_purge_state() == PURGE_STATE_INIT);