Skip to content

Commit

Permalink
support "ToString" from numbers
Browse files Browse the repository at this point in the history
  • Loading branch information
jogibear9988 committed Apr 3, 2023
1 parent 018f4bf commit 09b7387
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 1 deletion.
12 changes: 12 additions & 0 deletions Client.Linq.Test/InfluxDBQueryVisitorTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,18 @@ where s.SensorId.ToLower().Contains("aaa")
Assert.AreEqual(expected, visitor.BuildFluxQuery());
}

[Test]
public void ToStringFunctionQuery() {
var query = from s in InfluxDBQueryable<Sensor>.Queryable("my-bucket", "my-org", _queryApi)
where s.Value.ToString() == "3"
select s;
var visitor = BuildQueryVisitor(query);

const string expected = "start_shifted = int(v: time(v: p2))\n\nfrom(bucket: p1) |> range(start: time(v: start_shifted)) |> filter(fn: (r) => (string(v: r[\"data\"]) == p3)) |> pivot(rowKey:[\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\") |> drop(columns: [\"_start\", \"_stop\", \"_measurement\"]) |> filter(fn: (r) => (string(v: r[\"data\"]) == p3))";
var qry = visitor.BuildFluxQuery();
Assert.AreEqual(expected, visitor.BuildFluxQuery());
}

[Test]
public void DefaultQuery()
{
Expand Down
3 changes: 2 additions & 1 deletion Client.Linq/Internal/Expressions/StringFunction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ internal StringFunction(string functionName, IEnumerable<IExpressionPart> expres
}

public void AppendFlux(StringBuilder builder) {
builder.Append("strings.");
if (functionName != "string")
builder.Append("strings.");
builder.Append(functionName);
builder.Append("(v: ");
foreach (var expressionPart in expressionParts) {
Expand Down
7 changes: 7 additions & 0 deletions Client.Linq/Internal/QueryExpressionTreeVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,13 @@ protected override Expression VisitMethodCall(MethodCallExpression expression)
}
}

if (expression.Method.Name.Equals("ToString")) {
var partsCount = this._expressionParts.Count;
this.Visit(expression.Object);
var part = this.GetAndRemoveExpressionParts(partsCount, this._expressionParts.Count);
this._expressionParts.Add(new StringFunction("string", part, null));
return expression;
}

return base.VisitMethodCall(expression);
}
Expand Down

0 comments on commit 09b7387

Please sign in to comment.