Skip to content

Commit ce4ea65

Browse files
committed
fix: implement YIELD support in function calls
1 parent 719a578 commit ce4ea65

2 files changed

Lines changed: 88 additions & 3 deletions

File tree

NFalkorDB.Tests/FalkorDBAPITest.cs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,4 +1264,89 @@ public void TestSlowlogAndReset()
12641264
var afterReset = _api.Slowlog();
12651265
Assert.NotNull(afterReset);
12661266
}
1267+
1268+
[Theory]
1269+
[InlineData(new string[0], "CALL dbms.functions()")]
1270+
[InlineData(new[] { "name" }, "CALL dbms.functions() YIELD name")]
1271+
[InlineData(new[] { "name", "internal" }, "CALL dbms.functions() YIELD name,internal")]
1272+
public void BuildQueryBodyForProcedureCall(string[] fields, string expected)
1273+
{
1274+
var kwargs = new Dictionary<string, List<string>>
1275+
{
1276+
{ "y", fields.ToList() }
1277+
};
1278+
var args = Enumerable.Empty<string>();
1279+
1280+
var body = Graph.BuildQueryBodyForProcedureCall("dbms.functions", ref args, kwargs);
1281+
1282+
Assert.Equal(expected, body);
1283+
}
1284+
1285+
[Fact]
1286+
public void TestCallProcedureWithYield()
1287+
{
1288+
_api.Query("CREATE (:Person {name:'roi'})");
1289+
1290+
var kwargs = new Dictionary<string, List<string>>
1291+
{
1292+
{ "y", new List<string> { "name", "internal" } }
1293+
};
1294+
1295+
var result = _api.CallProcedure("dbms.functions", null, kwargs);
1296+
1297+
Assert.Equal(2, result.First().Values.Count);
1298+
Assert.IsType<string>(result.First().Values[0]);
1299+
Assert.IsType<bool>(result.First().Values[1]);
1300+
}
1301+
1302+
[Fact]
1303+
public void TestCallProcedureReadOnlyWithYield()
1304+
{
1305+
_api.Query("CREATE (:Person {name:'roi'})");
1306+
1307+
var kwargs = new Dictionary<string, List<string>>
1308+
{
1309+
{ "y", new List<string> { "name", "internal" } }
1310+
};
1311+
1312+
var result = _api.CallProcedureReadOnly("dbms.functions", null, kwargs);
1313+
1314+
Assert.Equal(2, result.First().Values.Count);
1315+
Assert.IsType<string>(result.First().Values[0]);
1316+
Assert.IsType<bool>(result.First().Values[1]);
1317+
}
1318+
1319+
[Fact]
1320+
public async Task TestCallProcedureAsyncWithYield()
1321+
{
1322+
_api.Query("CREATE (:Person {name:'roi'})");
1323+
1324+
var kwargs = new Dictionary<string, List<string>>
1325+
{
1326+
{ "y", new List<string> { "name", "internal" } }
1327+
};
1328+
1329+
var result = await _api.CallProcedureAsync("dbms.functions", null, kwargs);
1330+
1331+
Assert.Equal(2, result.First().Values.Count);
1332+
Assert.IsType<string>(result.First().Values[0]);
1333+
Assert.IsType<bool>(result.First().Values[1]);
1334+
}
1335+
1336+
[Fact]
1337+
public async Task TestCallProcedureReadOnlyAsyncWithYield()
1338+
{
1339+
_api.Query("CREATE (:Person {name:'roi'})");
1340+
1341+
var kwargs = new Dictionary<string, List<string>>
1342+
{
1343+
{ "y", new List<string> { "name", "internal" } }
1344+
};
1345+
1346+
var result = await _api.CallProcedureReadOnlyAsync("dbms.functions", null, kwargs);
1347+
1348+
Assert.Equal(2, result.First().Values.Count);
1349+
Assert.IsType<string>(result.First().Values[0]);
1350+
Assert.IsType<bool>(result.First().Values[1]);
1351+
}
12671352
}

NFalkorDB/Graph.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,17 +283,17 @@ public Task<ResultSet> CallProcedureReadOnlyAsync(string procedure, IEnumerable<
283283
return ReadOnlyQueryAsync(queryBody, flags: flags);
284284
}
285285

286-
private static string BuildQueryBodyForProcedureCall(string procedure, ref IEnumerable<string> args, Dictionary<string, List<string>> kwargs)
286+
internal static string BuildQueryBodyForProcedureCall(string procedure, ref IEnumerable<string> args, Dictionary<string, List<string>> kwargs)
287287
{
288288
args = args?.Select(QuoteString);
289289

290290
var queryBody = new StringBuilder();
291291

292292
queryBody.Append(args != null ? $"CALL {procedure}({string.Join(",", args)})" : $"CALL {procedure}()");
293293

294-
if (kwargs != null && kwargs.TryGetValue("y", out var kwargsList))
294+
if (kwargs != null && kwargs.TryGetValue("y", out var kwargsList) && kwargsList.Count > 0)
295295
{
296-
queryBody.Append(string.Join(",", kwargsList));
296+
queryBody.Append($" YIELD {string.Join(",", kwargsList)}");
297297
}
298298

299299
return queryBody.ToString();

0 commit comments

Comments
 (0)