oracle-nosqldb
Version:
Node.js driver for Oracle NoSQL Database
868 lines (786 loc) • 32.4 kB
TypeScript
/*-
* Copyright (c) 2018, 2025 Oracle and/or its affiliates. All rights reserved.
*
* Licensed under the Universal Permissive License v 1.0 as shown at
* https://oss.oracle.com/licenses/upl/
*/
import type { NoSQLClient } from "./nosql_client";
import type { TableState, AdminState, CapacityMode } from "./constants";
import type { TableLimits, TableETag, DefinedTags, FreeFormTags, RowVersion,
MultiDeleteContinuationKey, QueryContinuationKey } from "./param";
import type { AnyRow, IdentityField } from "./data";
import type { PutOpt, DeleteOpt, QueryOpt, ListTablesOpt, ReplicaStatsOpt }
from "./opt";
import type { PreparedStatement } from "./stmt";
import type { Region } from "./region";
/**
* Cloud Service only.
* ReplicaInfo represents information about a single remote replica of a
* Global Active table. For more information, see
* {@link https://docs.oracle.com/en/cloud/paas/nosql-cloud/gasnd | Global Active Tables in NDCS}.
* You can retrieve information about table replicas from any method that
* returns {@link TableResult} (such as {@link NoSQLClient#getTable},
* {@link NoSQLClient#addReplica}, etc.) via {@link TableResult#replicas}.
* @see {@link TableResult#replicas}
*/
export interface ReplicaInfo {
/**
* Name of the replica. This is the same as a region id (see
* {@link Region#regionId}) of the replica's region.
*/
readonly replicaName: string;
/**
* Region of the replica, if given {@link Region} constant is defined in
* the SDK.
* @see {@link Region}
*/
readonly region?: Region;
/**
* OCID of the replica table.
*/
readonly replicaOCID: string;
/**
* Capacity mode of the replica table.
* <p>
* Capacity mode may be set separately for each replica.
* @see {@link CapacityMode}
*/
readonly capacityMode: CapacityMode;
/**
* Write units of the replica table.
* <p>
* From the standpoint of the local table, write units of the replica
* table define the maximum throughput used for replicating writes from
* the replica to the local table. This throughput adds to the total
* write througput of the local table. If the replica has capacity mode
* {@link CapacityMode.ON_DEMAND}, system-configured limits will be used.
* <p>
* Note that reads are done locally so the read units of the replica table
* do not affect the read throughput of the local table.
* <p>
* Both write and read units can be set separately for each replica.
* @see {@link TableLimits#writeUnits}
*/
readonly writeUnits: number;
/**
* Operational state of the replica table.
* <p>
* Note that replica initialization process (see
* {@link TableResult#isLocalReplicaInitialized}) does not affect the
* replica table state (it will still be {@link TableState.ACTIVE}).
* @see {@link TableState}
*/
readonly state: TableState;
}
/**
* TableResult object is the result of {@link NoSQLClient#tableDDL},
* {@link NoSQLClient#setTableLimits }, {@link NoSQLClient#getTable} and
* and may also be the result of {@link NoSQLClient#forCompletion} method.
* It encapsulates the state of the table that is the target of the operation.
* <p>
* Operations performed by {@link NoSQLClient#tableDDL} such as table
* creation, modification, and drop are potentially long running and not
* necessarily completed when {@link NoSQLClient#tableDDL} returns result
* and the table may still be in one of its intermediate states. You may call
* {@link NoSQLClient#forCompletion} to be notified when the operation
* completes and the table reaches desired state (which, depending on the
* operation, would be either {@link TableState.ACTIVE} or
* {@link TableState.DROPPED }.
* You may also call {@link NoSQLClient#getTable} to receive static
* information about the table as well as its current state.
*/
export interface TableResult {
/**
* Cloud service only. Compartment id of the table.
*/
readonly compartmentId?: string;
/**
* On-premise NoSQL database only. The namespace of the table.
*/
readonly namespace?: string;
/**
* Cloud service only. The OCID of the table.
*/
readonly tableOCID?: string;
/**
* Current table state, see {@link TableState}.
*/
readonly tableState: TableState;
/**
* Table name.
*/
readonly tableName: string;
/**
* Table schema, in JSON format, if available.
*/
readonly schema?: string;
/**
* DDL (CREATE TABLE) statement used to create this table if available. If
* the table has been altered since initial creation, the statement is
* also altered to reflect the current table schema. This value, when
* defined, is functionally equivalent to the schema returned by
* {@link schema}. The most reliable way to get the DDL statement is by
* using {@link NoSQLClient#getTable} on an existing table.
*/
readonly tableDDL?: string;
/**
* Cloud service only. Table limits, see {@link TableLimits}
*/
readonly tableLimits?: TableLimits;
/**
* Cloud service only. Entity tag associated with the table. See
* {@link TableETag}.
*/
readonly etag?: TableETag;
/**
* Cloud service only. Defined tags associated with the table. See
* {@link DefinedTags}.
*/
readonly definedTags?: DefinedTags;
/**
* Cloud Service only. Free-form tags associated with the table. See
* {@link FreeFormTags}.
*/
readonly freeFormTags?: FreeFormTags;
/**
* Operation id of the operation that returned this result, if this result
* is returned by {@link NoSQLClient#tableDDL},
* {@link NoSQLClient#setTableLimits} or {@link NoSQLClient#setTableTags}
* methods. It is used when the {@link TableResult} is subsequently
* passed to {@link NoSQLClient#forCompletion} or
* {@link NoSQLClient#getTable} as the first parameter to identify the
* operation and check for any errors from that operation.
* This value is undefined if the request did not generate a new
* operation.
*/
readonly operationId?: string;
/**
* Cloud Service only.
* Indicates whether or not the table's schema is frozen. Frozen schema is
* required for Global Active tables. For more information, see
* {@link https://docs.oracle.com/en/cloud/paas/nosql-cloud/gasnd | Global Active Tables in NDCS}.
*/
readonly isSchemaFrozen?: boolean;
/**
* Cloud Service only.
* Indicates whether the table has replicas, that is whether it is a
* Global Active table. For more information, see
* {@link https://docs.oracle.com/en/cloud/paas/nosql-cloud/gasnd | Global Active Tables in NDCS}.
*/
readonly isReplicated?: boolean;
/**
* Cloud Service only.
* If this table is a replica, indicates whether its initialization
* process has been completed. The initialization process starts after the
* replica table is created and involves copying of the table data from
* the sender region to the receiver region. For more information, see
* {@link https://docs.oracle.com/en/cloud/paas/nosql-cloud/gasnd | Global Active Tables in NDCS}.
* This value is <em>true</em> if the table is a replica and its
* initialization process has been completed, otherwise it is
* <em>false</em>.
* @see {@link NoSQLClient#addReplica}
*/
readonly isLocalReplicaInitialized?: boolean;
/**
* Cloud Service only.
* An array containing information for each replica, if this table is
* replicated (Global Active Table), otherwise <em>undefined</em>.
* For more information, see
* {@link https://docs.oracle.com/en/cloud/paas/nosql-cloud/gasnd | Global Active Tables in NDCS}.
* @see {@link ReplicaInfo}
*/
readonly replicas?: ReplicaInfo[];
}
/**
* Cloud service only.
* Note: this type is only relevant when using the driver with the Cloud
* Service. It is not relevant when using the driver
* with on-premise NoSQL Database (see {@link ServiceType.KVSTORE }).
* <p>
* TableUsage objects are part of {@link TableUsageResult}, that is the result
* of {@link NoSQLClient#getTableUsage} method. TableUsage represents a
* single usage record, or slice, that includes information about read and
* write throughput consumed during that period as well as the current
* information regarding storage capacity. In addition the count of throttling
* exceptions for the period is reported.
*/
export interface TableUsage {
/**
* Start time for this usage record as {@link !Date | Date}.
*/
readonly startTime: Date;
/**
* Number of seconds in this usage record.
*/
readonly secondsInPeriod: number;
/**
* Number of read units consumed during this period, see
* {@link TableLimits}.
*/
readonly readUnits: number;
/**
* Number of write units consumed during this period, see
* {@link TableLimits}.
*/
readonly writeUnits: number;
/**
* Amount of storage in Gigabytes consumed by the table. This information
* may be out of date as it is not maintained in real time.
*/
readonly storageGB: number;
/**
* Number of read throttling exceptions on this table in the time period,
* see {@link ErrorCode.READ_LIMIT_EXCEEDED}.
*/
readonly readThrottleCount: number;
/**
* Number of write throttling exceptions on this table in the time period,
* see {@link ErrorCode.WRITE_LIMIT_EXCEEDED}.
*/
readonly writeThrottleCount: number;
/**
* Number of storage throttling exceptions on this table in the time
* period, see {@link ErrorCode.SIZE_LIMIT_EXCEEDED}.
*/
readonly storageThrottleCount: number;
/**
* Percentage of allowed storage usage for the shard with the highest
* usage percentage across all table shards. This property can be used as
* a gauge of total storage available as well as a hint for key
* distribution across shards.
*/
readonly maxShardUsagePercent: number;
}
/**
* Cloud Service only.
* Note: this type is only relevant when using the driver with the Cloud
* Service. It is not relevant when using the driver with on-premise NoSQL
* Database (see {@link ServiceType.KVSTORE}).
* <p>
* TableUsageResult is the result of {@link NoSQLClient#getTableUsage} method.
* It encapsulates the dynamic state of the requested table.
*/
export interface TableUsageResult {
/**
* Table name.
*/
readonly tableName: string;
/**
* Array of {@link TableUsage} records based on options provided to
* {@link NoSQLClient#getTableUsage }. May be empty if no usage records
* are found for requested time period.
*/
readonly usageRecords: TableUsage[];
/**
* The next index after the last table usage record returned. Can be used
* for paging table usage records. For manual paging, assign this value
* to {@link TableUsageOpt#startIndex} as shown in the example of
* {@link NoSQLClient#getTableUsage}. This property is not needed if you
* are using {@link NoSQLClient#tableUsageIterable}.
*/
readonly nextIndex: number;
}
/**
* IndexInfo represents the information about a single index including its
* name and field names. Array of IndexInfo objects is the result of
* {@link NoSQLClient#getIndexes} method and a single IndexInfo object is
* the result of {@link NoSQLClient#getIndex} method.
*/
export interface IndexInfo {
/**
* Index name.
*/
readonly indexName: string;
/**
* Array of field names that define the index.
*/
readonly fields: string[];
/**
* Array of field types corresponding to the array of field names. The
* type in the list is only defined if the index is on a field of type
* JSON and is explicitly typed. If using a server that does not support
* this information, this property will be undefined.
*/
readonly fieldTypes?: (string|undefined)[];
}
/**
* Represents the result of a {@link NoSQLClient#listTables} operation.
* <p>
* On a successful operation the table names are available as well as the
* index of the last returned table. Tables are returned in an array, sorted
* alphabetically.
*/
export interface ListTablesResult {
/**
* Array of table names returned by the operation.
*/
readonly tables: string[];
/**
* Next index after the last table name returned
* (last table index + 1). This can be used as
* {@link ListTablesOpt#startIndex} when calling
* {@link NoSQLClient#listTables} to page table list.
*/
readonly lastIndex: number;
}
/**
* Cloud service only.
* Note: this type is only relevant when using the driver with the Cloud
* Service or Cloud Simulator. It is not relevant when using the driver
* with on-premise NoSQL Database (see {@link ServiceType.KVSTORE}), in which
* case it is not a part of the operation results mentioned below.
* <p>
* ConsumedCapacity is part of results of data operations such as
* {@link GetResult}, {@link PutResult}, {@link DeleteResult},
* {@link MultiDeleteResult}, {@link WriteMultipleResult},
* {@link PreparedStatement} and {@link QueryResult}. It contains read and
* write throughputs consumed by the operation in KBytes as well as in read
* and write units. Thoughput in read and write units is defined as
* following:
* <p>
* A read unit represents 1 eventually consistent read per second for data up
* to 1 KB in size. A read that is absolutely consistent is double that,
* consuming 2 read units for a read of up to 1 KB in size. This means that if
* an application is to use {@link Consistency.ABSOLUTE} it may need to
* specify additional read units when creating a table. A write unit
* represents 1 write per second of data up to 1 KB in size. Note that:
* <ul>
* <li>For read operations, such as {@link NoSQLClient#get},
* {@link NoSQLClient#prepare} and {@link NoSQLClient#query}, the number of
* units consumed {@link readUnits} maybe larger than the
* number of read KBytes {@link readKB} if the operation used
* absolute consistency. See {@link Consistency.ABSOLUTE }.</li>
* <li>For update operations, such as {@link NoSQLClient#put},
* {@link NoSQLClient#delete}, {@link NoSQLClient#deleteRange},
* {@link NoSQLClient#writeMany} and others, the number of read units consumed
* {@link ConsumedCapacity#readUnits} may also be larger than the number of
* read KBytes {@link readKB}.</li>
* </ul>
* <p>
* When driver-side rate limiting is enabled (see {@link Config#rateLimiter}),
* two additional properties, {@link readRateLimitDelay} and
* {@link writeRateLimitDelay} may be set. They specify how long given
* operation was delayed by the rate limiter due to reads and writes
* performed, respectively (note that each of these values is set only if
* given operation does reads and/or writes, correspondingly). These values
* may be useful in gathering statistics to analyze performance and adjust
* rate limiter configuration (when using custom rate limiter).
* See {@link RateLimiter}. Note that total time the operation was delayed
* due to rate limiting is {@link readRateLimitDelay} (if set) +
* {@link writeRateLimitDelay} (if set).
*/
export interface ConsumedCapacity {
/**
* Read throughput consumed by this operation, in KBytes.
*/
readonly readKB: number;
/**
* Write throughtput consumed by this operation, in KBytes.
*/
readonly writeKB: number;
/**
* Read throughput consumed by this operation, in read units.
*/
readonly readUnits: number;
/**
* Write throughtput consumed by this operation, in write units.
*/
readonly writeUnits: number;
/**
* When rate limiting is enabled, specifies how long the operation has
* been delayed, in milliseconds, due to the table read limit. This value
* may be 0 if given operation was not delayed by the read rate limiter.
* Not set if rate limiting is disabled or if given operation does not
* perform reads.
*/
readonly readRateLimitDelay?: number;
/**
* When rate limiting is enabled, specifies how long the operation has
* been delayed, in milliseconds, due to the table write limit. This
* value may be 0 if the operation was not delayed by the write rate
* limiter. Not set if rate limiting is disabled or if given operation
* does not perform writes.
*/
readonly writeRateLimitDelay?: number;
}
/**
* Base interface for DML and query result interfaces that have consumed
* capacity.
*/
export interface ConsumedCapacityResult {
/**
* Capacity consumed by this operation, see {@link ConsumedCapacity}.
* Undefined if using on-premises service or if this is a result of a put
* or a delete sub-operation as part of {@link WriteMultipleResult}.
*/
readonly consumedCapacity?: ConsumedCapacity;
}
/**
* Represents the result of {@link NoSQLClient#get} operation.
* @typeParam TRow Type of table row instance, defaults to {@link AnyRow}
*/
export interface GetResult<TRow = AnyRow> extends ConsumedCapacityResult {
/**
* Value of the returned row or null if the row does not exist.
*/
readonly row: TRow | null;
/**
* Expiration time of the row. If the row exists but does not expire or
* the row does not exist, this value is undefined.
*/
readonly expirationTime?: Date;
/**
* Modification time of the row if available from the server, or
* undefined if th erow does not exist or the server does not support
* modification time.
* @since 5.3.0
*/
readonly modificationTime?: Date;
/**
* {@link RowVersion} of the returned row. If the row does not exist,
* this value is undefined.
*/
readonly version?: RowVersion;
}
/**
* Represents the result of <em>put</em> sub-operation in
* {@link WriteMultipleResult}. This is also a base interface for
* {@link PutResult}.
* @typeParam TRow Type of table row instance, defaults to {@link AnyRow}
* @see {@link PutResult}
*/
export interface PutOpResult<TRow = AnyRow> {
/**
* Whether the put operation was successful, as described in
* {@link NoSQLClient#put}.
*/
readonly success: boolean;
/**
* {@link RowVersion} of the new row if the put operation was successful,
* otherwise undefined.
*/
readonly version?: RowVersion;
/**
* Existing modification time if available, otherwise undefined. This
* value will be available only if {@link PutOpt#returnExisting} was set
* to true and under one of the conditions described in
* {@link NoSQLClient#put}.
* @since 5.3.0
*/
readonly existingModificationTime?: Date;
/**
* Existing row value if available, otherwise undefined. This value will
* be available only if {@link PutOpt#returnExisting} was set to true and
* under one of the conditions described in {@link NoSQLClient#put}.
*/
readonly existingRow?: TRow;
/**
* Existing {@link RowVersion} if available, otherwise undefined. This
* value will be available only if {@link PutOpt#returnExisting} was set
* to true and under one of the conditions described in
* {@link NoSQLClient#put}.
*/
readonly existingVersion?: RowVersion;
/**
* Value generated if the operation created a new value for an identity
* column or string as uuid column. Present only if a value was generated
* for that column by this operation.
*/
readonly generatedValue?: IdentityField;
}
/**
* Represents the result of {@link NoSQLClient#put},
* {@link NoSQLClient#putIfAbsent}, {@link NoSQLClient#putIfPresent} and
* {@link NoSQLClient#putIfVersion} methods.
* @typeParam TRow Type of table row instance, defaults to {@link AnyRow}
*/
export interface PutResult<TRow = AnyRow> extends PutOpResult<TRow>,
ConsumedCapacityResult {}
/**
* Represents the result of <em>delete</em> sub-operation in
* {@link WriteMultipleResult}. This is also a base interface for
* {@link DeleteResult}.
* @typeParam TRow Type of table row instance, defaults to {@link AnyRow}
* @see {@link DeleteResult}
*/
export interface DeleteOpResult<TRow = AnyRow> {
/**
* Whether the delete operation was successful, as described in
* {@link NoSQLClient#delete}.
*/
readonly success: boolean;
/**
* Existing modification time if available, otherwise undefined. This
* value will be available only if {@link DeleteOpt#returnExisting} was
* set to true and under one of the conditions described in
* {@link NoSQLClient#delete}.
* @since 5.3.0
*/
readonly existingModificationTime?: Date;
/**
* Existing row value if available, otherwise undefined. This
* value will be available only if {@link DeleteOpt#returnExisting} was
* set to true and under one of the conditions described in
* {@link NoSQLClient#delete}.
*/
readonly existingRow?: TRow;
/**
* Existing {@link RowVersion} if available, otherwise undefined. This
* value will be available only if {@link DeleteOpt#returnExisting} was
* set to true and under one of the conditions described in
* {@link NoSQLClient#delete}.
*/
readonly existingVersion?: RowVersion;
}
/**
* Represents the result of {@link NoSQLClient#delete} and
* {@link NoSQLClient#deleteIfVersion} methods.
* @typeParam TRow Type of table row instance, defaults to {@link AnyRow}
*/
export interface DeleteResult<TRow = AnyRow> extends ConsumedCapacityResult,
DeleteOpResult<TRow> {}
/**
* Represents the result of a {@link NoSQLClient#deleteRange} method.
* <p>
* On a successful operation the number of rows deleted is available using
* {@link MultiDeleteResult#deletedCount}. There is a limit to the amount of
* data consumed by a single request to the server. If there are still more
* rows to delete, the continuation key will be available as
* {@link MultiDeleteResult#continuationKey}.
*/
export interface MultiDeleteResult extends ConsumedCapacityResult {
/**
* Number of rows deleted.
*/
readonly deletedCount: number;
/**
* Continuation key where the next call to {@link NoSQLClient#deleteRange}
* can resume from, or undefined if there are no more rows to delete.
*/
readonly continuationKey?: MultiDeleteContinuationKey;
}
/**
* Represents the result of a {@link NoSQLClient#writeMany},
* {@link NoSQLClient#putMany} or {@link NoSQLClient#deleteMany} methods.
* <p>
* If the operation succeeds, the execution result of each sub operation is
* available in {@link WriteMultipleResult#results} property.
* <p>
* If the operation is aborted because of the failure of a sub operation with
* {@link WriteOperation#abortOnFail} set to true or if
* {@link WriteMultipleOpt#abortOnFail} is set to true, then the index of
* failed operation is available as {@link WriteMultipleResult#failedOpIndex}
* and the execution result of failed operation is available as
* {@link WriteMultipleResult#failedOpResult}. The
* {@link WriteMultipleResult#results} property will be undefined in this
* case. You may check for the success of the entire operation by whether
* {@link WriteMultipleResult#results} is defined.
* @typeParam TRow Type of table row instance, defaults to {@link AnyRow}
*/
export interface WriteMultipleResult<TRow = AnyRow>
extends ConsumedCapacityResult {
/**
* Array of results if the operation succeeded, undefined otherwise. Each
* result in the array is either {@link PutResult} or {@link DeleteResult}
* depending on the sub operation and has the same index in the array as
* its corresponding operation object provided in the <em>operations</em>
* array to {@link NoSQLClient#writeMany} (same holds for rows and keys
* provided to {@link NoSQLClient#putMany} and
* {@link NoSQLClient#deleteMany} methods). Note that sub operation
* results do not contain {@link ConsumedCapacity}.
*/
readonly results?: (PutOpResult<TRow>|DeleteOpResult<TRow>)[];
/**
* Index of failed sub operation that resulted in the entire operation
* aborting. Undefined if the operation was successul.
*/
readonly failedOpIndex?: number;
/**
* Result of failed sub operation that resulted in the entire operation
* aborting. Undefined if the operation was successful.
*/
readonly failedOpResult?: PutOpResult<TRow>|DeleteOpResult<TRow>;
}
/**
* QueryResult represents the result of {@link NoSQLClient#query } method and
* results returned by iteration over {@link NoSQLClient#queryIterable}.
* It contains a list of row instances representing the query results.
* <p>
* The shape of the values is based on the schema implied by the query. For
* example a query such as "SELECT * FROM ..." that returns an intact row will
* return values that conform to the schema of the table. Projections return
* instances that conform to the schema implied by the statement. UPDATE
* queries either return values based on a RETURNING clause or, by default,
* the number of rows affected by the statement.
* <p>
* For {@link NoSQLClient#query} method, if the value of
* {@link QueryResult#continuationKey} is not null there are additional
* results available. That value can be supplied as
* {@link QueryOpt#continuationKey} to subsequent call to
* {@link NoSQLClient#query} to continue the query. It is possible for a
* query to return no results in an empty list but still have a non-null
* continuation key. This happens if the query reads the maximum amount of
* data allowed in a single request without matching a query predicate. In
* this case, the continuation key must be used to get results, if any exist.
* @typeParam TRow Type of table row instance, defaults to {@link AnyRow}
*/
export interface QueryResult<TRow = AnyRow> extends ConsumedCapacityResult {
/**
* Results for the query as array of <em>TRow</em> instances, the array
* may be empty.
*/
readonly rows: TRow[];
/**
* Continuation key, undefined if there are no more results available.
*/
readonly continuationKey?: QueryContinuationKey;
}
/**
* On-premises only.
* <p>
* AdminResult object is the result of {@link NoSQLClient#adminDDL},
* {@link NoSQLClient#adminStatus} and may also be the result of
* {@link NoSQLClient#forCompletion} methods. It encapsulates the state of
* admin DDL operation (see {@link NoSQLClient#adminDDL}).
* <p>
* Some operations initiated by {@link NoSQLClient#adminDDL} are performed by
* the service asynchronously so that getting result from
* {@link NoSQLClient#adminDDL} does not imply operation completion. In this
* case you may call {@link NoSQLClient#forCompletion} to be notified when
* the operation is completed by the service. You may also call
* {@link NoSQLClient#adminStatus} to receive current status of the operation.
* Other operations are immediate and are completed when result from
* {@link NoSQLClient#adminDDL} is returned.
* <p>
* You may distinguish these types of operations in the following way:
* <ul>
* <li>Asynchronous operations may return a non-null {@link operationId}.</li>
* <li>Asynchronous operations modify system state, while immediate operations
* are read-only.</li>
* <li>Result returned by {@link NoSQLClient#adminDDL} for immediate
* operations has <em>state</em> {@link AdminState.COMPLETE} and has a
* non-null {@link output}.</li>
* </ul>
*/
export interface AdminResult {
/**
* Current state of the operation, which is either complete or
* in-progress, see {@link AdminState}.
*/
readonly state: AdminState;
/**
* Operation id of the operation that returned
* this result, if this result is returned by {@link NoSQLClient#adminDDL}
* and the operation is performed by the service asynchronously. It is
* used when this {@link AdminResult} is subsequently passed to
* {@link NoSQLClient#forCompletion} or {@link NoSQLClient#adminStatus} as
* the first parameter to identify the operation and check for any errors
* from that operation.
*/
readonly operationId?: string;
/**
* Statement for the operation.
*/
readonly statement: string;
/**
* The output of the operation as a string. It is defined for read-only
* immediate operations such as SHOW operations and is undefined for
* operations that modify system state and are performed by the service
* asynchronously such as CREATE, DROP, GRANT, etc.
*/
readonly output?: string;
}
/**
* On-premises only.
* <p>
* Represents information associated with a user including the id and user
* name in the system. {@link NoSQLClient#listUsers} method returns array of
* {@link UserInfo} objects for each user.
*/
export interface UserInfo {
/**
* User id.
*/
readonly id: string;
/**
* User name.
*/
readonly name: string;
}
/**
* Cloud Service only.
* <p>
* ReplicaStats contains information about replica lag for a specific replica.
* <p>
* Replica lag is a measure of how current this table is relative to the
* remote replica and indicates that this table has not yet received updates
* that happened within the lag period.
* <p>
* For example, if the replica lag is 5,000 milliseconds(5 seconds), then this
* table will have all updates that occurred at the remote replica that are
* more than 5 seconds old.
* <p>
* Replica lag is calculated based on how long it took for the latest
* operation from the table at the remote replica to be replayed at this
* table. If there have been no application writes for the table at the remote
* replica, the service uses other mechanisms to calculate an approximation of
* the lag, and the lag statistic will still be available.
*/
export interface ReplicaStats {
/**
* The time the replica stats collection was performed.
*/
readonly collectionTime: Date;
/**
* The replica lag collected at the specified time in milliseconds. In
* rare cases where the replica lag could not be determined, this value is
* <em>undefined</em>.
*/
readonly replicaLag?: number;
}
/**
* Cloud Service only.
* <p>
* Result returned by {@link NoSQLClient#getReplicaStats}. It contains replica
* statistics for the requested table.
* @see {@link NoSQLClient#getReplicaStats}
*/
export interface ReplicaStatsResult {
/**
* Table name.
*/
readonly tableName: string;
/**
* Next start time. This can be used when retrieving large number of
* replica stats records over multiple calls to
* {@link NoSQLClient#getReplicaStats}. Pass this value as
* {@link ReplicaStatsOpt#startTime} on the subsequent call to
* {@link NoSQLClient#getReplicaStats}.
*/
readonly nextStartTime: Date;
/**
* Replica statistics information. Represented as an object with keys
* being region id (see {@link Region#regionId}) of a replica and values
* being an array of {@link ReplicaStats} for that replica. If
* {@link ReplicaStatsOpt#region} option is set, this object will contain
* only one key-value pair for the given region.
* <p>
* Note that in either case this object will contain only keys for which
* there is at least one {@link ReplicaStats} record returned (it will not
* contain keys for regions for which no stats records were found
* according to values specified in {@link ReplicaStatsOpt} or applicable
* defaults).
* @see {@link ReplicaStatsOpt}
*
* @example
* Print replica lag info for EU_ZURICH_1 region.
* ```ts
* for(const rec of statsResult.statsRecords['eu-zurich-1']) {
* console.log(rec.replicaLag);
* }
* ```
*/
readonly statsRecords: {
readonly [regionId: string]: ReplicaStats[]
};
}