mirror of
https://github.com/pikami/cosmium.git
synced 2025-12-18 16:30:44 +00:00
Implement ToString function
This commit is contained in:
@@ -188,6 +188,8 @@ func getFieldValue(field parsers.SelectItem, queryParameters map[string]interfac
|
||||
return strings_Concat(typedValue.Arguments, queryParameters, row)
|
||||
case parsers.FunctionCallIndexOf:
|
||||
return strings_IndexOf(typedValue.Arguments, queryParameters, row)
|
||||
case parsers.FunctionCallToString:
|
||||
return strings_ToString(typedValue.Arguments, queryParameters, row)
|
||||
case parsers.FunctionCallIsDefined:
|
||||
return typeChecking_IsDefined(typedValue.Arguments, queryParameters, row)
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@ import (
|
||||
|
||||
func Test_Execute_StringFunctions(t *testing.T) {
|
||||
mockData := []memoryexecutor.RowType{
|
||||
map[string]interface{}{"id": "123", "pk": "aaa", "str": "hello"},
|
||||
map[string]interface{}{"id": "456", "pk": "bbb", "str": "world"},
|
||||
map[string]interface{}{"id": "123", "pk": "aaa", "str": "hello", "rng_type": true},
|
||||
map[string]interface{}{"id": "456", "pk": "bbb", "str": "world", "rng_type": 159},
|
||||
map[string]interface{}{"id": "789", "pk": "AAA", "str": "cool world"},
|
||||
}
|
||||
|
||||
@@ -343,4 +343,38 @@ func Test_Execute_StringFunctions(t *testing.T) {
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
t.Run("Should execute function ToString()", func(t *testing.T) {
|
||||
testQueryExecute(
|
||||
t,
|
||||
parsers.SelectStmt{
|
||||
SelectItems: []parsers.SelectItem{
|
||||
{
|
||||
Path: []string{"c", "id"},
|
||||
Type: parsers.SelectItemTypeField,
|
||||
},
|
||||
{
|
||||
Alias: "str",
|
||||
Type: parsers.SelectItemTypeFunctionCall,
|
||||
Value: parsers.FunctionCall{
|
||||
Type: parsers.FunctionCallToString,
|
||||
Arguments: []interface{}{
|
||||
parsers.SelectItem{
|
||||
Path: []string{"c", "rng_type"},
|
||||
Type: parsers.SelectItemTypeField,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Table: parsers.Table{Value: "c"},
|
||||
},
|
||||
mockData,
|
||||
[]memoryexecutor.RowType{
|
||||
map[string]interface{}{"id": "123", "str": "true"},
|
||||
map[string]interface{}{"id": "456", "str": "159"},
|
||||
map[string]interface{}{"id": "789", "str": ""},
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -96,6 +96,11 @@ func strings_IndexOf(arguments []interface{}, queryParameters map[string]interfa
|
||||
}
|
||||
}
|
||||
|
||||
func strings_ToString(arguments []interface{}, queryParameters map[string]interface{}, row RowType) string {
|
||||
value := getFieldValue(arguments[0].(parsers.SelectItem), queryParameters, row)
|
||||
return convertToString(value)
|
||||
}
|
||||
|
||||
func getBoolFlag(arguments []interface{}, queryParameters map[string]interface{}, row RowType) bool {
|
||||
ignoreCase := false
|
||||
if len(arguments) > 2 && arguments[2] != nil {
|
||||
@@ -127,6 +132,8 @@ func convertToString(value interface{}) string {
|
||||
return fmt.Sprintf("%d", v)
|
||||
case float32, float64:
|
||||
return fmt.Sprintf("%f", v)
|
||||
case bool:
|
||||
return fmt.Sprintf("%t", v)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user