mirror of
https://github.com/pikami/cosmium.git
synced 2025-06-07 16:10:23 +01:00
92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package memoryexecutor_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/pikami/cosmium/parsers"
|
|
memoryexecutor "github.com/pikami/cosmium/query_executors/memory_executor"
|
|
testutils "github.com/pikami/cosmium/test_utils"
|
|
)
|
|
|
|
func Test_Execute_Arithmetics(t *testing.T) {
|
|
mockData := []memoryexecutor.RowType{
|
|
map[string]interface{}{"id": 1, "a": 420},
|
|
map[string]interface{}{"id": 2, "a": 6.9},
|
|
map[string]interface{}{"id": 3},
|
|
}
|
|
|
|
t.Run("Should execute simple arithmetics", func(t *testing.T) {
|
|
testQueryExecute(
|
|
t,
|
|
parsers.SelectStmt{
|
|
SelectItems: []parsers.SelectItem{
|
|
{
|
|
Path: []string{"c", "id"},
|
|
Type: parsers.SelectItemTypeField,
|
|
},
|
|
{
|
|
Type: parsers.SelectItemTypeBinaryExpression,
|
|
Alias: "result",
|
|
Value: parsers.BinaryExpression{
|
|
Operation: "+",
|
|
Left: testutils.SelectItem_Path("c", "a"),
|
|
Right: parsers.SelectItem{
|
|
Type: parsers.SelectItemTypeBinaryExpression,
|
|
Value: parsers.BinaryExpression{
|
|
Operation: "*",
|
|
Left: testutils.SelectItem_Constant_Float(2.0),
|
|
Right: testutils.SelectItem_Constant_Int(3),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
Table: parsers.Table{SelectItem: testutils.SelectItem_Path("c")},
|
|
},
|
|
mockData,
|
|
[]memoryexecutor.RowType{
|
|
map[string]interface{}{"id": 1, "result": 426.0},
|
|
map[string]interface{}{"id": 2, "result": 12.9},
|
|
map[string]interface{}{"id": 3, "result": nil},
|
|
},
|
|
)
|
|
})
|
|
|
|
t.Run("Should execute arithmetics in WHERE clause", func(t *testing.T) {
|
|
testQueryExecute(
|
|
t,
|
|
parsers.SelectStmt{
|
|
SelectItems: []parsers.SelectItem{
|
|
testutils.SelectItem_Path("c", "id"),
|
|
{
|
|
Alias: "result",
|
|
Type: parsers.SelectItemTypeBinaryExpression,
|
|
Value: parsers.BinaryExpression{
|
|
Operation: "*",
|
|
Left: testutils.SelectItem_Path("c", "a"),
|
|
Right: testutils.SelectItem_Constant_Int(2),
|
|
},
|
|
},
|
|
},
|
|
Table: parsers.Table{SelectItem: testutils.SelectItem_Path("c")},
|
|
Filters: parsers.ComparisonExpression{
|
|
Operation: ">",
|
|
Left: parsers.SelectItem{
|
|
Type: parsers.SelectItemTypeBinaryExpression,
|
|
Value: parsers.BinaryExpression{
|
|
Operation: "*",
|
|
Left: testutils.SelectItem_Path("c", "a"),
|
|
Right: testutils.SelectItem_Constant_Int(2),
|
|
},
|
|
},
|
|
Right: testutils.SelectItem_Constant_Int(500),
|
|
},
|
|
},
|
|
mockData,
|
|
[]memoryexecutor.RowType{
|
|
map[string]interface{}{"id": 1, "result": 840.0},
|
|
},
|
|
)
|
|
})
|
|
}
|