mirror of
https://github.com/pikami/cosmium.git
synced 2025-03-31 15:10:40 +01:00
Better handling when passing null to string functions
This commit is contained in:
parent
3987df89c0
commit
d27c633e1d
@ -9,10 +9,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (r rowContext) strings_StringEquals(arguments []interface{}) bool {
|
func (r rowContext) strings_StringEquals(arguments []interface{}) bool {
|
||||||
str1 := r.parseString(arguments[0])
|
str1, str1ok := r.parseString(arguments[0])
|
||||||
str2 := r.parseString(arguments[1])
|
str2, str2ok := r.parseString(arguments[1])
|
||||||
ignoreCase := r.getBoolFlag(arguments)
|
ignoreCase := r.getBoolFlag(arguments)
|
||||||
|
|
||||||
|
if !str1ok || !str2ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
if ignoreCase {
|
if ignoreCase {
|
||||||
return strings.EqualFold(str1, str2)
|
return strings.EqualFold(str1, str2)
|
||||||
}
|
}
|
||||||
@ -21,10 +25,14 @@ func (r rowContext) strings_StringEquals(arguments []interface{}) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_Contains(arguments []interface{}) bool {
|
func (r rowContext) strings_Contains(arguments []interface{}) bool {
|
||||||
str1 := r.parseString(arguments[0])
|
str1, str1ok := r.parseString(arguments[0])
|
||||||
str2 := r.parseString(arguments[1])
|
str2, str2ok := r.parseString(arguments[1])
|
||||||
ignoreCase := r.getBoolFlag(arguments)
|
ignoreCase := r.getBoolFlag(arguments)
|
||||||
|
|
||||||
|
if !str1ok || !str2ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
if ignoreCase {
|
if ignoreCase {
|
||||||
str1 = strings.ToLower(str1)
|
str1 = strings.ToLower(str1)
|
||||||
str2 = strings.ToLower(str2)
|
str2 = strings.ToLower(str2)
|
||||||
@ -34,10 +42,14 @@ func (r rowContext) strings_Contains(arguments []interface{}) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_EndsWith(arguments []interface{}) bool {
|
func (r rowContext) strings_EndsWith(arguments []interface{}) bool {
|
||||||
str1 := r.parseString(arguments[0])
|
str1, str1ok := r.parseString(arguments[0])
|
||||||
str2 := r.parseString(arguments[1])
|
str2, str2ok := r.parseString(arguments[1])
|
||||||
ignoreCase := r.getBoolFlag(arguments)
|
ignoreCase := r.getBoolFlag(arguments)
|
||||||
|
|
||||||
|
if !str1ok || !str2ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
if ignoreCase {
|
if ignoreCase {
|
||||||
str1 = strings.ToLower(str1)
|
str1 = strings.ToLower(str1)
|
||||||
str2 = strings.ToLower(str2)
|
str2 = strings.ToLower(str2)
|
||||||
@ -47,10 +59,14 @@ func (r rowContext) strings_EndsWith(arguments []interface{}) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_StartsWith(arguments []interface{}) bool {
|
func (r rowContext) strings_StartsWith(arguments []interface{}) bool {
|
||||||
str1 := r.parseString(arguments[0])
|
str1, str1ok := r.parseString(arguments[0])
|
||||||
str2 := r.parseString(arguments[1])
|
str2, str2ok := r.parseString(arguments[1])
|
||||||
ignoreCase := r.getBoolFlag(arguments)
|
ignoreCase := r.getBoolFlag(arguments)
|
||||||
|
|
||||||
|
if !str1ok || !str2ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
if ignoreCase {
|
if ignoreCase {
|
||||||
str1 = strings.ToLower(str1)
|
str1 = strings.ToLower(str1)
|
||||||
str2 = strings.ToLower(str2)
|
str2 = strings.ToLower(str2)
|
||||||
@ -73,8 +89,12 @@ func (r rowContext) strings_Concat(arguments []interface{}) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_IndexOf(arguments []interface{}) int {
|
func (r rowContext) strings_IndexOf(arguments []interface{}) int {
|
||||||
str1 := r.parseString(arguments[0])
|
str1, str1ok := r.parseString(arguments[0])
|
||||||
str2 := r.parseString(arguments[1])
|
str2, str2ok := r.parseString(arguments[1])
|
||||||
|
|
||||||
|
if !str1ok || !str2ok {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
start := 0
|
start := 0
|
||||||
if len(arguments) > 2 && arguments[2] != nil {
|
if len(arguments) > 2 && arguments[2] != nil {
|
||||||
@ -115,9 +135,13 @@ func (r rowContext) strings_Lower(arguments []interface{}) string {
|
|||||||
func (r rowContext) strings_Left(arguments []interface{}) string {
|
func (r rowContext) strings_Left(arguments []interface{}) string {
|
||||||
var ok bool
|
var ok bool
|
||||||
var length int
|
var length int
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
lengthEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
|
lengthEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
|
||||||
|
|
||||||
|
if !strOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
if length, ok = lengthEx.(int); !ok {
|
if length, ok = lengthEx.(int); !ok {
|
||||||
logger.ErrorLn("strings_Left - got parameters of wrong type")
|
logger.ErrorLn("strings_Left - got parameters of wrong type")
|
||||||
return ""
|
return ""
|
||||||
@ -135,28 +159,45 @@ func (r rowContext) strings_Left(arguments []interface{}) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_Length(arguments []interface{}) int {
|
func (r rowContext) strings_Length(arguments []interface{}) int {
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
|
if !strOk {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
return len(str)
|
return len(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_LTrim(arguments []interface{}) string {
|
func (r rowContext) strings_LTrim(arguments []interface{}) string {
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
|
if !strOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
return strings.TrimLeft(str, " ")
|
return strings.TrimLeft(str, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_Replace(arguments []interface{}) string {
|
func (r rowContext) strings_Replace(arguments []interface{}) string {
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
oldStr := r.parseString(arguments[1])
|
oldStr, oldStrOk := r.parseString(arguments[1])
|
||||||
newStr := r.parseString(arguments[2])
|
newStr, newStrOk := r.parseString(arguments[2])
|
||||||
|
|
||||||
|
if !strOk || !oldStrOk || !newStrOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
return strings.Replace(str, oldStr, newStr, -1)
|
return strings.Replace(str, oldStr, newStr, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_Replicate(arguments []interface{}) string {
|
func (r rowContext) strings_Replicate(arguments []interface{}) string {
|
||||||
var ok bool
|
var ok bool
|
||||||
var times int
|
var times int
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
timesEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
|
timesEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
|
||||||
|
|
||||||
|
if !strOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
if times, ok = timesEx.(int); !ok {
|
if times, ok = timesEx.(int); !ok {
|
||||||
logger.ErrorLn("strings_Replicate - got parameters of wrong type")
|
logger.ErrorLn("strings_Replicate - got parameters of wrong type")
|
||||||
return ""
|
return ""
|
||||||
@ -174,9 +215,13 @@ func (r rowContext) strings_Replicate(arguments []interface{}) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_Reverse(arguments []interface{}) string {
|
func (r rowContext) strings_Reverse(arguments []interface{}) string {
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
runes := []rune(str)
|
runes := []rune(str)
|
||||||
|
|
||||||
|
if !strOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
|
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
|
||||||
runes[i], runes[j] = runes[j], runes[i]
|
runes[i], runes[j] = runes[j], runes[i]
|
||||||
}
|
}
|
||||||
@ -187,9 +232,13 @@ func (r rowContext) strings_Reverse(arguments []interface{}) string {
|
|||||||
func (r rowContext) strings_Right(arguments []interface{}) string {
|
func (r rowContext) strings_Right(arguments []interface{}) string {
|
||||||
var ok bool
|
var ok bool
|
||||||
var length int
|
var length int
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
lengthEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
|
lengthEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
|
||||||
|
|
||||||
|
if !strOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
if length, ok = lengthEx.(int); !ok {
|
if length, ok = lengthEx.(int); !ok {
|
||||||
logger.ErrorLn("strings_Right - got parameters of wrong type")
|
logger.ErrorLn("strings_Right - got parameters of wrong type")
|
||||||
return ""
|
return ""
|
||||||
@ -207,7 +256,11 @@ func (r rowContext) strings_Right(arguments []interface{}) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_RTrim(arguments []interface{}) string {
|
func (r rowContext) strings_RTrim(arguments []interface{}) string {
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
|
if !strOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
return strings.TrimRight(str, " ")
|
return strings.TrimRight(str, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,10 +268,14 @@ func (r rowContext) strings_Substring(arguments []interface{}) string {
|
|||||||
var ok bool
|
var ok bool
|
||||||
var startPos int
|
var startPos int
|
||||||
var length int
|
var length int
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
startPosEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
|
startPosEx := r.resolveSelectItem(arguments[1].(parsers.SelectItem))
|
||||||
lengthEx := r.resolveSelectItem(arguments[2].(parsers.SelectItem))
|
lengthEx := r.resolveSelectItem(arguments[2].(parsers.SelectItem))
|
||||||
|
|
||||||
|
if !strOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
if startPos, ok = startPosEx.(int); !ok {
|
if startPos, ok = startPosEx.(int); !ok {
|
||||||
logger.ErrorLn("strings_Substring - got start parameters of wrong type")
|
logger.ErrorLn("strings_Substring - got start parameters of wrong type")
|
||||||
return ""
|
return ""
|
||||||
@ -241,7 +298,11 @@ func (r rowContext) strings_Substring(arguments []interface{}) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) strings_Trim(arguments []interface{}) string {
|
func (r rowContext) strings_Trim(arguments []interface{}) string {
|
||||||
str := r.parseString(arguments[0])
|
str, strOk := r.parseString(arguments[0])
|
||||||
|
if !strOk {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
return strings.TrimSpace(str)
|
return strings.TrimSpace(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,15 +318,15 @@ func (r rowContext) getBoolFlag(arguments []interface{}) bool {
|
|||||||
return ignoreCase
|
return ignoreCase
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r rowContext) parseString(argument interface{}) string {
|
func (r rowContext) parseString(argument interface{}) (value string, ok bool) {
|
||||||
exItem := argument.(parsers.SelectItem)
|
exItem := argument.(parsers.SelectItem)
|
||||||
ex := r.resolveSelectItem(exItem)
|
ex := r.resolveSelectItem(exItem)
|
||||||
if str1, ok := ex.(string); ok {
|
if str1, ok := ex.(string); ok {
|
||||||
return str1
|
return str1, true
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.ErrorLn("StringEquals got parameters of wrong type")
|
logger.ErrorLn("StringEquals got parameters of wrong type")
|
||||||
return ""
|
return "", false
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertToString(value interface{}) string {
|
func convertToString(value interface{}) string {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user