From 05a334d5f83bb7d2016d92bc9c0e892c90d937a9 Mon Sep 17 00:00:00 2001 From: Johannes Trame Date: Mon, 11 Apr 2022 08:02:21 +0200 Subject: [PATCH 1/2] Add failing test case for SPARQL 1.1 graph mgmt operations The test case currently fails and will drop --- test/SparqlGenerator-test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/SparqlGenerator-test.js b/test/SparqlGenerator-test.js index 9d9fa1f7..a7f2100d 100644 --- a/test/SparqlGenerator-test.js +++ b/test/SparqlGenerator-test.js @@ -93,6 +93,18 @@ describe('A SPARQL generator', function () { 'GROUP BY ?k'; expect(generatedQuery).toEqual(expectedQuery); }); + + // TODO enable once fixed + // test currently fails, i.e. sparql.js drops + it.skip('should preserve source graph in sparql 1.1 update graph management operations', function () { + var parser = new SparqlParser(); + var parsedQuery = parser.parse('ADD TO '); + var generator = new SparqlGenerator(); + var generatedQuery = generator.stringify(parsedQuery); + var expectedQuery = + 'ADD TO '; + expect(generatedQuery).toEqual(expectedQuery); + }); }); function testQueries(directory, settings) { From fd41ee371cbd4d00d9be4323dd5388729de94a1e Mon Sep 17 00:00:00 2001 From: Johannes Trame Date: Mon, 11 Apr 2022 08:16:39 +0200 Subject: [PATCH 2/2] Fix sparql generator for SPARQL 1.1 update ADD, MOVE, COPY operations Previously the generator incorrectly omitted the source graph. Reference https://www.w3.org/TR/sparql11-update/#copy --- lib/SparqlGenerator.js | 4 ++-- test/SparqlGenerator-test.js | 24 +++++++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/SparqlGenerator.js b/lib/SparqlGenerator.js index e3319593..fb8ac525 100644 --- a/lib/SparqlGenerator.js +++ b/lib/SparqlGenerator.js @@ -382,8 +382,8 @@ Generator.prototype.toUpdate = function (update) { case 'add': case 'copy': case 'move': - return update.type.toUpperCase() + (update.source.default ? ' DEFAULT ' : ' ') + - 'TO ' + this.toEntity(update.destination.name); + return update.type.toUpperCase()+ ' ' + (update.silent ? 'SILENT ' : '') + (update.source.default ? 'DEFAULT' : this.toEntity(update.source.name)) + + ' TO ' + this.toEntity(update.destination.name); case 'create': case 'clear': case 'drop': diff --git a/test/SparqlGenerator-test.js b/test/SparqlGenerator-test.js index a7f2100d..fde444e5 100644 --- a/test/SparqlGenerator-test.js +++ b/test/SparqlGenerator-test.js @@ -94,9 +94,7 @@ describe('A SPARQL generator', function () { expect(generatedQuery).toEqual(expectedQuery); }); - // TODO enable once fixed - // test currently fails, i.e. sparql.js drops - it.skip('should preserve source graph in sparql 1.1 update graph management operations', function () { + it('should preserve source graph in sparql 1.1 update ADD operation', function () { var parser = new SparqlParser(); var parsedQuery = parser.parse('ADD TO '); var generator = new SparqlGenerator(); @@ -105,6 +103,26 @@ describe('A SPARQL generator', function () { 'ADD TO '; expect(generatedQuery).toEqual(expectedQuery); }); + + it('should preserve source, default graph in sparql 1.1 update MOVE operation', function () { + var parser = new SparqlParser(); + var parsedQuery = parser.parse('MOVE DEFAULT TO '); + var generator = new SparqlGenerator(); + var generatedQuery = generator.stringify(parsedQuery); + var expectedQuery = + 'MOVE DEFAULT TO '; + expect(generatedQuery).toEqual(expectedQuery); + }); + + it('should preserve source, default graph in sparql 1.1 update MOVE operation', function () { + var parser = new SparqlParser(); + var parsedQuery = parser.parse('COPY SILENT DEFAULT TO '); + var generator = new SparqlGenerator(); + var generatedQuery = generator.stringify(parsedQuery); + var expectedQuery = + 'COPY SILENT DEFAULT TO '; + expect(generatedQuery).toEqual(expectedQuery); + }); }); function testQueries(directory, settings) {