diff options
author | unknown <mikael@mysql.com> | 2005-11-25 09:11:52 +0100 |
---|---|---|
committer | unknown <mikael@mysql.com> | 2005-11-25 09:11:52 +0100 |
commit | 68e89d69e0a9390ebd0944dc5d0aa0ff873dd6df (patch) | |
tree | ef7f85b77d32677de20e2eba20cb08d41fd3f3fa | |
parent | 705965362d3b1ec4f1142aaaa9cf022fc7b7c647 (diff) | |
download | mariadb-git-68e89d69e0a9390ebd0944dc5d0aa0ff873dd6df.tar.gz |
Made set_part_info a handler method and not a ha_partition method only
The previous variant where it was a specific ha_partition method
only worked for the partition handler. It was unfortunately called also
for the NDB handler and in this case it called a random method in the
NDB handler with random input.
sql/ha_ndbcluster.cc:
Moved initialisation of some handler variables to
set_part_info method called earlly in the open process
sql/ha_ndbcluster.h:
Moved initialisation of some handler variables to
set_part_info method called earlly in the open process
sql/ha_partition.h:
Made set_part_info a handler method and not a ha_partition method only
sql/handler.h:
Made set_part_info a handler method and not a ha_partition method only
sql/sql_partition.cc:
Made set_part_info a handler method and not a ha_partition method only
-rw-r--r-- | sql/ha_ndbcluster.cc | 16 | ||||
-rw-r--r-- | sql/ha_ndbcluster.h | 1 | ||||
-rw-r--r-- | sql/ha_partition.h | 2 | ||||
-rw-r--r-- | sql/handler.h | 1 | ||||
-rw-r--r-- | sql/sql_partition.cc | 2 |
5 files changed, 12 insertions, 10 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 2ab036ee1a0..09bd48a3cd7 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -4503,18 +4503,18 @@ int ha_ndbcluster::open(const char *name, int mode, uint test_if_locked) if (!res) info(HA_STATUS_VARIABLE | HA_STATUS_CONST); - if (table->part_info) - { - m_part_info= table->part_info; - if (!(m_part_info->part_type == HASH_PARTITION && - m_part_info->list_of_part_fields && - !is_sub_partitioned(m_part_info))) - m_use_partition_function= TRUE; - } DBUG_RETURN(res); } +void ha_ndbcluster::set_part_info(partition_info *part_info) +{ + m_part_info= part_info; + if (!(m_part_info->part_type == HASH_PARTITION && + m_part_info->list_of_part_fields && + !is_sub_partitioned(m_part_info))) + m_use_partition_function= TRUE; +} /* Close the table diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index 1b3c717009a..fb506375797 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -534,6 +534,7 @@ class ha_ndbcluster: public handler return (HA_CAN_PARTITION | HA_CAN_UPDATE_PARTITION_KEY | HA_CAN_PARTITION_UNIQUE); } + void set_part_info(partition_info *part_info); ulong index_flags(uint idx, uint part, bool all_parts) const; uint max_supported_record_length() const; uint max_supported_keys() const; diff --git a/sql/ha_partition.h b/sql/ha_partition.h index 8109fec9323..a727a278103 100644 --- a/sql/ha_partition.h +++ b/sql/ha_partition.h @@ -122,7 +122,7 @@ private: PARTITION_SHARE *share; /* Shared lock info */ public: - void set_part_info(partition_info *part_info) + virtual void set_part_info(partition_info *part_info) { m_part_info= part_info; m_is_sub_partitioned= is_sub_partitioned(part_info); diff --git a/sql/handler.h b/sql/handler.h index 14fcd226da7..dc6e3edc40c 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -1273,6 +1273,7 @@ public: #ifdef WITH_PARTITION_STORAGE_ENGINE virtual ulong partition_flags(void) const { return 0;} virtual int get_default_no_partitions(ulonglong max_rows) { return 1;} + virtual void set_part_info(partition_info *part_info) { return; } #endif virtual ulong index_flags(uint idx, uint part, bool all_parts) const =0; virtual ulong index_ddl_flags(KEY *wanted_index) const diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 2792bda1365..932877c257b 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -3128,7 +3128,7 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf, } part_info= lex.part_info; table->part_info= part_info; - ((ha_partition*)table->file)->set_part_info(part_info); + table->file->set_part_info(part_info); if (part_info->default_engine_type == DB_TYPE_UNKNOWN) part_info->default_engine_type= default_db_type; else |