From 5bb9eec4a87e49d1ec8f79d43fdc84bfed5cb806 Mon Sep 17 00:00:00 2001 From: "Daniel J. Summers" Date: Sat, 23 Nov 2024 21:45:10 -0500 Subject: [PATCH] Drop .NET 6; drop PostgreSQL 12, add 17 - Update generic types for F# 9 nullable - Update deps, force upgrade on vulnerable packages --- src/Common/BitBadger.Documents.Common.fsproj | 4 +- src/Directory.Build.props | 2 +- .../BitBadger.Documents.Postgres.fsproj | 3 +- src/Postgres/Compat.fs | 6 +-- src/Postgres/Extensions.fs | 19 ++++++---- src/Postgres/Library.fs | 37 +++++++++++-------- src/Sqlite/BitBadger.Documents.Sqlite.fsproj | 4 +- src/Sqlite/Compat.fs | 6 +-- src/Sqlite/Extensions.fs | 9 +++-- src/Sqlite/Library.fs | 19 ++++++---- src/Tests/BitBadger.Documents.Tests.fsproj | 2 +- src/test_all.sh | 4 +- 12 files changed, 65 insertions(+), 50 deletions(-) diff --git a/src/Common/BitBadger.Documents.Common.fsproj b/src/Common/BitBadger.Documents.Common.fsproj index 388732d..8129e69 100644 --- a/src/Common/BitBadger.Documents.Common.fsproj +++ b/src/Common/BitBadger.Documents.Common.fsproj @@ -13,7 +13,9 @@ - + + + diff --git a/src/Directory.Build.props b/src/Directory.Build.props index b884483..1b3b103 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,6 +1,6 @@ - net6.0;net8.0;net9.0 + net8.0;net9.0 embedded false 4.0.0.0 diff --git a/src/Postgres/BitBadger.Documents.Postgres.fsproj b/src/Postgres/BitBadger.Documents.Postgres.fsproj index 6773b53..13f8be2 100644 --- a/src/Postgres/BitBadger.Documents.Postgres.fsproj +++ b/src/Postgres/BitBadger.Documents.Postgres.fsproj @@ -14,8 +14,9 @@ + - + diff --git a/src/Postgres/Compat.fs b/src/Postgres/Compat.fs index dae2bfa..349efe7 100644 --- a/src/Postgres/Compat.fs +++ b/src/Postgres/Compat.fs @@ -71,7 +71,7 @@ module WithProps = /// Retrieve the first document matching a JSON field comparison (->> =); returns null if not found [] - let FirstByField<'TDoc when 'TDoc: null>(tableName, field, sqlProps) = + let FirstByField<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, field, sqlProps) = WithProps.Find.FirstByFields<'TDoc>(tableName, Any, Seq.singleton field, sqlProps) [] @@ -144,7 +144,7 @@ module Find = /// Retrieve the first document matching a JSON field comparison (->> =); returns null if not found [] - let FirstByField<'TDoc when 'TDoc: null>(tableName, field) = + let FirstByField<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, field) = Find.FirstByFields<'TDoc>(tableName, Any, Seq.singleton field) @@ -248,7 +248,7 @@ type NpgsqlConnectionCSharpCompatExtensions = /// Retrieve the first document matching a JSON field comparison query (->> =); returns null if not found [] [] - static member inline FindFirstByField<'TDoc when 'TDoc: null>(conn, tableName, field) = + static member inline FindFirstByField<'TDoc when 'TDoc: null and 'TDoc: not struct>(conn, tableName, field) = WithProps.Find.FirstByFields<'TDoc>(tableName, Any, [ field ], Sql.existingConnection conn) /// Patch documents using a JSON field comparison query in the WHERE clause (->> =) diff --git a/src/Postgres/Extensions.fs b/src/Postgres/Extensions.fs index 2b3b63a..17c7810 100644 --- a/src/Postgres/Extensions.fs +++ b/src/Postgres/Extensions.fs @@ -211,7 +211,7 @@ type NpgsqlConnectionCSharpExtensions = /// Execute a query that returns one or no results; returns None if not found [] - static member inline CustomSingle<'TDoc when 'TDoc: null>( + static member inline CustomSingle<'TDoc when 'TDoc: null and 'TDoc: not struct>( conn, query, parameters, mapFunc: System.Func) = WithProps.Custom.Single<'TDoc>(query, parameters, mapFunc, Sql.existingConnection conn) @@ -303,7 +303,7 @@ type NpgsqlConnectionCSharpExtensions = /// Retrieve a document by its ID; returns None if not found [] - static member inline FindById<'TKey, 'TDoc when 'TDoc: null>(conn, tableName, docId: 'TKey) = + static member inline FindById<'TKey, 'TDoc when 'TDoc: null and 'TDoc: not struct>(conn, tableName, docId: 'TKey) = WithProps.Find.ById<'TKey, 'TDoc>(tableName, docId, Sql.existingConnection conn) /// Retrieve documents matching a JSON field comparison query (->> =) @@ -339,38 +339,41 @@ type NpgsqlConnectionCSharpExtensions = /// Retrieve the first document matching a JSON field comparison query (->> =); returns null if not found [] - static member inline FindFirstByFields<'TDoc when 'TDoc: null>(conn, tableName, howMatched, fields) = + static member inline FindFirstByFields<'TDoc when 'TDoc: null and 'TDoc: not struct>( + conn, tableName, howMatched, fields) = WithProps.Find.FirstByFields<'TDoc>(tableName, howMatched, fields, Sql.existingConnection conn) /// Retrieve the first document matching a JSON field comparison query (->> =) ordered by the given fields in the /// document; returns null if not found [] - static member inline FindFirstByFieldsOrdered<'TDoc when 'TDoc: null>( + static member inline FindFirstByFieldsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( conn, tableName, howMatched, queryFields, orderFields) = WithProps.Find.FirstByFieldsOrdered<'TDoc>( tableName, howMatched, queryFields, orderFields, Sql.existingConnection conn) /// Retrieve the first document matching a JSON containment query (@>); returns None if not found [] - static member inline FindFirstByContains<'TDoc when 'TDoc: null>(conn, tableName, criteria: obj) = + static member inline FindFirstByContains<'TDoc when 'TDoc: null and 'TDoc: not struct>( + conn, tableName, criteria: obj) = WithProps.Find.FirstByContains<'TDoc>(tableName, criteria, Sql.existingConnection conn) /// Retrieve the first document matching a JSON containment query (@>) ordered by the given fields in the document; /// returns None if not found [] - static member inline FindFirstByContainsOrdered<'TDoc when 'TDoc: null>( + static member inline FindFirstByContainsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( conn, tableName, criteria: obj, orderFields) = WithProps.Find.FirstByContainsOrdered<'TDoc>(tableName, criteria, orderFields, Sql.existingConnection conn) /// Retrieve the first document matching a JSON Path match query (@?); returns None if not found [] - static member inline FindFirstByJsonPath<'TDoc when 'TDoc: null>(conn, tableName, jsonPath) = + static member inline FindFirstByJsonPath<'TDoc when 'TDoc: null and 'TDoc: not struct>(conn, tableName, jsonPath) = WithProps.Find.FirstByJsonPath<'TDoc>(tableName, jsonPath, Sql.existingConnection conn) /// Retrieve the first document matching a JSON Path match query (@?) ordered by the given fields in the document; /// returns None if not found [] - static member inline FindFirstByJsonPathOrdered<'TDoc when 'TDoc: null>(conn, tableName, jsonPath, orderFields) = + static member inline FindFirstByJsonPathOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( + conn, tableName, jsonPath, orderFields) = WithProps.Find.FirstByJsonPathOrdered<'TDoc>(tableName, jsonPath, orderFields, Sql.existingConnection conn) /// Update an entire document by its ID diff --git a/src/Postgres/Library.fs b/src/Postgres/Library.fs index 4b4b3c2..36a4798 100644 --- a/src/Postgres/Library.fs +++ b/src/Postgres/Library.fs @@ -272,7 +272,7 @@ module WithProps = } /// Execute a query that returns one or no results; returns null if not found - let Single<'TDoc when 'TDoc: null>( + let Single<'TDoc when 'TDoc: null and 'TDoc: not struct>( query, parameters, mapFunc: System.Func, sqlProps) = backgroundTask { let! result = single<'TDoc> query parameters mapFunc.Invoke sqlProps return Option.toObj result @@ -439,7 +439,7 @@ module WithProps = Custom.single (Query.byId (Query.find tableName) docId) [ idParam docId ] fromData<'TDoc> sqlProps /// Retrieve a document by its ID (returns null if not found) - let ById<'TKey, 'TDoc when 'TDoc: null>(tableName, docId: 'TKey, sqlProps) = + let ById<'TKey, 'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, docId: 'TKey, sqlProps) = Custom.Single<'TDoc>( Query.byId (Query.find tableName) docId, [ idParam docId ], fromData<'TDoc>, sqlProps) @@ -549,7 +549,7 @@ module WithProps = sqlProps /// Retrieve the first document matching JSON field comparisons (->> =); returns null if not found - let FirstByFields<'TDoc when 'TDoc: null>(tableName, howMatched, fields, sqlProps) = + let FirstByFields<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, howMatched, fields, sqlProps) = Custom.Single<'TDoc>( $"{Query.byFields (Query.find tableName) howMatched fields} LIMIT 1", addFieldParams fields [], @@ -568,7 +568,8 @@ module WithProps = /// Retrieve the first document matching JSON field comparisons (->> =) ordered by the given fields in the /// document; returns null if not found - let FirstByFieldsOrdered<'TDoc when 'TDoc: null>(tableName, howMatched, queryFields, orderFields, sqlProps) = + let FirstByFieldsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( + tableName, howMatched, queryFields, orderFields, sqlProps) = Custom.Single<'TDoc>( $"{Query.byFields (Query.find tableName) howMatched queryFields}{Query.orderBy orderFields PostgreSQL} LIMIT 1", addFieldParams queryFields [], @@ -585,7 +586,7 @@ module WithProps = sqlProps /// Retrieve the first document matching a JSON containment query (@>); returns null if not found - let FirstByContains<'TDoc when 'TDoc: null>(tableName, criteria: obj, sqlProps) = + let FirstByContains<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, criteria: obj, sqlProps) = Custom.Single<'TDoc>( $"{Query.byContains (Query.find tableName)} LIMIT 1", [ jsonParam "@criteria" criteria ], @@ -604,7 +605,8 @@ module WithProps = /// Retrieve the first document matching a JSON containment query (@>) ordered by the given fields in the /// document; returns null if not found - let FirstByContainsOrdered<'TDoc when 'TDoc: null>(tableName, criteria: obj, orderFields, sqlProps) = + let FirstByContainsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( + tableName, criteria: obj, orderFields, sqlProps) = Custom.Single<'TDoc>( $"{Query.byContains (Query.find tableName)}{Query.orderBy orderFields PostgreSQL} LIMIT 1", [ jsonParam "@criteria" criteria ], @@ -621,7 +623,7 @@ module WithProps = sqlProps /// Retrieve the first document matching a JSON Path match query (@?); returns null if not found - let FirstByJsonPath<'TDoc when 'TDoc: null>(tableName, jsonPath, sqlProps) = + let FirstByJsonPath<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, jsonPath, sqlProps) = Custom.Single<'TDoc>( $"{Query.byPathMatch (Query.find tableName)} LIMIT 1", [ "@path", Sql.string jsonPath ], @@ -640,7 +642,8 @@ module WithProps = /// Retrieve the first document matching a JSON Path match query (@?) ordered by the given fields in the /// document; returns null if not found - let FirstByJsonPathOrdered<'TDoc when 'TDoc: null>(tableName, jsonPath, orderFields, sqlProps) = + let FirstByJsonPathOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( + tableName, jsonPath, orderFields, sqlProps) = Custom.Single<'TDoc>( $"{Query.byPathMatch (Query.find tableName)}{Query.orderBy orderFields PostgreSQL} LIMIT 1", [ "@path", Sql.string jsonPath ], @@ -779,7 +782,8 @@ module Custom = WithProps.Custom.single<'TDoc> query parameters mapFunc (fromDataSource ()) /// Execute a query that returns one or no results; returns null if not found - let Single<'TDoc when 'TDoc: null>(query, parameters, mapFunc: System.Func) = + let Single<'TDoc when 'TDoc: null and 'TDoc: not struct>( + query, parameters, mapFunc: System.Func) = WithProps.Custom.Single<'TDoc>(query, parameters, mapFunc, fromDataSource ()) /// Execute a query that returns no results @@ -910,7 +914,7 @@ module Find = WithProps.Find.byId<'TKey, 'TDoc> tableName docId (fromDataSource ()) /// Retrieve a document by its ID; returns null if not found - let ById<'TKey, 'TDoc when 'TDoc: null>(tableName, docId: 'TKey) = + let ById<'TKey, 'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, docId: 'TKey) = WithProps.Find.ById<'TKey, 'TDoc>(tableName, docId, fromDataSource ()) /// Retrieve documents matching a JSON field comparison query (->> =) @@ -973,7 +977,7 @@ module Find = WithProps.Find.firstByFields<'TDoc> tableName howMatched fields (fromDataSource ()) /// Retrieve the first document matching a JSON field comparison query (->> =); returns null if not found - let FirstByFields<'TDoc when 'TDoc: null>(tableName, howMatched, fields) = + let FirstByFields<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, howMatched, fields) = WithProps.Find.FirstByFields<'TDoc>(tableName, howMatched, fields, fromDataSource ()) /// Retrieve the first document matching a JSON field comparison query (->> =) ordered by the given fields in the @@ -984,7 +988,8 @@ module Find = /// Retrieve the first document matching a JSON field comparison query (->> =) ordered by the given fields in the /// document; returns null if not found - let FirstByFieldsOrdered<'TDoc when 'TDoc: null>(tableName, howMatched, queryFields, orderFields) = + let FirstByFieldsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( + tableName, howMatched, queryFields, orderFields) = WithProps.Find.FirstByFieldsOrdered<'TDoc>(tableName, howMatched, queryFields, orderFields, fromDataSource ()) /// Retrieve the first document matching a JSON containment query (@>); returns None if not found @@ -993,7 +998,7 @@ module Find = WithProps.Find.firstByContains<'TDoc> tableName criteria (fromDataSource ()) /// Retrieve the first document matching a JSON containment query (@>); returns null if not found - let FirstByContains<'TDoc when 'TDoc: null>(tableName, criteria: obj) = + let FirstByContains<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, criteria: obj) = WithProps.Find.FirstByContains<'TDoc>(tableName, criteria, fromDataSource ()) /// Retrieve the first document matching a JSON containment query (@>) ordered by the given fields in the document; @@ -1004,7 +1009,7 @@ module Find = /// Retrieve the first document matching a JSON containment query (@>) ordered by the given fields in the document; /// returns null if not found - let FirstByContainsOrdered<'TDoc when 'TDoc: null>(tableName, criteria: obj, orderFields) = + let FirstByContainsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, criteria: obj, orderFields) = WithProps.Find.FirstByContainsOrdered<'TDoc>(tableName, criteria, orderFields, fromDataSource ()) /// Retrieve the first document matching a JSON Path match query (@?); returns None if not found @@ -1013,7 +1018,7 @@ module Find = WithProps.Find.firstByJsonPath<'TDoc> tableName jsonPath (fromDataSource ()) /// Retrieve the first document matching a JSON Path match query (@?); returns null if not found - let FirstByJsonPath<'TDoc when 'TDoc: null>(tableName, jsonPath) = + let FirstByJsonPath<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, jsonPath) = WithProps.Find.FirstByJsonPath<'TDoc>(tableName, jsonPath, fromDataSource ()) /// Retrieve the first document matching a JSON Path match query (@?) ordered by the given fields in the document; @@ -1024,7 +1029,7 @@ module Find = /// Retrieve the first document matching a JSON Path match query (@?) ordered by the given fields in the document; /// returns null if not found - let FirstByJsonPathOrdered<'TDoc when 'TDoc: null>(tableName, jsonPath, orderFields) = + let FirstByJsonPathOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, jsonPath, orderFields) = WithProps.Find.FirstByJsonPathOrdered<'TDoc>(tableName, jsonPath, orderFields, fromDataSource ()) diff --git a/src/Sqlite/BitBadger.Documents.Sqlite.fsproj b/src/Sqlite/BitBadger.Documents.Sqlite.fsproj index f51a328..5865390 100644 --- a/src/Sqlite/BitBadger.Documents.Sqlite.fsproj +++ b/src/Sqlite/BitBadger.Documents.Sqlite.fsproj @@ -14,8 +14,8 @@ - - + + diff --git a/src/Sqlite/Compat.fs b/src/Sqlite/Compat.fs index 7288470..7f982e4 100644 --- a/src/Sqlite/Compat.fs +++ b/src/Sqlite/Compat.fs @@ -71,7 +71,7 @@ module WithConn = /// Retrieve the first document matching a JSON field comparison (->> =); returns null if not found [] - let FirstByField<'TDoc when 'TDoc: null>(tableName, field, conn) = + let FirstByField<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, field, conn) = WithConn.Find.FirstByFields<'TDoc>(tableName, Any, Seq.singleton field, conn) [] @@ -144,7 +144,7 @@ module Find = /// Retrieve the first document matching a JSON field comparison (->> =); returns null if not found [] - let FirstByField<'TDoc when 'TDoc: null>(tableName, field) = + let FirstByField<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, field) = Find.FirstByFields<'TDoc>(tableName, Any, Seq.singleton field) @@ -247,7 +247,7 @@ type SqliteConnectionCSharpCompatExtensions = /// Retrieve the first document matching a JSON field comparison query (->> =); returns null if not found [] [] - static member inline FindFirstByField<'TDoc when 'TDoc: null>(conn, tableName, field) = + static member inline FindFirstByField<'TDoc when 'TDoc: null and 'TDoc: not struct>(conn, tableName, field) = WithConn.Find.FirstByFields<'TDoc>(tableName, Any, [ field ], conn) /// Patch documents using a JSON field comparison query in the WHERE clause (->> =) diff --git a/src/Sqlite/Extensions.fs b/src/Sqlite/Extensions.fs index 4a32dec..52cd5e8 100644 --- a/src/Sqlite/Extensions.fs +++ b/src/Sqlite/Extensions.fs @@ -131,7 +131,7 @@ type SqliteConnectionCSharpExtensions = /// Execute a query that returns one or no results [] - static member inline CustomSingle<'TDoc when 'TDoc: null>( + static member inline CustomSingle<'TDoc when 'TDoc: null and 'TDoc: not struct>( conn, query, parameters, mapFunc: System.Func) = WithConn.Custom.Single<'TDoc>(query, parameters, mapFunc, conn) @@ -198,7 +198,7 @@ type SqliteConnectionCSharpExtensions = /// Retrieve a document by its ID [] - static member inline FindById<'TKey, 'TDoc when 'TDoc: null>(conn, tableName, docId: 'TKey) = + static member inline FindById<'TKey, 'TDoc when 'TDoc: null and 'TDoc: not struct>(conn, tableName, docId: 'TKey) = WithConn.Find.ById<'TKey, 'TDoc>(tableName, docId, conn) /// Retrieve documents via a comparison on JSON fields @@ -213,13 +213,14 @@ type SqliteConnectionCSharpExtensions = /// Retrieve documents via a comparison on JSON fields, returning only the first result [] - static member inline FindFirstByFields<'TDoc when 'TDoc: null>(conn, tableName, howMatched, fields) = + static member inline FindFirstByFields<'TDoc when 'TDoc: null and 'TDoc: not struct>( + conn, tableName, howMatched, fields) = WithConn.Find.FirstByFields<'TDoc>(tableName, howMatched, fields, conn) /// Retrieve documents via a comparison on JSON fields ordered by the given fields in the document, returning only /// the first result [] - static member inline FindFirstByFieldsOrdered<'TDoc when 'TDoc: null>( + static member inline FindFirstByFieldsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( conn, tableName, howMatched, queryFields, orderFields) = WithConn.Find.FirstByFieldsOrdered<'TDoc>(tableName, howMatched, queryFields, orderFields, conn) diff --git a/src/Sqlite/Library.fs b/src/Sqlite/Library.fs index 28e8080..34a5652 100644 --- a/src/Sqlite/Library.fs +++ b/src/Sqlite/Library.fs @@ -221,7 +221,7 @@ module WithConn = } /// Execute a query that returns one or no results (returns null if not found) - let Single<'TDoc when 'TDoc: null>( + let Single<'TDoc when 'TDoc: null and 'TDoc: not struct>( query, parameters, mapFunc: System.Func, conn ) = backgroundTask { let! result = single<'TDoc> query parameters mapFunc.Invoke conn @@ -358,7 +358,7 @@ module WithConn = Custom.single<'TDoc> (Query.byId (Query.find tableName) docId) [ idParam docId ] fromData<'TDoc> conn /// Retrieve a document by its ID (returns null if not found) - let ById<'TKey, 'TDoc when 'TDoc: null>(tableName, docId: 'TKey, conn) = + let ById<'TKey, 'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, docId: 'TKey, conn) = Custom.Single<'TDoc>(Query.byId (Query.find tableName) docId, [ idParam docId ], fromData<'TDoc>, conn) /// Retrieve documents via a comparison on JSON fields @@ -405,7 +405,7 @@ module WithConn = conn /// Retrieve documents via a comparison on JSON fields, returning only the first result - let FirstByFields<'TDoc when 'TDoc: null>(tableName, howMatched, fields, conn) = + let FirstByFields<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, howMatched, fields, conn) = Custom.Single( $"{Query.byFields (Query.find tableName) howMatched fields} LIMIT 1", addFieldParams fields [], @@ -424,7 +424,8 @@ module WithConn = /// Retrieve documents via a comparison on JSON fields ordered by the given fields in the document, returning /// only the first result - let FirstByFieldsOrdered<'TDoc when 'TDoc: null>(tableName, howMatched, queryFields, orderFields, conn) = + let FirstByFieldsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( + tableName, howMatched, queryFields, orderFields, conn) = Custom.Single( $"{Query.byFields (Query.find tableName) howMatched queryFields}{Query.orderBy orderFields SQLite} LIMIT 1", addFieldParams queryFields [], @@ -529,7 +530,8 @@ module Custom = WithConn.Custom.single<'TDoc> query parameters mapFunc conn /// Execute a query that returns one or no results (returns null if not found) - let Single<'TDoc when 'TDoc: null>(query, parameters, mapFunc: System.Func) = + let Single<'TDoc when 'TDoc: null and 'TDoc: not struct>( + query, parameters, mapFunc: System.Func) = use conn = Configuration.dbConn () WithConn.Custom.Single<'TDoc>(query, parameters, mapFunc, conn) @@ -652,7 +654,7 @@ module Find = WithConn.Find.byId<'TKey, 'TDoc> tableName docId conn /// Retrieve a document by its ID (returns null if not found) - let ById<'TKey, 'TDoc when 'TDoc: null>(tableName, docId) = + let ById<'TKey, 'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, docId) = use conn = Configuration.dbConn () WithConn.Find.ById<'TKey, 'TDoc>(tableName, docId, conn) @@ -685,7 +687,7 @@ module Find = WithConn.Find.firstByFields<'TDoc> tableName howMatched fields conn /// Retrieve documents via a comparison on JSON fields, returning only the first result - let FirstByFields<'TDoc when 'TDoc: null>(tableName, howMatched, fields) = + let FirstByFields<'TDoc when 'TDoc: null and 'TDoc: not struct>(tableName, howMatched, fields) = use conn = Configuration.dbConn () WithConn.Find.FirstByFields<'TDoc>(tableName, howMatched, fields, conn) @@ -698,7 +700,8 @@ module Find = /// Retrieve documents via a comparison on JSON fields ordered by the given fields in the document, returning only /// the first result - let FirstByFieldsOrdered<'TDoc when 'TDoc: null>(tableName, howMatched, queryFields, orderFields) = + let FirstByFieldsOrdered<'TDoc when 'TDoc: null and 'TDoc: not struct>( + tableName, howMatched, queryFields, orderFields) = use conn = Configuration.dbConn () WithConn.Find.FirstByFieldsOrdered<'TDoc>(tableName, howMatched, queryFields, orderFields, conn) diff --git a/src/Tests/BitBadger.Documents.Tests.fsproj b/src/Tests/BitBadger.Documents.Tests.fsproj index a362ea2..77929cc 100644 --- a/src/Tests/BitBadger.Documents.Tests.fsproj +++ b/src/Tests/BitBadger.Documents.Tests.fsproj @@ -17,7 +17,7 @@ - + diff --git a/src/test_all.sh b/src/test_all.sh index 8da7763..2149d3f 100755 --- a/src/test_all.sh +++ b/src/test_all.sh @@ -7,8 +7,8 @@ dotnet build BitBadger.Documents.sln --no-restore cd ./Tests || exit export BBDOX_PG_PORT=8301 -PG_VERSIONS=('12' '13' '14' '15' 'latest') -NET_VERSIONS=('6.0' '8.0' '9.0') +PG_VERSIONS=('13' '14' '15' '16' 'latest') +NET_VERSIONS=('8.0' '9.0') for PG_VERSION in "${PG_VERSIONS[@]}" do