mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
MDEV-398: Sergv related to spacial queries
- index_merge/intersection is unable to work on GIS indexes, because:
1. index scans have no Rowid-Ordered-Retrieval property
2. When one does an index-only read over a GIS index, they do not
get the index tuple, because index only contains bounding box of the geometry.
This is why key_copy() call crashed.
This patch fixes #1, which makes the problem go away. Theoretically, it would
be nice to check #2, too, but SE API semantics is not sufficiently precise to do it.
This commit is contained in:
parent
1b84c0cfee
commit
7e6bec87c1
4 changed files with 46 additions and 12 deletions
|
|
@ -914,6 +914,28 @@ const char *ha_maria::index_type(uint key_number)
|
|||
}
|
||||
|
||||
|
||||
ulong ha_maria::index_flags(uint inx, uint part, bool all_parts) const
|
||||
{
|
||||
ulong flags;
|
||||
if (table_share->key_info[inx].algorithm == HA_KEY_ALG_FULLTEXT)
|
||||
flags= 0;
|
||||
else
|
||||
if ((table_share->key_info[inx].flags & HA_SPATIAL ||
|
||||
table_share->key_info[inx].algorithm == HA_KEY_ALG_RTREE))
|
||||
{
|
||||
/* All GIS scans are non-ROR scans. We also disable IndexConditionPushdown */
|
||||
flags= HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE |
|
||||
HA_READ_ORDER | HA_KEYREAD_ONLY | HA_KEY_SCAN_NOT_ROR;
|
||||
}
|
||||
else
|
||||
{
|
||||
flags= HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE |
|
||||
HA_READ_ORDER | HA_KEYREAD_ONLY | HA_DO_INDEX_COND_PUSHDOWN;
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
|
||||
double ha_maria::scan_time()
|
||||
{
|
||||
if (file->s->data_file_type == BLOCK_RECORD)
|
||||
|
|
|
|||
|
|
@ -64,12 +64,7 @@ public:
|
|||
const char **bas_ext() const;
|
||||
ulonglong table_flags() const
|
||||
{ return int_table_flags; }
|
||||
ulong index_flags(uint inx, uint part, bool all_parts) const
|
||||
{
|
||||
return ((table_share->key_info[inx].algorithm == HA_KEY_ALG_FULLTEXT) ?
|
||||
0 : HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE |
|
||||
HA_READ_ORDER | HA_KEYREAD_ONLY | HA_DO_INDEX_COND_PUSHDOWN);
|
||||
}
|
||||
ulong index_flags(uint inx, uint part, bool all_parts) const;
|
||||
uint max_supported_keys() const
|
||||
{ return MARIA_MAX_KEY; }
|
||||
uint max_supported_key_length() const;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue