Commit 560a526b authored by Elena Stepanova's avatar Elena Stepanova

MDEV-5744 OQGRAPH backing table changes not reflected in OQGRAPH table

Disable query cache for OQGRAPH
parent 5fcb6d40
......@@ -115,6 +115,20 @@ class ha_oqgraph: public handler
virtual const char *table_type() const { return hton_name(ht)->str; }
#endif
my_bool register_query_cache_table(THD *thd, char *table_key,
uint key_length,
qc_engine_callback
*engine_callback,
ulonglong *engine_data)
{
/*
Do not put data from OQGRAPH tables into query cache (because there
is no way to tell whether the data in the backing table has changed or
not)
*/
return FALSE;
}
private:
int oqgraph_check_table_structure (TABLE *table_arg);
......
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,
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';
INSERT INTO graph_base(from_id, to_id) VALUES (1,2), (2,1);
SET @query_cache_size.saved = @@query_cache_size;
SET GLOBAL query_cache_size = 1024*1024;
SELECT * FROM graph;
latch origid destid weight seq linkid
NULL 1 2 1 NULL NULL
NULL 2 1 1 NULL NULL
UPDATE graph_base SET to_id = 20 WHERE from_id = 1;
SELECT * FROM graph;
latch origid destid weight seq linkid
NULL 1 20 1 NULL NULL
NULL 2 1 1 NULL NULL
SELECT SQL_NO_CACHE * FROM graph;
latch origid destid weight seq linkid
NULL 1 20 1 NULL NULL
NULL 2 1 1 NULL NULL
SET GLOBAL query_cache_size = 0;
SELECT SQL_NO_CACHE * FROM graph;
latch origid destid weight seq linkid
NULL 1 20 1 NULL NULL
NULL 2 1 1 NULL NULL
DROP TABLE graph_base, graph;
SET GLOBAL query_cache_size = @query_cache_size.saved;
# Regression test for https://mariadb.atlassian.net/browse/MDEV-5744
#--reproduce bug where changes to backing table data are not reflected
# in a graph table due to query caching
--disable_warnings
DROP TABLE IF EXISTS graph_base;
DROP TABLE IF EXISTS graph;
--enable_warnings
# Create the backing store
CREATE TABLE graph_base (
from_id INT UNSIGNED NOT NULL,
to_id INT UNSIGNED NOT NULL,
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';
INSERT INTO graph_base(from_id, to_id) VALUES (1,2), (2,1);
SET @query_cache_size.saved = @@query_cache_size;
SET GLOBAL query_cache_size = 1024*1024;
SELECT * FROM graph;
UPDATE graph_base SET to_id = 20 WHERE from_id = 1;
SELECT * FROM graph;
SELECT SQL_NO_CACHE * FROM graph;
SET GLOBAL query_cache_size = 0;
SELECT SQL_NO_CACHE * FROM graph;
DROP TABLE graph_base, graph;
SET GLOBAL query_cache_size = @query_cache_size.saved;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment