From 234bce200343d6a90d5e5b3be434d4fa468beb0d Mon Sep 17 00:00:00 2001 From: Ayush Agarwal Date: Sat, 14 May 2022 14:44:23 +0530 Subject: [PATCH 1/4] Throw exception when primary key could not be determined --- .../Services/MetadataProviders/SqlMetadataProvider.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs b/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs index a710b30692..7d0b776e5d 100644 --- a/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs +++ b/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs @@ -373,6 +373,15 @@ private async Task PopulateTableDefinitionAsync( DataTable dataTable = await GetTableWithSchemaFromDataSetAsync(schemaName, tableName); List primaryKeys = new(dataTable.PrimaryKey); + + if(primaryKeys.Count == 0) + { + throw new DataGatewayException( + message: $"Primary key not configured on the given database object {tableName}", + statusCode: System.Net.HttpStatusCode.BadRequest, + subStatusCode: DataGatewayException.SubStatusCodes.UnexpectedError); + } + tableDefinition.PrimaryKey = new(primaryKeys.Select(primaryKey => primaryKey.ColumnName)); using DataTableReader reader = new(dataTable); From c554c3be6e7ac852c88120004e728454c6af5234 Mon Sep 17 00:00:00 2001 From: Ayush Agarwal Date: Sat, 14 May 2022 15:17:00 +0530 Subject: [PATCH 2/4] Formatting fix :( --- .../Services/MetadataProviders/SqlMetadataProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs b/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs index 7d0b776e5d..3208f63821 100644 --- a/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs +++ b/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs @@ -374,7 +374,7 @@ private async Task PopulateTableDefinitionAsync( List primaryKeys = new(dataTable.PrimaryKey); - if(primaryKeys.Count == 0) + if (primaryKeys.Count == 0) { throw new DataGatewayException( message: $"Primary key not configured on the given database object {tableName}", From cd4ce45addb2d9111504268873a5679dfb697516 Mon Sep 17 00:00:00 2001 From: Ayush Agarwal Date: Sat, 14 May 2022 15:49:28 +0530 Subject: [PATCH 3/4] Postgres doesn't support views at all yet --- .../Services/MetadataProviders/SqlMetadataProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs b/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs index 3208f63821..e2efd1b27d 100644 --- a/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs +++ b/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs @@ -374,7 +374,7 @@ private async Task PopulateTableDefinitionAsync( List primaryKeys = new(dataTable.PrimaryKey); - if (primaryKeys.Count == 0) + if (primaryKeys.Count == 0 && !(this.GetType() == typeof(PostgreSqlMetadataProvider))) { throw new DataGatewayException( message: $"Primary key not configured on the given database object {tableName}", From 3dcde447deba25fa0351a695f459c1d884b4ce8c Mon Sep 17 00:00:00 2001 From: Ayush Agarwal Date: Sun, 15 May 2022 17:28:31 +0530 Subject: [PATCH 4/4] Removed views from postgres, since not supported, added better statuscode for init failure --- .../SqlTests/PostgreSqlRestApiTests.cs | 7 +++ DataGateway.Service/PostgreSqlBooks.sql | 16 ------ .../MetadataProviders/SqlMetadataProvider.cs | 6 +-- .../hawaii-config.PostgreSql.json | 51 ------------------- 4 files changed, 10 insertions(+), 70 deletions(-) diff --git a/DataGateway.Service.Tests/SqlTests/PostgreSqlRestApiTests.cs b/DataGateway.Service.Tests/SqlTests/PostgreSqlRestApiTests.cs index 3be66415fc..125e995956 100644 --- a/DataGateway.Service.Tests/SqlTests/PostgreSqlRestApiTests.cs +++ b/DataGateway.Service.Tests/SqlTests/PostgreSqlRestApiTests.cs @@ -928,6 +928,13 @@ public override Task FindTestWithQueryStringOnViews() throw new NotImplementedException(); } + [TestMethod] + [Ignore] + public override Task FindTestWithInvalidFieldsInQueryStringOnViews() + { + throw new NotImplementedException(); + } + public override string GetDefaultSchema() { return DEFAULT_SCHEMA; diff --git a/DataGateway.Service/PostgreSqlBooks.sql b/DataGateway.Service/PostgreSqlBooks.sql index 1cc9fc6a50..78e68577cd 100644 --- a/DataGateway.Service/PostgreSqlBooks.sql +++ b/DataGateway.Service/PostgreSqlBooks.sql @@ -1,6 +1,3 @@ -DROP VIEW IF EXISTS books_view_all; -DROP VIEW IF EXISTS stocks_view_selected; -DROP VIEW IF EXISTS books_publishers_view_composite; DROP TABLE IF EXISTS book_author_link; DROP TABLE IF EXISTS reviews; DROP TABLE IF EXISTS authors; @@ -157,16 +154,3 @@ SELECT setval('book_website_placements_id_seq', 5000); SELECT setval('publishers_id_seq', 5000); SELECT setval('authors_id_seq', 5000); SELECT setval('reviews_id_seq', 5000); - -DO $do$ - BEGIN - EXECUTE('CREATE VIEW books_view_all AS SELECT * FROM books'); - EXECUTE('CREATE VIEW stocks_view_selected AS SELECT - categoryid,pieceid,"categoryName","piecesAvailable" - FROM stocks'); - EXECUTE('CREATE VIEW books_publishers_view_composite as SELECT - publishers.name,books.id,books.publisher_id - FROM books,publishers - where publishers.id = books.publisher_id'); - END - $do$; diff --git a/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs b/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs index e2efd1b27d..e07380e94e 100644 --- a/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs +++ b/DataGateway.Service/Services/MetadataProviders/SqlMetadataProvider.cs @@ -374,12 +374,12 @@ private async Task PopulateTableDefinitionAsync( List primaryKeys = new(dataTable.PrimaryKey); - if (primaryKeys.Count == 0 && !(this.GetType() == typeof(PostgreSqlMetadataProvider))) + if (primaryKeys.Count == 0) { throw new DataGatewayException( message: $"Primary key not configured on the given database object {tableName}", - statusCode: System.Net.HttpStatusCode.BadRequest, - subStatusCode: DataGatewayException.SubStatusCodes.UnexpectedError); + statusCode: System.Net.HttpStatusCode.NotImplemented, + subStatusCode: DataGatewayException.SubStatusCodes.ErrorInInitialization); } tableDefinition.PrimaryKey = new(primaryKeys.Select(primaryKey => primaryKey.ColumnName)); diff --git a/DataGateway.Service/hawaii-config.PostgreSql.json b/DataGateway.Service/hawaii-config.PostgreSql.json index a6cb2070a2..a28ba508b9 100644 --- a/DataGateway.Service/hawaii-config.PostgreSql.json +++ b/DataGateway.Service/hawaii-config.PostgreSql.json @@ -207,57 +207,6 @@ "source": "website_users", "rest": false, "permissions": [] - }, - "books_view_all": { - "source": "books_view_all", - "rest": true, - "graphql": true, - "permissions": [ - { - "role": "anonymous", - "actions": [ "read" ] - }, - { - "role": "authenticated", - "actions": [ "read" ] - } - ], - "relationships": { - } - }, - "stocks_view_selected": { - "source": "stocks_view_selected", - "rest": true, - "graphql": true, - "permissions": [ - { - "role": "anonymous", - "actions": [ "read" ] - }, - { - "role": "authenticated", - "actions": [ "read" ] - } - ], - "relationships": { - } - }, - "books_publishers_view_composite": { - "source": "books_publishers_view_composite", - "rest": true, - "graphql": true, - "permissions": [ - { - "role": "anonymous", - "actions": [ "read" ] - }, - { - "role": "authenticated", - "actions": [ "read" ] - } - ], - "relationships": { - } } } }