Add compat namespace functions
- Update package release notes
This commit is contained in:
		
							parent
							
								
									e2948ea6a1
								
							
						
					
					
						commit
						88f11a854f
					
				@ -6,7 +6,7 @@
 | 
			
		||||
    <AssemblyVersion>4.0.0.0</AssemblyVersion>
 | 
			
		||||
    <FileVersion>4.0.0.0</FileVersion>
 | 
			
		||||
    <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>
 | 
			
		||||
    <Company>Bit Badger Solutions</Company>
 | 
			
		||||
    <PackageReadmeFile>README.md</PackageReadmeFile>
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,7 @@
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="Library.fs" />
 | 
			
		||||
    <Compile Include="Extensions.fs" />
 | 
			
		||||
    <Compile Include="Compat.fs" />
 | 
			
		||||
    <None Include="README.md" Pack="true" PackagePath="\" />
 | 
			
		||||
    <None Include="..\icon.png" Pack="true" PackagePath="\" />
 | 
			
		||||
  </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.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
 | 
			
		||||
    [<CompiledName "FieldNames">]
 | 
			
		||||
    let fieldNameParams (fieldNames: string seq) =
 | 
			
		||||
        if Seq.length fieldNames = 1 then "@name", Sql.string (Seq.head 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
 | 
			
		||||
    [<CompiledName "None">]
 | 
			
		||||
    let noParams =
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,7 @@
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="Library.fs" />
 | 
			
		||||
    <Compile Include="Extensions.fs" />
 | 
			
		||||
    <Compile Include="Compat.fs" />
 | 
			
		||||
    <None Include="README.md" Pack="true" PackagePath="\" />
 | 
			
		||||
    <None Include="..\icon.png" Pack="true" PackagePath="\" />
 | 
			
		||||
  </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");
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
        ]),
 | 
			
		||||
#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>
 | 
			
		||||
 | 
			
		||||
@ -5,8 +5,6 @@ open BitBadger.Documents
 | 
			
		||||
open BitBadger.Documents.Postgres
 | 
			
		||||
open BitBadger.Documents.Tests
 | 
			
		||||
 | 
			
		||||
#nowarn "0044"
 | 
			
		||||
 | 
			
		||||
(** UNIT TESTS **)
 | 
			
		||||
 | 
			
		||||
/// 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"
 | 
			
		||||
         }
 | 
			
		||||
    ]
 | 
			
		||||
    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" {
 | 
			
		||||
        Expect.isEmpty noParams "The no-params sequence should be empty"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user