Skip to content

Commit

Permalink
fix: visibility of RowType type
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexey Zorkaltsev committed Mar 26, 2024
1 parent 413d5b7 commit c1f258d
Show file tree
Hide file tree
Showing 8 changed files with 177 additions and 12 deletions.
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);
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 c1f258d

Please sign in to comment.