Update the interface for the simplified call valuer
parent
5e08187cb6
commit
f7bfae4044
2
Godeps
2
Godeps
|
@ -13,7 +13,7 @@ github.com/gogo/protobuf 1adfc126b41513cc696b209667c8656ea7aac67c
|
||||||
github.com/golang/protobuf 925541529c1fa6821df4e44ce2723319eb2be768
|
github.com/golang/protobuf 925541529c1fa6821df4e44ce2723319eb2be768
|
||||||
github.com/golang/snappy d9eb7a3d35ec988b8585d4a0068e462c27d28380
|
github.com/golang/snappy d9eb7a3d35ec988b8585d4a0068e462c27d28380
|
||||||
github.com/google/go-cmp 3af367b6b30c263d47e8895973edcca9a49cf029
|
github.com/google/go-cmp 3af367b6b30c263d47e8895973edcca9a49cf029
|
||||||
github.com/influxdata/influxql 53bc9c15f65bea9e4b9f6cc5d9c5327d4077bdc5
|
github.com/influxdata/influxql 145e0677ff6418fa00ee7e5dd434305631ab44ea
|
||||||
github.com/influxdata/usage-client 6d3895376368aa52a3a81d2a16e90f0f52371967
|
github.com/influxdata/usage-client 6d3895376368aa52a3a81d2a16e90f0f52371967
|
||||||
github.com/influxdata/yamux 1f58ded512de5feabbe30b60c7d33a7a896c5f16
|
github.com/influxdata/yamux 1f58ded512de5feabbe30b60c7d33a7a896c5f16
|
||||||
github.com/influxdata/yarpc f0da2db138cad2fb425541938fc28dd5a5bc6918
|
github.com/influxdata/yarpc f0da2db138cad2fb425541938fc28dd5a5bc6918
|
||||||
|
|
|
@ -113,7 +113,7 @@
|
||||||
".",
|
".",
|
||||||
"internal"
|
"internal"
|
||||||
]
|
]
|
||||||
revision = "53bc9c15f65bea9e4b9f6cc5d9c5327d4077bdc5"
|
revision = "145e0677ff6418fa00ee7e5dd434305631ab44ea"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
|
@ -337,6 +337,6 @@
|
||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
inputs-digest = "24a09b8e892a864f31c3cd636006c3f8bcd9eea046b08c1a8d93b9da5b7206c6"
|
inputs-digest = "9bb6fd90291e987c895b33e55cd20d968e141b4583d47e28aa6dfb733b7a320b"
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
[[constraint]]
|
[[constraint]]
|
||||||
name = "github.com/influxdata/influxql"
|
name = "github.com/influxdata/influxql"
|
||||||
revision = "53bc9c15f65bea9e4b9f6cc5d9c5327d4077bdc5"
|
revision = "145e0677ff6418fa00ee7e5dd434305631ab44ea"
|
||||||
|
|
||||||
[[constraint]]
|
[[constraint]]
|
||||||
name = "github.com/mattn/go-isatty"
|
name = "github.com/mattn/go-isatty"
|
||||||
|
|
|
@ -190,9 +190,10 @@ func (cur *scannerCursorBase) Scan(row *Row) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
valuer := influxql.ValuerEval{
|
valuer := influxql.ValuerEval{
|
||||||
Valuer: &MathValuer{
|
Valuer: influxql.MultiValuer(
|
||||||
Valuer: influxql.MapValuer(cur.m),
|
MathValuer{},
|
||||||
},
|
influxql.MapValuer(cur.m),
|
||||||
|
),
|
||||||
IntegerFloatDivision: true,
|
IntegerFloatDivision: true,
|
||||||
}
|
}
|
||||||
for i, expr := range cur.fields {
|
for i, expr := range cur.fields {
|
||||||
|
|
|
@ -2,7 +2,6 @@ package query
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/influxdata/influxql"
|
"github.com/influxdata/influxql"
|
||||||
)
|
)
|
||||||
|
@ -29,63 +28,38 @@ func (MathTypeMapper) CallType(name string, args []influxql.DataType) (influxql.
|
||||||
return influxql.Unknown, nil
|
return influxql.Unknown, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type MathValuer struct {
|
type MathValuer struct{}
|
||||||
Valuer influxql.Valuer
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *MathValuer) Value(key string) (interface{}, bool) {
|
var _ influxql.CallValuer = MathValuer{}
|
||||||
if v.Valuer != nil {
|
|
||||||
return v.Valuer.Value(key)
|
func (MathValuer) Value(key string) (interface{}, bool) {
|
||||||
}
|
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *MathValuer) Call(name string, args []influxql.Expr) (interface{}, bool) {
|
func (v MathValuer) Call(name string, args []interface{}) (interface{}, bool) {
|
||||||
if len(args) == 1 {
|
if len(args) == 1 {
|
||||||
|
arg0 := args[0]
|
||||||
switch name {
|
switch name {
|
||||||
case "sin":
|
case "sin":
|
||||||
return v.callTrigFunction(math.Sin, args[0])
|
return v.callTrigFunction(math.Sin, arg0)
|
||||||
case "cos":
|
case "cos":
|
||||||
return v.callTrigFunction(math.Cos, args[0])
|
return v.callTrigFunction(math.Cos, arg0)
|
||||||
case "tan":
|
case "tan":
|
||||||
return v.callTrigFunction(math.Tan, args[0])
|
return v.callTrigFunction(math.Tan, arg0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if v, ok := v.Valuer.(influxql.CallValuer); ok {
|
|
||||||
return v.Call(name, args)
|
|
||||||
}
|
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *MathValuer) callTrigFunction(fn func(x float64) float64, arg0 influxql.Expr) (interface{}, bool) {
|
func (MathValuer) callTrigFunction(fn func(x float64) float64, arg0 interface{}) (interface{}, bool) {
|
||||||
var value float64
|
var value float64
|
||||||
switch arg0 := arg0.(type) {
|
switch arg0 := arg0.(type) {
|
||||||
case *influxql.NumberLiteral:
|
|
||||||
value = arg0.Val
|
|
||||||
case *influxql.IntegerLiteral:
|
|
||||||
value = float64(arg0.Val)
|
|
||||||
case *influxql.VarRef:
|
|
||||||
if v.Valuer == nil {
|
|
||||||
return nil, false
|
|
||||||
} else if val, ok := v.Valuer.Value(arg0.Val); ok {
|
|
||||||
switch val := val.(type) {
|
|
||||||
case float64:
|
case float64:
|
||||||
value = val
|
value = arg0
|
||||||
case int64:
|
case int64:
|
||||||
value = float64(val)
|
value = float64(arg0)
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return nil, false
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
return fn(value), true
|
return fn(value), true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *MathValuer) Zone() *time.Location {
|
|
||||||
if v, ok := v.Valuer.(influxql.ZoneValuer); ok {
|
|
||||||
return v.Zone()
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue