Skip to content

Commit 5bfe966

Browse files
authored
feat: Add pdb.all (#57)
1 parent 393fd7c commit 5bfe966

5 files changed

Lines changed: 54 additions & 24 deletions

File tree

src/AllQuery.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.Diagnostics.CodeAnalysis;
2+
3+
namespace ParadeDB.EntityFrameworkCore;
4+
5+
[ExcludeFromCodeCoverage]
6+
public abstract class AllQuery : PdbQuery
7+
{
8+
private protected AllQuery() { }
9+
}

src/Extensions/ParadeDbFunctionsExtensions.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,8 @@ int maxNumChars
8080
) => throw new InvalidOperationException(CoreStrings.FunctionOnClient(nameof(Snippet)));
8181

8282
[DbFunction]
83-
public static bool Proximity<TProperty>(
84-
this DbFunctions _,
85-
TProperty property,
86-
PdbQuery query
87-
) => throw new InvalidOperationException(CoreStrings.FunctionOnClient(nameof(Proximity)));
83+
public static bool Query<TProperty>(this DbFunctions _, TProperty property, PdbQuery query) =>
84+
throw new InvalidOperationException(CoreStrings.FunctionOnClient(nameof(Query)));
8885

8986
[DbFunction]
9087
public static string Tokenize<TProperty>(

src/Internal/Query/Translator.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,18 @@ IRelationalTypeMappingSource typeMappingSource
6363
argumentsPropagateNullability: [false],
6464
returnType: typeof(float)
6565
),
66-
nameof(ParadeDbFunctionsExtensions.Snippet) => BuildSnippet(arguments),
67-
nameof(ParadeDbFunctionsExtensions.Proximity)
68-
when method.DeclaringType == typeof(ParadeDbFunctionsExtensions) => BuildProximity(
69-
arguments
66+
nameof(Pdb.All) => _sqlExpressionFactory.Function(
67+
name: "all",
68+
schema: "pdb",
69+
nullable: false,
70+
arguments: [],
71+
argumentsPropagateNullability: [],
72+
returnType: typeof(bool)
7073
),
74+
nameof(ParadeDbFunctionsExtensions.Snippet) => BuildSnippet(arguments),
75+
nameof(ParadeDbFunctionsExtensions.Query)
76+
when method.DeclaringType == typeof(ParadeDbFunctionsExtensions) =>
77+
BuildQueryBuilder(arguments),
7178
nameof(Pdb.Proximity) => _sqlExpressionFactory.ApplyDefaultTypeMapping(arguments[0]),
7279
nameof(Pdb.ProximityRegex) => BuildProximityFunction("prox_regex", arguments),
7380
nameof(Pdb.ProximityArray) => BuildProximityFunction("prox_array", arguments),
@@ -163,7 +170,7 @@ PdbOperatorType operatorType
163170
);
164171
}
165172

166-
private SqlExpression? BuildProximity(IReadOnlyList<SqlExpression> arguments)
173+
private SqlExpression? BuildQueryBuilder(IReadOnlyList<SqlExpression> arguments)
167174
{
168175
var column = _sqlExpressionFactory.ApplyDefaultTypeMapping(arguments[1]);
169176
var query = _sqlExpressionFactory.ApplyDefaultTypeMapping(arguments[2]);

src/Pdb.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace ParadeDB.EntityFrameworkCore;
77

88
[ExcludeFromCodeCoverage]
9-
public static partial class Pdb
9+
public static class Pdb
1010
{
1111
public static Boost Boost(float factor) => new(factor);
1212

@@ -68,4 +68,7 @@ public static PdbProximityQuery ProximityArray(params string[] tokens) =>
6868

6969
public static PdbProximityQuery ProximityArray(params PdbProximityQuery[] operands) =>
7070
throw new InvalidOperationException(CoreStrings.FunctionOnClient(nameof(ProximityArray)));
71+
72+
public static AllQuery All() =>
73+
throw new InvalidOperationException(CoreStrings.FunctionOnClient(nameof(AllQuery)));
7174
}

tests/QueryTests.cs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ public async Task Proximity()
586586
await using var context = DbFixture.CreateContext();
587587

588588
var query = context.MockItems.Where(p =>
589-
EF.Functions.Proximity(p.Description, Pdb.Proximity("sleek").Within(1, "shoes"))
589+
EF.Functions.Query(p.Description, Pdb.Proximity("sleek").Within(1, "shoes"))
590590
);
591591

592592
var sql = """
@@ -605,7 +605,7 @@ public async Task Proximity_Ordered()
605605
await using var context = DbFixture.CreateContext();
606606

607607
var query = context.MockItems.Where(p =>
608-
EF.Functions.Proximity(
608+
EF.Functions.Query(
609609
p.Description,
610610
Pdb.Proximity("sleek").Within(1, "shoes", ordered: true)
611611
)
@@ -631,7 +631,7 @@ public async Task Proximity_WithVariableArguments()
631631
int distance = 1;
632632

633633
var query = context.MockItems.Where(p =>
634-
EF.Functions.Proximity(p.Description, Pdb.Proximity(left).Within(distance, right))
634+
EF.Functions.Query(p.Description, Pdb.Proximity(left).Within(distance, right))
635635
);
636636

637637
var sql = """
@@ -653,7 +653,7 @@ public async Task Proximity_WithRegex()
653653
await using var context = DbFixture.CreateContext();
654654

655655
var query = context.MockItems.Where(p =>
656-
EF.Functions.Proximity(p.Description, Pdb.ProximityRegex("sl.*").Within(1, "shoes"))
656+
EF.Functions.Query(p.Description, Pdb.ProximityRegex("sl.*").Within(1, "shoes"))
657657
);
658658

659659
var sql = """
@@ -674,7 +674,7 @@ public async Task Proximity_WithRegexVariablePattern()
674674
string pattern = "sl.*";
675675

676676
var query = context.MockItems.Where(p =>
677-
EF.Functions.Proximity(p.Description, Pdb.ProximityRegex(pattern).Within(1, "shoes"))
677+
EF.Functions.Query(p.Description, Pdb.ProximityRegex(pattern).Within(1, "shoes"))
678678
);
679679

680680
var sql = """
@@ -694,10 +694,7 @@ public async Task Proximity_WithRegexAndMaxExpansions()
694694
await using var context = DbFixture.CreateContext();
695695

696696
var query = context.MockItems.Where(p =>
697-
EF.Functions.Proximity(
698-
p.Description,
699-
Pdb.ProximityRegex("sl.*", 100).Within(1, "shoes")
700-
)
697+
EF.Functions.Query(p.Description, Pdb.ProximityRegex("sl.*", 100).Within(1, "shoes"))
701698
);
702699

703700
var sql = """
@@ -716,7 +713,7 @@ public async Task Proximity_WithArrayOfTokens()
716713
await using var context = DbFixture.CreateContext();
717714

718715
var query = context.MockItems.Where(p =>
719-
EF.Functions.Proximity(
716+
EF.Functions.Query(
720717
p.Description,
721718
Pdb.ProximityArray("sleek", "white").Within(1, "shoes")
722719
)
@@ -741,7 +738,7 @@ public async Task Proximity_WithArrayOfVariableTokens()
741738
string t2 = "white";
742739

743740
var query = context.MockItems.Where(p =>
744-
EF.Functions.Proximity(p.Description, Pdb.ProximityArray(t1, t2).Within(1, "shoes"))
741+
EF.Functions.Query(p.Description, Pdb.ProximityArray(t1, t2).Within(1, "shoes"))
745742
);
746743

747744
var sql = """
@@ -762,7 +759,7 @@ public async Task Proximity_WithArrayOfMixedOperands()
762759
await using var context = DbFixture.CreateContext();
763760

764761
var query = context.MockItems.Where(p =>
765-
EF.Functions.Proximity(
762+
EF.Functions.Query(
766763
p.Description,
767764
Pdb.ProximityArray(Pdb.ProximityRegex("sl.*"), Pdb.ProximityArray("white"))
768765
.Within(1, "shoes")
@@ -785,7 +782,7 @@ public async Task Proximity_Chained()
785782
await using var context = DbFixture.CreateContext();
786783

787784
var query = context.MockItems.Where(p =>
788-
EF.Functions.Proximity(
785+
EF.Functions.Query(
789786
p.Description,
790787
Pdb.Proximity("sleek").Within(1, "running").Within(2, "shoes")
791788
)
@@ -825,6 +822,23 @@ FROM mock_items AS m
825822
await query.ToListAsync();
826823
}
827824

825+
[Test]
826+
public async Task All()
827+
{
828+
await using var context = DbFixture.CreateContext();
829+
830+
var query = context.MockItems.Where(p => EF.Functions.Query(p.Id, Pdb.All()));
831+
832+
var sql = """
833+
SELECT m.id, m.category, m.created_at, m.description, m.in_stock, m.last_updated_date, m.latest_available_time, m.metadata, m.rating, m.weight_range
834+
FROM mock_items AS m
835+
WHERE m.id @@@ pdb."all"()
836+
""";
837+
838+
AssertSql(query, sql);
839+
await query.ToListAsync();
840+
}
841+
828842
[Test]
829843
public async Task Snippet()
830844
{

0 commit comments

Comments
 (0)