mirror of
https://github.com/pikami/cosmium.git
synced 2025-12-19 08:50:46 +00:00
Implement STARTSWITH, ENDSWITH functions
This commit is contained in:
@@ -8,30 +8,9 @@ import (
|
||||
)
|
||||
|
||||
func strings_StringEquals(arguments []interface{}, queryParameters map[string]interface{}, row RowType) bool {
|
||||
ignoreCase := false
|
||||
if len(arguments) > 2 && arguments[2] != nil {
|
||||
ignoreCaseItem := arguments[2].(parsers.SelectItem)
|
||||
if value, ok := getFieldValue(ignoreCaseItem, queryParameters, row).(bool); ok {
|
||||
ignoreCase = value
|
||||
}
|
||||
}
|
||||
|
||||
ex1Item := arguments[0].(parsers.SelectItem)
|
||||
ex2Item := arguments[1].(parsers.SelectItem)
|
||||
|
||||
ex1 := getFieldValue(ex1Item, queryParameters, row)
|
||||
ex2 := getFieldValue(ex2Item, queryParameters, row)
|
||||
|
||||
var ok bool
|
||||
var str1 string
|
||||
var str2 string
|
||||
|
||||
if str1, ok = ex1.(string); !ok {
|
||||
fmt.Println("StringEquals got parameters of wrong type")
|
||||
}
|
||||
if str2, ok = ex2.(string); !ok {
|
||||
fmt.Println("StringEquals got parameters of wrong type")
|
||||
}
|
||||
str1 := parseString(arguments[0], queryParameters, row)
|
||||
str2 := parseString(arguments[1], queryParameters, row)
|
||||
ignoreCase := getBoolFlag(arguments, queryParameters, row)
|
||||
|
||||
if ignoreCase {
|
||||
return strings.EqualFold(str1, str2)
|
||||
@@ -41,30 +20,9 @@ func strings_StringEquals(arguments []interface{}, queryParameters map[string]in
|
||||
}
|
||||
|
||||
func strings_Contains(arguments []interface{}, queryParameters map[string]interface{}, row RowType) bool {
|
||||
ignoreCase := false
|
||||
if len(arguments) > 2 && arguments[2] != nil {
|
||||
ignoreCaseItem := arguments[2].(parsers.SelectItem)
|
||||
if value, ok := getFieldValue(ignoreCaseItem, queryParameters, row).(bool); ok {
|
||||
ignoreCase = value
|
||||
}
|
||||
}
|
||||
|
||||
ex1Item := arguments[0].(parsers.SelectItem)
|
||||
ex2Item := arguments[1].(parsers.SelectItem)
|
||||
|
||||
ex1 := getFieldValue(ex1Item, queryParameters, row)
|
||||
ex2 := getFieldValue(ex2Item, queryParameters, row)
|
||||
|
||||
var ok bool
|
||||
var str1 string
|
||||
var str2 string
|
||||
|
||||
if str1, ok = ex1.(string); !ok {
|
||||
fmt.Println("StringEquals got parameters of wrong type")
|
||||
}
|
||||
if str2, ok = ex2.(string); !ok {
|
||||
fmt.Println("StringEquals got parameters of wrong type")
|
||||
}
|
||||
str1 := parseString(arguments[0], queryParameters, row)
|
||||
str2 := parseString(arguments[1], queryParameters, row)
|
||||
ignoreCase := getBoolFlag(arguments, queryParameters, row)
|
||||
|
||||
if ignoreCase {
|
||||
str1 = strings.ToLower(str1)
|
||||
@@ -74,6 +32,32 @@ func strings_Contains(arguments []interface{}, queryParameters map[string]interf
|
||||
return strings.Contains(str1, str2)
|
||||
}
|
||||
|
||||
func strings_EndsWith(arguments []interface{}, queryParameters map[string]interface{}, row RowType) bool {
|
||||
str1 := parseString(arguments[0], queryParameters, row)
|
||||
str2 := parseString(arguments[1], queryParameters, row)
|
||||
ignoreCase := getBoolFlag(arguments, queryParameters, row)
|
||||
|
||||
if ignoreCase {
|
||||
str1 = strings.ToLower(str1)
|
||||
str2 = strings.ToLower(str2)
|
||||
}
|
||||
|
||||
return strings.HasSuffix(str1, str2)
|
||||
}
|
||||
|
||||
func strings_StartsWith(arguments []interface{}, queryParameters map[string]interface{}, row RowType) bool {
|
||||
str1 := parseString(arguments[0], queryParameters, row)
|
||||
str2 := parseString(arguments[1], queryParameters, row)
|
||||
ignoreCase := getBoolFlag(arguments, queryParameters, row)
|
||||
|
||||
if ignoreCase {
|
||||
str1 = strings.ToLower(str1)
|
||||
str2 = strings.ToLower(str2)
|
||||
}
|
||||
|
||||
return strings.HasPrefix(str1, str2)
|
||||
}
|
||||
|
||||
func strings_Concat(arguments []interface{}, queryParameters map[string]interface{}, row RowType) string {
|
||||
result := ""
|
||||
|
||||
@@ -87,6 +71,29 @@ func strings_Concat(arguments []interface{}, queryParameters map[string]interfac
|
||||
return result
|
||||
}
|
||||
|
||||
func getBoolFlag(arguments []interface{}, queryParameters map[string]interface{}, row RowType) bool {
|
||||
ignoreCase := false
|
||||
if len(arguments) > 2 && arguments[2] != nil {
|
||||
ignoreCaseItem := arguments[2].(parsers.SelectItem)
|
||||
if value, ok := getFieldValue(ignoreCaseItem, queryParameters, row).(bool); ok {
|
||||
ignoreCase = value
|
||||
}
|
||||
}
|
||||
|
||||
return ignoreCase
|
||||
}
|
||||
|
||||
func parseString(argument interface{}, queryParameters map[string]interface{}, row RowType) string {
|
||||
exItem := argument.(parsers.SelectItem)
|
||||
ex := getFieldValue(exItem, queryParameters, row)
|
||||
if str1, ok := ex.(string); ok {
|
||||
fmt.Println("StringEquals got parameters of wrong type")
|
||||
return str1
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
func convertToString(value interface{}) string {
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
|
||||
Reference in New Issue
Block a user