Skip to content

Prepared statement improvements and fixes

Denis Smirnov requested to merge ps_id into master

Данный mr создан как результат использования prepared statements в sbroad. Там было несколько проблем.

  1. У меня не получилось малой кровью начать использовать msgpack из execute_raw() (вообще, нужно полностью отрефакторить execute, сейчас эти ручки использовать особо не получится, имхо). Поэтому я создаю prepared statement через тарантул модуль (бонус в наличии деструктора), а далее из lua вызываю box.execute(stmt_id, params). Для этого сделал публичным id.
  2. Нашелся баг, приводящий к segfault в деструкторе prepared statement. Мы не должны сами дергать sql_stmt_finalize() ни при каких обстоятельствах, только помечать для GC через sql_unprepare(). Далее, когда очередная вставка prepared statement не будет влезать в кэш тарантула (параметр sql_cache_size), мы произведем сборку мусора всех помеченных на удаление prepared statements. А если перед этим мы удалим часть из них ручками через sql_stmt_finalize(), то мы падаем с segfault.
Edited by Denis Smirnov

Merge request reports