From 6452bd794f7385be3bd7b42ad7ecb8dd37fc874b Mon Sep 17 00:00:00 2001 From: Imanpal Singh Date: Sun, 2 Apr 2023 16:55:15 +0530 Subject: [PATCH 1/2] fix priority of transformers selected --- src/cli/engine.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cli/engine.ts b/src/cli/engine.ts index 43a1e30..3e8ad39 100644 --- a/src/cli/engine.ts +++ b/src/cli/engine.ts @@ -99,7 +99,7 @@ class Engine { } } - #apply(query: Query) { + apply(query: Query) { this.cache = {tableName: query.tableName}; if (!this.canExecute(query)) return false; @@ -112,12 +112,12 @@ class Engine { if (Array.isArray(tableOperations)) { const [middleware, transforms] = tableOperations; const identifiedTransformers = this.requiredTransformers({ - ...transforms, ...this.aoo.columns, + ...transforms, }); this.cache.transformers = [middleware, identifiedTransformers || {}]; } else { - tableOperations = {...(tableOperations as ColumnTypes), ...this.aoo.columns}; + tableOperations = {...this.aoo.columns, ...(tableOperations as ColumnTypes)}; this.cache.transformers = this.requiredTransformers(tableOperations); } @@ -210,7 +210,7 @@ class Engine { const query = this.parseLine(line); if (query) { - canWriteToFile = this.#apply(query); + canWriteToFile = this.apply(query); } else if (this.cache?.columns) { /* Query data in progress From 39ff74c8fe827ccdd3809d61da9219ff755b0470 Mon Sep 17 00:00:00 2001 From: Imanpal Singh Date: Sun, 2 Apr 2023 16:55:28 +0530 Subject: [PATCH 2/2] adds specs for the bug --- src/cli/__tests__/engine.spec.ts | 56 +++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/src/cli/__tests__/engine.spec.ts b/src/cli/__tests__/engine.spec.ts index 507ea79..0c49dce 100644 --- a/src/cli/__tests__/engine.spec.ts +++ b/src/cli/__tests__/engine.spec.ts @@ -1,5 +1,6 @@ import {CreateTable} from '../../pg/queries/create-table'; import {SetQ} from '../../pg/queries/set-q'; +import {Copy} from '../../pg/queries/copy'; import {Logger} from '../../utils/logger'; import {Engine} from '../engine'; @@ -112,14 +113,14 @@ describe('Engine', () => { tables: {}, }; - engine.cache ={ + engine.cache = { tableName: 'users', columns: ['name', 'description', 'id'], }; const operators = { - name: ()=>{}, - description: ()=>{}, + name: () => {}, + description: () => {}, }; const result = engine.requiredTransformers(operators); @@ -136,7 +137,7 @@ describe('Engine', () => { tables: {}, }; - engine.cache ={ + engine.cache = { tableName: 'users', columns: ['name', 'description', 'id'], }; @@ -147,4 +148,51 @@ describe('Engine', () => { expect(result).toBeNull(); }); + + it('gives table transformers more priority than column transformers', () => { + const engine = new Engine(); + const queryObj = new Copy(); + engine.logger = new Logger('info'); + + engine.aoo = { + tables: { + users: { + name: () => {}, + }, + }, + columns: { + name: () => {}, + }, + }; + queryObj.query = 'COPY public.users (name, email) FROM stdin;'; + + engine.apply(queryObj); + + const selectedTransformers = engine.cache?.transformers; + expect(selectedTransformers).toEqual(engine.aoo.tables!.users); + }); + + describe('when using middleware', () => { + it('gives table transformers more priority than column transformers', () => { + const engine = new Engine(); + const queryObj = new Copy(); + const middleware = () => []; + engine.logger = new Logger('info'); + + engine.aoo = { + tables: { + users: [middleware, {name: () => {}}], + }, + columns: { + name: () => {}, + }, + }; + queryObj.query = 'COPY public.users (name, email) FROM stdin;'; + + engine.apply(queryObj); + + const selectedTransformers = engine.cache?.transformers; + expect(selectedTransformers![-1]).toEqual(engine.aoo.tables!.users[-1]); + }); + }); });