From 6fa30c29c4b06bf6aa4c7ec4c7baf0abefd73c3f Mon Sep 17 00:00:00 2001 From: Denis Gursky Date: Thu, 1 Jun 2023 14:13:33 -0400 Subject: [PATCH 1/2] added autonumber support --- src/results/integration.test.ts | 30 ++++++++--- src/results/resultUtils.ts | 7 +++ src/results/tests.ts | 94 +++++++++++++++++++++++++++++++++ src/results/types.ts | 9 +++- 4 files changed, 131 insertions(+), 9 deletions(-) diff --git a/src/results/integration.test.ts b/src/results/integration.test.ts index 510c3b0..144375b 100644 --- a/src/results/integration.test.ts +++ b/src/results/integration.test.ts @@ -31,21 +31,27 @@ import { } from './tests'; describe('Integration', () => { - const databaseName = `js-sdk-tests-${Date.now()}`; const engineName = getEngineName(); + let databaseName: string; let client: Client; - beforeAll(async () => { - client = await getClient(); + function setup() { + beforeAll(async () => { + client = await getClient(); - await createDatabaseIfNotExists(client, databaseName); - }); + databaseName = `js-sdk-tests-${Date.now()}`; - afterAll(async () => { - await client.deleteDatabase(databaseName); - }); + await createDatabaseIfNotExists(client, databaseName); + }); + + afterAll(async () => { + await client.deleteDatabase(databaseName); + }); + } describe('Rel to JS standard types', () => { + setup(); + standardTypeTests.forEach(test => { const testFn = test.skip ? it.skip : test.only ? it.only : it; @@ -66,6 +72,8 @@ describe('Integration', () => { }); describe('Rel to JS specialization', () => { + setup(); + specializationTests.forEach(test => { const testFn = test.skip ? it.skip : test.only ? it.only : it; @@ -86,6 +94,8 @@ describe('Integration', () => { }); describe('Rel to JS value types', () => { + setup(); + valueTypeTests.forEach(test => { const testFn = test.skip ? it.skip : test.only ? it.only : it; @@ -106,6 +116,8 @@ describe('Integration', () => { }); describe('Rel to JS value types misc', () => { + setup(); + miscValueTypeTests.forEach(test => { const testFn = test.skip ? it.skip : test.only ? it.only : it; @@ -126,6 +138,8 @@ describe('Integration', () => { }); describe('Rel to JS value types specialization', () => { + setup(); + valueTypeSpecializationTests.forEach(test => { const testFn = test.skip ? it.skip : test.only ? it.only : it; diff --git a/src/results/resultUtils.ts b/src/results/resultUtils.ts index 4c89e9a..90845e9 100644 --- a/src/results/resultUtils.ts +++ b/src/results/resultUtils.ts @@ -205,6 +205,7 @@ export function convertValue( case 'UInt16': case 'UInt32': case 'UInt64': + case 'AutoNumber': return value; case 'UInt128': return uint128ToBigInt(Array.from(value)); @@ -327,6 +328,7 @@ export function getDisplayValue( case 'UInt128': case 'FilePos': case 'Hash': + case 'AutoNumber': return val.value.toString(); case 'Missing': return 'missing'; @@ -540,7 +542,12 @@ function mapValueType(typeDef: Omit): RelTypeDef { return { type: 'Rational128' }; } } + break; } + case 'AutoNumber': + return { + type: standardValueType, + }; } return typeDef; diff --git a/src/results/tests.ts b/src/results/tests.ts index b86044b..737dad7 100644 --- a/src/results/tests.ts +++ b/src/results/tests.ts @@ -576,6 +576,20 @@ export const standardTypeTests: Test[] = [ ], displayValues: ['123456789101112313/9123456789101112313'], }, + { + name: 'AutoNumber', + query: ` + def num = auto_number["a"] + def output(x) = num(_, x) + `, + typeDefs: [ + { + type: 'AutoNumber', + }, + ], + values: [1n], + displayValues: ['1'], + }, ]; export const specializationTests: Test[] = [ @@ -1373,6 +1387,25 @@ export const specializationTests: Test[] = [ ], displayValues: ['123456789101112313/9123456789101112313'], }, + { + name: 'AutoNumber', + query: ` + def num = auto_number["a"] + def v(x) = num(_, x) + def output = #(v) + `, + typeDefs: [ + { + type: 'Constant', + value: { + type: 'AutoNumber', + value: 1n, + }, + }, + ], + values: [1n], + displayValues: ['1'], + }, ]; export const valueTypeTests: Test[] = [ @@ -2497,6 +2530,34 @@ export const valueTypeTests: Test[] = [ ], displayValues: ['(:MyType, 1, 123456789101112313/9123456789101112313)'], }, + { + name: 'AutoNumber', + query: ` + def num = auto_number["a"] + def anum(x) = num(_, x) + value type MyType = Int, AutoNumber + def output = ^MyType[1, anum] + `, + typeDefs: [ + { + type: 'ValueType', + typeDefs: [ + { + type: 'Constant', + value: { type: 'String', value: ':MyType' }, + }, + { + type: 'Int64', + }, + { + type: 'AutoNumber', + }, + ], + }, + ], + values: [[':MyType', 1n, 1n]], + displayValues: ['(:MyType, 1, 1)'], + }, ]; export const miscValueTypeTests: Test[] = [ @@ -4012,4 +4073,37 @@ export const valueTypeSpecializationTests: Test[] = [ ], displayValues: ['(:MyType, 123456789101112313/9123456789101112313, 1)'], }, + { + name: 'AutoNumber', + query: ` + def num = auto_number["a"] + def anum(x) = num(_, x) + value type MyType = AutoNumber, Int + def v = ^MyType[anum, 1] + def output = #(v) + `, + typeDefs: [ + { + type: 'Constant', + value: { + type: 'ValueType', + typeDefs: [ + { + type: 'Constant', + value: { type: 'String', value: ':MyType' }, + }, + { + type: 'AutoNumber', + }, + { + type: 'Int64', + }, + ], + value: [':MyType', 1n, 1n], + }, + }, + ], + values: [[':MyType', 1n, 1n]], + displayValues: ['(:MyType, 1, 1)'], + }, ]; diff --git a/src/results/types.ts b/src/results/types.ts index 7a0a735..4b350a3 100644 --- a/src/results/types.ts +++ b/src/results/types.ts @@ -59,7 +59,8 @@ export type RelBaseTypedValue = | Rational16Value | Rational32Value | Rational64Value - | Rational128Value; + | Rational128Value + | AutoNumber; export type RelTypedValue = RelBaseTypedValue | ValueTypeValue | UnknownType; @@ -104,6 +105,7 @@ export type RelTypeDef = | Omit | Omit | Omit + | Omit | ConstantValue | Omit | Omit; @@ -338,6 +340,11 @@ export type Rational128Value = { }; }; +export type AutoNumber = { + type: 'AutoNumber'; + value: bigint; +}; + // TODO: should be removed with JSON based metadata implementation? export type UnknownType = { type: 'Unknown'; From d15ec7616adbaba2d6bd25798b8e95aea6a83323 Mon Sep 17 00:00:00 2001 From: Denis Gursky Date: Thu, 1 Jun 2023 15:13:24 -0400 Subject: [PATCH 2/2] changed switch --- src/results/resultUtils.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/results/resultUtils.ts b/src/results/resultUtils.ts index 90845e9..e152095 100644 --- a/src/results/resultUtils.ts +++ b/src/results/resultUtils.ts @@ -481,6 +481,7 @@ function mapValueType(typeDef: Omit): RelTypeDef { case 'FilePos': case 'Missing': case 'Hash': + case 'AutoNumber': return { type: standardValueType, }; @@ -542,12 +543,7 @@ function mapValueType(typeDef: Omit): RelTypeDef { return { type: 'Rational128' }; } } - break; } - case 'AutoNumber': - return { - type: standardValueType, - }; } return typeDef;