mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
Disable ALTER for oqgraph. Fixes crash caused by 1134355.
This commit is contained in:
commit
a09a199ee2
3 changed files with 71 additions and 8 deletions
46
mysql-test/suite/oqgraph/regression_1134355.result
Normal file
46
mysql-test/suite/oqgraph/regression_1134355.result
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
DROP TABLE IF EXISTS graph_base;
|
||||||
|
DROP TABLE IF EXISTS graph;
|
||||||
|
CREATE TABLE graph_base (
|
||||||
|
from_id INT UNSIGNED NOT NULL,
|
||||||
|
to_id INT UNSIGNED NOT NULL,
|
||||||
|
another_id INT UNSIGNED NOT NULL DEFAULT 1,
|
||||||
|
w DOUBLE NOT NULL DEFAULT 1,
|
||||||
|
PRIMARY KEY (from_id,to_id),
|
||||||
|
INDEX (to_id)
|
||||||
|
) ENGINE=MyISAM;
|
||||||
|
CREATE TABLE graph (
|
||||||
|
latch VARCHAR(32) NULL,
|
||||||
|
origid BIGINT UNSIGNED NULL,
|
||||||
|
destid BIGINT UNSIGNED NULL,
|
||||||
|
weight DOUBLE NULL,
|
||||||
|
seq BIGINT UNSIGNED NULL,
|
||||||
|
linkid BIGINT UNSIGNED NULL,
|
||||||
|
KEY (latch, origid, destid) USING HASH,
|
||||||
|
KEY (latch, destid, origid) USING HASH
|
||||||
|
) ENGINE=OQGRAPH DATA_TABLE='graph_base' ORIGID='from_id', DESTID='to_id', WEIGHT='w';
|
||||||
|
INSERT INTO graph_base(from_id, to_id) VALUES (1,2), (2,1);
|
||||||
|
INSERT INTO graph_base(from_id, to_id) VALUES (1,3), (3,1);
|
||||||
|
INSERT INTO graph_base(from_id, to_id) VALUES (1,4), (4,1);
|
||||||
|
INSERT INTO graph_base(from_id, to_id) VALUES (3,4), (4,3);
|
||||||
|
SELECT * from graph;
|
||||||
|
latch origid destid weight seq linkid
|
||||||
|
NULL 1 2 1 NULL NULL
|
||||||
|
NULL 2 1 1 NULL NULL
|
||||||
|
NULL 1 3 1 NULL NULL
|
||||||
|
NULL 3 1 1 NULL NULL
|
||||||
|
NULL 1 4 1 NULL NULL
|
||||||
|
NULL 4 1 1 NULL NULL
|
||||||
|
NULL 3 4 1 NULL NULL
|
||||||
|
NULL 4 3 1 NULL NULL
|
||||||
|
SELECT * FROM graph WHERE destid=2 and origid=1;
|
||||||
|
latch origid destid weight seq linkid
|
||||||
|
NULL 1 2 1 NULL NULL
|
||||||
|
alter table graph ORIGID = 'another_id';
|
||||||
|
ERROR HY000: Table storage engine for 'graph' doesn't have this option
|
||||||
|
alter table graph ORIGID = 'something_else';
|
||||||
|
ERROR HY000: Table storage engine for 'graph' doesn't have this option
|
||||||
|
DELETE FROM graph_base;
|
||||||
|
FLUSH TABLES;
|
||||||
|
TRUNCATE TABLE graph_base;
|
||||||
|
DROP TABLE graph_base;
|
||||||
|
DROP TABLE graph;
|
|
@ -9,6 +9,8 @@ DROP TABLE IF EXISTS graph;
|
||||||
CREATE TABLE graph_base (
|
CREATE TABLE graph_base (
|
||||||
from_id INT UNSIGNED NOT NULL,
|
from_id INT UNSIGNED NOT NULL,
|
||||||
to_id INT UNSIGNED NOT NULL,
|
to_id INT UNSIGNED NOT NULL,
|
||||||
|
another_id INT UNSIGNED NOT NULL DEFAULT 1,
|
||||||
|
w DOUBLE NOT NULL DEFAULT 1,
|
||||||
PRIMARY KEY (from_id,to_id),
|
PRIMARY KEY (from_id,to_id),
|
||||||
INDEX (to_id)
|
INDEX (to_id)
|
||||||
) ENGINE=MyISAM;
|
) ENGINE=MyISAM;
|
||||||
|
@ -23,7 +25,7 @@ CREATE TABLE graph (
|
||||||
linkid BIGINT UNSIGNED NULL,
|
linkid BIGINT UNSIGNED NULL,
|
||||||
KEY (latch, origid, destid) USING HASH,
|
KEY (latch, origid, destid) USING HASH,
|
||||||
KEY (latch, destid, origid) USING HASH
|
KEY (latch, destid, origid) USING HASH
|
||||||
) ENGINE=OQGRAPH DATA_TABLE='graph_base' ORIGID='from_id', DESTID='to_id';
|
) ENGINE=OQGRAPH DATA_TABLE='graph_base' ORIGID='from_id', DESTID='to_id', WEIGHT='w';
|
||||||
|
|
||||||
# -- do some stuff
|
# -- do some stuff
|
||||||
|
|
||||||
|
@ -35,8 +37,18 @@ INSERT INTO graph_base(from_id, to_id) VALUES (3,4), (4,3);
|
||||||
SELECT * from graph;
|
SELECT * from graph;
|
||||||
SELECT * FROM graph WHERE destid=2 and origid=1;
|
SELECT * FROM graph WHERE destid=2 and origid=1;
|
||||||
|
|
||||||
# -- trigger bug
|
# We cant do this anyway because of read onlyness of table.... 1036 == read only
|
||||||
# --error 1296 # commented out at the moment because the message is corrupted
|
# In any case I changed the flags to make alter unsupported; later we can try and work out why the core doesnt help us clean up properly
|
||||||
|
# --error 1036
|
||||||
|
--error 1031
|
||||||
|
alter table graph ORIGID = 'another_id';
|
||||||
|
|
||||||
|
# But we need that to hold even in an invalid situation!
|
||||||
|
# -- bug was: the following alter table would crash, instead of returning error 1296
|
||||||
|
# -- currently following may not crash, but does with the previous error 1036 causing statement present
|
||||||
|
# 'attribute not set to a valid column of 'xxx' - note currently truncating to graph_b instead of graph_base for some reason...
|
||||||
|
#--error 1296
|
||||||
|
--error 1031
|
||||||
alter table graph ORIGID = 'something_else';
|
alter table graph ORIGID = 'something_else';
|
||||||
|
|
||||||
DELETE FROM graph_base;
|
DELETE FROM graph_base;
|
||||||
|
|
|
@ -109,11 +109,11 @@ static const char *latchToCode(int latch) {
|
||||||
|
|
||||||
struct oqgraph_table_option_struct
|
struct oqgraph_table_option_struct
|
||||||
{
|
{
|
||||||
char *table_name;
|
const char *table_name;
|
||||||
|
|
||||||
char *origid; // name of the origin id column
|
const char *origid; // name of the origin id column
|
||||||
char *destid; // name of the target id column
|
const char *destid; // name of the target id column
|
||||||
char *weight; // name of the weight column (optional)
|
const char *weight; // name of the weight column (optional)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ha_table_option_struct oqgraph_table_option_struct
|
#define ha_table_option_struct oqgraph_table_option_struct
|
||||||
|
@ -193,7 +193,12 @@ static bool oqgraph_init()
|
||||||
hton->state= SHOW_OPTION_YES;
|
hton->state= SHOW_OPTION_YES;
|
||||||
hton->db_type= DB_TYPE_AUTOASSIGN;
|
hton->db_type= DB_TYPE_AUTOASSIGN;
|
||||||
hton->create= oqgraph_create_handler;
|
hton->create= oqgraph_create_handler;
|
||||||
hton->flags= HTON_NO_FLAGS;
|
hton->flags= HTON_ALTER_NOT_SUPPORTED;
|
||||||
|
// Prevent ALTER, because the core crashes when the user provides a
|
||||||
|
// non-existing backing store field for ORIGID, etc
|
||||||
|
// 'Fixes' bug 1134355
|
||||||
|
// HTON_NO_FLAGS;
|
||||||
|
|
||||||
hton->table_options= oqgraph_table_option_list;
|
hton->table_options= oqgraph_table_option_list;
|
||||||
oqgraph_init_done= TRUE;
|
oqgraph_init_done= TRUE;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue