adding pipe

This commit is contained in:
Mike Farah 2020-10-13 14:37:01 +11:00
parent afffb2c3ba
commit 449fb8952c
4 changed files with 28 additions and 7 deletions

View File

@ -357,7 +357,7 @@ func TestDataTreeNavigatorCountMultipleMatchesInside(t *testing.T) {
b: dally b: dally
c: [3,4,5]`) c: [3,4,5]`)
path, errPath := treeCreator.ParsePath("f(count(a or c))") path, errPath := treeCreator.ParsePath("f | count(a or c)")
if errPath != nil { if errPath != nil {
t.Error(errPath) t.Error(errPath)
} }
@ -384,7 +384,7 @@ func TestDataTreeNavigatorCollectMultipleMatchesInside(t *testing.T) {
b: dally b: dally
c: [3,4,5]`) c: [3,4,5]`)
path, errPath := treeCreator.ParsePath("f(collect(a or c))") path, errPath := treeCreator.ParsePath("f | collect(a or c)")
if errPath != nil { if errPath != nil {
t.Error(errPath) t.Error(errPath)
} }

View File

@ -30,15 +30,15 @@ type OperationType struct {
} }
var None = &OperationType{Type: "NONE", NumArgs: 0, Precedence: 0} var None = &OperationType{Type: "NONE", NumArgs: 0, Precedence: 0}
var Traverse = &OperationType{Type: "TRAVERSE", NumArgs: 2, Precedence: 40, Handler: TraverseOperator} var Traverse = &OperationType{Type: "TRAVERSE", NumArgs: 2, Precedence: 35, Handler: TraverseOperator}
var Or = &OperationType{Type: "OR", NumArgs: 2, Precedence: 10, Handler: UnionOperator} var Or = &OperationType{Type: "OR", NumArgs: 2, Precedence: 10, Handler: UnionOperator}
var And = &OperationType{Type: "AND", NumArgs: 2, Precedence: 20, Handler: IntersectionOperator} var And = &OperationType{Type: "AND", NumArgs: 2, Precedence: 20, Handler: IntersectionOperator}
var Equals = &OperationType{Type: "EQUALS", NumArgs: 2, Precedence: 30, Handler: EqualsOperator} var Equals = &OperationType{Type: "EQUALS", NumArgs: 2, Precedence: 30, Handler: EqualsOperator}
var Assign = &OperationType{Type: "ASSIGN", NumArgs: 2, Precedence: 35, Handler: AssignOperator} var Assign = &OperationType{Type: "ASSIGN", NumArgs: 2, Precedence: 40, Handler: AssignOperator}
var DeleteChild = &OperationType{Type: "DELETE", NumArgs: 2, Precedence: 30, Handler: DeleteChildOperator} var DeleteChild = &OperationType{Type: "DELETE", NumArgs: 2, Precedence: 30, Handler: DeleteChildOperator}
var Count = &OperationType{Type: "COUNT", NumArgs: 1, Precedence: 35, Handler: CountOperator} var Count = &OperationType{Type: "COUNT", NumArgs: 1, Precedence: 40, Handler: CountOperator}
var Collect = &OperationType{Type: "COLLECT", NumArgs: 1, Precedence: 35, Handler: CollectOperator} var Collect = &OperationType{Type: "COLLECT", NumArgs: 1, Precedence: 40, Handler: CollectOperator}
// var Exists = &OperationType{Type: "Length", NumArgs: 2, Precedence: 35} // var Exists = &OperationType{Type: "Length", NumArgs: 2, Precedence: 35}
// filters matches if they have the existing path // filters matches if they have the existing path

View File

@ -25,6 +25,26 @@ func testExpression(expression string) (string, error) {
return formatted, nil return formatted, nil
} }
func TestPostFixTraverseBar(t *testing.T) {
var infix = "animals | collect(.)"
var expectedOutput = `PathKey - 'animals'
--------
SELF
--------
Operation - COLLECT
--------
Operation - TRAVERSE
--------
`
actual, err := testExpression(infix)
if err != nil {
t.Error(err)
}
test.AssertResultComplex(t, expectedOutput, actual)
}
func TestPostFixArrayEquals(t *testing.T) { func TestPostFixArrayEquals(t *testing.T) {
var infix = "animals(.== cat)" var infix = "animals(.== cat)"
var expectedOutput = `PathKey - 'animals' var expectedOutput = `PathKey - 'animals'

View File

@ -94,8 +94,9 @@ func initLexer() (*lex.Lexer, error) {
lexer.Add([]byte("( |\t|\n|\r)+"), skip) lexer.Add([]byte("( |\t|\n|\r)+"), skip)
lexer.Add([]byte(`"[^ "]+"`), pathToken(true)) lexer.Add([]byte(`"[^ "]+"`), pathToken(true))
lexer.Add([]byte(`[^ \.\[\(\)=]+`), pathToken(false)) lexer.Add([]byte(`[^ \|\.\[\(\)=]+`), pathToken(false))
lexer.Add([]byte(`\|`), opToken(Traverse, false))
lexer.Add([]byte(`\.`), opToken(Traverse, false)) lexer.Add([]byte(`\.`), opToken(Traverse, false))
err := lexer.Compile() err := lexer.Compile()
if err != nil { if err != nil {