MCPcopy
hub / github.com/pingcap/tidb / getFunction

Method getFunction

pkg/expression/builtin_arithmetic.go:329–372  ·  view source on GitHub ↗
(ctx BuildContext, args []Expression)

Source from the content-addressed store, hash-verified

327}
328
329func (c *arithmeticMinusFunctionClass) getFunction(ctx BuildContext, args []Expression) (builtinFunc, error) {
330 if err := c.verifyArgs(args); err != nil {
331 return nil, err
332 }
333 if args[0].GetType(ctx.GetEvalCtx()).EvalType().IsVectorKind() || args[1].GetType(ctx.GetEvalCtx()).EvalType().IsVectorKind() {
334 bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETVectorFloat32, types.ETVectorFloat32, types.ETVectorFloat32)
335 if err != nil {
336 return nil, err
337 }
338 sig := &builtinArithmeticMinusVectorFloat32Sig{bf}
339 // sig.setPbCode(tipb.ScalarFuncSig_PlusVectorFloat32)
340 return sig, nil
341 }
342 lhsEvalTp, rhsEvalTp := numericContextResultType(ctx.GetEvalCtx(), args[0]), numericContextResultType(ctx.GetEvalCtx(), args[1])
343 if lhsEvalTp == types.ETReal || rhsEvalTp == types.ETReal {
344 bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETReal, types.ETReal, types.ETReal)
345 if err != nil {
346 return nil, err
347 }
348 setFlenDecimal4RealOrDecimal(ctx.GetEvalCtx(), bf.tp, args[0], args[1], true, false)
349 sig := &builtinArithmeticMinusRealSig{bf}
350 sig.setPbCode(tipb.ScalarFuncSig_MinusReal)
351 return sig, nil
352 } else if lhsEvalTp == types.ETDecimal || rhsEvalTp == types.ETDecimal {
353 bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETDecimal, types.ETDecimal, types.ETDecimal)
354 if err != nil {
355 return nil, err
356 }
357 setFlenDecimal4RealOrDecimal(ctx.GetEvalCtx(), bf.tp, args[0], args[1], false, false)
358 sig := &builtinArithmeticMinusDecimalSig{bf}
359 sig.setPbCode(tipb.ScalarFuncSig_MinusDecimal)
360 return sig, nil
361 }
362 bf, err := newBaseBuiltinFuncWithTp(ctx, c.funcName, args, types.ETInt, types.ETInt, types.ETInt)
363 if err != nil {
364 return nil, err
365 }
366 if (mysql.HasUnsignedFlag(args[0].GetType(ctx.GetEvalCtx()).GetFlag()) || mysql.HasUnsignedFlag(args[1].GetType(ctx.GetEvalCtx()).GetFlag())) && !ctx.GetEvalCtx().SQLMode().HasNoUnsignedSubtractionMode() {
367 bf.tp.AddFlag(mysql.UnsignedFlag)
368 }
369 sig := &builtinArithmeticMinusIntSig{baseBuiltinFunc: bf}
370 sig.setPbCode(tipb.ScalarFuncSig_MinusInt)
371 return sig, nil
372}
373
374type builtinArithmeticMinusRealSig struct {
375 baseBuiltinFunc

Callers

nothing calls this directly

Calls 14

HasUnsignedFlagFunction · 0.92
newBaseBuiltinFuncWithTpFunction · 0.85
numericContextResultTypeFunction · 0.85
IsVectorKindMethod · 0.80
EvalTypeMethod · 0.80
GetTypeMethod · 0.65
GetEvalCtxMethod · 0.65
setPbCodeMethod · 0.65
GetFlagMethod · 0.65
SQLModeMethod · 0.65

Tested by

no test coverage detected