Commit d2900d91 authored by Yury Kurlykov's avatar Yury Kurlykov Committed by GitHub

MDEV-22629 Remove fts_indexes field from struct fts_update_t (#1537)

fts_indexes field in fts_update_t never used. So replace fts_update_t
with doc_id_t in the code
parent dd95935e
......@@ -584,7 +584,7 @@ fts_cache_init(
mutex_enter((ib_mutex_t*) &cache->deleted_lock);
cache->deleted_doc_ids = ib_vector_create(
cache->sync_heap, sizeof(fts_update_t), 4);
cache->sync_heap, sizeof(doc_id_t), 4);
mutex_exit((ib_mutex_t*) &cache->deleted_lock);
/* Reset the cache data for all the FTS indexes. */
......@@ -2637,11 +2637,11 @@ dberr_t
fts_cmp_set_sync_doc_id(
/*====================*/
const dict_table_t* table, /*!< in: table */
doc_id_t doc_id_cmp, /*!< in: Doc ID to compare */
doc_id_t cmp_doc_id, /*!< in: Doc ID to compare */
ibool read_only, /*!< in: TRUE if read the
synced_doc_id only */
doc_id_t* doc_id) /*!< out: larger document id
after comparing "doc_id_cmp"
after comparing "cmp_doc_id"
to the one stored in CONFIG
table */
{
......@@ -2712,10 +2712,10 @@ fts_cmp_set_sync_doc_id(
goto func_exit;
}
if (doc_id_cmp == 0 && *doc_id) {
if (cmp_doc_id == 0 && *doc_id) {
cache->synced_doc_id = *doc_id - 1;
} else {
cache->synced_doc_id = ut_max(doc_id_cmp, *doc_id);
cache->synced_doc_id = ut_max(cmp_doc_id, *doc_id);
}
mutex_enter(&cache->doc_id_lock);
......@@ -2726,7 +2726,7 @@ fts_cmp_set_sync_doc_id(
}
mutex_exit(&cache->doc_id_lock);
if (doc_id_cmp > *doc_id) {
if (cmp_doc_id > *doc_id) {
error = fts_update_sync_doc_id(
table, cache->synced_doc_id, trx);
}
......@@ -2848,7 +2848,7 @@ fts_doc_ids_create(void)
fts_doc_ids->self_heap = ib_heap_allocator_create(heap);
fts_doc_ids->doc_ids = static_cast<ib_vector_t*>(ib_vector_create(
fts_doc_ids->self_heap, sizeof(fts_update_t), 32));
fts_doc_ids->self_heap, sizeof(doc_id_t), 32));
return(fts_doc_ids);
}
......@@ -3943,7 +3943,7 @@ fts_sync_add_deleted_cache(
ut_a(ib_vector_size(doc_ids) > 0);
ib_vector_sort(doc_ids, fts_update_doc_id_cmp);
ib_vector_sort(doc_ids, fts_doc_id_cmp);
info = pars_info_create();
......@@ -3961,13 +3961,13 @@ fts_sync_add_deleted_cache(
"BEGIN INSERT INTO $table_name VALUES (:doc_id);");
for (i = 0; i < n_elems && error == DB_SUCCESS; ++i) {
fts_update_t* update;
doc_id_t* update;
doc_id_t write_doc_id;
update = static_cast<fts_update_t*>(ib_vector_get(doc_ids, i));
update = static_cast<doc_id_t*>(ib_vector_get(doc_ids, i));
/* Convert to "storage" byte order. */
fts_write_doc_id((byte*) &write_doc_id, update->doc_id);
fts_write_doc_id((byte*) &write_doc_id, *update);
fts_bind_doc_id(info, "doc_id", &write_doc_id);
error = fts_eval_sql(sync->trx, graph);
......@@ -5292,12 +5292,12 @@ fts_cache_append_deleted_doc_ids(
for (ulint i = 0; i < ib_vector_size(cache->deleted_doc_ids); ++i) {
fts_update_t* update;
doc_id_t* update;
update = static_cast<fts_update_t*>(
update = static_cast<doc_id_t*>(
ib_vector_get(cache->deleted_doc_ids, i));
ib_vector_push(vector, &update->doc_id);
ib_vector_push(vector, &update);
}
mutex_exit((ib_mutex_t*) &cache->deleted_lock);
......
/*****************************************************************************
Copyright (c) 2007, 2018, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2016, 2019, MariaDB Corporation.
Copyright (c) 2016, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
......@@ -920,7 +920,7 @@ fts_fetch_doc_ids(
int i = 0;
sel_node_t* sel_node = static_cast<sel_node_t*>(row);
fts_doc_ids_t* fts_doc_ids = static_cast<fts_doc_ids_t*>(user_arg);
fts_update_t* update = static_cast<fts_update_t*>(
doc_id_t* update = static_cast<doc_id_t*>(
ib_vector_push(fts_doc_ids->doc_ids, NULL));
for (exp = sel_node->select_list;
......@@ -936,8 +936,7 @@ fts_fetch_doc_ids(
/* Note: The column numbers below must match the SELECT. */
switch (i) {
case 0: /* DOC_ID */
update->fts_indexes = NULL;
update->doc_id = fts_read_doc_id(
*update = fts_read_doc_id(
static_cast<byte*>(data));
break;
......@@ -1005,7 +1004,7 @@ fts_table_fetch_doc_ids(
mutex_exit(&dict_sys->mutex);
if (error == DB_SUCCESS) {
ib_vector_sort(doc_ids->doc_ids, fts_update_doc_id_cmp);
ib_vector_sort(doc_ids->doc_ids, fts_doc_id_cmp);
}
if (alloc_bk_trx) {
......@@ -1022,7 +1021,7 @@ Do a binary search for a doc id in the array
int
fts_bsearch(
/*========*/
fts_update_t* array, /*!< in: array to sort */
doc_id_t* array, /*!< in: array to sort */
int lower, /*!< in: the array lower bound */
int upper, /*!< in: the array upper bound */
doc_id_t doc_id) /*!< in: the doc id to search for */
......@@ -1036,9 +1035,9 @@ fts_bsearch(
while (lower < upper) {
int i = (lower + upper) >> 1;
if (doc_id > array[i].doc_id) {
if (doc_id > array[i]) {
lower = i + 1;
} else if (doc_id < array[i].doc_id) {
} else if (doc_id < array[i]) {
upper = i - 1;
} else {
return(i); /* Found. */
......@@ -1047,7 +1046,7 @@ fts_bsearch(
}
if (lower == upper && lower < orig_size) {
if (doc_id == array[lower].doc_id) {
if (doc_id == array[lower]) {
return(lower);
} else if (lower == 0) {
return(-1);
......@@ -1074,7 +1073,7 @@ fts_optimize_lookup(
{
int pos;
int upper = static_cast<int>(ib_vector_size(doc_ids));
fts_update_t* array = (fts_update_t*) doc_ids->data;
doc_id_t* array = (doc_id_t*) doc_ids->data;
pos = fts_bsearch(array, static_cast<int>(lower), upper, first_doc_id);
......@@ -1087,10 +1086,10 @@ fts_optimize_lookup(
/* If i is 1, it could be first_doc_id is less than
either the first or second array item, do a
double check */
if (i == 1 && array[0].doc_id <= last_doc_id
&& first_doc_id < array[0].doc_id) {
if (i == 1 && array[0] <= last_doc_id
&& first_doc_id < array[0]) {
pos = 0;
} else if (i < upper && array[i].doc_id <= last_doc_id) {
} else if (i < upper && array[i] <= last_doc_id) {
/* Check if the "next" doc id is within the
first & last doc id of the node. */
......@@ -1229,12 +1228,12 @@ fts_optimize_node(
delta for decoding the entries following this document's
entries. */
if (*del_pos >= 0 && *del_pos < (int) ib_vector_size(del_vec)) {
fts_update_t* update;
doc_id_t* update;
update = (fts_update_t*) ib_vector_get(
update = (doc_id_t*) ib_vector_get(
del_vec, *del_pos);
del_doc_id = update->doc_id;
del_doc_id = *update;
}
if (enc->src_ilist_ptr == src_node->ilist && doc_id == 0) {
......@@ -2020,7 +2019,7 @@ fts_optimize_purge_deleted_doc_ids(
ulint i;
pars_info_t* info;
que_t* graph;
fts_update_t* update;
doc_id_t* update;
doc_id_t write_doc_id;
dberr_t error = DB_SUCCESS;
char deleted[MAX_FULL_NAME_LEN];
......@@ -2030,11 +2029,11 @@ fts_optimize_purge_deleted_doc_ids(
ut_a(ib_vector_size(optim->to_delete->doc_ids) > 0);
update = static_cast<fts_update_t*>(
update = static_cast<doc_id_t*>(
ib_vector_get(optim->to_delete->doc_ids, 0));
/* Convert to "storage" byte order. */
fts_write_doc_id((byte*) &write_doc_id, update->doc_id);
fts_write_doc_id((byte*) &write_doc_id, *update);
/* This is required for the SQL parser to work. It must be able
to find the following variables. So we do it twice. */
......@@ -2056,11 +2055,11 @@ fts_optimize_purge_deleted_doc_ids(
/* Delete the doc ids that were copied at the start. */
for (i = 0; i < ib_vector_size(optim->to_delete->doc_ids); ++i) {
update = static_cast<fts_update_t*>(ib_vector_get(
update = static_cast<doc_id_t*>(ib_vector_get(
optim->to_delete->doc_ids, i));
/* Convert to "storage" byte order. */
fts_write_doc_id((byte*) &write_doc_id, update->doc_id);
fts_write_doc_id((byte*) &write_doc_id, *update);
fts_bind_doc_id(info, "doc_id1", &write_doc_id);
......
......@@ -730,10 +730,10 @@ fts_query_union_doc_id(
{
ib_rbt_bound_t parent;
ulint size = ib_vector_size(query->deleted->doc_ids);
fts_update_t* array = (fts_update_t*) query->deleted->doc_ids->data;
doc_id_t* updates = (doc_id_t*) query->deleted->doc_ids->data;
/* Check if the doc id is deleted and it's not already in our set. */
if (fts_bsearch(array, 0, static_cast<int>(size), doc_id) < 0
if (fts_bsearch(updates, 0, static_cast<int>(size), doc_id) < 0
&& rbt_search(query->doc_ids, &parent, &doc_id) != 0) {
fts_ranking_t ranking;
......@@ -761,10 +761,10 @@ fts_query_remove_doc_id(
{
ib_rbt_bound_t parent;
ulint size = ib_vector_size(query->deleted->doc_ids);
fts_update_t* array = (fts_update_t*) query->deleted->doc_ids->data;
doc_id_t* updates = (doc_id_t*) query->deleted->doc_ids->data;
/* Check if the doc id is deleted and it's in our set. */
if (fts_bsearch(array, 0, static_cast<int>(size), doc_id) < 0
if (fts_bsearch(updates, 0, static_cast<int>(size), doc_id) < 0
&& rbt_search(query->doc_ids, &parent, &doc_id) == 0) {
ut_free(rbt_remove_node(query->doc_ids, parent.last));
......@@ -791,10 +791,10 @@ fts_query_change_ranking(
{
ib_rbt_bound_t parent;
ulint size = ib_vector_size(query->deleted->doc_ids);
fts_update_t* array = (fts_update_t*) query->deleted->doc_ids->data;
doc_id_t* updates = (doc_id_t*) query->deleted->doc_ids->data;
/* Check if the doc id is deleted and it's in our set. */
if (fts_bsearch(array, 0, static_cast<int>(size), doc_id) < 0
if (fts_bsearch(updates, 0, static_cast<int>(size), doc_id) < 0
&& rbt_search(query->doc_ids, &parent, &doc_id) == 0) {
fts_ranking_t* ranking;
......@@ -828,7 +828,7 @@ fts_query_intersect_doc_id(
{
ib_rbt_bound_t parent;
ulint size = ib_vector_size(query->deleted->doc_ids);
fts_update_t* array = (fts_update_t*) query->deleted->doc_ids->data;
doc_id_t* updates = (doc_id_t*) query->deleted->doc_ids->data;
fts_ranking_t* ranking= NULL;
/* There are three types of intersect:
......@@ -840,7 +840,7 @@ fts_query_intersect_doc_id(
if it matches 'b' and it's in doc_ids.(multi_exist = true). */
/* Check if the doc id is deleted and it's in our set */
if (fts_bsearch(array, 0, static_cast<int>(size), doc_id) < 0) {
if (fts_bsearch(updates, 0, static_cast<int>(size), doc_id) < 0) {
fts_ranking_t new_ranking;
if (rbt_search(query->doc_ids, &parent, &doc_id) != 0) {
......@@ -3649,8 +3649,8 @@ fts_query_prepare_result(
if (query->flags == FTS_OPT_RANKING) {
fts_word_freq_t* word_freq;
ulint size = ib_vector_size(query->deleted->doc_ids);
fts_update_t* array =
(fts_update_t*) query->deleted->doc_ids->data;
doc_id_t* updates =
(doc_id_t*) query->deleted->doc_ids->data;
node = rbt_first(query->word_freqs);
ut_ad(node);
......@@ -3665,7 +3665,7 @@ fts_query_prepare_result(
doc_freq = rbt_value(fts_doc_freq_t, node);
/* Don't put deleted docs into result */
if (fts_bsearch(array, 0, static_cast<int>(size),
if (fts_bsearch(updates, 0, static_cast<int>(size),
doc_freq->doc_id) >= 0) {
/* one less matching doc count */
--word_freq->doc_count;
......@@ -4016,7 +4016,7 @@ fts_query(
DEBUG_SYNC_C("fts_deleted_doc_ids_append");
/* Sort the vector so that we can do a binary search over the ids. */
ib_vector_sort(query.deleted->doc_ids, fts_update_doc_id_cmp);
ib_vector_sort(query.deleted->doc_ids, fts_doc_id_cmp);
/* Convert the query string to lower case before parsing. We own
the ut_malloc'ed result and so remember to free it before return. */
......
......@@ -239,7 +239,7 @@ Do a binary search for a doc id in the array
int
fts_bsearch(
/*========*/
fts_update_t* array, /*!< in: array to sort */
doc_id_t* array, /*!< in: array to sort */
int lower, /*!< in: lower bound of array*/
int upper, /*!< in: upper bound of array*/
doc_id_t doc_id) /*!< in: doc id to lookup */
......
/*****************************************************************************
Copyright (c) 2007, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2017, 2019, MariaDB Corporation.
Copyright (c) 2017, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
......@@ -80,20 +80,6 @@ struct fts_index_cache_t {
CHARSET_INFO* charset; /*!< charset */
};
/** For supporting the tracking of updates on multiple FTS indexes we need
to track which FTS indexes need to be updated. For INSERT and DELETE we
update all fts indexes. */
struct fts_update_t {
doc_id_t doc_id; /*!< The doc id affected */
ib_vector_t* fts_indexes; /*!< The FTS indexes that need to be
updated. A NULL value means all
indexes need to be updated. This
vector is not allocated on the heap
and so must be freed explicitly,
when we are done with it */
};
/** Stop word control infotmation. */
struct fts_stopword_t {
ulint status; /*!< Status of the stopword tree */
......@@ -319,10 +305,9 @@ fts_ranking_doc_id_cmp(
const void* p2); /*!< in: id2 */
/******************************************************************//**
Compare two fts_update_t instances doc_ids. */
Compare two doc_ids. */
UNIV_INLINE
int
fts_update_doc_id_cmp(
int fts_doc_id_cmp(
/*==================*/
/*!< out:
< 0 if n1 < n2,
......
......@@ -79,19 +79,18 @@ fts_ranking_doc_id_cmp(
}
/******************************************************************//**
Compare two fts_update_t doc_ids.
Compare two doc_ids.
@return < 0 if n1 < n2, 0 if n1 == n2, > 0 if n1 > n2 */
UNIV_INLINE
int
fts_update_doc_id_cmp(
int fts_doc_id_cmp(
/*==================*/
const void* p1, /*!< in: id1 */
const void* p2) /*!< in: id2 */
{
const fts_update_t* up1 = (const fts_update_t*) p1;
const fts_update_t* up2 = (const fts_update_t*) p2;
const doc_id_t* up1 = static_cast<const doc_id_t*>(p1);
const doc_id_t* up2 = static_cast<const doc_id_t*>(p2);
return((int)(up1->doc_id - up2->doc_id));
return static_cast<int>(*up1 - *up2);
}
/******************************************************************//**
......
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