mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +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 (
|
||||
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;
|
||||
|
@ -23,7 +25,7 @@ CREATE TABLE graph (
|
|||
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';
|
||||
) ENGINE=OQGRAPH DATA_TABLE='graph_base' ORIGID='from_id', DESTID='to_id', WEIGHT='w';
|
||||
|
||||
# -- 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 WHERE destid=2 and origid=1;
|
||||
|
||||
# -- trigger bug
|
||||
# --error 1296 # commented out at the moment because the message is corrupted
|
||||
# We cant do this anyway because of read onlyness of table.... 1036 == read only
|
||||
# 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';
|
||||
|
||||
DELETE FROM graph_base;
|
||||
|
|
|
@ -109,11 +109,11 @@ static const char *latchToCode(int latch) {
|
|||
|
||||
struct oqgraph_table_option_struct
|
||||
{
|
||||
char *table_name;
|
||||
const char *table_name;
|
||||
|
||||
char *origid; // name of the origin id column
|
||||
char *destid; // name of the target id column
|
||||
char *weight; // name of the weight column (optional)
|
||||
const char *origid; // name of the origin id column
|
||||
const char *destid; // name of the target id column
|
||||
const char *weight; // name of the weight column (optional)
|
||||
};
|
||||
|
||||
#define ha_table_option_struct oqgraph_table_option_struct
|
||||
|
@ -193,7 +193,12 @@ static bool oqgraph_init()
|
|||
hton->state= SHOW_OPTION_YES;
|
||||
hton->db_type= DB_TYPE_AUTOASSIGN;
|
||||
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;
|
||||
oqgraph_init_done= TRUE;
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue