Commit 872ed8ab authored by unknown's avatar unknown
Browse files

BUG#19502: Enable/Disable index routines not working for partitioned handlers

Implemented enable/disable index routines for partition handler


mysql-test/r/partition.result:
  New test case
mysql-test/t/partition.test:
  New test case
sql/ha_partition.cc:
  Implemented enable/disable index routines for partition handler
sql/ha_partition.h:
  Implemented enable/disable index routines for partition handler
parent 3065eeb3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -886,4 +886,8 @@ s1
2
3
drop table t1;
CREATE TABLE t1 (a int, index(a)) PARTITION BY KEY(a);
ALTER TABLE t1 DISABLE KEYS;
ALTER TABLE t1 ENABLE KEYS;
DROP TABLE t1;
End of 5.1 tests
+7 −0
Original line number Diff line number Diff line
@@ -1009,4 +1009,11 @@ select auto_increment from information_schema.tables where table_name='t1';
select * from t1;
drop table t1;

#
# BUG 19502: ENABLE/DISABLE Keys don't work for partitioned tables
#
CREATE TABLE t1 (a int, index(a)) PARTITION BY KEY(a);
ALTER TABLE t1 DISABLE KEYS;
ALTER TABLE t1 ENABLE KEYS;
DROP TABLE t1;
--echo End of 5.1 tests
+76 −0
Original line number Diff line number Diff line
@@ -5318,6 +5318,82 @@ void ha_partition::init_table_handle_for_HANDLER()
}


/****************************************************************************
                MODULE enable/disable indexes
****************************************************************************/

/*
  Disable indexes for a while
  SYNOPSIS
    disable_indexes()
    mode                      Mode
  RETURN VALUES
    0                         Success
    != 0                      Error
*/

int ha_partition::disable_indexes(uint mode)
{
  handler **file;
  int error= 0;

  for (file= m_file; *file; file++)
  {
    if ((error= (*file)->disable_indexes(mode)))
      break;
  }
  return error;
}


/*
  Enable indexes again
  SYNOPSIS
    enable_indexes()
    mode                      Mode
  RETURN VALUES
    0                         Success
    != 0                      Error
*/

int ha_partition::enable_indexes(uint mode)
{
  handler **file;
  int error= 0;

  for (file= m_file; *file; file++)
  {
    if ((error= (*file)->enable_indexes(mode)))
      break;
  }
  return error;
}


/*
  Check if indexes are disabled
  SYNOPSIS
    indexes_are_disabled()

  RETURN VALUES
    0                      Indexes are enabled
    != 0                   Indexes are disabled
*/

int ha_partition::indexes_are_disabled(void)
{
  handler **file;
  int error= 0;

  for (file= m_file; *file; file++)
  {
    if ((error= (*file)->indexes_are_disabled()))
      break;
  }
  return error;
}


/****************************************************************************
                MODULE Partition Share
****************************************************************************/
+4 −3
Original line number Diff line number Diff line
@@ -938,17 +938,18 @@ class ha_partition :public handler
    virtual uint checksum() const;
    virtual bool is_crashed() const;
    virtual bool auto_repair() const;
  */

  /*
    -------------------------------------------------------------------------
    MODULE enable/disable indexes
    -------------------------------------------------------------------------
    Enable/Disable Indexes are not supported currently (Heap, MyISAM)
    This means that the following methods are not implemented:
    Enable/Disable Indexes are only supported by HEAP and MyISAM.
    -------------------------------------------------------------------------
  */
    virtual int disable_indexes(uint mode);
    virtual int enable_indexes(uint mode);
    virtual int indexes_are_disabled(void);
  */

  /*
    -------------------------------------------------------------------------