UNPKG

tarantoolscript

Version:

TypeScript definitions for Tarantool Lua API.

288 lines (254 loc) 14 kB
import { FieldType, SpaceFieldFormat, SpaceOptions } from '../schema'; import { IndexObject } from '../idx'; import { IndexOptions } from '../idx'; import { TriggerFunction } from './TriggerFunction'; import { IteratorType } from '../idx'; import { SelectOptions, TuplePos } from './SelectOptions'; import { TupleObject } from '../tuple'; import { UpdateOperation } from './UpdateOperation'; import { CheckConstraint } from './CheckConstraint'; import { UpdateOperator } from './UpdateOperator'; import { MsgPackObject } from '../../msgpack'; export interface SpaceObject { [ key: string | number ]: unknown; /** * Since version 2.5.2. Alter an existing space. This method changes certain space parameters. * * @params options The space options such as field_count, user, format, name, and other. The full list of these options with descriptions parameters is provided in box.schema.space.create() */ alter(options: SpaceOptions): void; /** * Insert a new tuple using an auto-increment primary key. * The space specified by space_object must have an ‘unsigned’ or ‘integer’ or ‘number’ primary key index of type TREE. * The primary-key field will be incremented before the insert. * * Since version 1.7.5 this method is deprecated – it is better to use a `sequence`. * * Complexity factors: Index size, Index type, Number of indexes accessed, WAL settings. * * Possible errors: * - index has wrong type; * - primary-key indexed field is not a number. * * @param tuple Tuple’s fields, other than the primary-key field. * @returns The inserted tuple. */ auto_increment(tuple: any[]): unknown[]; /** * @returns Number of bytes in the space. This number, which is stored in Tarantool’s internal memory, * represents the total number of bytes in all tuples, not including index keys. * For a measure of index size, see index_object:bsize(). */ bsize(): number; /** * Return the number of tuples. If compared with len(), this method works slower because count() scans the entire space to count the tuples. * * @param key Primary-key field values, must be passed as a Lua table if key is multi-part. * @param iterator - Comparison method. */ count(key?: unknown, iterator?: { iterator: IteratorType }): number; /** * Create an index. * * It is mandatory to create an index for a space before trying to insert tuples into it or select tuples from it. * The first created index will be used as the primary-key index, so it must be unique. * * @param name Name of index, which should conform to the rules for object names. * @param options Index options. * @returns Created index object. */ create_index(name: string, options?: IndexOptions): IndexObject; /** * Delete a tuple identified by the primary key. * * Note regarding storage engine: vinyl will return `nil`, rather than the deleted tuple. * * @param key Primary-key field values, must be passed as a Lua table if key is multi-part. */ delete(key: unknown): TupleObject | undefined; /** Drop a space. The method is performed in background and doesn’t block consequent requests. */ drop(): void; /** * Declare field names and types. * @param format A list of field names and types. */ format(format?: SpaceFieldFormat[] | [string, FieldType?][]): SpaceFieldFormat[] | undefined; /** * Convert a map to a tuple instance or to a table. * The map must consist of “field name = value” pairs. * The field names and the value types must match names and types stated previously for the space, via `space_object:format()`. * @param map A series of “field = value” pairs, in any order. * @param options The only legal option is `{table = true|false}`; if the option is omitted or if `{table = false}`, then return type will be ‘cdata’ (i.e. tuple); if `{table = true}`, then return type will be ‘table’. * @returns A tuple instance or table. */ frommap(map: { [key: string]: unknown }, options?: { table?: boolean }): TupleObject; /** * Search for a tuple in the given space. * @param key Value to be matched against the index key, which may be multi-part. * @returns The tuple whose index key matches key, or nil. */ get(key: unknown): TupleObject | undefined; /** * Insert a tuple into a space. * @param tuple Tuple to be inserted. * @returns The inserted tuple. */ insert(tuple: TupleObject | MsgPackObject | unknown[]): TupleObject; /** * Return the number of tuples in the space. * If compared with `count()`, this method works faster because `len()` does not scan the entire space to count the tuples. * @returns Number of tuples in the space. */ len(): number; /** * Create a “replace trigger”. * The trigger-function will be executed whenever a `replace()` or `insert()` or `update()` or `upsert()` or `delete()` * happens to a tuple in <space-name>. * * If the parameters are (nil, old-trigger-function), then the old trigger is deleted. * * If both parameters are omitted, then the response is a list of existing trigger functions. * * If it is necessary to know whether the trigger activation happened due to replication or on a specific connection type, * the function can refer to `box.session.type()`. * * @param trigger Function which will become the trigger function. * @param old_trigger Existing trigger function which will be replaced by `trigger`. * @returns `nil` or function pointer */ on_replace(trigger?: TriggerFunction, old_trigger?: TriggerFunction): (TriggerFunction | TriggerFunction[]) | undefined; /** * Create a “replace trigger”. * The trigger-function will be executed whenever a `replace()` or `insert()` or `update()` or `upsert()` or `delete()` * happens to a tuple in <space-name>. * * If the parameters are (nil, old-trigger-function), then the old trigger is deleted. * * If both parameters are omitted, then the response is a list of existing trigger functions. * * If it is necessary to know whether the trigger activation happened due to replication or on a specific connection type, * the function can refer to `box.session.type()`. * * The value that a before_replace trigger function can return affects what will happen after the return. Specifically: * - if there is no return value, then execution proceeds, inserting|replacing the new value; * - if the value is `nil`, then the tuple will be deleted; * - if the value is the same as the old parameter, then no `on_replace` function will be called and the data change will be skipped. * The return value will be absent. * - if the value is the same as the new parameter, then it’s as if the `before_replace` function wasn’t called; * - if the value is some other tuple, then it is used for insert/replace. * * @param trigger Function which will become the trigger function. * @param old_trigger Existing trigger function which will be replaced by `trigger`. * @returns `nil` or function pointer. */ before_replace(trigger?: TriggerFunction, old_trigger?: TriggerFunction): (TriggerFunction | TriggerFunction[]) | undefined; /** * Search for a tuple or a set of tuples in the given space, and allow iterating over one tuple at a time. * To search by the specific index, use the `index_object:pairs()` method. * @param key Value to be matched against the index key, which may be multi-part * @param iterator The iterator type. The default iterator type is ‘EQ’ * @param after A tuple or the position of a tuple (`tuple_pos`) after which pairs starts the search. You can pass an empty string or `box.NULL` to this option to start the search from the first tuple. * @returns The `iterator`, which can be used in a for/end loop or with `totable()`. */ pairs(key?: unknown, options?: { iterator?: IteratorType, after?: number | AnyTable }): LuaIterable<LuaMultiReturn<[number, TupleObject]>>; /** * Rename a space. * @param name New name for space. */ rename(name: string): void; /** * Insert a tuple into a space. * If a tuple with the same primary key already exists, `box.space...:replace()` replaces the existing tuple with a new one. * @param tuple Tuple to be inserted. * @returns The inserted tuple. */ replace(tuple: TupleObject | unknown[]): TupleObject; /** * Insert a tuple into a space. * If a tuple with the same primary key already exists, `box.space...:replace()` replaces the existing tuple with a new one. * The syntax variants `box.space...:replace()` and `box.space...:put()` have the same effect; * the latter is sometimes used to show that the effect is the converse of `box.space...:get()`. * @param tuple Tuple to be inserted. * @returns The inserted tuple. */ put(tuple: TupleObject | unknown[]): TupleObject; /** * At the time that a trigger is defined, it is automatically enabled - that is, it will be executed. * Replace triggers can be disabled with `box.space.space-name:run_triggers(false)` and re-enabled with `box.space.space-name:run_triggers(true)`. */ run_triggers(enable: boolean): void; /** * Search for a tuple or a set of tuples in the given space by the primary key. * To search by the specific index, use the `index_object:select()` method. * @param key A value to be matched against the index key, which may be multi-part. * @param options None, any, or all of the same options that index_object:select() allows. * @returns The tuples whose primary-key fields are equal to the fields of the passed key. * If the number of passed fields is less than the number of fields in the primary key, * then only the passed fields are compared, so `select{1,2}` matches a tuple whose primary key is `{1,2,3}`. * If `options.fetch_pos` is set to `true`, returns a base64-encoded string representing the position of the last selected tuple as the second value. * If no tuples are fetched, returns `nil`.7 */ select(key?: unknown, options?: SelectOptions): LuaMultiReturn<[TupleObject[]?, TuplePos?]>; /** * Deletes all tuples. The method is performed in background and doesn’t block consequent requests. * * Do not call this method within a transaction in Tarantool older than `v. 2.10.0`. See `gh-6123` for details. */ truncate(): void; /** * Update a tuple. * * The `update` function supports operations on fields — assignment, arithmetic (if the field is numeric), * cutting and pasting fragments of a field, deleting or inserting a field. * Multiple operations can be combined in a single update request, and in this case they are performed atomically and sequentially. * Each operation requires specification of a field identifier, which is usually a number. * When multiple operations are present, the field number for each operation is assumed to be relative to the most recent state of the tuple, * that is, as if all previous operations in a multi-operation update have already been applied. * In other words, it is always safe to merge multiple `update` invocations into a single invocation, with no change in semantics. * @param key Primary-key field values, must be passed as a Lua table if key is multi-part. * @param updates Update operations. * @returns The updated tuple or `nil` if the key is not found. */ update(key: unknown, updates: UpdateOperation[] | [UpdateOperator, number | string, unknown][]): TupleObject | undefined; /** * Update or insert a tuple. * * If there is an existing tuple which matches the key fields of `tuple`, * then the request has the same effect as `space_object:update()` and the `{{operator, field_identifier, value}, ...}` parameter is used. * If there is no existing tuple which matches the key fields of `tuple`, then the request has the same effect as `space_object:insert()` * and the `tuple` parameter is used. * However, unlike `insert` or `update`, `upsert` will not read a tuple and perform error checks before returning – * this is a design feature which enhances throughput but requires more caution on the part of the user. * @param tuple Default tuple to be inserted, if analogue isn’t found. * @param updates Update operations to update existing tuple. */ upsert(tuple: TupleObject | unknown[], updates: UpdateOperation[] | [UpdateOperator, number | string, unknown][]): void; /** * Create a check constraint. A check constraint is a requirement that must be met when a tuple is inserted or updated in a space. * Check constraints created with `space_object:create_check_constraint` have the same effect as check constraints created with * an SQL CHECK() clause in a CREATE TABLE statement. * @param name Name of check constraint, which should conform to the rules for object names. * @param expression SQL code of an expression which must return a boolean result. * @returns Check constraint object. */ create_check_constraint(name: string, expression: string): CheckConstraint; /** Whether or not this space is enabled. The value is `false` if the space has no index. */ enabled: boolean; /** The required field count for all tuples in this space. */ field_count: number; /** * Ordinal space number. Spaces can be referenced by either name or number. * Thus, if space `tester` has `id = 800`, then `box.space.tester:insert{0}` and `box.space[800]:insert{0}` are equivalent requests. */ id: number; /** * A container for all defined indexes. There is a Lua object of type box.index with methods to search tuples and iterate over them in predefined order. * * To reset, use `box.stat.reset()`. */ index: LuaTable<string | number, IndexObject>; is_sync: boolean; temporary: boolean; is_local: boolean; name: string; }