mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
a8ec55e4e8
innobase_rec_reset(): Remove. This function was introduced in the InnoDB Plugin for MySQL 5.1, which later evolved into MySQL 5.5. There used to be a bug that ADD UNIQUE INDEX would not always correctly report the duplicate key value of the secondary index. This function ensured that instead of reporting total garbage values, InnoDB would report NULL. It looks like the function was made unnecessary in MySQL 5.6.6 byd143097eb1
The corresponding test was subsequently adjusted infde80cf49d
The ALTER TABLE tests were imported to MariaDB as part of MDEV-13625, and these tests do pass with this change. The unnecessary function did not do any harm before MDEV-11371 introduced compressed columns. One question remains: What if we needed to report a duplicate key value for a compressed column? The simple answer is that the test main.column_compression demonstrates that no indexes can be defined on compressed columns.
101 lines
3.2 KiB
C
101 lines
3.2 KiB
C
/*****************************************************************************
|
|
|
|
Copyright (c) 2005, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
|
|
|
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
|
|
Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
|
|
|
*****************************************************************************/
|
|
|
|
/**************************************************//**
|
|
@file include/handler0alter.h
|
|
Smart ALTER TABLE
|
|
*******************************************************/
|
|
|
|
/*************************************************************//**
|
|
Copies an InnoDB record to table->record[0]. */
|
|
void
|
|
innobase_rec_to_mysql(
|
|
/*==================*/
|
|
struct TABLE* table, /*!< in/out: MySQL table */
|
|
const rec_t* rec, /*!< in: record */
|
|
const dict_index_t* index, /*!< in: index */
|
|
const ulint* offsets)/*!< in: rec_get_offsets(
|
|
rec, index, ...) */
|
|
MY_ATTRIBUTE((nonnull));
|
|
|
|
/*************************************************************//**
|
|
Copies an InnoDB index entry to table->record[0]. */
|
|
void
|
|
innobase_fields_to_mysql(
|
|
/*=====================*/
|
|
struct TABLE* table, /*!< in/out: MySQL table */
|
|
const dict_index_t* index, /*!< in: InnoDB index */
|
|
const dfield_t* fields) /*!< in: InnoDB index fields */
|
|
MY_ATTRIBUTE((nonnull));
|
|
|
|
/*************************************************************//**
|
|
Copies an InnoDB row to table->record[0]. */
|
|
void
|
|
innobase_row_to_mysql(
|
|
/*==================*/
|
|
struct TABLE* table, /*!< in/out: MySQL table */
|
|
const dict_table_t* itab, /*!< in: InnoDB table */
|
|
const dtuple_t* row) /*!< in: InnoDB row */
|
|
MY_ATTRIBUTE((nonnull));
|
|
|
|
/** Generate the next autoinc based on a snapshot of the session
|
|
auto_increment_increment and auto_increment_offset variables. */
|
|
struct ib_sequence_t {
|
|
|
|
/**
|
|
@param thd the session
|
|
@param start_value the lower bound
|
|
@param max_value the upper bound (inclusive) */
|
|
ib_sequence_t(THD* thd, ulonglong start_value, ulonglong max_value);
|
|
|
|
/** Postfix increment
|
|
@return the value to insert */
|
|
ulonglong operator++(int) UNIV_NOTHROW;
|
|
|
|
/** Check if the autoinc "sequence" is exhausted.
|
|
@return true if the sequence is exhausted */
|
|
bool eof() const UNIV_NOTHROW
|
|
{
|
|
return(m_eof);
|
|
}
|
|
|
|
/**
|
|
@return the next value in the sequence */
|
|
ulonglong last() const UNIV_NOTHROW
|
|
{
|
|
ut_ad(m_next_value > 0);
|
|
|
|
return(m_next_value);
|
|
}
|
|
|
|
/** Maximum calumn value if adding an AUTOINC column else 0. Once
|
|
we reach the end of the sequence it will be set to ~0. */
|
|
const ulonglong m_max_value;
|
|
|
|
/** Value of auto_increment_increment */
|
|
ulong m_increment;
|
|
|
|
/** Value of auto_increment_offset */
|
|
ulong m_offset;
|
|
|
|
/** Next value in the sequence */
|
|
ulonglong m_next_value;
|
|
|
|
/** true if no more values left in the sequence */
|
|
bool m_eof;
|
|
};
|