Spec-Zone.ru › RethinkDB java

Команда 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.g("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((context, oldVal, newVal) ->
  newVal.merge(r.object("modified_at", context.g("timestamp")))
).run(conn);

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

r.table("comments").setWriteHook(null).run(conn);

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

r.table("posts").getWriteHook().do((writeHook) ->
    r.table("posts").setWriteHook(writeHook.g("function"))
).run(conn);

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

  • getWriteHook

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

Spec-Zone.ru

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