Skip to content

Commit 275598a

Browse files
rrewlltsufiev
authored andcommitted
chore!: use identity names conversion in TypedData
BREAKING CHANGE: TypedData fields have identity conversion to YDB column names instead of camelCase to snake_case. Use `@withTypeOptions({namesConversion:snakeToCamelCaseConversion})` for backward compatibility.
1 parent 0edbcdd commit 275598a

File tree

6 files changed

+48
-54
lines changed

6 files changed

+48
-54
lines changed

examples/basic-example-v1/data-helpers.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
import {declareType, TypedData, Types} from 'ydb-sdk';
1+
import {declareType, TypedData, Types, withTypeOptions, snakeToCamelCaseConversion} from 'ydb-sdk';
22

33
interface ISeries {
44
seriesId: number;
55
title: string;
66
releaseDate: Date;
77
seriesInfo: string;
88
}
9+
10+
@withTypeOptions({namesConversion: snakeToCamelCaseConversion})
911
export class Series extends TypedData {
1012
@declareType(Types.UINT64)
1113
public seriesId: number;
@@ -39,6 +41,8 @@ interface IEpisode {
3941
title: string;
4042
airDate: Date;
4143
}
44+
45+
@withTypeOptions({namesConversion: snakeToCamelCaseConversion})
4246
export class Episode extends TypedData {
4347
@declareType(Types.UINT64)
4448
public seriesId: number;
@@ -76,6 +80,8 @@ interface ISeason {
7680
firstAired: Date;
7781
lastAired: Date;
7882
}
83+
84+
@withTypeOptions({namesConversion: snakeToCamelCaseConversion})
7985
export class Season extends TypedData {
8086
@declareType(Types.UINT64)
8187
public seriesId: number;

examples/bulk-upsert/data-helpers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {declareType, TypedData, Types} from 'ydb-sdk';
1+
import {declareType, TypedData, Types, snakeToCamelCaseConversion, withTypeOptions} from 'ydb-sdk';
22

33
export interface ILogMessage {
44
app: string;
@@ -8,6 +8,7 @@ export interface ILogMessage {
88
message: string;
99
}
1010

11+
@withTypeOptions({namesConversion: snakeToCamelCaseConversion})
1112
export class LogMessage extends TypedData {
1213
@declareType(Types.UTF8)
1314
public app: string;

examples/read-table/data-helpers.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {declareType, TypedData, Types} from 'ydb-sdk';
1+
import {declareType, TypedData, Types, withTypeOptions, snakeToCamelCaseConversion} from 'ydb-sdk';
22

33
export interface IOrder {
44
customerId: number;
@@ -7,6 +7,7 @@ export interface IOrder {
77
orderDate: Date;
88
}
99

10+
@withTypeOptions({namesConversion: snakeToCamelCaseConversion})
1011
export class Order extends TypedData {
1112
@declareType(Types.UINT64)
1213
public customerId: number;

examples/type-utils/data-helpers.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
import {declareType, TypedData, withTypeOptions, identityConversion, Types} from 'ydb-sdk';
1+
import {declareType, TypedData, Types} from 'ydb-sdk';
22

33
interface ISeries {
44
series_id: number;
55
title: string;
66
release_date: Date;
77
series_info: string;
88
}
9-
@withTypeOptions({
10-
namesConversion: identityConversion,
11-
})export class Series extends TypedData {
9+
export class Series extends TypedData {
1210
@declareType(Types.UINT64)
1311
public series_id!: number;
1412

src/__tests__/types.test.ts

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -381,20 +381,20 @@ describe('Types', () => {
381381
DyNumber("1234567890.123") AS dynumber_value;`;
382382

383383
const data = {
384-
boolValue: true,
385-
uint8Value: 0,
386-
int8Value: -1,
387-
uint16Value: 2,
388-
int16Value: -3,
389-
uint32Value: 4,
390-
int32Value: -5,
391-
uint64Value: 6,
392-
uint64LongValue: Long.MAX_VALUE,
393-
int64Value: 7,
394-
int64LongValue: Long.fromValue(-7),
395-
floatValue: -1.100000023841858,
396-
doubleValue: -1.1,
397-
dynumberValue: '.1234567890123e10',
384+
bool_value: true,
385+
uint8_value: 0,
386+
int8_value: -1,
387+
uint16_value: 2,
388+
int16_value: -3,
389+
uint32_value: 4,
390+
int32_value: -5,
391+
uint64_value: 6,
392+
uint64_long_value: Long.MAX_VALUE,
393+
int64_value: 7,
394+
int64_long_value: Long.fromValue(-7),
395+
float_value: -1.100000023841858,
396+
double_value: -1.1,
397+
dynumber_value: '.1234567890123e10',
398398
};
399399

400400
const response = await session.executeQuery(query);
@@ -416,11 +416,11 @@ describe('Types', () => {
416416
JsonDocument("[]") AS json_document_value;`;
417417

418418
const data = {
419-
stringValue: 'foo',
420-
utf8Value: 'привет',
421-
ysonValue: '<a=1>[3;%false]',
422-
jsonValue: '{"a":1,"b":null}',
423-
jsonDocumentValue: '[]',
419+
string_value: 'foo',
420+
utf8_value: 'привет',
421+
yson_value: '<a=1>[3;%false]',
422+
json_value: '{"a":1,"b":null}',
423+
json_document_value: '[]',
424424
};
425425

426426
const response = await session.executeQuery(query);
@@ -436,7 +436,7 @@ describe('Types', () => {
436436
const query = `SELECT Uuid("f9d5cc3f-f1dc-4d9c-b97e-766e57ca4ccb") AS uuid_value;`;
437437

438438
const data = {
439-
uuidValue: 'f9d5cc3f-f1dc-4d9c-b97e-766e57ca4ccb',
439+
uuid_value: 'f9d5cc3f-f1dc-4d9c-b97e-766e57ca4ccb',
440440
};
441441

442442
const response = await session.executeQuery(query);
@@ -460,13 +460,13 @@ describe('Types', () => {
460460
TzTimestamp("2022-01-01T10:00:00.987,GMT") AS tz_timestamp_value;`;
461461

462462
const data = {
463-
dateValue: new Date('2022-01-01:00:00:00Z'),
464-
datetimeValue: new Date('2022-01-01T10:00:00.000Z'),
465-
timestampValue: new Date('2022-01-01T10:00:00.987Z'),
466-
intervalValue: Long.fromValue('93784567890'),
467-
tzDateValue: new Date('2022-01-01T00:00:00Z'),
468-
tzDatetimeValue: new Date('2022-01-01T10:00:00.000Z'),
469-
tzTimestampValue: new Date('2022-01-01T10:00:00.987Z'),
463+
date_value: new Date('2022-01-01:00:00:00Z'),
464+
datetime_value: new Date('2022-01-01T10:00:00.000Z'),
465+
timestamp_value: new Date('2022-01-01T10:00:00.987Z'),
466+
interval_value: Long.fromValue('93784567890'),
467+
tz_date_value: new Date('2022-01-01T00:00:00Z'),
468+
tz_datetime_value: new Date('2022-01-01T10:00:00.000Z'),
469+
tz_timestamp_value: new Date('2022-01-01T10:00:00.987Z'),
470470
};
471471

472472
const response = await session.executeQuery(query);
@@ -515,8 +515,8 @@ describe('Types', () => {
515515
CAST(NULL AS Optional<Uint64>) AS optional_null_value;`;
516516

517517
const data = {
518-
optionalValue: 1,
519-
optionalNullValue: null,
518+
optional_value: 1,
519+
optional_null_value: null,
520520
};
521521

522522
const response = await session.executeQuery(query);
@@ -538,10 +538,10 @@ describe('Types', () => {
538538
;`;
539539

540540
const data = {
541-
listValue: [1, 2, 3],
542-
tupleValue: [1, 2, '3'],
543-
structValue: {a: 1, b: 2, c: '3'},
544-
dictValue: {a: 1, b: 2, c: 3},
541+
list_value: [1, 2, 3],
542+
tuple_value: [1, 2, '3'],
543+
struct_value: {a: 1, b: 2, c: '3'},
544+
dict_value: {a: 1, b: 2, c: 3},
545545
};
546546

547547
const response = await session.executeQuery(query);
@@ -556,7 +556,7 @@ describe('Types', () => {
556556
await driver.tableClient.withSession(async (session) => {
557557
const query = 'SELECT Void() as void_value;'
558558
const data = {
559-
voidValue: null,
559+
void_value: null,
560560
};
561561

562562
const response = await session.executeQuery(query);

src/types.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -577,20 +577,8 @@ export interface TypedDataOptions {
577577
namesConversion?: NamesConversion;
578578
}
579579

580-
function assertUnreachable(_c: never): never {
581-
throw new Error('Should not get here!');
582-
}
583580
export function getNameConverter(options: TypedDataOptions, direction: keyof NamesConversion): StringFunction {
584-
const converter = options.namesConversion?.[direction];
585-
if (converter) {
586-
return converter;
587-
} else { // defaults
588-
switch (direction) {
589-
case 'jsToYdb': return _.snakeCase;
590-
case 'ydbToJs': return _.camelCase;
591-
default: return assertUnreachable(direction);
592-
}
593-
}
581+
return (options.namesConversion || identityConversion)[direction];
594582
}
595583

596584
export function withTypeOptions(options: TypedDataOptions) {

0 commit comments

Comments
 (0)