本文整理汇总了Golang中github.com/pingcap/tidb/context.Context.GetSessionVars方法的典型用法代码示例。如果您正苦于以下问题:Golang Context.GetSessionVars方法的具体用法?Golang Context.GetSessionVars怎么用?Golang Context.GetSessionVars使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/pingcap/tidb/context.Context
的用法示例。
在下文中一共展示了Context.GetSessionVars方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: builtinNow
func builtinNow(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
// TODO: if NOW is used in stored function or trigger, NOW will return the beginning time
// of the execution.
fsp := 0
sc := ctx.GetSessionVars().StmtCtx
if len(args) == 1 && !args[0].IsNull() {
if fsp, err = checkFsp(sc, args[0]); err != nil {
d.SetNull()
return d, errors.Trace(err)
}
}
tr, err := types.RoundFrac(time.Now(), int(fsp))
if err != nil {
d.SetNull()
return d, errors.Trace(err)
}
t := types.Time{
Time: types.FromGoTime(tr),
Type: mysql.TypeDatetime,
// set unspecified for later round
Fsp: fsp,
}
d.SetMysqlTime(t)
return d, nil
}
示例2: builtinExtract
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_extract
func builtinExtract(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
unit := args[0].GetString()
vd := args[1]
if vd.IsNull() {
d.SetNull()
return d, nil
}
f := types.NewFieldType(mysql.TypeDatetime)
f.Decimal = types.MaxFsp
val, err := vd.ConvertTo(ctx.GetSessionVars().StmtCtx, f)
if err != nil {
d.SetNull()
return d, errors.Trace(err)
}
if val.IsNull() {
d.SetNull()
return d, nil
}
if val.Kind() != types.KindMysqlTime {
d.SetNull()
return d, errors.Errorf("need time type, but got %T", val)
}
t := val.GetMysqlTime()
n, err1 := types.ExtractTimeNum(unit, t)
if err1 != nil {
d.SetNull()
return d, errors.Trace(err1)
}
d.SetInt64(n)
return d, nil
}
示例3: updateAvg
func (af *avgFunction) updateAvg(row []types.Datum, groupKey []byte, ectx context.Context) error {
ctx := af.getContext(groupKey)
a := af.Args[1]
value, err := a.Eval(row, ectx)
if err != nil {
return errors.Trace(err)
}
if value.IsNull() {
return nil
}
if af.Distinct {
d, err1 := ctx.DistinctChecker.Check([]interface{}{value.GetValue()})
if err1 != nil {
return errors.Trace(err1)
}
if !d {
return nil
}
}
ctx.Value, err = types.CalculateSum(ectx.GetSessionVars().StmtCtx, ctx.Value, value)
if err != nil {
return errors.Trace(err)
}
count, err := af.Args[0].Eval(row, ectx)
if err != nil {
return errors.Trace(err)
}
ctx.Count += count.GetInt64()
return nil
}
示例4: addTopN
func (p *physicalTableSource) addTopN(ctx context.Context, prop *requiredProperty) bool {
if len(prop.props) == 0 && prop.limit != nil {
p.addLimit(prop.limit)
return true
}
if p.client == nil || !p.client.SupportRequestType(kv.ReqTypeSelect, kv.ReqSubTypeTopN) {
return false
}
if prop.limit == nil {
return false
}
sc := ctx.GetSessionVars().StmtCtx
count := int64(prop.limit.Count + prop.limit.Offset)
p.LimitCount = &count
for _, prop := range prop.props {
item := sortByItemToPB(sc, p.client, prop.col, prop.desc)
if item == nil {
// When we fail to convert any sortItem to PB struct, we should clear the environments.
p.clearForTopnPushDown()
return false
}
p.SortItemsPB = append(p.SortItemsPB, item)
p.sortItems = append(p.sortItems, &ByItems{Expr: prop.col, Desc: prop.desc})
}
return true
}
示例5: builtinSpace
// See http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_space
func builtinSpace(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
x := args[0]
if x.IsNull() {
return d, nil
}
sc := ctx.GetSessionVars().StmtCtx
if x.Kind() == types.KindString || x.Kind() == types.KindBytes {
if _, e := types.StrToInt(sc, x.GetString()); e != nil {
return d, errors.Trace(e)
}
}
v, err := x.ToInt64(ctx.GetSessionVars().StmtCtx)
if err != nil {
return d, errors.Trace(err)
}
if v < 0 {
v = 0
}
if v > math.MaxInt32 {
d.SetNull()
} else {
d.SetString(strings.Repeat(" ", int(v)))
}
return d, nil
}
示例6: builtinUnHex
// See http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_unhex
func builtinUnHex(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
switch args[0].Kind() {
case types.KindNull:
return d, nil
case types.KindString:
x, err := args[0].ToString()
if err != nil {
return d, errors.Trace(err)
}
bytes, err := hex.DecodeString(x)
if err != nil {
return d, nil
}
d.SetString(string(bytes))
return d, nil
case types.KindInt64, types.KindUint64, types.KindMysqlHex, types.KindFloat32, types.KindFloat64, types.KindMysqlDecimal:
x, _ := args[0].Cast(ctx.GetSessionVars().StmtCtx, types.NewFieldType(mysql.TypeString))
if x.IsNull() {
return d, nil
}
bytes, err := hex.DecodeString(x.GetString())
if err != nil {
return d, nil
}
d.SetString(string(bytes))
return d, nil
default:
return d, errors.Errorf("Unhex invalid args, need int or string but get %T", args[0].GetValue())
}
}
示例7: StreamUpdate
// StreamUpdate implements AggregationFunction interface.
func (mmf *maxMinFunction) StreamUpdate(row []types.Datum, ectx context.Context) error {
ctx := mmf.getStreamedContext()
if len(mmf.Args) != 1 {
return errors.New("Wrong number of args for AggFuncMaxMin")
}
a := mmf.Args[0]
value, err := a.Eval(row, ectx)
if err != nil {
return errors.Trace(err)
}
if ctx.Value.IsNull() {
ctx.Value = value
}
if value.IsNull() {
return nil
}
var c int
c, err = ctx.Value.CompareDatum(ectx.GetSessionVars().StmtCtx, value)
if err != nil {
return errors.Trace(err)
}
if (mmf.isMax && c == -1) || (!mmf.isMax && c == 1) {
ctx.Value = value
}
return nil
}
示例8: streamUpdateSum
func (af *aggFunction) streamUpdateSum(row []types.Datum, ectx context.Context) error {
ctx := af.getStreamedContext()
a := af.Args[0]
value, err := a.Eval(row, ectx)
if err != nil {
return errors.Trace(err)
}
if value.IsNull() {
return nil
}
if af.Distinct {
d, err1 := ctx.DistinctChecker.Check([]interface{}{value.GetValue()})
if err1 != nil {
return errors.Trace(err1)
}
if !d {
return nil
}
}
ctx.Value, err = types.CalculateSum(ectx.GetSessionVars().StmtCtx, ctx.Value, value)
if err != nil {
return errors.Trace(err)
}
ctx.Count++
return nil
}
示例9: builtinDatabase
// See https://dev.mysql.com/doc/refman/5.7/en/information-functions.html
func builtinDatabase(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
currentDB := ctx.GetSessionVars().CurrentDB
if currentDB == "" {
return d, nil
}
d.SetString(currentDB)
return d, nil
}
示例10: builtinConnectionID
func builtinConnectionID(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
data := ctx.GetSessionVars()
if data == nil {
return d, errors.Errorf("Missing session variable when evalue builtin")
}
d.SetUint64(data.ConnectionID)
return d, nil
}
示例11: builtinUser
func builtinUser(args []types.Datum, ctx context.Context) (d types.Datum, err error) {
data := ctx.GetSessionVars()
if data == nil {
return d, errors.Errorf("Missing session variable when evalue builtin")
}
d.SetString(data.User)
return d, nil
}
示例12: builtinFoundRows
func builtinFoundRows(arg []types.Datum, ctx context.Context) (d types.Datum, err error) {
data := ctx.GetSessionVars()
if data == nil {
return d, errors.Errorf("Missing session variable when evalue builtin")
}
d.SetUint64(data.StmtCtx.FoundRows())
return d, nil
}
示例13: removeRow
func (e *DeleteExec) removeRow(ctx context.Context, t table.Table, h int64, data []types.Datum) error {
err := t.RemoveRecord(ctx, h, data)
if err != nil {
return errors.Trace(err)
}
getDirtyDB(ctx).deleteRow(t.Meta().ID, h)
ctx.GetSessionVars().StmtCtx.AddAffectedRows(1)
return nil
}
示例14: getHistory
func getHistory(ctx context.Context) *stmtHistory {
hist, ok := ctx.GetSessionVars().TxnCtx.Histroy.(*stmtHistory)
if ok {
return hist
}
hist = new(stmtHistory)
ctx.GetSessionVars().TxnCtx.Histroy = hist
return hist
}
示例15: Parse
// Parse parses a query string to raw ast.StmtNode.
func Parse(ctx context.Context, src string) ([]ast.StmtNode, error) {
log.Debug("compiling", src)
charset, collation := ctx.GetSessionVars().GetCharsetInfo()
stmts, err := parser.New().Parse(src, charset, collation)
if err != nil {
log.Warnf("compiling %s, error: %v", src, err)
return nil, errors.Trace(err)
}
return stmts, nil
}