From 132bd544d196992e1b895feffbf3b718ea70f625 Mon Sep 17 00:00:00 2001 From: Ali Ahmed Khan Date: Wed, 28 Jun 2023 16:58:38 +0500 Subject: [PATCH 01/10] fix RECORDSET returning empty columns if there's no matched rows issue #1547 --- src/40select.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/40select.js b/src/40select.js index 44273bc256..132dd5b76e 100755 --- a/src/40select.js +++ b/src/40select.js @@ -468,6 +468,11 @@ function modify(query, res) { } else { // Cannot recognize columns columns = []; + if (query && query.sources) { + query.sources.forEach((source) => { + columns = columns.concat(source.columns) + }) + } } } From 1790ad3c9e6bdda19c89676129a8c3452561c83f Mon Sep 17 00:00:00 2001 From: Mathias Wulff Date: Sun, 30 Jul 2023 22:07:41 +1000 Subject: [PATCH 02/10] Create test1547.js --- test/test1547.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 test/test1547.js diff --git a/test/test1547.js b/test/test1547.js new file mode 100644 index 0000000000..042a2cd6a4 --- /dev/null +++ b/test/test1547.js @@ -0,0 +1,34 @@ +if (typeof exports === 'object') { + var assert = require('assert'); + var alasql = require('..'); +} + +describe('Test 1547 - Empty recordset', function () { + const test = '1547'; + + before(function () { + alasql('create database test' + test); + alasql('use test' + test); + }); + + after(function () { + alasql('drop database test' + test); + }); + + it('Returns columns for empty recordset', function () { + var res = []; + alasql('create table one (a int)'); + alasql('insert into one values (1),(2),(3),(4),(5)'); + res.push(alasql('recordset of select * from one where a = 999')); + assert.deepEqual(res, { + results: { + columns: [ + { + columnid: 'a', + }, + ], + data: [], + }, + }); + }); +}); From 897ac528629c34a5ef626863114f9ceb511ddf3e Mon Sep 17 00:00:00 2001 From: Mathias Wulff Date: Sun, 30 Jul 2023 22:13:24 +1000 Subject: [PATCH 03/10] Update test1547.js --- test/test1547.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/test1547.js b/test/test1547.js index 042a2cd6a4..67b973f770 100644 --- a/test/test1547.js +++ b/test/test1547.js @@ -16,12 +16,11 @@ describe('Test 1547 - Empty recordset', function () { }); it('Returns columns for empty recordset', function () { - var res = []; alasql('create table one (a int)'); alasql('insert into one values (1),(2),(3),(4),(5)'); - res.push(alasql('recordset of select * from one where a = 999')); + let res = alasql('recordset of select * from one where a = 999')); assert.deepEqual(res, { - results: { + Recordset: { columns: [ { columnid: 'a', From 3a8a202d3653dfad2cda7d02196a05d06375dce2 Mon Sep 17 00:00:00 2001 From: Mathias Wulff Date: Sun, 30 Jul 2023 22:21:22 +1000 Subject: [PATCH 04/10] Update test1547.js Wups... --- test/test1547.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test1547.js b/test/test1547.js index 67b973f770..bed07b19d3 100644 --- a/test/test1547.js +++ b/test/test1547.js @@ -18,7 +18,7 @@ describe('Test 1547 - Empty recordset', function () { it('Returns columns for empty recordset', function () { alasql('create table one (a int)'); alasql('insert into one values (1),(2),(3),(4),(5)'); - let res = alasql('recordset of select * from one where a = 999')); + let res = alasql('recordset of select * from one where a = 999'); assert.deepEqual(res, { Recordset: { columns: [ From 0e663b6b70c82ed42fee84db62bfbc005a6e0224 Mon Sep 17 00:00:00 2001 From: Mathias Wulff Date: Sun, 30 Jul 2023 22:26:13 +1000 Subject: [PATCH 05/10] Update test1547.js --- test/test1547.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/test1547.js b/test/test1547.js index bed07b19d3..0d6b191ba5 100644 --- a/test/test1547.js +++ b/test/test1547.js @@ -20,14 +20,12 @@ describe('Test 1547 - Empty recordset', function () { alasql('insert into one values (1),(2),(3),(4),(5)'); let res = alasql('recordset of select * from one where a = 999'); assert.deepEqual(res, { - Recordset: { - columns: [ - { - columnid: 'a', - }, - ], - data: [], - }, + columns: [ + { + columnid: 'a', + }, + ], + data: [], }); }); }); From 7a4caae29e5f9d0afd73c1b0e737b538ad223fc5 Mon Sep 17 00:00:00 2001 From: Ali Ahmed Khan Date: Fri, 4 Aug 2023 13:00:04 +0500 Subject: [PATCH 06/10] Update testcase test1547.js --- test/test1547.js | 49 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/test/test1547.js b/test/test1547.js index 0d6b191ba5..3561ec89d7 100644 --- a/test/test1547.js +++ b/test/test1547.js @@ -19,13 +19,46 @@ describe('Test 1547 - Empty recordset', function () { alasql('create table one (a int)'); alasql('insert into one values (1),(2),(3),(4),(5)'); let res = alasql('recordset of select * from one where a = 999'); - assert.deepEqual(res, { - columns: [ - { - columnid: 'a', - }, - ], - data: [], - }); + // assert.deepEqual(res, { + // columns: [ + // { + // columnid: 'a', + // }, + // ], + // data: [], + // }); + + assert( + (() => { + const testdata = { + columns: [ + { + columnid: 'a', + }, + ], + data: [], + }; + + if ( + res.columns.length !== testdata.columns.length || + res.data.length !== testdata.data.length + ) { + return false; + } else { + let cols = res.columns; + + for (let col of cols) { + let index = testdata.columns.findIndex((c) => c.columnid === col.columnid); + + if (index === -1) { + return false; + } + } + + return true; + } + })(), + 'Response should not have missing coloumns' + ); }); }); From 29a7c7d010126450904f74af6b9ed50ee17a971f Mon Sep 17 00:00:00 2001 From: Mathias Wulff Date: Fri, 18 Aug 2023 13:13:30 +1000 Subject: [PATCH 07/10] Only include columnid --- src/40select.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/40select.js b/src/40select.js index 132dd5b76e..2141b0b1a5 100755 --- a/src/40select.js +++ b/src/40select.js @@ -470,7 +470,7 @@ function modify(query, res) { columns = []; if (query && query.sources) { query.sources.forEach((source) => { - columns = columns.concat(source.columns) + columns = columns.concat((({columnid}) => ({columnid}))(source.columns)) }) } } From 0634306a18c5ae6502c86856187e92fbb3cfc52e Mon Sep 17 00:00:00 2001 From: Mathias Wulff Date: Fri, 18 Aug 2023 13:16:05 +1000 Subject: [PATCH 08/10] Deep equal for test1547.js --- test/test1547.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/test1547.js b/test/test1547.js index 3561ec89d7..63abb4f163 100644 --- a/test/test1547.js +++ b/test/test1547.js @@ -19,16 +19,16 @@ describe('Test 1547 - Empty recordset', function () { alasql('create table one (a int)'); alasql('insert into one values (1),(2),(3),(4),(5)'); let res = alasql('recordset of select * from one where a = 999'); - // assert.deepEqual(res, { - // columns: [ - // { - // columnid: 'a', - // }, - // ], - // data: [], - // }); + assert.deepEqual(res, { + columns: [ + { + columnid: 'a', + }, + ], + data: [], + }); - assert( + /* assert( (() => { const testdata = { columns: [ @@ -59,6 +59,6 @@ describe('Test 1547 - Empty recordset', function () { } })(), 'Response should not have missing coloumns' - ); + );*/ }); }); From 1ad1a21a0244707eab211439d50d559c8083844f Mon Sep 17 00:00:00 2001 From: Mathias Wulff Date: Fri, 18 Aug 2023 17:24:32 +1000 Subject: [PATCH 09/10] Update 40select.js --- src/40select.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/40select.js b/src/40select.js index 2141b0b1a5..4c23d584f6 100755 --- a/src/40select.js +++ b/src/40select.js @@ -470,7 +470,8 @@ function modify(query, res) { columns = []; if (query && query.sources) { query.sources.forEach((source) => { - columns = columns.concat((({columnid}) => ({columnid}))(source.columns)) + if(source?.columns?.columnid) + columns = columns.concat((({columnid}) => ({columnid}))(source.columns)); }) } } From 4feca50112b169df6eb7d8e262867dec90e654d8 Mon Sep 17 00:00:00 2001 From: Mathias Wulff Date: Fri, 18 Aug 2023 17:32:15 +1000 Subject: [PATCH 10/10] Update 40select.js --- src/40select.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/40select.js b/src/40select.js index 4c23d584f6..7a97613fe0 100755 --- a/src/40select.js +++ b/src/40select.js @@ -470,8 +470,8 @@ function modify(query, res) { columns = []; if (query && query.sources) { query.sources.forEach((source) => { - if(source?.columns?.columnid) - columns = columns.concat((({columnid}) => ({columnid}))(source.columns)); + if(source?.columns?.columnid != null) + columns = columns.concat({columnid:source?.columns?.columnid}); }) } }