Skip to content

Commit

Permalink
fix from kql (csharp-opensource#11)
Browse files Browse the repository at this point in the history
  • Loading branch information
barnuri authored Dec 18, 2024
1 parent 091acb8 commit ca55b13
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 8 deletions.
45 changes: 45 additions & 0 deletions LinqToKql.Test/Provider/ProviderTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using CSharp.OpenSource.LinqToKql.Extensions;
using CSharp.OpenSource.LinqToKql.Provider;
using CSharp.OpenSource.LinqToKql.Test.Model;

namespace CSharp.OpenSource.LinqToKql.Test.Provider;

public class ProviderTests
{
[Fact]
public void CloneTest()
{
var q = new LinqToKqlProvider<SampleObject>("test", expression: null, providerExecutor: null);
var q1 = q.Where(x => x.Year == 8 && x.Description == "desc")
.AsKQL()
.Clone<Test1>();
var q2 = q1.Where(x => x.Test == "1")
.AsKQL();
var kql = q2.TranslateToKQL();
var expected = string.Join(q1.Translator.PipeWithIndentation, ["test", "where Year == 8 and Description == 'desc'", "where Test == '1'"]);
Assert.Equal(expected, kql);
}

[Fact]
public void FromKQLTest()
{
var q = new LinqToKqlProvider<SampleObject>("test", expression: null, providerExecutor: null);
var q1 = q.Where(x => x.Year == 8 && x.Description == "desc")
.FromKQL("| where 1 == 1", appendKQL: true)
.FromKQL("where 2 == 2", appendKQL: true);
var q2 = q1.FromKQL("newTable", appendKQL: false);

var expected1 = string.Join(q1.Translator.PipeWithIndentation, ["test", "where Year == 8 and Description == 'desc'", "where 1 == 1", "where 2 == 2"]);
var expected2 = "newTable";
var actual1 = q1.TranslateToKQL();
var actual2 = q2.TranslateToKQL();
Assert.Equal(expected1, actual1);
Assert.Equal(expected2, actual2);
}
}

public interface Test1
{
int Year { get; }
string Test { get; }
}
25 changes: 17 additions & 8 deletions LinqToKql/Provider/LinqToKqlProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,23 @@ public virtual IQueryable<TElement> CreateQuery<TElement>(Expression expression)
=> Clone<TElement>(expression);

public virtual LinqToKqlProvider<S> Clone<S>(Expression? expression = null, bool cloneExpressionOnNull = true)
=> new LinqToKqlProvider<S>(
TableOrKQL,
expression ?? (cloneExpressionOnNull ? Expression : null),
ProviderExecutor,
Translator.Config,
DefaultDbName,
ShouldRetry
);
{
var kql = TableOrKQL;
expression ??= cloneExpressionOnNull ? Expression : null;
if (typeof(T) != typeof(S))
{
expression = null;
kql = TranslateToKQL();
}
return new(
kql,
expression,
ProviderExecutor,
Translator.Config,
DefaultDbName,
ShouldRetry
);
}

public virtual async IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToken = default)
{
Expand Down

0 comments on commit ca55b13

Please sign in to comment.