Skip to content

Commit

Permalink
WIP Remove function
Browse files Browse the repository at this point in the history
  • Loading branch information
anderson-joyle committed Dec 13, 2024
1 parent 1f01440 commit 5e675d8
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 6 deletions.
1 change: 1 addition & 0 deletions src/libraries/Microsoft.PowerFx.Core/Texl/Remove.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ internal class RemoveFunction : BuiltinFunction, ISuggestionAwareFunction

public override bool MutatesArg(int argIndex, TexlNode arg) => argIndex == 0;

// !!!TODO this might be a problem.
public override bool RequireAllParamColumns => true;

public override bool ArgMatchesDatasourceType(int argNum)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,43 @@

// Check MutationFunctionsTestSetup handler (PowerFxEvaluationTests.cs) for documentation.

>> Collect(t1, r2);Remove(t1, r1);t1
Table({Field1:2,Field2:"moon",Field3:DateTime(2022,2,1,0,0,0,0),Field4:false})
// Wrong arguments
>> Remove(t1, r1,"Al");
Errors: Error 14-18: If provided, last argument must be 'RemoveFlags.All'. Is there a typo?|Error 0-6: The function 'Remove' has some invalid arguments.

>> Remove(t1, r1,"");
Errors: Error 14-16: If provided, last argument must be 'RemoveFlags.All'. Is there a typo?|Error 0-6: The function 'Remove' has some invalid arguments.

>> Remove(t1, r1, r1, r1, r1, r1, r1, "Al");
Errors: Error 0-6: The function 'Remove' has some invalid arguments.|Error 35-39: If provided, last argument must be 'RemoveFlags.All'. Is there a typo?

>> Remove(t1, "All");
Errors: Error 0-6: The function 'Remove' has some invalid arguments.|Error 11-16: Cannot use a non-record value in this context: '"All"'.

>> Collect(t1, r2);
Collect(t1, {Field1:3,Field2:"earth",Field3:DateTime(2030,2,1,0,0,0,0),Field4:true});
Collect(t1, {Field1:4,Field2:"earth",Field3:DateTime(2040,2,1,0,0,0,0),Field4:false});
Remove(t1,LookUp(t1,DisplayNameField2="earth"));
t1
Table({Field1:2,Field2:"moon",Field3:DateTime(2022,2,1,0,0,0,0),Field4:false},{Field1:3,Field2:"earth",Field3:DateTime(2030,2,1,0,0,0,0),Field4:true},{Field1:4,Field2:"earth",Field3:DateTime(2040,2,1,0,0,0,0),Field4:false})

>> Collect(t1, r2);
Collect(t1, {Field1:3,Field2:"earth",Field3:DateTime(2030,2,1,0,0,0,0),Field4:true});
Collect(t1, {Field1:4,Field2:"earth",Field3:DateTime(2040,2,1,0,0,0,0),Field4:false});
Remove(t1,Last(Filter(t1, DisplayNameField2 = "earth")));
t1
Table({Field1:1,Field2:"earth",Field3:DateTime(2022,1,1,0,0,0,0),Field4:true},{Field1:2,Field2:"moon",Field3:DateTime(2022,2,1,0,0,0,0),Field4:false},{Field1:3,Field2:"earth",Field3:DateTime(2030,2,1,0,0,0,0),Field4:true})

>> Collect(t1, r2);
Collect(t1, {Field1:3,Field2:"earth",Field3:DateTime(2030,2,1,0,0,0,0),Field4:true});
Collect(t1, {Field1:4,Field2:"earth",Field3:DateTime(2040,2,1,0,0,0,0),Field4:false});
Remove(t1,First(Filter(t1, DisplayNameField2 = "earth")));
t1
Table({Field1:2,Field2:"moon",Field3:DateTime(2022,2,1,0,0,0,0),Field4:false},{Field1:3,Field2:"earth",Field3:DateTime(2030,2,1,0,0,0,0),Field4:true},{Field1:4,Field2:"earth",Field3:DateTime(2040,2,1,0,0,0,0),Field4:false})

>> Remove(Foo, {Field1:5}, RemoveFlags.All)
Errors: Error 7-10: Name isn't valid. 'Foo' isn't recognized.

>> Remove(Foo, Bar)
Errors: Error 7-10: Name isn't valid. 'Foo' isn't recognized.|Error 12-15: Name isn't valid. 'Bar' isn't recognized.|Error 0-6: The function 'Remove' has some invalid arguments.

Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ Error(Table({Kind:ErrorKind.NotFound},{Kind:ErrorKind.NotFound}))
>> 3;t1
Table({a:true,b:"hello",c:DateTime(2024,1,1,0,0,0,0)},{a:true,b:"hello",c:DateTime(2024,1,1,0,0,0,0)},{a:true,b:"hello",c:DateTime(2024,1,1,0,0,0,0)},{a:true,b:"hi",c:DateTime(2024,1,1,0,0,0,0)},{a:false,b:"hello",c:DateTime(2024,1,1,0,0,0,0)},{a:false,b:"hi",c:DateTime(2024,1,1,0,0,0,0)})

>> Remove(t1, If(1/0<2, {a:true,b:"hello"}))
Errors: Errors: Error 0-6: The function 'Remove' has some invalid arguments.|Error 11-40: Missing column. Your formula is missing a column 'c' with a type of 'DateTime'.

>> 4;t1
Table({a:true,b:"hello",c:DateTime(2024,1,1,0,0,0,0)},{a:true,b:"hello",c:DateTime(2024,1,1,0,0,0,0)},{a:true,b:"hello",c:DateTime(2024,1,1,0,0,0,0)},{a:true,b:"hi",c:DateTime(2024,1,1,0,0,0,0)},{a:false,b:"hello",c:DateTime(2024,1,1,0,0,0,0)},{a:false,b:"hi",c:DateTime(2024,1,1,0,0,0,0)})

// Remove propagates error.
>> Remove(t1, If(1/0<2, {a:true,b:"hello",c:DateTime(2024,1,1,0,0,0,0)}))
Error({Kind:ErrorKind.Div0})

>> Set(t3, Table({a:{aa:{aaa:true,bbb:true}}}))
Table({a:{aa:{aaa:true,bbb:true}}})

Expand All @@ -51,9 +61,11 @@ Errors: Error 0-6: The function 'Remove' has some invalid arguments.|Error 11-30
>> Remove(t3, {a:{aa:{aaa:true,bbb:false}}})
Error({Kind:ErrorKind.NotFound})

>> Remove(t3, {a:{aa:{aaa:true,bbb:false}}}, RemoveFlags.All)
Error({Kind:ErrorKind.NotFound})

>> Remove(t3, {a:{aa:{aaa:true,bbb:true}}})
If(true, {test:1}, "Void value (result of the expression can't be used).")

>> t3
Table()

Table()
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System.Collections.Generic;
using System.Data;
using System.Linq;
using Microsoft.PowerFx.Interpreter.Tests;
using Microsoft.PowerFx.Types;
using Xunit;
Expand Down Expand Up @@ -164,8 +165,9 @@ public void DataTableEvalTest2()
var result7 = engine.Eval("Patch(robintable, First(robintable),{Names:\"new-name\"});robintable", options: opt);
Assert.Equal("Table({Names:\"new-name\",Scores:10},{Names:\"name3\",Scores:30},{Names:\"name100\",Scores:10})", ((DataTableValue)result7).Dump());

var result8 = engine.Eval("Remove(robintable, {Scores:10}, RemoveFlags.All);robintable", options: opt);
Assert.IsType<ErrorValue>(result8);
var check = engine.Check("Remove(robintable, {Scores:10}, RemoveFlags.All)", options: opt);
Assert.False(check.IsSuccess);
Assert.Contains("ErrColumnMissing_ColName_ExpectedType", check.Errors.Select(err => err.MessageKey));

Assert.Equal(3, table.Rows.Count);
}
Expand Down

0 comments on commit 5e675d8

Please sign in to comment.