diff --git a/mysql-test/suite/innodb_gis/r/rtree_optimize.result b/mysql-test/suite/innodb_gis/r/rtree_optimize.result new file mode 100644 index 00000000000..4abdb5f2cf4 --- /dev/null +++ b/mysql-test/suite/innodb_gis/r/rtree_optimize.result @@ -0,0 +1,44 @@ +CREATE TABLE t ( +id INT AUTO_INCREMENT, +c BINARY(226) DEFAULT '', +s POINT NOT NULL, +PRIMARY KEY(id,c) +) ENGINE=InnoDB; +INSERT INTO t (s) VALUES +(POINTFromText('POINT(0.78 0.72)')),(POINTFromText('POINT(0.44 0.21)')), +(POINTFromText('POINT(0.93 0.56)')),(POINTFromText('POINT(0.57 0.21)')), +(POINTFromText('POINT(0.12 0.65)')),(POINTFromText('POINT(0.20 0.96)')), +(POINTFromText('POINT(0.99 0.71)')),(POINTFromText('POINT(0.27 0.23)')), +(POINTFromText('POINT(0.68 0.14)')),(POINTFromText('POINT(0.20 0.05)')), +(POINTFromText('POINT(0.47 0.57)')),(POINTFromText('POINT(0.89 0.79)')), +(POINTFromText('POINT(0.09 0.57)')),(POINTFromText('POINT(0.58 0.52)')), +(POINTFromText('POINT(0.73 0.32)')),(POINTFromText('POINT(0.87 0.35)')), +(POINTFromText('POINT(0.60 0.12)')),(POINTFromText('POINT(0.14 0.17)')), +(POINTFromText('POINT(0.76 0.29)')),(POINTFromText('POINT(0.60 0.35)')), +(POINTFromText('POINT(0.48 0.69)')),(POINTFromText('POINT(0.79 0.45)')), +(POINTFromText('POINT(0.85 0.11)')),(POINTFromText('POINT(0.59 0.99)')), +(POINTFromText('POINT(0.95 0.18)')),(POINTFromText('POINT(0.78 0.49)')), +(POINTFromText('POINT(0.11 0.22)')),(POINTFromText('POINT(0.26 0.85)')), +(POINTFromText('POINT(0.28 0.10)')),(POINTFromText('POINT(0.45 0.25)')), +(POINTFromText('POINT(0.70 0.40)')),(POINTFromText('POINT(0.65 0.86)')), +(POINTFromText('POINT(0.69 0.98)')),(POINTFromText('POINT(0.56 0.11)')), +(POINTFromText('POINT(0.94 0.59)')),(POINTFromText('POINT(0.19 0.94)')), +(POINTFromText('POINT(0.82 0.85)')),(POINTFromText('POINT(0.74 0.07)')), +(POINTFromText('POINT(0.33 0.48)')),(POINTFromText('POINT(0.37 0.37)')), +(POINTFromText('POINT(0.40 0.08)')),(POINTFromText('POINT(0.45 0.74)')), +(POINTFromText('POINT(0.57 0.07)')),(POINTFromText('POINT(0.36 0.11)')), +(POINTFromText('POINT(0.94 0.60)')),(POINTFromText('POINT(0.75 0.76)')), +(POINTFromText('POINT(0.92 0.56)')),(POINTFromText('POINT(0.88 0.52)')), +(POINTFromText('POINT(0.49 0.24)')),(POINTFromText('POINT(0.96 0.08)')), +(POINTFromText('POINT(0.93 0.99)')),(POINTFromText('POINT(0.88 0.31)')), +(POINTFromText('POINT(0.93 0.78)')),(POINTFromText('POINT(0.62 0.50)')), +(POINTFromText('POINT(0.54 0.53)')),(POINTFromText('POINT(0.66 0.83)')), +(POINTFromText('POINT(0.21 0.87)')),(POINTFromText('POINT(0.42 0.28)')), +(POINTFromText('POINT(0.80 0.84)')),(POINTFromText('POINT(0.39 0.68)')), +(POINTFromText('POINT(0.05 0.24)')),(POINTFromText('POINT(0.05 0.58)')); +ALTER TABLE t ADD SPATIAL INDEX(s); +OPTIMIZE TABLE t; +Table Op Msg_type Msg_text +test.t optimize note Table does not support optimize, doing recreate + analyze instead +test.t optimize status OK +DROP TABLE t; diff --git a/mysql-test/suite/innodb_gis/t/rtree_optimize.test b/mysql-test/suite/innodb_gis/t/rtree_optimize.test new file mode 100644 index 00000000000..c3de282da27 --- /dev/null +++ b/mysql-test/suite/innodb_gis/t/rtree_optimize.test @@ -0,0 +1,44 @@ +--source include/have_innodb.inc + +CREATE TABLE t ( + id INT AUTO_INCREMENT, + c BINARY(226) DEFAULT '', + s POINT NOT NULL, + PRIMARY KEY(id,c) +) ENGINE=InnoDB; +INSERT INTO t (s) VALUES + (POINTFromText('POINT(0.78 0.72)')),(POINTFromText('POINT(0.44 0.21)')), + (POINTFromText('POINT(0.93 0.56)')),(POINTFromText('POINT(0.57 0.21)')), + (POINTFromText('POINT(0.12 0.65)')),(POINTFromText('POINT(0.20 0.96)')), + (POINTFromText('POINT(0.99 0.71)')),(POINTFromText('POINT(0.27 0.23)')), + (POINTFromText('POINT(0.68 0.14)')),(POINTFromText('POINT(0.20 0.05)')), + (POINTFromText('POINT(0.47 0.57)')),(POINTFromText('POINT(0.89 0.79)')), + (POINTFromText('POINT(0.09 0.57)')),(POINTFromText('POINT(0.58 0.52)')), + (POINTFromText('POINT(0.73 0.32)')),(POINTFromText('POINT(0.87 0.35)')), + (POINTFromText('POINT(0.60 0.12)')),(POINTFromText('POINT(0.14 0.17)')), + (POINTFromText('POINT(0.76 0.29)')),(POINTFromText('POINT(0.60 0.35)')), + (POINTFromText('POINT(0.48 0.69)')),(POINTFromText('POINT(0.79 0.45)')), + (POINTFromText('POINT(0.85 0.11)')),(POINTFromText('POINT(0.59 0.99)')), + (POINTFromText('POINT(0.95 0.18)')),(POINTFromText('POINT(0.78 0.49)')), + (POINTFromText('POINT(0.11 0.22)')),(POINTFromText('POINT(0.26 0.85)')), + (POINTFromText('POINT(0.28 0.10)')),(POINTFromText('POINT(0.45 0.25)')), + (POINTFromText('POINT(0.70 0.40)')),(POINTFromText('POINT(0.65 0.86)')), + (POINTFromText('POINT(0.69 0.98)')),(POINTFromText('POINT(0.56 0.11)')), + (POINTFromText('POINT(0.94 0.59)')),(POINTFromText('POINT(0.19 0.94)')), + (POINTFromText('POINT(0.82 0.85)')),(POINTFromText('POINT(0.74 0.07)')), + (POINTFromText('POINT(0.33 0.48)')),(POINTFromText('POINT(0.37 0.37)')), + (POINTFromText('POINT(0.40 0.08)')),(POINTFromText('POINT(0.45 0.74)')), + (POINTFromText('POINT(0.57 0.07)')),(POINTFromText('POINT(0.36 0.11)')), + (POINTFromText('POINT(0.94 0.60)')),(POINTFromText('POINT(0.75 0.76)')), + (POINTFromText('POINT(0.92 0.56)')),(POINTFromText('POINT(0.88 0.52)')), + (POINTFromText('POINT(0.49 0.24)')),(POINTFromText('POINT(0.96 0.08)')), + (POINTFromText('POINT(0.93 0.99)')),(POINTFromText('POINT(0.88 0.31)')), + (POINTFromText('POINT(0.93 0.78)')),(POINTFromText('POINT(0.62 0.50)')), + (POINTFromText('POINT(0.54 0.53)')),(POINTFromText('POINT(0.66 0.83)')), + (POINTFromText('POINT(0.21 0.87)')),(POINTFromText('POINT(0.42 0.28)')), + (POINTFromText('POINT(0.80 0.84)')),(POINTFromText('POINT(0.39 0.68)')), + (POINTFromText('POINT(0.05 0.24)')),(POINTFromText('POINT(0.05 0.58)')); +ALTER TABLE t ADD SPATIAL INDEX(s); +OPTIMIZE TABLE t; +# Cleanup +DROP TABLE t; diff --git a/storage/innobase/gis/gis0rtree.cc b/storage/innobase/gis/gis0rtree.cc index 60218a132c9..f75eab07cf3 100644 --- a/storage/innobase/gis/gis0rtree.cc +++ b/storage/innobase/gis/gis0rtree.cc @@ -1468,7 +1468,8 @@ rtr_ins_enlarge_mbr( /* Check path info is not empty. */ ut_ad(!btr_cur->rtr_info->parent_path->empty()); - ut_ad(btr_cur->rtr_info->thr || !btr_cur->index()->is_committed()); + ut_ad(btr_cur->rtr_info->thr || !btr_cur->index()->is_committed() + || btr_cur->index()->table->name.is_temporary()); /* Create a memory heap. */ heap = mem_heap_create(1024);