Skip to content

Commit 932d73e

Browse files
committed
convert string, integer and double
1 parent 33ac413 commit 932d73e

File tree

2 files changed

+64
-3
lines changed

2 files changed

+64
-3
lines changed

querybuilder/operator/begins_with.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package operator
2+
3+
// import (
4+
// "reflect"
5+
// "strings"
6+
// )
7+
8+
func init() {
9+
AddOperator(BeginsWith)
10+
}
11+
12+
var BeginsWith = &Operator{
13+
Name: "begins_with",
14+
Evaluate: func(input, value interface{}) bool {
15+
return false
16+
},
17+
}

querybuilder/rule.go

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package querybuilder
22

33
import (
4+
"fmt"
45
"reflect"
6+
"strconv"
57
"strings"
68
"sync"
79

@@ -87,11 +89,11 @@ func (r *Rule) castValue(v interface{}) interface{} {
8789

8890
switch r.Type {
8991
case "string":
90-
return v.(string)
92+
return to_string(v)
9193
case "integer":
92-
return int(v.(float64))
94+
return to_integer(v)
9395
case "double":
94-
return v.(float64)
96+
return to_double(v)
9597
case "date":
9698
return nil
9799
case "time":
@@ -120,3 +122,45 @@ func (r *Rule) parseValue(v interface{}) interface{} {
120122

121123
return r.castValue(v)
122124
}
125+
126+
func to_string(v interface{}) string {
127+
switch v.(type) {
128+
case string:
129+
return v.(string)
130+
case float64:
131+
return fmt.Sprintf("%f", v.(float64))
132+
case bool:
133+
return fmt.Sprintf("%t", v.(bool))
134+
default:
135+
return ""
136+
}
137+
}
138+
139+
func to_double(v interface{}) float64 {
140+
switch v.(type) {
141+
case string:
142+
f, _ := strconv.ParseFloat(v.(string), 64)
143+
return f
144+
case float64:
145+
return v.(float64)
146+
default:
147+
return 0
148+
}
149+
}
150+
151+
func to_integer(v interface{}) int {
152+
switch v.(type) {
153+
case string:
154+
i, _ := strconv.Atoi(v.(string))
155+
return i
156+
case float64:
157+
return int(v.(float64))
158+
case bool:
159+
if v.(bool) {
160+
return 1
161+
}
162+
return 0
163+
default:
164+
return 0
165+
}
166+
}

0 commit comments

Comments
 (0)