Version 4 #6
|
@ -6,7 +6,7 @@
|
||||||
<AssemblyVersion>4.0.0.0</AssemblyVersion>
|
<AssemblyVersion>4.0.0.0</AssemblyVersion>
|
||||||
<FileVersion>4.0.0.0</FileVersion>
|
<FileVersion>4.0.0.0</FileVersion>
|
||||||
<VersionPrefix>4.0.0</VersionPrefix>
|
<VersionPrefix>4.0.0</VersionPrefix>
|
||||||
<PackageReleaseNotes>Change ByField to ByFields; support dot-access to document fields; add Find*Ordered functions/methods</PackageReleaseNotes>
|
<PackageReleaseNotes>Change ByField to ByFields; support dot-access to nested document fields; add Find*Ordered functions/methods; see project site for breaking changes and compatibility</PackageReleaseNotes>
|
||||||
<Authors>danieljsummers</Authors>
|
<Authors>danieljsummers</Authors>
|
||||||
<Company>Bit Badger Solutions</Company>
|
<Company>Bit Badger Solutions</Company>
|
||||||
<PackageReadmeFile>README.md</PackageReadmeFile>
|
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Library.fs" />
|
<Compile Include="Library.fs" />
|
||||||
<Compile Include="Extensions.fs" />
|
<Compile Include="Extensions.fs" />
|
||||||
|
<Compile Include="Compat.fs" />
|
||||||
<None Include="README.md" Pack="true" PackagePath="\" />
|
<None Include="README.md" Pack="true" PackagePath="\" />
|
||||||
<None Include="..\icon.png" Pack="true" PackagePath="\" />
|
<None Include="..\icon.png" Pack="true" PackagePath="\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
270
src/Postgres/Compat.fs
Normal file
270
src/Postgres/Compat.fs
Normal file
|
@ -0,0 +1,270 @@
|
||||||
|
namespace BitBadger.Documents.Postgres.Compat
|
||||||
|
|
||||||
|
open BitBadger.Documents
|
||||||
|
open BitBadger.Documents.Postgres
|
||||||
|
|
||||||
|
[<AutoOpen>]
|
||||||
|
module Parameters =
|
||||||
|
|
||||||
|
/// Create a JSON field parameter
|
||||||
|
[<CompiledName "AddField">]
|
||||||
|
[<System.Obsolete "Use addFieldParams (F#) / AddFields (C#) instead ~ will be removed in v4.1">]
|
||||||
|
let addFieldParam name field parameters =
|
||||||
|
addFieldParams [ { field with ParameterName = Some name } ] parameters
|
||||||
|
|
||||||
|
/// Append JSON field name parameters for the given field names to the given parameters
|
||||||
|
[<CompiledName "FieldName">]
|
||||||
|
[<System.Obsolete "Use fieldNameParams (F#) / FieldNames (C#) instead ~ will be removed in v4.1">]
|
||||||
|
let fieldNameParam fieldNames =
|
||||||
|
fieldNameParams fieldNames
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Query =
|
||||||
|
|
||||||
|
/// Create a WHERE clause fragment to implement a comparison on a field in a JSON document
|
||||||
|
[<CompiledName "WhereByField">]
|
||||||
|
[<System.Obsolete "Use WhereByFields instead ~ will be removed in v4.1">]
|
||||||
|
let whereByField field paramName =
|
||||||
|
Query.whereByFields Any [ { field with ParameterName = Some paramName } ]
|
||||||
|
|
||||||
|
|
||||||
|
module WithProps =
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Count =
|
||||||
|
|
||||||
|
/// Count matching documents using a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field sqlProps =
|
||||||
|
WithProps.Count.byFields tableName Any [ field ] sqlProps
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Exists =
|
||||||
|
|
||||||
|
/// Determine if a document exists using a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field sqlProps =
|
||||||
|
WithProps.Exists.byFields tableName Any [ field ] sqlProps
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Find =
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "FSharpByField">]
|
||||||
|
[<System.Obsolete "Use byFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField<'TDoc> tableName field sqlProps =
|
||||||
|
WithProps.Find.byFields<'TDoc> tableName Any [ field ] sqlProps
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison (->> =)
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let ByField<'TDoc>(tableName, field, sqlProps) =
|
||||||
|
WithProps.Find.ByFields<'TDoc>(tableName, Any, Seq.singleton field, sqlProps)
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison (->> =); returns None if not found
|
||||||
|
[<CompiledName "FSharpFirstByField">]
|
||||||
|
[<System.Obsolete "Use firstByFields instead ~ will be removed in v4.1">]
|
||||||
|
let firstByField<'TDoc> tableName field sqlProps =
|
||||||
|
WithProps.Find.firstByFields<'TDoc> tableName Any [ field ] sqlProps
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison (->> =); returns null if not found
|
||||||
|
[<System.Obsolete "Use FirstByFields instead ~ will be removed in v4.1">]
|
||||||
|
let FirstByField<'TDoc when 'TDoc: null>(tableName, field, sqlProps) =
|
||||||
|
WithProps.Find.FirstByFields<'TDoc>(tableName, Any, Seq.singleton field, sqlProps)
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Patch =
|
||||||
|
|
||||||
|
/// Patch documents using a JSON field comparison query in the WHERE clause (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field (patch: 'TPatch) sqlProps =
|
||||||
|
WithProps.Patch.byFields tableName Any [ field ] patch sqlProps
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module RemoveFields =
|
||||||
|
|
||||||
|
/// Remove fields from documents via a comparison on a JSON field in the document
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field fieldNames sqlProps =
|
||||||
|
WithProps.RemoveFields.byFields tableName Any [ field ] fieldNames sqlProps
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Delete =
|
||||||
|
|
||||||
|
/// Delete documents by matching a JSON field comparison query (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field sqlProps =
|
||||||
|
WithProps.Delete.byFields tableName Any [ field ] sqlProps
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Count =
|
||||||
|
|
||||||
|
/// Count matching documents using a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field =
|
||||||
|
Count.byFields tableName Any [ field ]
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Exists =
|
||||||
|
|
||||||
|
/// Determine if a document exists using a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field =
|
||||||
|
Exists.byFields tableName Any [ field ]
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Find =
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "FSharpByField">]
|
||||||
|
[<System.Obsolete "Use byFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField<'TDoc> tableName field =
|
||||||
|
Find.byFields<'TDoc> tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison (->> =)
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let ByField<'TDoc>(tableName, field) =
|
||||||
|
Find.ByFields<'TDoc>(tableName, Any, Seq.singleton field)
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison (->> =); returns None if not found
|
||||||
|
[<CompiledName "FSharpFirstByField">]
|
||||||
|
[<System.Obsolete "Use firstByFields instead ~ will be removed in v4.1">]
|
||||||
|
let firstByField<'TDoc> tableName field =
|
||||||
|
Find.firstByFields<'TDoc> tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison (->> =); returns null if not found
|
||||||
|
[<System.Obsolete "Use FirstByFields instead ~ will be removed in v4.1">]
|
||||||
|
let FirstByField<'TDoc when 'TDoc: null>(tableName, field) =
|
||||||
|
Find.FirstByFields<'TDoc>(tableName, Any, Seq.singleton field)
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Patch =
|
||||||
|
|
||||||
|
/// Patch documents using a JSON field comparison query in the WHERE clause (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field (patch: 'TPatch) =
|
||||||
|
Patch.byFields tableName Any [ field ] patch
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module RemoveFields =
|
||||||
|
|
||||||
|
/// Remove fields from documents via a comparison on a JSON field in the document
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field fieldNames =
|
||||||
|
RemoveFields.byFields tableName Any [ field ] fieldNames
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Delete =
|
||||||
|
|
||||||
|
/// Delete documents by matching a JSON field comparison query (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field =
|
||||||
|
Delete.byFields tableName Any [ field ]
|
||||||
|
|
||||||
|
|
||||||
|
open Npgsql
|
||||||
|
|
||||||
|
/// F# Extensions for the NpgsqlConnection type
|
||||||
|
[<AutoOpen>]
|
||||||
|
module Extensions =
|
||||||
|
|
||||||
|
type NpgsqlConnection with
|
||||||
|
|
||||||
|
/// Count matching documents using a JSON field comparison query (->> =)
|
||||||
|
[<System.Obsolete "Use countByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.countByField tableName field =
|
||||||
|
conn.countByFields tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Determine if documents exist using a JSON field comparison query (->> =)
|
||||||
|
[<System.Obsolete "Use existsByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.existsByField tableName field =
|
||||||
|
conn.existsByFields tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison query (->> =)
|
||||||
|
[<System.Obsolete "Use findByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.findByField<'TDoc> tableName field =
|
||||||
|
conn.findByFields<'TDoc> tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison query (->> =); returns None if not found
|
||||||
|
[<System.Obsolete "Use findFirstByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.findFirstByField<'TDoc> tableName field =
|
||||||
|
conn.findFirstByFields<'TDoc> tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Patch documents using a JSON field comparison query in the WHERE clause (->> =)
|
||||||
|
[<System.Obsolete "Use patchByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.patchByField tableName field (patch: 'TPatch) =
|
||||||
|
conn.patchByFields tableName Any [ field ] patch
|
||||||
|
|
||||||
|
/// Remove fields from documents via a comparison on a JSON field in the document
|
||||||
|
[<System.Obsolete "Use removeFieldsByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.removeFieldsByField tableName field fieldNames =
|
||||||
|
conn.removeFieldsByFields tableName Any [ field ] fieldNames
|
||||||
|
|
||||||
|
/// Delete documents by matching a JSON field comparison query (->> =)
|
||||||
|
[<System.Obsolete "Use deleteByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.deleteByField tableName field =
|
||||||
|
conn.deleteByFields tableName Any [ field ]
|
||||||
|
|
||||||
|
|
||||||
|
open System.Runtime.CompilerServices
|
||||||
|
open Npgsql.FSharp
|
||||||
|
|
||||||
|
type NpgsqlConnectionCSharpCompatExtensions =
|
||||||
|
|
||||||
|
/// Count matching documents using a JSON field comparison query (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use CountByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline CountByField(conn, tableName, field) =
|
||||||
|
WithProps.Count.byFields tableName Any [ field ] (Sql.existingConnection conn)
|
||||||
|
|
||||||
|
/// Determine if documents exist using a JSON field comparison query (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use ExistsByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline ExistsByField(conn, tableName, field) =
|
||||||
|
WithProps.Exists.byFields tableName Any [ field ] (Sql.existingConnection conn)
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison query (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use FindByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline FindByField<'TDoc>(conn, tableName, field) =
|
||||||
|
WithProps.Find.ByFields<'TDoc>(tableName, Any, [ field ], Sql.existingConnection conn)
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison query (->> =); returns null if not found
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use FindFirstByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline FindFirstByField<'TDoc when 'TDoc: null>(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 (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use PatchByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline PatchByField(conn, tableName, field, patch: 'TPatch) =
|
||||||
|
WithProps.Patch.byFields tableName Any [ field ] patch (Sql.existingConnection conn)
|
||||||
|
|
||||||
|
/// Remove fields from documents via a comparison on a JSON field in the document
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use RemoveFieldsByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline RemoveFieldsByField(conn, tableName, field, fieldNames) =
|
||||||
|
WithProps.RemoveFields.byFields tableName Any [ field ] fieldNames (Sql.existingConnection conn)
|
||||||
|
|
||||||
|
/// Delete documents by matching a JSON field comparison query (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use DeleteByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline DeleteByField(conn, tableName, field) =
|
||||||
|
WithProps.Delete.byFields tableName Any [ field ] (Sql.existingConnection conn)
|
|
@ -104,24 +104,12 @@ module Parameters =
|
||||||
|> Seq.toList
|
|> Seq.toList
|
||||||
|> Seq.ofList
|
|> Seq.ofList
|
||||||
|
|
||||||
/// Create a JSON field parameter
|
|
||||||
[<CompiledName "AddField">]
|
|
||||||
[<System.Obsolete "Use addFieldParams (F#) / AddFields (C#) instead; will be removed in v4">]
|
|
||||||
let addFieldParam name field parameters =
|
|
||||||
addFieldParams [ { field with ParameterName = Some name } ] parameters
|
|
||||||
|
|
||||||
/// Append JSON field name parameters for the given field names to the given parameters
|
/// Append JSON field name parameters for the given field names to the given parameters
|
||||||
[<CompiledName "FieldNames">]
|
[<CompiledName "FieldNames">]
|
||||||
let fieldNameParams (fieldNames: string seq) =
|
let fieldNameParams (fieldNames: string seq) =
|
||||||
if Seq.length fieldNames = 1 then "@name", Sql.string (Seq.head fieldNames)
|
if Seq.length fieldNames = 1 then "@name", Sql.string (Seq.head fieldNames)
|
||||||
else "@name", Sql.stringArray (Array.ofSeq fieldNames)
|
else "@name", Sql.stringArray (Array.ofSeq fieldNames)
|
||||||
|
|
||||||
/// Append JSON field name parameters for the given field names to the given parameters
|
|
||||||
[<CompiledName "FieldName">]
|
|
||||||
[<System.Obsolete "Use fieldNameParams (F#) / FieldNames (C#) instead; will be removed in v4">]
|
|
||||||
let fieldNameParam fieldNames =
|
|
||||||
fieldNameParams fieldNames
|
|
||||||
|
|
||||||
/// An empty parameter sequence
|
/// An empty parameter sequence
|
||||||
[<CompiledName "None">]
|
[<CompiledName "None">]
|
||||||
let noParams =
|
let noParams =
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Library.fs" />
|
<Compile Include="Library.fs" />
|
||||||
<Compile Include="Extensions.fs" />
|
<Compile Include="Extensions.fs" />
|
||||||
|
<Compile Include="Compat.fs" />
|
||||||
<None Include="README.md" Pack="true" PackagePath="\" />
|
<None Include="README.md" Pack="true" PackagePath="\" />
|
||||||
<None Include="..\icon.png" Pack="true" PackagePath="\" />
|
<None Include="..\icon.png" Pack="true" PackagePath="\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
269
src/Sqlite/Compat.fs
Normal file
269
src/Sqlite/Compat.fs
Normal file
|
@ -0,0 +1,269 @@
|
||||||
|
namespace BitBadger.Documents.Sqlite.Compat
|
||||||
|
|
||||||
|
open BitBadger.Documents
|
||||||
|
open BitBadger.Documents.Sqlite
|
||||||
|
|
||||||
|
[<AutoOpen>]
|
||||||
|
module Parameters =
|
||||||
|
|
||||||
|
/// Create a JSON field parameter
|
||||||
|
[<CompiledName "AddField">]
|
||||||
|
[<System.Obsolete "Use addFieldParams (F#) / AddFields (C#) instead ~ will be removed in v4.1">]
|
||||||
|
let addFieldParam name field parameters =
|
||||||
|
addFieldParams [ { field with ParameterName = Some name } ] parameters
|
||||||
|
|
||||||
|
/// Append JSON field name parameters for the given field names to the given parameters
|
||||||
|
[<CompiledName "FieldName">]
|
||||||
|
[<System.Obsolete "Use fieldNameParams (F#) / FieldNames (C#) instead ~ will be removed in v4.1">]
|
||||||
|
let fieldNameParam fieldNames =
|
||||||
|
fieldNameParams fieldNames
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Query =
|
||||||
|
|
||||||
|
/// Create a WHERE clause fragment to implement a comparison on a field in a JSON document
|
||||||
|
[<CompiledName "WhereByField">]
|
||||||
|
[<System.Obsolete "Use WhereByFields instead ~ will be removed in v4.1">]
|
||||||
|
let whereByField field paramName =
|
||||||
|
Query.whereByFields Any [ { field with ParameterName = Some paramName } ]
|
||||||
|
|
||||||
|
|
||||||
|
module WithConn =
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Count =
|
||||||
|
|
||||||
|
/// Count matching documents using a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field conn =
|
||||||
|
WithConn.Count.byFields tableName Any [ field ] conn
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Exists =
|
||||||
|
|
||||||
|
/// Determine if a document exists using a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field conn =
|
||||||
|
WithConn.Exists.byFields tableName Any [ field ] conn
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Find =
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "FSharpByField">]
|
||||||
|
[<System.Obsolete "Use byFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField<'TDoc> tableName field conn =
|
||||||
|
WithConn.Find.byFields<'TDoc> tableName Any [ field ] conn
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison (->> =)
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let ByField<'TDoc>(tableName, field, conn) =
|
||||||
|
WithConn.Find.ByFields<'TDoc>(tableName, Any, Seq.singleton field, conn)
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison (->> =); returns None if not found
|
||||||
|
[<CompiledName "FSharpFirstByField">]
|
||||||
|
[<System.Obsolete "Use firstByFields instead ~ will be removed in v4.1">]
|
||||||
|
let firstByField<'TDoc> tableName field conn =
|
||||||
|
WithConn.Find.firstByFields<'TDoc> tableName Any [ field ] conn
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison (->> =); returns null if not found
|
||||||
|
[<System.Obsolete "Use FirstByFields instead ~ will be removed in v4.1">]
|
||||||
|
let FirstByField<'TDoc when 'TDoc: null>(tableName, field, conn) =
|
||||||
|
WithConn.Find.FirstByFields<'TDoc>(tableName, Any, Seq.singleton field, conn)
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Patch =
|
||||||
|
|
||||||
|
/// Patch documents using a JSON field comparison query in the WHERE clause (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field (patch: 'TPatch) conn =
|
||||||
|
WithConn.Patch.byFields tableName Any [ field ] patch conn
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module RemoveFields =
|
||||||
|
|
||||||
|
/// Remove fields from documents via a comparison on a JSON field in the document
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field fieldNames conn =
|
||||||
|
WithConn.RemoveFields.byFields tableName Any [ field ] fieldNames conn
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Delete =
|
||||||
|
|
||||||
|
/// Delete documents by matching a JSON field comparison query (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field conn =
|
||||||
|
WithConn.Delete.byFields tableName Any [ field ] conn
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Count =
|
||||||
|
|
||||||
|
/// Count matching documents using a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field =
|
||||||
|
Count.byFields tableName Any [ field ]
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Exists =
|
||||||
|
|
||||||
|
/// Determine if a document exists using a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field =
|
||||||
|
Exists.byFields tableName Any [ field ]
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Find =
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison (->> =)
|
||||||
|
[<CompiledName "FSharpByField">]
|
||||||
|
[<System.Obsolete "Use byFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField<'TDoc> tableName field =
|
||||||
|
Find.byFields<'TDoc> tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison (->> =)
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let ByField<'TDoc>(tableName, field) =
|
||||||
|
Find.ByFields<'TDoc>(tableName, Any, Seq.singleton field)
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison (->> =); returns None if not found
|
||||||
|
[<CompiledName "FSharpFirstByField">]
|
||||||
|
[<System.Obsolete "Use firstByFields instead ~ will be removed in v4.1">]
|
||||||
|
let firstByField<'TDoc> tableName field =
|
||||||
|
Find.firstByFields<'TDoc> tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison (->> =); returns null if not found
|
||||||
|
[<System.Obsolete "Use FirstByFields instead ~ will be removed in v4.1">]
|
||||||
|
let FirstByField<'TDoc when 'TDoc: null>(tableName, field) =
|
||||||
|
Find.FirstByFields<'TDoc>(tableName, Any, Seq.singleton field)
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Patch =
|
||||||
|
|
||||||
|
/// Patch documents using a JSON field comparison query in the WHERE clause (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field (patch: 'TPatch) =
|
||||||
|
Patch.byFields tableName Any [ field ] patch
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module RemoveFields =
|
||||||
|
|
||||||
|
/// Remove fields from documents via a comparison on a JSON field in the document
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field fieldNames =
|
||||||
|
RemoveFields.byFields tableName Any [ field ] fieldNames
|
||||||
|
|
||||||
|
|
||||||
|
[<RequireQualifiedAccess>]
|
||||||
|
module Delete =
|
||||||
|
|
||||||
|
/// Delete documents by matching a JSON field comparison query (->> =)
|
||||||
|
[<CompiledName "ByField">]
|
||||||
|
[<System.Obsolete "Use ByFields instead ~ will be removed in v4.1">]
|
||||||
|
let byField tableName field =
|
||||||
|
Delete.byFields tableName Any [ field ]
|
||||||
|
|
||||||
|
|
||||||
|
open Microsoft.Data.Sqlite
|
||||||
|
|
||||||
|
/// F# Extensions for the NpgsqlConnection type
|
||||||
|
[<AutoOpen>]
|
||||||
|
module Extensions =
|
||||||
|
|
||||||
|
type SqliteConnection with
|
||||||
|
|
||||||
|
/// Count matching documents using a JSON field comparison query (->> =)
|
||||||
|
[<System.Obsolete "Use countByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.countByField tableName field =
|
||||||
|
conn.countByFields tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Determine if documents exist using a JSON field comparison query (->> =)
|
||||||
|
[<System.Obsolete "Use existsByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.existsByField tableName field =
|
||||||
|
conn.existsByFields tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison query (->> =)
|
||||||
|
[<System.Obsolete "Use findByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.findByField<'TDoc> tableName field =
|
||||||
|
conn.findByFields<'TDoc> tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison query (->> =); returns None if not found
|
||||||
|
[<System.Obsolete "Use findFirstByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.findFirstByField<'TDoc> tableName field =
|
||||||
|
conn.findFirstByFields<'TDoc> tableName Any [ field ]
|
||||||
|
|
||||||
|
/// Patch documents using a JSON field comparison query in the WHERE clause (->> =)
|
||||||
|
[<System.Obsolete "Use patchByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.patchByField tableName field (patch: 'TPatch) =
|
||||||
|
conn.patchByFields tableName Any [ field ] patch
|
||||||
|
|
||||||
|
/// Remove fields from documents via a comparison on a JSON field in the document
|
||||||
|
[<System.Obsolete "Use removeFieldsByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.removeFieldsByField tableName field fieldNames =
|
||||||
|
conn.removeFieldsByFields tableName Any [ field ] fieldNames
|
||||||
|
|
||||||
|
/// Delete documents by matching a JSON field comparison query (->> =)
|
||||||
|
[<System.Obsolete "Use deleteByFields instead ~ will be removed in v4.1">]
|
||||||
|
member conn.deleteByField tableName field =
|
||||||
|
conn.deleteByFields tableName Any [ field ]
|
||||||
|
|
||||||
|
|
||||||
|
open System.Runtime.CompilerServices
|
||||||
|
|
||||||
|
type SqliteConnectionCSharpCompatExtensions =
|
||||||
|
|
||||||
|
/// Count matching documents using a JSON field comparison query (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use CountByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline CountByField(conn, tableName, field) =
|
||||||
|
WithConn.Count.byFields tableName Any [ field ] conn
|
||||||
|
|
||||||
|
/// Determine if documents exist using a JSON field comparison query (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use ExistsByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline ExistsByField(conn, tableName, field) =
|
||||||
|
WithConn.Exists.byFields tableName Any [ field ] conn
|
||||||
|
|
||||||
|
/// Retrieve documents matching a JSON field comparison query (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use FindByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline FindByField<'TDoc>(conn, tableName, field) =
|
||||||
|
WithConn.Find.ByFields<'TDoc>(tableName, Any, [ field ], conn)
|
||||||
|
|
||||||
|
/// Retrieve the first document matching a JSON field comparison query (->> =); returns null if not found
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use FindFirstByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline FindFirstByField<'TDoc when 'TDoc: null>(conn, tableName, field) =
|
||||||
|
WithConn.Find.FirstByFields<'TDoc>(tableName, Any, [ field ], conn)
|
||||||
|
|
||||||
|
/// Patch documents using a JSON field comparison query in the WHERE clause (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use PatchByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline PatchByField(conn, tableName, field, patch: 'TPatch) =
|
||||||
|
WithConn.Patch.byFields tableName Any [ field ] patch conn
|
||||||
|
|
||||||
|
/// Remove fields from documents via a comparison on a JSON field in the document
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use RemoveFieldsByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline RemoveFieldsByField(conn, tableName, field, fieldNames) =
|
||||||
|
WithConn.RemoveFields.byFields tableName Any [ field ] fieldNames conn
|
||||||
|
|
||||||
|
/// Delete documents by matching a JSON field comparison query (->> =)
|
||||||
|
[<Extension>]
|
||||||
|
[<System.Obsolete "Use DeleteByFields instead ~ will be removed in v4.1">]
|
||||||
|
static member inline DeleteByField(conn, tableName, field) =
|
||||||
|
WithConn.Delete.byFields tableName Any [ field ] conn
|
|
@ -170,30 +170,7 @@ public static class PostgresCSharpTests
|
||||||
Expect.isTrue(false, "The parameter was not a StringArray type");
|
Expect.isTrue(false, "The parameter was not a StringArray type");
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
]),
|
|
||||||
#pragma warning disable CS0618
|
|
||||||
TestList("FieldName",
|
|
||||||
[
|
|
||||||
TestCase("succeeds for one name", () =>
|
|
||||||
{
|
|
||||||
var (name, value) = Parameters.FieldName(["bob"]);
|
|
||||||
Expect.equal(name, "@name", "The parameter name was incorrect");
|
|
||||||
if (!value.IsString)
|
|
||||||
{
|
|
||||||
Expect.isTrue(false, "The parameter was not a String type");
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
TestCase("succeeds for multiple names", () =>
|
|
||||||
{
|
|
||||||
var (name, value) = Parameters.FieldName(["bob", "tom", "mike"]);
|
|
||||||
Expect.equal(name, "@name", "The parameter name was incorrect");
|
|
||||||
if (!value.IsStringArray)
|
|
||||||
{
|
|
||||||
Expect.isTrue(false, "The parameter was not a StringArray type");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
])
|
])
|
||||||
#pragma warning restore CS0618
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -5,8 +5,6 @@ open BitBadger.Documents
|
||||||
open BitBadger.Documents.Postgres
|
open BitBadger.Documents.Postgres
|
||||||
open BitBadger.Documents.Tests
|
open BitBadger.Documents.Tests
|
||||||
|
|
||||||
#nowarn "0044"
|
|
||||||
|
|
||||||
(** UNIT TESTS **)
|
(** UNIT TESTS **)
|
||||||
|
|
||||||
/// Unit tests for the Parameters module of the PostgreSQL library
|
/// Unit tests for the Parameters module of the PostgreSQL library
|
||||||
|
@ -129,18 +127,6 @@ let parametersTests = testList "Parameters" [
|
||||||
Expect.equal value (Sql.stringArray [| "bob"; "tom"; "mike" |]) "The parameter value was incorrect"
|
Expect.equal value (Sql.stringArray [| "bob"; "tom"; "mike" |]) "The parameter value was incorrect"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
testList "fieldNameParam" [
|
|
||||||
test "succeeds for one name" {
|
|
||||||
let name, value = fieldNameParam [ "bob" ]
|
|
||||||
Expect.equal name "@name" "The parameter name was incorrect"
|
|
||||||
Expect.equal value (Sql.string "bob") "The parameter value was incorrect"
|
|
||||||
}
|
|
||||||
test "succeeds for multiple names" {
|
|
||||||
let name, value = fieldNameParam [ "bob"; "tom"; "mike" ]
|
|
||||||
Expect.equal name "@name" "The parameter name was incorrect"
|
|
||||||
Expect.equal value (Sql.stringArray [| "bob"; "tom"; "mike" |]) "The parameter value was incorrect"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
test "noParams succeeds" {
|
test "noParams succeeds" {
|
||||||
Expect.isEmpty noParams "The no-params sequence should be empty"
|
Expect.isEmpty noParams "The no-params sequence should be empty"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user