Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Zork33 committed Mar 26, 2024
2 parents ec3ed5a + 3cff2bc commit b7e397d
Show file tree
Hide file tree
Showing 11 changed files with 194 additions and 16 deletions.
15 changes: 14 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,29 @@

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

## [5.3.1](https://github.com/ydb-platform/ydb-nodejs-sdk/compare/v5.3.0...v5.3.1) (2024-03-26)


### Bug Fixes

* visibility of RowType type ([c1f258d](https://github.com/ydb-platform/ydb-nodejs-sdk/commit/c1f258d57f5158b926345d505951f5f5dd93c579))

## [5.3.0](https://github.com/ydb-platform/ydb-nodejs-sdk/compare/v5.2.0...v5.3.0) (2024-03-25)


### Features

* add YDB Query Service client ([f7a5958](https://github.com/ydb-platform/ydb-nodejs-sdk/commit/f7a59582d468c59af8384885cdf9328dad48abbb))

## [5.1.1](https://github.com/ydb-platform/ydb-nodejs-sdk/compare/v5.1.0...v5.1.1) (2023-09-04)
## [5.2.0](https://github.com/ydb-platform/ydb-nodejs-sdk/compare/v5.1.1...v5.2.0) (2024-02-27)


### Features

* large code files are separated ([f94dbcb](https://github.com/ydb-platform/ydb-nodejs-sdk/commit/f94dbcb31f4c17eeb7713d44f5115c2f7f5ea927), [e624b04](https://github.com/ydb-platform/ydb-nodejs-sdk/commit/e624b04dfa85c022e5a5a16308eab2ad13587a42))

## [5.1.1](https://github.com/ydb-platform/ydb-nodejs-sdk/compare/v5.1.0...v5.1.1) (2023-09-04)

### Bug Fixes

* quick fix husky install problem arises during SDK update ([03beecc](https://github.com/ydb-platform/ydb-nodejs-sdk/commit/03beeccde530ea7050608502a8167a9a4a13c47d))
Expand Down
25 changes: 25 additions & 0 deletions examples/query-service/data-helpers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import {declareType, TypedData, Types} from "ydb-sdk";

interface IRow {
id: number;
rowTitle: string;
time: Date;
}

export class Row extends TypedData {
@declareType(Types.UINT64)
public id: number;

@declareType(Types.UTF8)
public rowTitle: string;

@declareType(Types.DATETIME)
public time: Date;

constructor(data: IRow) {
super(data);
this.id = data.id;
this.rowTitle = data.rowTitle;
this.time = data.time;
}
}
145 changes: 145 additions & 0 deletions examples/query-service/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
process.env.YDB_SDK_PRETTY_LOGS = '1';

import {Driver, getCredentialsFromEnv, Logger, TypedValues, RowType} from 'ydb-sdk';
import {Row} from './data-helpers';
import {main} from '../utils';

const TABLE = 'query_service_table';

async function createTestTable(driver: Driver) {
await driver.queryClient.do({
fn: async (session) => {
await session.execute({
text: `
DROP TABLE IF EXISTS ${TABLE};
CREATE TABLE ${TABLE}
(
id UInt64,
rowTitle Utf8,
time Timestamp,
PRIMARY KEY (id)
);`,
});
}
});
}

async function insert(driver: Driver) {
await driver.queryClient.do({
fn: async (session) => {
await session.execute({
parameters: {
'$id1': TypedValues.uint64(1),
'$title1': TypedValues.text('Some title1'),
'$id2': TypedValues.uint64(2),
'$title2': TypedValues.text('Some title2'),
'$timestamp': TypedValues.timestamp(new Date()),
},
text: `
INSERT INTO ${TABLE} (id, rowTitle, time)
VALUES ($id1, $title1, $timestamp);
INSERT INTO ${TABLE} (id, rowTitle, time)
VALUES ($id2, $title2, $timestamp);`,
});
}
});
return 2;
}

async function select(driver: Driver) {
const res = await driver.queryClient.do({
fn: async (session) => {
const res = await session.execute({
text: `
SELECT *
FROM ${TABLE};
SELECT * -- double
FROM ${TABLE}; `
});
let rowsCount = 0;
for await (const resultSet of res.resultSets) {
console.info(`ResultSet index: ${resultSet.index}`)
for await (const row of resultSet.rows) {
rowsCount++;
console.info(`row: ${JSON.stringify(row)}`);
}
}
return rowsCount;
}
});
console.info(`rowCount: ${res}`);
}

async function typedSelect(driver: Driver) {
const res = await driver.queryClient.do({
fn: async (session) => {
// @ts-ignore
const res = await session.execute({
rowMode: RowType.Ydb,
text: `
SELECT *
FROM ${TABLE};
SELECT * -- double
FROM ${TABLE}; `
});
let rowsCount = 0;
for await (const resultSet of res.resultSets) {
console.info(`ResultSet index: ${resultSet.index}`)
for await (const row of resultSet.typedRows(Row)) {
rowsCount++;
console.info(`row: ${JSON.stringify(row)}`);
}
}
return rowsCount;
}
});
console.info(`rowCount: ${res}`);
}

async function bulkUpsert(driver: Driver) {
await driver.queryClient.do({
fn: async (session) => {
let arr: Row[] = [];

for (let id = 1; id <= 20; id++)
arr.push(new Row({
id,
rowTitle: `title_${id}`,
time: new Date(),
}));

await session.execute({
text: `
UPSERT INTO ${TABLE} (id, rowTitle, time)
SELECT id, rowTitle, time FROM AS_TABLE($table)`,
parameters: {
'$table': Row.asTypedCollection(arr),
}
});
},
});
}

async function run(logger: Logger, endpoint: string, database: string) {
const authService = getCredentialsFromEnv();
logger.info('Driver initializing...');
const driver = new Driver({endpoint, database, authService});
const timeout = 10000;
if (!await driver.ready(timeout)) {
logger.fatal(`Driver has not become ready in ${timeout}ms!`);
process.exit(1);
}
await createTestTable(driver);
await insert(driver);
await select(driver);
await bulkUpsert(driver);
await typedSelect(driver);

// TODO: Add samples for transactions Right now, details of usage can be seen in src/__tests__/e2e/query-service/transactions.ts
// TODO: Add samples for queryClient.doTx() Right now, details of usage can be seen in src/__tests__/e2e/query-service/query-service-client.ts

await driver.destroy();
}

main(run);
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ydb-sdk",
"version": "5.3.0",
"version": "5.3.1",
"description": "Node.js bindings for working with YDB API over gRPC",
"main": "build/cjs/src/index.js",
"module": "build/esm/src/index.js",
Expand Down
7 changes: 0 additions & 7 deletions src/__tests__/e2e/query-service/method-execute.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
// number of operations under one transaction
// doTx - txControl
// convert to native type
// update / insert
// error
// timeout

import DiscoveryService from "../../../discovery/discovery-service";
import {ENDPOINT_DISCOVERY_PERIOD} from "../../../constants";
import {AnonymousAuthService} from "../../../credentials/anonymous-auth-service";
Expand Down
1 change: 0 additions & 1 deletion src/__tests__/e2e/query-service/query-service-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import {QuerySession} from "../../../query/query-session";

const DATABASE = '/local';
const ENDPOINT = 'grpcs://localhost:2135';
// const TABLE_NAME = 'test_table_20240313'

describe('Query client', () => {

Expand Down
3 changes: 0 additions & 3 deletions src/__tests__/e2e/query-service/transactions.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
// session should autocimmit at the end
// doTx locks manipulations with tx

import {getLogger} from "../../../logging";
import {AnonymousAuthService} from "../../../credentials/anonymous-auth-service";
import DiscoveryService from "../../../discovery/discovery-service";
Expand Down
2 changes: 1 addition & 1 deletion src/driver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {IAuthService} from "./credentials/i-auth-service";
import SchemeService from "./schema/scheme-client";
import SchemeClient from "./schema/scheme-client";
import {parseConnectionString} from "./utils/parse-connection-string";
import {QueryClient} from "./query/query-client";
import {QueryClient} from "./query";

export interface IPoolSettings {
minLimit?: number;
Expand Down
2 changes: 2 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,5 @@ export {RemoveDirectorySettings} from "./schema/scheme-service";
export {MakeDirectorySettings} from "./schema/scheme-service";

export {ParsedConnectionString, parseConnectionString} from "./utils/parse-connection-string";

export {QueryClient, ResultSet, RowType} from "./query";
4 changes: 4 additions & 0 deletions src/query/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export * from './query-client';
export * from './query-session';
export * from './query-session-execute';
export * from './ResultSet';

0 comments on commit b7e397d

Please sign in to comment.