diff options
author | Sergei Golubchik <serg@mariadb.org> | 2017-10-22 13:03:41 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2017-10-22 13:03:41 +0200 |
commit | 9d2e2d753323a934604d25144b9d1ecaf34b47d8 (patch) | |
tree | 051a721f7ea77c2278d09323e36088abe22aa66a /storage/xtradb/row/row0mysql.cc | |
parent | d11af09865299033d5eef64531704f6ab8af5304 (diff) | |
parent | 2eb3c5e5420a724945a4cba914df25aa1e3744ce (diff) | |
download | mariadb-git-9d2e2d753323a934604d25144b9d1ecaf34b47d8.tar.gz |
Merge branch '10.0' into 10.1
Diffstat (limited to 'storage/xtradb/row/row0mysql.cc')
-rw-r--r-- | storage/xtradb/row/row0mysql.cc | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/storage/xtradb/row/row0mysql.cc b/storage/xtradb/row/row0mysql.cc index 0079fc79a0e..67eb1d7de94 100644 --- a/storage/xtradb/row/row0mysql.cc +++ b/storage/xtradb/row/row0mysql.cc @@ -569,11 +569,33 @@ next_column: /* If there is a FTS doc id column and it is not user supplied ( generated by server) then assign it a new doc id. */ - if (prebuilt->table->fts) { + if (!prebuilt->table->fts) { + return; + } + + ut_a(prebuilt->table->fts->doc_col != ULINT_UNDEFINED); - ut_a(prebuilt->table->fts->doc_col != ULINT_UNDEFINED); + doc_id_t doc_id; - fts_create_doc_id(prebuilt->table, row, prebuilt->heap); + if (!DICT_TF2_FLAG_IS_SET(prebuilt->table, DICT_TF2_FTS_HAS_DOC_ID)) { + if (prebuilt->table->fts->cache->first_doc_id + == FTS_NULL_DOC_ID) { + fts_get_next_doc_id(prebuilt->table, &doc_id); + } + return; + } + + dfield_t* fts_doc_id = dtuple_get_nth_field( + row, prebuilt->table->fts->doc_col); + + if (fts_get_next_doc_id(prebuilt->table, &doc_id) == DB_SUCCESS) { + ut_a(doc_id != FTS_NULL_DOC_ID); + ut_ad(sizeof(doc_id) == fts_doc_id->type.len); + dfield_set_data(fts_doc_id, prebuilt->ins_upd_rec_buff + + prebuilt->mysql_row_len, 8); + fts_write_doc_id(fts_doc_id->data, doc_id); + } else { + dfield_set_null(fts_doc_id); } } @@ -1048,7 +1070,10 @@ row_get_prebuilt_insert_row( prebuilt->ins_upd_rec_buff = static_cast<byte*>( mem_heap_alloc( prebuilt->heap, - prebuilt->mysql_row_len)); + DICT_TF2_FLAG_IS_SET(prebuilt->table, + DICT_TF2_FTS_HAS_DOC_ID) + ? prebuilt->mysql_row_len + 8/* FTS_DOC_ID */ + : prebuilt->mysql_row_len)); } dtuple_t* row; |