UNIV_INTERNulintbtr_cur_optimistic_insert====================== ulint flags ! in undo logging and locking flags if not zero the parameters index and thr should be specified btr_cur_t cursor !
函数 btr_cur_optimistic_insert 实现了在 B+ 树中进行乐观插入的操作。它的参数包括:
- flags:undo logging 和 locking 的标志位。如果不为零,则需要指定参数 index 和 thr。
- cursor:指向将要插入记录的位置的游标,插入后游标仍然有效。
- entry:要插入的记录。
- rec:插入后记录的指针。
- big_rec:如果记录过大,则返回指向将字段存储在外部的 big_rec_t 向量的指针。否则为 NULL。
- n_ext:存储在外部的字段数量。
- thr:查询线程或 NULL。
- mtr:mini-transaction。
首先,函数获取 block 和 page,并检查 entry 是否符合要求。如果记录过大,则返回 DB_TOO_BIG_RECORD。
接着,函数计算了记录在转换为 rec 后的大小。如果这个大小超过了当前页的最大插入大小,则需要分裂页以获得足够的空间。
如果记录的大小超过了当前页的最大插入大小,则需要重新组织页。如果当前页是压缩页,则还需要检查是否有足够的空间来插入新记录。
接下来,函数检查锁和 undo log,并尝试插入记录。如果插入失败,则需要重新组织页。如果插入成功,则更新游标和插入缓冲区的位图。
最后,函数返回 DB_SUCCESS 和指向 big_rec_t 向量的指针(如果记录过大)
原文地址: http://www.cveoy.top/t/topic/eF39 著作权归作者所有。请勿转载和采集!