本文整理汇总了Golang中github.com/couchbaselabs/dparval.NewValue函数的典型用法代码示例。如果您正苦于以下问题:Golang NewValue函数的具体用法?Golang NewValue怎么用?Golang NewValue使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewValue函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Evaluate
func (this *FunctionCallLower) Evaluate(item *dparval.Value) (*dparval.Value, error) {
// first evaluate the argument
av, err := this.Operands[0].Expr.Evaluate(item)
// the spec defines this functin to ONLY operate on strings
// all other types result in NULL
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// undefined returns null
return dparval.NewValue(nil), nil
default:
// any other error return to caller
return nil, err
}
}
if av.Type() == dparval.STRING {
avalue := av.Value()
switch avalue := avalue.(type) {
case string:
return dparval.NewValue(strings.ToLower(avalue)), nil
}
}
return dparval.NewValue(nil), nil
}
开发者ID:phonkee,项目名称:tuqtng,代码行数:26,代码来源:function_strings.go
示例2: TestCount
func TestCount(t *testing.T) {
dataset := dparval.ValueCollection{
dparval.NewValue(map[string]interface{}{
"name": "marty",
"status": "alive",
}),
dparval.NewValue(map[string]interface{}{
"name": "gerald",
"status": nil,
}),
dparval.NewValue(map[string]interface{}{
"name": "steve",
}),
}
tests := AggregateTestSet{
// test * (counts all rows)
{
NewFunctionCall("COUNT", FunctionArgExpressionList{NewStarFunctionArgExpression()}),
dparval.NewValue(3.0),
},
// test expression (eliminiates null and missing)
{
NewFunctionCall("COUNT", FunctionArgExpressionList{NewFunctionArgExpression(NewProperty("status"))}),
dparval.NewValue(1.0),
},
}
tests.Run(t, dataset)
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:32,代码来源:function_aggregate_test.go
示例3: Evaluate
func (this *FunctionCallCeil) Evaluate(item *dparval.Value) (*dparval.Value, error) {
// first evaluate the argument
av, err := this.Operands[0].Expr.Evaluate(item)
// the spec defines this functin to ONLY operate on numeric values
// all other types result in NULL
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// undefined returns null
return dparval.NewValue(nil), nil
default:
// any other error return to caller
return nil, err
}
}
if av.Type() == dparval.NUMBER {
avalue := av.Value()
switch avalue := avalue.(type) {
case float64:
return dparval.NewValue(math.Ceil(avalue)), nil
}
}
return dparval.NewValue(nil), nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:27,代码来源:function_numeric.go
示例4: Evaluate
func (this *OrOperator) Evaluate(item *dparval.Value) (*dparval.Value, error) {
var rv interface{}
var re error
rv = false
re = nil
for _, operand := range this.Operands {
operandVal, err := operand.Evaluate(item)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
rv = nil
re = err
continue
default:
// any other error should be returned to caller
return nil, err
}
}
// now interpret the evaluated value in a boolean context
operandValVal := operandVal.Value()
operandBoolVal := ValueInBooleanContext(operandValVal)
if operandBoolVal == true {
return dparval.NewValue(true), nil
} else if operandBoolVal == nil && rv == false {
rv = operandBoolVal
re = nil
}
// if operandBoolVal is true, do nothing
// rv starts as true, and should never change back to true
}
if re != nil {
return nil, re
}
return dparval.NewValue(rv), re
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:35,代码来源:logical.go
示例5: init
func init() {
doc := dparval.NewValue(map[string]interface{}{
"name": "mike",
"children": []interface{}{
map[string]interface{}{
"name": "bob",
},
map[string]interface{}{
"name": "dan",
},
},
})
doc.SetAttachment("meta", map[string]interface{}{"id": "1"})
joinerTestData = append(joinerTestData, doc)
doc = dparval.NewValue(map[string]interface{}{
"name": "dustin",
"children": []interface{}{
map[string]interface{}{
"name": "mary",
},
map[string]interface{}{
"name": "jane",
},
},
})
doc.SetAttachment("meta", map[string]interface{}{"id": "2"})
joinerTestData = append(joinerTestData, doc)
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:29,代码来源:unnest_test.go
示例6: ValueCount
func (vi *viewIndex) ValueCount() (int64, query.Error) {
indexItemChannel := make(catalog.EntryChannel)
indexWarnChannel := make(query.ErrorChannel)
indexErrorChannel := make(query.ErrorChannel)
go vi.ScanRange(catalog.LookupValue{dparval.NewValue(nil)}, catalog.LookupValue{dparval.NewValue(nil)}, catalog.Both, 0, indexItemChannel, indexWarnChannel, indexErrorChannel)
var err query.Error
nullCount := int64(0)
ok := true
for ok {
select {
case _, ok = <-indexItemChannel:
if ok {
nullCount += 1
}
case _, ok = <-indexWarnChannel:
// ignore warnings here
case err, ok = <-indexErrorChannel:
if err != nil {
return 0, err
}
}
}
totalCount, err := ViewTotalRows(vi.bucket.cbbucket, vi.DDocName(), vi.ViewName(), map[string]interface{}{})
if err != nil {
return 0, err
}
return totalCount - nullCount, nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:33,代码来源:view_index.go
示例7: Evaluate
func (this *FunctionCallLength) Evaluate(item *dparval.Value) (*dparval.Value, error) {
// first evaluate the argument
av, err := this.Operands[0].Expr.Evaluate(item)
// the spec does not define it to operate on missing, so return null
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// undefined returns null
return dparval.NewValue(nil), nil
default:
// any other error return to caller
return nil, err
}
}
// return the length only if the operand is a string
if av.Type() == dparval.STRING {
avalue := av.Value()
switch avalue := avalue.(type) {
case string:
return dparval.NewValue(float64(len(avalue))), nil
}
}
return dparval.NewValue(nil), nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:26,代码来源:function_util.go
示例8: Evaluate
func (this *FunctionCallStrToMillis) Evaluate(item *dparval.Value) (*dparval.Value, error) {
av, err := this.Operands[0].Expr.Evaluate(item)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// undefined returns null
return dparval.NewValue(nil), nil
default:
// any other error return to caller
return nil, err
}
}
val := av.Value()
switch val := val.(type) {
case string:
t, err := strToTime(val)
if err != nil {
return nil, fmt.Errorf("Date not in a recognized format.")
}
return dparval.NewValue(timeToMillis(t)), nil
default:
return dparval.NewValue(nil), nil
}
}
开发者ID:phonkee,项目名称:tuqtng,代码行数:27,代码来源:function_date.go
示例9: UpdateAggregate
func (this *FunctionCallMin) UpdateAggregate(group *dparval.Value, item *dparval.Value) error {
aggregate_key := this.Key()
currentVal, err := aggregateValue(group, aggregate_key)
if err != nil {
return fmt.Errorf("group defaults not set correctly")
}
if this.Operands[0].Expr != nil {
val, err := this.Operands[0].Expr.Evaluate(item)
val, err = eliminateNullMissing(val, err)
if err != nil {
return err
}
if val != nil {
nextVal := val.Value()
currVal := currentVal.Value()
if currVal == nil {
// any value is greater than nil (we eliminated null/mising already)
setAggregateValue(group, aggregate_key, dparval.NewValue(nextVal))
} else {
// check to see
comp := CollateJSON(nextVal, currVal)
if comp < 0 {
setAggregateValue(group, aggregate_key, dparval.NewValue(nextVal))
}
}
}
}
return nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:32,代码来源:function_aggregate.go
示例10: Evaluate
func (this *CollectionAnyOperator) Evaluate(item *dparval.Value) (*dparval.Value, error) {
// first evaluate the over
ov, err := this.Over.Evaluate(item)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// spec says return false
return dparval.NewValue(false), nil
default:
// any other error should be returned to caller
return nil, err
}
}
// see if we're dealing with an array
if ov.Type() == dparval.ARRAY {
// by accessing the array contents this way
// we avoid parsing it
ok := true
index := 0
for ok {
inner, err := ov.Index(index)
index = index + 1
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
ok = false
default:
return nil, err
}
} else {
// duplicate the existing context
innerContext := item.Duplicate()
// add this object named as the alias
innerContext.SetPath(this.As, inner)
// now evaluate the condition in this new context
innerResult, err := this.Condition.Evaluate(innerContext)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// this is not true, keep trying
continue
default:
// any other error should be returned to caller
return nil, err
}
}
innerResultVal := innerResult.Value()
// check to see if this value is true
innerBoolResult := ValueInBooleanContext(innerResultVal)
if innerBoolResult == true {
return dparval.NewValue(true), nil
}
}
}
return dparval.NewValue(false), nil
}
return dparval.NewValue(false), nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:59,代码来源:collection_any.go
示例11: DefaultAggregate
func (this *FunctionCallMax) DefaultAggregate(group *dparval.Value) error {
aggregate_key := this.Key()
currentVal, err := aggregateValue(group, aggregate_key)
if err != nil {
currentVal = dparval.NewValue(nil)
// store this, so that even if all values are eliminated we return null
setAggregateValue(group, aggregate_key, dparval.NewValue(currentVal))
}
return nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:10,代码来源:function_aggregate.go
示例12: Evaluate
func (this *FunctionCallSplit) Evaluate(item *dparval.Value) (*dparval.Value, error) {
// first evaluate the arguments
av, err := this.Operands[0].Expr.Evaluate(item)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// undefined returns null
return dparval.NewValue(nil), nil
default:
// any other error return to caller
return nil, err
}
// FIXME warn if arguments were wrong type?
if av.Type() != dparval.STRING {
return dparval.NewValue(nil), nil
}
}
var sep *dparval.Value = nil
if len(this.Operands) > 1 {
sep, err = this.Operands[1].Expr.Evaluate(item)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// undefined returns null
return dparval.NewValue(nil), nil
default:
// any other error return to caller
return nil, err
}
}
// FIXME warn if arguments were wrong type?
if sep.Type() != dparval.STRING {
return dparval.NewValue(nil), nil
}
}
var sa []string
if sep != nil {
sa = strings.Split(av.Value().(string),
sep.Value().(string))
} else {
sa = strings.Fields(av.Value().(string))
}
rv := make([]interface{}, len(sa))
for i, s := range sa {
rv[i] = s
}
return dparval.NewValue(rv), nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:55,代码来源:function_strings.go
示例13: Evaluate
func (this *InOperator) Evaluate(context *dparval.Value) (*dparval.Value, error) {
false_result := dparval.NewValue(false)
true_result := dparval.NewValue(true)
lv, err := this.Left.Evaluate(context)
if err != nil {
return nil, err
}
rv, err := this.Right.Evaluate(context)
if err != nil {
return nil, err
}
lvalue := lv.Value()
if rv.Type() == dparval.ARRAY {
ok := true
index := 0
for ok {
inner, err := rv.Index(index)
index = index + 1
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
ok = false
default:
return nil, err
}
} else {
if lv.Type() != inner.Type() {
continue
} else {
iv := inner.Value()
switch lvalue := lvalue.(type) {
case string:
if lvalue == iv {
return true_result, nil
}
default:
if reflect.DeepEqual(lvalue, iv) == true {
return true_result, nil
}
}
}
}
}
}
return false_result, nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:51,代码来源:compare.go
示例14: TestSumAndAvg
// sum and avg have same elimination rules, test them together
func TestSumAndAvg(t *testing.T) {
dataset := dparval.ValueCollection{
dparval.NewValue(map[string]interface{}{
"name": "marty",
"score": 20.0,
}),
dparval.NewValue(map[string]interface{}{
"name": "gerald",
"score": nil,
}),
dparval.NewValue(map[string]interface{}{
"name": "steve",
}),
dparval.NewValue(map[string]interface{}{
"name": "siri",
"score": "thirty",
}),
dparval.NewValue(map[string]interface{}{
"name": "deep",
"score": 10.0,
}),
dparval.NewValue(map[string]interface{}{
"name": "ketaki",
"score": "false",
}),
dparval.NewValue(map[string]interface{}{
"name": "pratap",
"score": []interface{}{5.5},
}),
dparval.NewValue(map[string]interface{}{
"name": "karen",
"score": map[string]interface{}{"score": 5.5},
}),
}
tests := AggregateTestSet{
// test expression (eliminiates null and missing)
{
NewFunctionCall("SUM", FunctionArgExpressionList{NewFunctionArgExpression(NewProperty("score"))}),
dparval.NewValue(30.0),
},
{
NewFunctionCall("AVG", FunctionArgExpressionList{NewFunctionArgExpression(NewProperty("score"))}),
dparval.NewValue(15.0),
},
}
tests.Run(t, dataset)
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:52,代码来源:function_aggregate_test.go
示例15: init
func init() {
doc := dparval.NewValue(map[string]interface{}{"name": "mike", "age": 100.0})
doc.SetAttachment("meta", map[string]interface{}{"id": "1"})
testData = append(testData, doc)
doc = dparval.NewValue(map[string]interface{}{"name": "dustin"})
doc.SetAttachment("meta", map[string]interface{}{"id": "1"})
testData = append(testData, doc)
doc = dparval.NewValue(map[string]interface{}{"name": "bob", "age": nil})
doc.SetAttachment("meta", map[string]interface{}{"id": "1"})
testData = append(testData, doc)
doc = dparval.NewValue(map[string]interface{}{"name": "marty", "age": 99.0})
doc.SetAttachment("meta", map[string]interface{}{"id": "1"})
testData = append(testData, doc)
doc = dparval.NewValue(map[string]interface{}{"name": "steve", "age": 200.0})
doc.SetAttachment("meta", map[string]interface{}{"id": "2"})
testData = append(testData, doc)
doc = dparval.NewValue(map[string]interface{}{"name": "gerald", "age": 175.0})
doc.SetAttachment("meta", map[string]interface{}{"id": "3"})
testData = append(testData, doc)
doc = dparval.NewValue(map[string]interface{}{"name": "siri", "age": 74.0})
doc.SetAttachment("meta", map[string]interface{}{"id": "4"})
testData = append(testData, doc)
doc = dparval.NewValue(map[string]interface{}{"name": "ali", "age": 100.0})
doc.SetAttachment("meta", map[string]interface{}{"id": "1"})
testData = append(testData, doc)
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:33,代码来源:filter_test.go
示例16: Evaluate
func (this *FunctionCallTypeName) Evaluate(item *dparval.Value) (*dparval.Value, error) {
// first evaluate the argument
av, err := this.Operands[0].Expr.Evaluate(item)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// undefined returns "missing"
return dparval.NewValue("missing"), nil
default:
// any other error return to caller
return nil, err
}
}
switch av.Type() {
case dparval.NUMBER:
return dparval.NewValue("number"), nil
case dparval.STRING:
return dparval.NewValue("string"), nil
case dparval.BOOLEAN:
return dparval.NewValue("boolean"), nil
case dparval.ARRAY:
return dparval.NewValue("array"), nil
case dparval.OBJECT:
return dparval.NewValue("object"), nil
case dparval.NULL:
return dparval.NewValue("null"), nil
default:
return dparval.NewValue(nil), nil
}
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:32,代码来源:function_typecheck.go
示例17: Evaluate
func (this *FunctionCallGreatest) Evaluate(item *dparval.Value) (*dparval.Value, error) {
var rv interface{} = nil
for _, arg := range this.Operands {
av, err := arg.Expr.Evaluate(item)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// undefined doesn't change the result
default:
// any other error return to caller
return nil, err
}
}
avalue := av.Value()
// now compare this value with rv
compres := CollateJSON(avalue, rv)
if compres > 0 {
rv = avalue
}
}
return dparval.NewValue(rv), nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:27,代码来源:function_compare.go
示例18: Evaluate
func (this *FunctionCallFirstNum) Evaluate(item *dparval.Value) (*dparval.Value, error) {
for _, arg := range this.Operands {
av, err := arg.Expr.Evaluate(item)
if err != nil {
switch err := err.(type) {
case *dparval.Undefined:
// do NOT return missing
continue
default:
// any other error return to caller
return nil, err
}
}
if av.Type() == dparval.NUMBER {
num := av.Value().(float64)
if !math.IsNaN(num) && !math.IsInf(num, 1) && !math.IsInf(num, -1) {
return av, nil
} else {
continue
}
} else {
continue
}
}
// if all values were +/-Infinity or NaN return NULL
return dparval.NewValue(nil), nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:29,代码来源:function_numeric_infinite.go
示例19: compare
func (this *BinaryOperator) compare(context *dparval.Value) (*dparval.Value, error) {
lv, rv, err := this.EvaluateBoth(context)
if err != nil {
return nil, err
}
// if either side is NULL, the result is NULL
if lv.Type() == dparval.NULL || rv.Type() == dparval.NULL {
return nil, nil
}
lvalue := lv.Value()
rvalue := rv.Value()
// if we got this far, we evaluated both sides
// there were no errors, and neither side was NULL or MISSING
// now check types (types must be the same)
ltype := collationType(lvalue)
rtype := collationType(rvalue)
// ugly fixups for boolean (returns different values for true/false)
if ltype == 2 {
// fixup for boolean type
ltype = 1
}
if rtype == 2 {
rtype = 1
}
if ltype != rtype {
return nil, &TypeMismatch{ltype, rtype}
}
return dparval.NewValue(float64(CollateJSON(lvalue, rvalue))), nil
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:34,代码来源:binary_operator.go
示例20: processItem
func (this *Grouper) processItem(item *dparval.Value) bool {
groupkey := dparval.NewValue(make([]interface{}, len(this.GroupBy)))
for i, groupElement := range this.GroupBy {
groupkeyval, err := this.Base.Evaluate(groupElement, item)
if err == nil {
groupkey.SetIndex(i, groupkeyval)
} else {
switch err := err.(type) {
case *dparval.Undefined:
// FIXME better way?
groupkey.SetIndex(i, "__tuqtng__MISSING__")
default:
return this.Base.SendError(query.NewError(err, "error evaluating group by"))
}
}
}
// FIXME slow, but lets me use map to match same groups
groupkeybytes := groupkey.Bytes()
groupkeystring := string(groupkeybytes)
group, ok := this.groups[groupkeystring]
if !ok {
// new group
this.groups[groupkeystring] = item
group = item
this.setGroupDefaults(group)
}
this.updateGroup(group, item)
return true
}
开发者ID:latinojoel,项目名称:tuqtng,代码行数:30,代码来源:grouper.go
注:本文中的github.com/couchbaselabs/dparval.NewValue函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论