當前位置: 首頁>>代碼示例>>Golang>>正文


Golang ast.PatternInExpr類代碼示例

本文整理匯總了Golang中github.com/pingcap/tidb/ast.PatternInExpr的典型用法代碼示例。如果您正苦於以下問題:Golang PatternInExpr類的具體用法?Golang PatternInExpr怎麽用?Golang PatternInExpr使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。


在下文中一共展示了PatternInExpr類的3個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。

示例1: patternIn

func (e *Evaluator) patternIn(n *ast.PatternInExpr) bool {
    lhs := n.Expr.GetValue()
    if types.IsNil(lhs) {
        n.SetValue(nil)
        return true
    }
    hasNull := false
    for _, v := range n.List {
        if types.IsNil(v.GetValue()) {
            hasNull = true
            continue
        }
        r, err := types.Compare(n.Expr.GetValue(), v.GetValue())
        if err != nil {
            e.err = errors.Trace(err)
            return false
        }
        if r == 0 {
            n.SetValue(boolToInt64(!n.Not))
            return true
        }
    }
    if hasNull {
        // if no matched but we got null in In, return null
        // e.g 1 in (null, 2, 3) returns null
        n.SetValue(nil)
        return true
    }
    n.SetValue(boolToInt64(n.Not))
    return true
}
開發者ID:mrtoms,項目名稱:tidb,代碼行數:31,代碼來源:evaluator.go

示例2: patternIn

func (e *Evaluator) patternIn(n *ast.PatternInExpr) bool {
    lhs := *n.Expr.GetDatum()
    if lhs.IsNull() {
        n.SetNull()
        return true
    }
    if n.Sel == nil {
        ds := make([]types.Datum, 0, len(n.List))
        for _, ei := range n.List {
            ds = append(ds, *ei.GetDatum())
        }
        x := e.checkInList(n.Not, lhs, ds)
        if e.err != nil {
            return false
        }
        n.SetDatum(x)
        return true
    }
    res := n.Sel.GetDatum().GetRow()
    x := e.checkInList(n.Not, lhs, res)
    if e.err != nil {
        return false
    }
    n.SetDatum(x)
    return true
}
開發者ID:yangxuanjia,項目名稱:tidb,代碼行數:26,代碼來源:evaluator.go

示例3: patternIn

func (e *Evaluator) patternIn(n *ast.PatternInExpr) bool {
    lhs := n.Expr.GetValue()
    if types.IsNil(lhs) {
        n.SetValue(nil)
        return true
    }
    if n.Sel == nil {
        values := make([]interface{}, 0, len(n.List))
        for _, ei := range n.List {
            values = append(values, ei.GetValue())
        }
        x := e.checkInList(n.Not, lhs, values)
        if e.err != nil {
            return false
        }
        n.SetValue(x)
        return true
    }
    se := n.Sel.(*ast.SubqueryExpr)
    sel := se.SubqueryExec

    res := sel.GetValue().([]interface{})
    x := e.checkInList(n.Not, lhs, res)
    if e.err != nil {
        return false
    }
    n.SetValue(x)
    return true
}
開發者ID:xudongQiu,項目名稱:tidb,代碼行數:29,代碼來源:evaluator.go


注:本文中的github.com/pingcap/tidb/ast.PatternInExpr類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。