Skip to content

Commit

Permalink
feat(table): add support for unique index
Browse files Browse the repository at this point in the history
  • Loading branch information
polRk committed Feb 11, 2025
1 parent 0e985dd commit 6d2946c
Showing 1 changed file with 28 additions and 20 deletions.
48 changes: 28 additions & 20 deletions src/table/table-session.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {google, Ydb} from "ydb-sdk-proto";
import { google, Ydb } from "ydb-sdk-proto";
import IQuery = Ydb.Table.IQuery;
import IType = Ydb.IType;
import DescribeTableResult = Ydb.Table.DescribeTableResult;
Expand All @@ -19,15 +19,15 @@ import BulkUpsertResult = Ydb.Table.BulkUpsertResult;
import OperationMode = Ydb.Operations.OperationParams.OperationMode;
import * as grpc from "@grpc/grpc-js";
import EventEmitter from "events";
import {ICreateSessionResult, SessionEvent, TableService} from "./table-session-pool";
import {Endpoint} from "../discovery";
import {retryable, RetryParameters, RetryStrategy} from "../retries_obsoleted";
import {MissingStatus, MissingValue, SchemeError, YdbError} from "../errors";
import {ResponseMetadataKeys} from "../constants";
import {pessimizable} from "../utils";
import {YdbOperationAsyncResponse, ensureOperationSucceeded, getOperationPayload} from "../utils/process-ydb-operation-result";
import {StreamEnd} from "../utils";
import {Logger} from "../logger/simple-logger";
import { ICreateSessionResult, SessionEvent, TableService } from "./table-session-pool";
import { Endpoint } from "../discovery";
import { retryable, RetryParameters, RetryStrategy } from "../retries_obsoleted";
import { MissingStatus, MissingValue, SchemeError, YdbError } from "../errors";
import { ResponseMetadataKeys } from "../constants";
import { pessimizable } from "../utils";
import { YdbOperationAsyncResponse, ensureOperationSucceeded, getOperationPayload } from "../utils/process-ydb-operation-result";
import { StreamEnd } from "../utils";
import { Logger } from "../logger/simple-logger";

interface PartialResponse<T> {
status?: (Ydb.StatusIds.StatusCode | null);
Expand Down Expand Up @@ -78,7 +78,7 @@ export class OperationParams implements Ydb.Operations.IOperationParams {
}

withOperationTimeoutSeconds(seconds: number) {
this.operationTimeout = {seconds};
this.operationTimeout = { seconds };
return this;
}

Expand All @@ -88,7 +88,7 @@ export class OperationParams implements Ydb.Operations.IOperationParams {
}

withCancelAfterSeconds(seconds: number) {
this.cancelAfter = {seconds};
this.cancelAfter = { seconds };
return this;
}

Expand Down Expand Up @@ -125,7 +125,7 @@ interface IDropTableSettings {
export class DropTableSettings extends OperationParamsSettings {
muteNonExistingTableErrors: boolean;

constructor({muteNonExistingTableErrors = true} = {} as IDropTableSettings) {
constructor({ muteNonExistingTableErrors = true } = {} as IDropTableSettings) {
super();
this.muteNonExistingTableErrors = muteNonExistingTableErrors;
}
Expand Down Expand Up @@ -312,13 +312,13 @@ export class TableSession extends EventEmitter implements ICreateSessionResult {
return Promise.resolve();
}
this.beingDeleted = true;
ensureOperationSucceeded(await this.api.deleteSession({sessionId: this.sessionId}));
ensureOperationSucceeded(await this.api.deleteSession({ sessionId: this.sessionId }));
}

@retryable()
@pessimizable
public async keepAlive(): Promise<void> {
const request = {sessionId: this.sessionId};
const request = { sessionId: this.sessionId };
const response = await this.api.keepAlive(request);
ensureOperationSucceeded(this.processResponseMetadata(request, response));
}
Expand Down Expand Up @@ -439,7 +439,7 @@ export class TableSession extends EventEmitter implements ICreateSessionResult {
}
const response = await this.api.beginTransaction(request);
const payload = getOperationPayload(this.processResponseMetadata(request, response));
const {txMeta} = BeginTransactionResult.decode(payload);
const { txMeta } = BeginTransactionResult.decode(payload);
if (txMeta) {
return txMeta;
}
Expand Down Expand Up @@ -524,15 +524,15 @@ export class TableSession extends EventEmitter implements ICreateSessionResult {
request.collectStats = settings.collectStats;
}
if (keepInCache) {
request.queryCachePolicy = {keepInCache};
request.queryCachePolicy = { keepInCache };
}

if (!executeQueryRetryer) executeQueryRetryer = new RetryStrategy('TableSession:executeQuery', new RetryParameters(), this.logger);

const response =
settings?.idempotent
? await executeQueryRetryer.retry(() => this.api.executeDataQuery(request))
: await this.api.executeDataQuery(request);
? await executeQueryRetryer.retry(() => this.api.executeDataQuery(request))
: await this.api.executeDataQuery(request);
const payload = getOperationPayload(this.processResponseMetadata(request, response, settings?.onResponseMetadata));
return ExecuteQueryResult.decode(payload);
}
Expand Down Expand Up @@ -887,6 +887,7 @@ export class TableIndex implements Ydb.Table.ITableIndex {
public dataColumns: string[] | null = null;
public globalIndex: Ydb.Table.IGlobalIndex | null = null;
public globalAsyncIndex: Ydb.Table.IGlobalAsyncIndex | null = null;
public globalUniqueIndex: Ydb.Table.IGlobalUniqueIndex | null = null;

constructor(public name: string) {
}
Expand All @@ -913,13 +914,20 @@ export class TableIndex implements Ydb.Table.ITableIndex {
}
return this
}

withGlobalUnique() {
this.globalUniqueIndex = new Ydb.Table.GlobalUniqueIndex()
this.globalAsyncIndex = null
this.globalIndex = null
return this
}
}

export class TtlSettings implements Ydb.Table.ITtlSettings {
public dateTypeColumn?: Ydb.Table.IDateTypeColumnModeSettings | null;

constructor(columnName: string, expireAfterSeconds: number = 0) {
this.dateTypeColumn = {columnName, expireAfterSeconds};
this.dateTypeColumn = { columnName, expireAfterSeconds };
}
}

Expand Down

0 comments on commit 6d2946c

Please sign in to comment.