-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Alexey Zorkaltsev
committed
Mar 26, 2024
1 parent
413d5b7
commit c1f258d
Showing
8 changed files
with
177 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'; |