Spec-Zone.ru › RethinkDB javascript

Команда ReQL: setWriteHook

Синтаксис команды

table.setWriteHook(function | binary | null) → object

Описание

Устанавливает обработчик записи для таблицы или перезаписывает существующий.

Обработчик может быть анонимной функцией со сигнатурой (context: object, oldVal: object, newVal: object) -> object или двоичным представлением, полученным из поля function команды getWriteHook. Функция должна быть детерминированной, то есть не может использовать подзапрос или команду r.js.

Первый аргумент, context, — это объект ReQL, содержащий следующие свойства:

  • primary_key: первичный ключ документа, который удаляется, вставляется или изменяется
  • timestamp: объект ReQL time, представляющий текущее время выполнения запроса

Как и при создании функций вторичных индексов с помощью indexCreate, r.now() считается недетерминированным и поэтому не допускается в контексте обработчиков записи. Если вам необходимо сослаться на текущую метку времени, следует использовать context('timestamp').

Всякий раз, когда в таблице выполняется операция записи (вставка, удаление или изменение документа), функция обработчика записи вызывается с параметром контекста, старым значением документа (или null при вставке) и новым значением документа (или null при удалении). После этого она возвращает значение, которое должно быть фактически вставлено и/или заменено вместо newVal. Также она может вернуть значение r.error(...) для прерывания записи.

Для простоты функция обработчика записи может вернуть null только тогда и только тогда, когда newVal имеет значение null. Это просто мера предосторожности, чтобы случайно не превратить вставку/обновление в удаление или удаление в обновление.

При успешном выполнении команда setWriteHook возвращает объект следующего вида:

{
  "function": <binary>,
  "query": "setWriteHook(function(_var1, _var2, _var3) { return ...; })",
}

Пример: Создать обработчик записи, который устанавливает modified_at на текущее время при каждой операции записи.

r.table('comments').setWriteHook(function(context, oldVal, newVal) {
  return newVal.merge({
    modified_at: context('timestamp')
  });
}).run(conn, callback)

Пример: Удалить обработчик записи, связанный с таблицей comments.

r.table('comments').setWriteHook(null).run(conn, callback)

Пример: Воссоздать устаревший обработчик записи в таблице.

r.table('posts').getWriteHook().do(function(writeHook) {
  return r.table('posts').setWriteHook(writeHook('function'));
}).run(conn, callback)

Связанные команды

  • getWriteHook

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/set_write_hook/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API