How to use getInt64 method of types Package

Best K6 code snippet using types.getInt64

builtin_time.go

Source:builtin_time.go Github

copy

Full Screen

1// Copyright 2013 The ql Authors. All rights reserved.2// Use of this source code is governed by a BSD-style3// license that can be found in the LICENSES/QL-LICENSE file.4// Copyright 2015 PingCAP, Inc.5//6// Licensed under the Apache License, Version 2.0 (the "License");7// you may not use this file except in compliance with the License.8// You may obtain a copy of the License at9//10// http://www.apache.org/licenses/LICENSE-2.011//12// Unless required by applicable law or agreed to in writing, software13// distributed under the License is distributed on an "AS IS" BASIS,14// See the License for the specific language governing permissions and15// limitations under the License.16package evaluator17import (18 "fmt"19 "math"20 "regexp"21 "strings"22 "time"23 "github.com/juju/errors"24 "github.com/pingcap/tidb/ast"25 "github.com/pingcap/tidb/context"26 "github.com/pingcap/tidb/mysql"27 "github.com/pingcap/tidb/util/types"28)29func convertToTime(arg types.Datum, tp byte) (d types.Datum, err error) {30 f := types.NewFieldType(tp)31 f.Decimal = mysql.MaxFsp32 d, err = arg.ConvertTo(f)33 if err != nil {34 d.SetNull()35 return d, errors.Trace(err)36 }37 if d.IsNull() {38 return d, nil39 }40 if d.Kind() != types.KindMysqlTime {41 d.SetNull()42 return d, errors.Errorf("need time type, but got %T", d.GetValue())43 }44 return d, nil45}46func convertToDuration(arg types.Datum, fsp int) (d types.Datum, err error) {47 f := types.NewFieldType(mysql.TypeDuration)48 f.Decimal = fsp49 d, err = arg.ConvertTo(f)50 if err != nil {51 d.SetNull()52 return d, errors.Trace(err)53 }54 if d.IsNull() {55 return d, nil56 }57 if d.Kind() != types.KindMysqlDuration {58 d.SetNull()59 return d, errors.Errorf("need duration type, but got %T", d.GetValue())60 }61 return d, nil62}63func builtinDate(args []types.Datum, _ context.Context) (types.Datum, error) {64 return convertToTime(args[0], mysql.TypeDate)65}66func abbrDayOfMonth(arg types.Datum) (types.Datum, error) {67 day, err := builtinDayOfMonth([]types.Datum{arg}, nil)68 if err != nil || arg.IsNull() {69 return types.Datum{}, errors.Trace(err)70 }71 var str string72 switch day.GetInt64() {73 case 1, 21, 31:74 str = "st"75 case 2, 22:76 str = "nd"77 case 3, 23:78 str = "rd"79 default:80 str = "th"81 }82 d := types.NewStringDatum(fmt.Sprintf("%d%s", day.GetInt64(), str))83 return d, nil84}85func to12Hour(arg types.Datum) (types.Datum, error) {86 d, err := builtinTime([]types.Datum{arg}, nil)87 if err != nil || d.IsNull() {88 return d, errors.Trace(err)89 }90 var str string91 var hour int92 if d.GetMysqlDuration().Hour() > 12 {93 hour = 1294 str = "PM"95 } else {96 // If the hour value is 0 in 24-hour time system,97 // then the hour value is 23 in 12-hour time system.98 if d.GetMysqlDuration().Hour() == 0 {99 hour = -12100 }101 str = "AM"102 }103 duration := mysql.Duration{104 Duration: d.GetMysqlDuration().Duration - time.Duration(hour)*time.Hour,105 Fsp: 0}106 str = fmt.Sprintf("%v %s", duration, str)107 d.SetString(str)108 return d, nil109}110func convertDateFormat(arg types.Datum, b byte) (types.Datum, error) {111 var d types.Datum112 var err error113 switch b {114 case 'b':115 d, err = builtinMonthName([]types.Datum{arg}, nil)116 if err == nil && !d.IsNull() {117 d.SetString(d.GetString()[:3])118 }119 case 'M':120 d, err = builtinMonthName([]types.Datum{arg}, nil)121 case 'm':122 d, err = builtinMonth([]types.Datum{arg}, nil)123 if err == nil && !d.IsNull() {124 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))125 }126 case 'c':127 d, err = builtinMonth([]types.Datum{arg}, nil)128 case 'D':129 d, err = abbrDayOfMonth(arg)130 case 'd':131 d, err = builtinDayOfMonth([]types.Datum{arg}, nil)132 if err == nil && !d.IsNull() {133 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))134 }135 case 'e':136 d, err = builtinDayOfMonth([]types.Datum{arg}, nil)137 case 'j':138 d, err = builtinDayOfYear([]types.Datum{arg}, nil)139 if err == nil {140 d.SetString(fmt.Sprintf("%03d", d.GetInt64()))141 }142 case 'H', 'k':143 d, err = builtinHour([]types.Datum{arg}, nil)144 case 'h', 'I', 'l':145 d, err = builtinHour([]types.Datum{arg}, nil)146 if err == nil && !d.IsNull() {147 if d.GetInt64() > 12 {148 d.SetInt64(d.GetInt64() - 12)149 } else if d.GetInt64() == 0 {150 d.SetInt64(12)151 }152 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))153 }154 case 'i':155 d, err = builtinMinute([]types.Datum{arg}, nil)156 if err == nil && !d.IsNull() {157 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))158 }159 case 'p':160 d, err = builtinHour([]types.Datum{arg}, nil)161 if err == nil && !d.IsNull() {162 if d.GetInt64() < 12 {163 d.SetString("AM")164 break165 }166 d.SetString("PM")167 }168 case 'r':169 d, err = to12Hour(arg)170 case 'T':171 d, err = builtinTime([]types.Datum{arg}, nil)172 if err == nil && !d.IsNull() {173 duration := mysql.Duration{174 Duration: d.GetMysqlDuration().Duration,175 Fsp: 0}176 d.SetMysqlDuration(duration)177 }178 case 'S', 's':179 d, err = builtinSecond([]types.Datum{arg}, nil)180 if err == nil {181 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))182 }183 case 'f':184 d, err = builtinMicroSecond([]types.Datum{arg}, nil)185 case 'U':186 d, err = builtinWeek([]types.Datum{arg, types.NewIntDatum(0)}, nil)187 if err == nil && !d.IsNull() {188 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))189 }190 case 'u':191 d, err = builtinWeek([]types.Datum{arg, types.NewIntDatum(1)}, nil)192 if err == nil && !d.IsNull() {193 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))194 }195 case 'V':196 d, err = builtinWeek([]types.Datum{arg, types.NewIntDatum(2)}, nil)197 if err == nil && !d.IsNull() {198 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))199 }200 case 'v':201 d, err = builtinWeek([]types.Datum{arg, types.NewIntDatum(3)}, nil)202 if err == nil && !d.IsNull() {203 d.SetString(fmt.Sprintf("%02d", d.GetInt64()))204 }205 case 'a':206 d, err = builtinDayName([]types.Datum{arg}, nil)207 if err == nil && !d.IsNull() {208 d.SetString(d.GetString()[:3])209 }210 case 'W':211 d, err = builtinDayName([]types.Datum{arg}, nil)212 case 'w':213 d, err = builtinDayOfWeek([]types.Datum{arg}, nil)214 if err == nil && !d.IsNull() {215 d.SetInt64(d.GetInt64() - 1)216 }217 case 'X':218 d, err = builtinYearWeek([]types.Datum{arg, types.NewIntDatum(2)}, nil)219 if err == nil && !d.IsNull() {220 if d.GetInt64() == math.MaxUint32 {221 break222 }223 str := fmt.Sprintf("%04d", d.GetInt64())224 d.SetString(fmt.Sprintf("%04s", str[:4]))225 }226 case 'x':227 d, err = builtinYearWeek([]types.Datum{arg, types.NewIntDatum(3)}, nil)228 if err == nil && !d.IsNull() {229 if d.GetInt64() == math.MaxUint32 {230 break231 }232 str := fmt.Sprintf("%04d", d.GetInt64())233 d.SetString(fmt.Sprintf("%04s", str[:4]))234 }235 case 'Y':236 d, err = builtinYear([]types.Datum{arg}, nil)237 if err == nil && !d.IsNull() {238 d.SetString(fmt.Sprintf("%04d", d.GetInt64()))239 }240 case 'y':241 d, err = builtinYear([]types.Datum{arg}, nil)242 if err == nil && !d.IsNull() {243 str := fmt.Sprintf("%04d", d.GetInt64())244 d.SetString(fmt.Sprintf("%02s", str[2:]))245 }246 default:247 d.SetString(string(b))248 }249 if err == nil && !d.IsNull() {250 d.SetString(fmt.Sprintf("%v", d.GetValue()))251 }252 return d, errors.Trace(err)253}254// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format255func builtinDateFormat(args []types.Datum, _ context.Context) (types.Datum, error) {256 var (257 isPercent bool258 ret []byte259 d types.Datum260 )261 // TODO: Some invalid format like 2000-00-01(the month is 0) will return null.262 for _, b := range []byte(args[1].GetString()) {263 if isPercent {264 if b == '%' {265 ret = append(ret, b)266 } else {267 str, err := convertDateFormat(args[0], b)268 if err != nil {269 return types.Datum{}, errors.Trace(err)270 }271 if str.IsNull() {272 return types.Datum{}, nil273 }274 ret = append(ret, str.GetString()...)275 }276 isPercent = false277 continue278 }279 if b == '%' {280 isPercent = true281 } else {282 ret = append(ret, b)283 }284 }285 d.SetString(string(ret))286 return d, nil287}288// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_day289// Day is a synonym for DayOfMonth.290func builtinDay(args []types.Datum, ctx context.Context) (types.Datum, error) {291 return builtinDayOfMonth(args, ctx)292}293// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_hour294func builtinHour(args []types.Datum, _ context.Context) (types.Datum, error) {295 d, err := convertToDuration(args[0], mysql.MaxFsp)296 if err != nil || d.IsNull() {297 return d, errors.Trace(err)298 }299 // No need to check type here.300 h := int64(d.GetMysqlDuration().Hour())301 d.SetInt64(h)302 return d, nil303}304// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_minute305func builtinMinute(args []types.Datum, _ context.Context) (types.Datum, error) {306 d, err := convertToDuration(args[0], mysql.MaxFsp)307 if err != nil || d.IsNull() {308 return d, errors.Trace(err)309 }310 // No need to check type here.311 m := int64(d.GetMysqlDuration().Minute())312 d.SetInt64(m)313 return d, nil314}315// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_second316func builtinSecond(args []types.Datum, _ context.Context) (types.Datum, error) {317 d, err := convertToDuration(args[0], mysql.MaxFsp)318 if err != nil || d.IsNull() {319 return d, errors.Trace(err)320 }321 // No need to check type here.322 s := int64(d.GetMysqlDuration().Second())323 d.SetInt64(s)324 return d, nil325}326// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_microsecond327func builtinMicroSecond(args []types.Datum, _ context.Context) (types.Datum, error) {328 d, err := convertToDuration(args[0], mysql.MaxFsp)329 if err != nil || d.IsNull() {330 return d, errors.Trace(err)331 }332 // No need to check type here.333 m := int64(d.GetMysqlDuration().MicroSecond())334 d.SetInt64(m)335 return d, nil336}337// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_month338func builtinMonth(args []types.Datum, _ context.Context) (types.Datum, error) {339 d, err := convertToTime(args[0], mysql.TypeDate)340 if err != nil || d.IsNull() {341 return d, errors.Trace(err)342 }343 // No need to check type here.344 t := d.GetMysqlTime()345 i := int64(0)346 if t.IsZero() {347 d.SetInt64(i)348 return d, nil349 }350 i = int64(t.Month())351 d.SetInt64(i)352 return d, nil353}354// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_monthname355func builtinMonthName(args []types.Datum, _ context.Context) (types.Datum, error) {356 d, err := builtinMonth(args, nil)357 if err != nil || d.IsNull() {358 return d, errors.Trace(err)359 }360 mon := int(d.GetInt64())361 if mon <= 0 || mon > len(mysql.MonthNames) {362 d.SetNull()363 if mon == 0 {364 return d, nil365 }366 return d, errors.Errorf("no name for invalid month: %d.", mon)367 }368 d.SetString(mysql.MonthNames[mon-1])369 return d, nil370}371func builtinNow(args []types.Datum, _ context.Context) (d types.Datum, err error) {372 // TODO: if NOW is used in stored function or trigger, NOW will return the beginning time373 // of the execution.374 fsp := 0375 if len(args) == 1 && !args[0].IsNull() {376 if fsp, err = checkFsp(args[0]); err != nil {377 d.SetNull()378 return d, errors.Trace(err)379 }380 }381 t := mysql.Time{382 Time: time.Now(),383 Type: mysql.TypeDatetime,384 // set unspecified for later round385 Fsp: mysql.UnspecifiedFsp,386 }387 tr, err := t.RoundFrac(int(fsp))388 if err != nil {389 d.SetNull()390 return d, errors.Trace(err)391 }392 d.SetMysqlTime(tr)393 return d, nil394}395// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayname396func builtinDayName(args []types.Datum, ctx context.Context) (types.Datum, error) {397 d, err := builtinWeekDay(args, ctx)398 if err != nil || d.IsNull() {399 return d, errors.Trace(err)400 }401 weekday := d.GetInt64()402 if (weekday < 0) || (weekday >= int64(len(mysql.WeekdayNames))) {403 d.SetNull()404 return d, errors.Errorf("no name for invalid weekday: %d.", weekday)405 }406 d.SetString(mysql.WeekdayNames[weekday])407 return d, nil408}409// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofmonth410func builtinDayOfMonth(args []types.Datum, _ context.Context) (d types.Datum, err error) {411 // TODO: some invalid format like 2000-00-00 will return 0 too.412 d, err = convertToTime(args[0], mysql.TypeDate)413 if err != nil || d.IsNull() {414 return d, errors.Trace(err)415 }416 // No need to check type here.417 t := d.GetMysqlTime()418 if t.IsZero() {419 d.SetInt64(int64(0))420 return d, nil421 }422 d.SetInt64(int64(t.Day()))423 return d, nil424}425// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofweek426func builtinDayOfWeek(args []types.Datum, _ context.Context) (d types.Datum, err error) {427 d, err = convertToTime(args[0], mysql.TypeDate)428 if err != nil || d.IsNull() {429 return d, errors.Trace(err)430 }431 // No need to check type here.432 t := d.GetMysqlTime()433 if t.IsZero() {434 d.SetNull()435 // TODO: log warning or return error?436 return d, nil437 }438 // 1 is Sunday, 2 is Monday, .... 7 is Saturday439 d.SetInt64(int64(t.Weekday()) + 1)440 return d, nil441}442// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_dayofyear443func builtinDayOfYear(args []types.Datum, _ context.Context) (types.Datum, error) {444 d, err := convertToTime(args[0], mysql.TypeDate)445 if err != nil || d.IsNull() {446 return d, errors.Trace(err)447 }448 t := d.GetMysqlTime()449 if t.IsZero() {450 // TODO: log warning or return error?451 d.SetNull()452 return d, nil453 }454 yd := int64(t.YearDay())455 d.SetInt64(yd)456 return d, nil457}458// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_week459func builtinWeek(args []types.Datum, _ context.Context) (types.Datum, error) {460 d, err := convertToTime(args[0], mysql.TypeDate)461 if err != nil || d.IsNull() {462 return d, errors.Trace(err)463 }464 // No need to check type here.465 t := d.GetMysqlTime()466 if t.IsZero() {467 // TODO: log warning or return error?468 d.SetNull()469 return d, nil470 }471 // TODO: support multi mode for week472 _, week := t.ISOWeek()473 wi := int64(week)474 d.SetInt64(wi)475 return d, nil476}477// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_weekday478func builtinWeekDay(args []types.Datum, _ context.Context) (types.Datum, error) {479 d, err := convertToTime(args[0], mysql.TypeDate)480 if err != nil || d.IsNull() {481 return d, errors.Trace(err)482 }483 // No need to check type here.484 t := d.GetMysqlTime()485 if t.IsZero() {486 // TODO: log warning or return error?487 d.SetNull()488 return d, nil489 }490 // Monday is 0, ... Sunday = 6 in MySQL491 // but in go, Sunday is 0, ... Saturday is 6492 // w will do a conversion.493 w := (int64(t.Weekday()) + 6) % 7494 d.SetInt64(w)495 return d, nil496}497// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_weekofyear498func builtinWeekOfYear(args []types.Datum, ctx context.Context) (types.Datum, error) {499 // WeekOfYear is equivalent to to Week(date, 3)500 d := types.Datum{}501 d.SetInt64(3)502 return builtinWeek([]types.Datum{args[0], d}, ctx)503}504// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_year505func builtinYear(args []types.Datum, _ context.Context) (types.Datum, error) {506 d, err := convertToTime(args[0], mysql.TypeDate)507 if err != nil || d.IsNull() {508 return d, errors.Trace(err)509 }510 // No need to check type here.511 t := d.GetMysqlTime()512 if t.IsZero() {513 d.SetInt64(0)514 return d, nil515 }516 d.SetInt64(int64(t.Year()))517 return d, nil518}519// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_yearweek520func builtinYearWeek(args []types.Datum, _ context.Context) (types.Datum, error) {521 d, err := convertToTime(args[0], mysql.TypeDate)522 if err != nil || d.IsNull() {523 return d, errors.Trace(err)524 }525 // No need to check type here.526 t := d.GetMysqlTime()527 if t.IsZero() {528 d.SetNull()529 // TODO: log warning or return error?530 return d, nil531 }532 // TODO: support multi mode for week533 year, week := t.ISOWeek()534 d.SetInt64(int64(year*100 + week))535 if d.GetInt64() < 0 {536 d.SetInt64(math.MaxUint32)537 }538 return d, nil539}540func builtinSysDate(args []types.Datum, ctx context.Context) (types.Datum, error) {541 // SYSDATE is not the same as NOW if NOW is used in a stored function or trigger.542 // But here we can just think they are the same because we don't support stored function543 // and trigger now.544 return builtinNow(args, ctx)545}546// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_curdate547func builtinCurrentDate(args []types.Datum, _ context.Context) (d types.Datum, err error) {548 year, month, day := time.Now().Date()549 t := mysql.Time{550 Time: time.Date(year, month, day, 0, 0, 0, 0, time.Local),551 Type: mysql.TypeDate, Fsp: 0}552 d.SetMysqlTime(t)553 return d, nil554}555// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_curtime556func builtinCurrentTime(args []types.Datum, _ context.Context) (d types.Datum, err error) {557 fsp := 0558 if len(args) == 1 && !args[0].IsNull() {559 if fsp, err = checkFsp(args[0]); err != nil {560 d.SetNull()561 return d, errors.Trace(err)562 }563 }564 d.SetString(time.Now().Format("15:04:05.000000"))565 return convertToDuration(d, fsp)566}567// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_time568func builtinTime(args []types.Datum, _ context.Context) (d types.Datum, err error) {569 if args[0].IsNull() {570 return571 }572 str, err := args[0].ToString()573 if err != nil {574 return d, errors.Trace(err)575 }576 idx := strings.Index(str, ".")577 fsp := 0578 if idx != -1 {579 fsp = len(str) - idx - 1580 }581 fspD := types.NewIntDatum(int64(fsp))582 if fsp, err = checkFsp(fspD); err != nil {583 return d, errors.Trace(err)584 }585 return convertToDuration(args[0], fsp)586}587// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_utc-date588func builtinUTCDate(args []types.Datum, _ context.Context) (d types.Datum, err error) {589 year, month, day := time.Now().UTC().Date()590 t := mysql.Time{591 Time: time.Date(year, month, day, 0, 0, 0, 0, time.UTC),592 Type: mysql.TypeDate, Fsp: mysql.UnspecifiedFsp}593 d.SetMysqlTime(t)594 return d, nil595}596// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_extract597func builtinExtract(args []types.Datum, _ context.Context) (d types.Datum, err error) {598 unit := args[0].GetString()599 vd := args[1]600 if vd.IsNull() {601 d.SetNull()602 return d, nil603 }604 f := types.NewFieldType(mysql.TypeDatetime)605 f.Decimal = mysql.MaxFsp606 val, err := vd.ConvertTo(f)607 if err != nil {608 d.SetNull()609 return d, errors.Trace(err)610 }611 if val.IsNull() {612 d.SetNull()613 return d, nil614 }615 if val.Kind() != types.KindMysqlTime {616 d.SetNull()617 return d, errors.Errorf("need time type, but got %T", val)618 }619 t := val.GetMysqlTime()620 n, err1 := mysql.ExtractTimeNum(unit, t)621 if err1 != nil {622 d.SetNull()623 return d, errors.Trace(err1)624 }625 d.SetInt64(n)626 return d, nil627}628func checkFsp(arg types.Datum) (int, error) {629 fsp, err := arg.ToInt64()630 if err != nil {631 return 0, errors.Trace(err)632 }633 if int(fsp) > mysql.MaxFsp {634 return 0, errors.Errorf("Too big precision %d specified. Maximum is 6.", fsp)635 } else if fsp < 0 {636 return 0, errors.Errorf("Invalid negative %d specified, must in [0, 6].", fsp)637 }638 return int(fsp), nil639}640func builtinDateArith(args []types.Datum, ctx context.Context) (d types.Datum, err error) {641 // Op is used for distinguishing date_add and date_sub.642 // args[0] -> Op643 // args[1] -> Date644 // args[2] -> DateArithInterval645 // health check for date and interval646 if args[1].IsNull() {647 return d, nil648 }649 nodeDate := args[1]650 nodeInterval := args[2].GetInterface().(ast.DateArithInterval)651 nodeIntervalIntervalDatum := nodeInterval.Interval.GetDatum()652 if nodeIntervalIntervalDatum.IsNull() {653 return d, nil654 }655 // parse date656 fieldType := mysql.TypeDate657 var resultField *types.FieldType658 switch nodeDate.Kind() {659 case types.KindMysqlTime:660 x := nodeDate.GetMysqlTime()661 if (x.Type == mysql.TypeDatetime) || (x.Type == mysql.TypeTimestamp) {662 fieldType = mysql.TypeDatetime663 }664 case types.KindString:665 x := nodeDate.GetString()666 if !mysql.IsDateFormat(x) {667 fieldType = mysql.TypeDatetime668 }669 case types.KindInt64:670 x := nodeDate.GetInt64()671 if t, err1 := mysql.ParseTimeFromInt64(x); err1 == nil {672 if (t.Type == mysql.TypeDatetime) || (t.Type == mysql.TypeTimestamp) {673 fieldType = mysql.TypeDatetime674 }675 }676 }677 if mysql.IsClockUnit(nodeInterval.Unit) {678 fieldType = mysql.TypeDatetime679 }680 resultField = types.NewFieldType(fieldType)681 resultField.Decimal = mysql.MaxFsp682 value, err := nodeDate.ConvertTo(resultField)683 if err != nil {684 return d, ErrInvalidOperation.Gen("DateArith invalid args, need date but get %T", nodeDate)685 }686 if value.IsNull() {687 return d, ErrInvalidOperation.Gen("DateArith invalid args, need date but get %v", value.GetValue())688 }689 if value.Kind() != types.KindMysqlTime {690 return d, ErrInvalidOperation.Gen("DateArith need time type, but got %T", value.GetValue())691 }692 result := value.GetMysqlTime()693 // parse interval694 var interval string695 if strings.ToLower(nodeInterval.Unit) == "day" {696 day, err1 := parseDayInterval(*nodeIntervalIntervalDatum)697 if err1 != nil {698 return d, ErrInvalidOperation.Gen("DateArith invalid day interval, need int but got %T", nodeIntervalIntervalDatum.GetString())699 }700 interval = fmt.Sprintf("%d", day)701 } else {702 if nodeIntervalIntervalDatum.Kind() == types.KindString {703 interval = fmt.Sprintf("%v", nodeIntervalIntervalDatum.GetString())704 } else {705 ii, err1 := nodeIntervalIntervalDatum.ToInt64()706 if err1 != nil {707 return d, errors.Trace(err1)708 }709 interval = fmt.Sprintf("%v", ii)710 }711 }712 year, month, day, duration, err := mysql.ExtractTimeValue(nodeInterval.Unit, interval)713 if err != nil {714 return d, errors.Trace(err)715 }716 op := args[0].GetInterface().(ast.DateArithType)717 if op == ast.DateSub {718 year, month, day, duration = -year, -month, -day, -duration719 }720 result.Time = result.Time.Add(duration)721 result.Time = result.Time.AddDate(int(year), int(month), int(day))722 if result.Time.Nanosecond() == 0 {723 result.Fsp = 0724 }725 d.SetMysqlTime(result)726 return d, nil727}728var reg = regexp.MustCompile(`[\d]+`)729func parseDayInterval(value types.Datum) (int64, error) {730 switch value.Kind() {731 case types.KindString:732 vs := value.GetString()733 s := strings.ToLower(vs)734 if s == "false" {735 return 0, nil736 } else if s == "true" {737 return 1, nil738 }739 value.SetString(reg.FindString(vs))740 }741 return value.ToInt64()742}...

Full Screen

Full Screen

aggregation_test.go

Source:aggregation_test.go Github

copy

Full Screen

1// Copyright 2018 PingCAP, Inc.2//3// Licensed under the Apache License, Version 2.0 (the "License");4// you may not use this file except in compliance with the License.5// You may obtain a copy of the License at6//7// http://www.apache.org/licenses/LICENSE-2.08//9// Unless required by applicable law or agreed to in writing, software10// distributed under the License is distributed on an "AS IS" BASIS,11// See the License for the specific language governing permissions and12// limitations under the License.13package aggregation14import (15 "testing"16 . "github.com/pingcap/check"17 "github.com/pingcap/tidb/expression"18 "github.com/pingcap/tidb/parser/ast"19 "github.com/pingcap/tidb/parser/mysql"20 "github.com/pingcap/tidb/sessionctx"21 "github.com/pingcap/tidb/sessionctx/variable"22 "github.com/pingcap/tidb/types"23 "github.com/pingcap/tidb/util/chunk"24 "github.com/pingcap/tidb/util/mock"25)26var _ = Suite(&testAggFuncSuit{})27func TestT(t *testing.T) {28 CustomVerboseFlag = true29 TestingT(t)30}31type testAggFuncSuit struct {32 ctx sessionctx.Context33 rows []chunk.Row34 nullRow chunk.Row35}36func generateRowData() []chunk.Row {37 rows := make([]chunk.Row, 0, 5050)38 for i := 1; i <= 100; i++ {39 for j := 0; j < i; j++ {40 rows = append(rows, chunk.MutRowFromDatums(types.MakeDatums(i)).ToRow())41 }42 }43 return rows44}45func (s *testAggFuncSuit) SetUpSuite(c *C) {46 s.ctx = mock.NewContext()47 s.ctx.GetSessionVars().GlobalVarsAccessor = variable.NewMockGlobalAccessor()48 s.rows = generateRowData()49 s.nullRow = chunk.MutRowFromDatums([]types.Datum{{}}).ToRow()50}51func (s *testAggFuncSuit) TestAvg(c *C) {52 col := &expression.Column{53 Index: 0,54 RetType: types.NewFieldType(mysql.TypeLonglong),55 }56 ctx := mock.NewContext()57 desc, err := NewAggFuncDesc(s.ctx, ast.AggFuncAvg, []expression.Expression{col})58 c.Assert(err, IsNil)59 avgFunc := desc.GetAggFunc(ctx)60 evalCtx := avgFunc.CreateContext(s.ctx.GetSessionVars().StmtCtx)61 result := avgFunc.GetResult(evalCtx)62 c.Assert(result.IsNull(), IsTrue)63 for _, row := range s.rows {64 err := avgFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, row)65 c.Assert(err, IsNil)66 }67 result = avgFunc.GetResult(evalCtx)68 c.Assert(result.GetInt64(), Equals, int64(67))69 err = avgFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, s.nullRow)70 c.Assert(err, IsNil)71 result = avgFunc.GetResult(evalCtx)72 c.Assert(result.GetInt64(), Equals, int64(67))73}74func (s *testAggFuncSuit) TestAvgFinalMode(c *C) {75 rows := make([][]types.Datum, 0, 100)76 for i := 1; i <= 100; i++ {77 rows = append(rows, types.MakeDatums(i, int64(i*i)))78 }79 ctx := mock.NewContext()80 cntCol := &expression.Column{81 Index: 0,82 RetType: types.NewFieldType(mysql.TypeLonglong),83 }84 sumCol := &expression.Column{85 Index: 1,86 RetType: types.NewFieldType(mysql.TypeLonglong),87 }88 aggFunc, err := NewAggFuncDesc(s.ctx, ast.AggFuncAvg, []expression.Expression{cntCol, sumCol})89 c.Assert(err, IsNil)90 aggFunc.Mode = FinalMode91 avgFunc := aggFunc.GetAggFunc(ctx)92 evalCtx := avgFunc.CreateContext(s.ctx.GetSessionVars().StmtCtx)93 for _, row := range rows {94 err := avgFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, chunk.MutRowFromDatums(row).ToRow())95 c.Assert(err, IsNil)96 }97 result := avgFunc.GetResult(evalCtx)98 c.Assert(result.GetInt64(), Equals, int64(67))99}100func (s *testAggFuncSuit) TestSum(c *C) {101 col := &expression.Column{102 Index: 0,103 RetType: types.NewFieldType(mysql.TypeLonglong),104 }105 ctx := mock.NewContext()106 desc, err := NewAggFuncDesc(s.ctx, ast.AggFuncSum, []expression.Expression{col})107 c.Assert(err, IsNil)108 sumFunc := desc.GetAggFunc(ctx)109 evalCtx := sumFunc.CreateContext(s.ctx.GetSessionVars().StmtCtx)110 result := sumFunc.GetResult(evalCtx)111 c.Assert(result.IsNull(), IsTrue)112 for _, row := range s.rows {113 err := sumFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, row)114 c.Assert(err, IsNil)115 }116 result = sumFunc.GetResult(evalCtx)117 c.Assert(result.GetInt64(), Equals, int64(338350))118 err = sumFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, s.nullRow)119 c.Assert(err, IsNil)120 result = sumFunc.GetResult(evalCtx)121 c.Assert(result.GetInt64(), Equals, int64(338350))122 partialResult := sumFunc.GetPartialResult(evalCtx)123 c.Assert(partialResult[0].GetInt64(), Equals, int64(338350))124}125func (s *testAggFuncSuit) TestCount(c *C) {126 col := &expression.Column{127 Index: 0,128 RetType: types.NewFieldType(mysql.TypeLonglong),129 }130 ctx := mock.NewContext()131 desc, err := NewAggFuncDesc(s.ctx, ast.AggFuncCount, []expression.Expression{col})132 c.Assert(err, IsNil)133 countFunc := desc.GetAggFunc(ctx)134 evalCtx := countFunc.CreateContext(s.ctx.GetSessionVars().StmtCtx)135 result := countFunc.GetResult(evalCtx)136 c.Assert(result.GetInt64(), Equals, int64(0))137 for _, row := range s.rows {138 err := countFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, row)139 c.Assert(err, IsNil)140 }141 result = countFunc.GetResult(evalCtx)142 c.Assert(result.GetInt64(), Equals, int64(5050))143 err = countFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, s.nullRow)144 c.Assert(err, IsNil)145 result = countFunc.GetResult(evalCtx)146 c.Assert(result.GetInt64(), Equals, int64(5050))147 partialResult := countFunc.GetPartialResult(evalCtx)148 c.Assert(partialResult[0].GetInt64(), Equals, int64(5050))149}150func (s *testAggFuncSuit) TestFirstRow(c *C) {151 col := &expression.Column{152 Index: 0,153 RetType: types.NewFieldType(mysql.TypeLonglong),154 }155 ctx := mock.NewContext()156 desc, err := NewAggFuncDesc(s.ctx, ast.AggFuncFirstRow, []expression.Expression{col})157 c.Assert(err, IsNil)158 firstRowFunc := desc.GetAggFunc(ctx)159 evalCtx := firstRowFunc.CreateContext(s.ctx.GetSessionVars().StmtCtx)160 row := chunk.MutRowFromDatums(types.MakeDatums(1)).ToRow()161 err = firstRowFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, row)162 c.Assert(err, IsNil)163 result := firstRowFunc.GetResult(evalCtx)164 c.Assert(result.GetUint64(), Equals, uint64(1))165 row = chunk.MutRowFromDatums(types.MakeDatums(2)).ToRow()166 err = firstRowFunc.Update(evalCtx, s.ctx.GetSessionVars().StmtCtx, row)167 c.Assert(err, IsNil)168 result = firstRowFunc.GetResult(evalCtx)169 c.Assert(result.GetUint64(), Equals, uint64(1))170 partialResult := firstRowFunc.GetPartialResult(evalCtx)171 c.Assert(partialResult[0].GetUint64(), Equals, uint64(1))172}173func (s *testAggFuncSuit) TestMaxMin(c *C) {174 col := &expression.Column{175 Index: 0,176 RetType: types.NewFieldType(mysql.TypeLonglong),177 }178 ctx := mock.NewContext()179 desc, err := NewAggFuncDesc(s.ctx, ast.AggFuncMax, []expression.Expression{col})180 c.Assert(err, IsNil)181 maxFunc := desc.GetAggFunc(ctx)182 desc, err = NewAggFuncDesc(s.ctx, ast.AggFuncMin, []expression.Expression{col})183 c.Assert(err, IsNil)184 minFunc := desc.GetAggFunc(ctx)185 maxEvalCtx := maxFunc.CreateContext(s.ctx.GetSessionVars().StmtCtx)186 minEvalCtx := minFunc.CreateContext(s.ctx.GetSessionVars().StmtCtx)187 result := maxFunc.GetResult(maxEvalCtx)188 c.Assert(result.IsNull(), IsTrue)189 result = minFunc.GetResult(minEvalCtx)190 c.Assert(result.IsNull(), IsTrue)191 row := chunk.MutRowFromDatums(types.MakeDatums(2))192 err = maxFunc.Update(maxEvalCtx, s.ctx.GetSessionVars().StmtCtx, row.ToRow())193 c.Assert(err, IsNil)194 result = maxFunc.GetResult(maxEvalCtx)195 c.Assert(result.GetInt64(), Equals, int64(2))196 err = minFunc.Update(minEvalCtx, s.ctx.GetSessionVars().StmtCtx, row.ToRow())197 c.Assert(err, IsNil)198 result = minFunc.GetResult(minEvalCtx)199 c.Assert(result.GetInt64(), Equals, int64(2))200 row.SetDatum(0, types.NewIntDatum(3))201 err = maxFunc.Update(maxEvalCtx, s.ctx.GetSessionVars().StmtCtx, row.ToRow())202 c.Assert(err, IsNil)203 result = maxFunc.GetResult(maxEvalCtx)204 c.Assert(result.GetInt64(), Equals, int64(3))205 err = minFunc.Update(minEvalCtx, s.ctx.GetSessionVars().StmtCtx, row.ToRow())206 c.Assert(err, IsNil)207 result = minFunc.GetResult(minEvalCtx)208 c.Assert(result.GetInt64(), Equals, int64(2))209 row.SetDatum(0, types.NewIntDatum(1))210 err = maxFunc.Update(maxEvalCtx, s.ctx.GetSessionVars().StmtCtx, row.ToRow())211 c.Assert(err, IsNil)212 result = maxFunc.GetResult(maxEvalCtx)213 c.Assert(result.GetInt64(), Equals, int64(3))214 err = minFunc.Update(minEvalCtx, s.ctx.GetSessionVars().StmtCtx, row.ToRow())215 c.Assert(err, IsNil)216 result = minFunc.GetResult(minEvalCtx)217 c.Assert(result.GetInt64(), Equals, int64(1))218 row.SetDatum(0, types.NewDatum(nil))219 err = maxFunc.Update(maxEvalCtx, s.ctx.GetSessionVars().StmtCtx, row.ToRow())220 c.Assert(err, IsNil)221 result = maxFunc.GetResult(maxEvalCtx)222 c.Assert(result.GetInt64(), Equals, int64(3))223 err = minFunc.Update(minEvalCtx, s.ctx.GetSessionVars().StmtCtx, row.ToRow())224 c.Assert(err, IsNil)225 result = minFunc.GetResult(minEvalCtx)226 c.Assert(result.GetInt64(), Equals, int64(1))227 partialResult := minFunc.GetPartialResult(minEvalCtx)228 c.Assert(partialResult[0].GetInt64(), Equals, int64(1))229}...

Full Screen

Full Screen

bootstrap.go

Source:bootstrap.go Github

copy

Full Screen

1// Copyright 2017 PingCAP, Inc.2//3// Licensed under the Apache License, Version 2.0 (the "License");4// you may not use this file except in compliance with the License.5// You may obtain a copy of the License at6//7// http://www.apache.org/licenses/LICENSE-2.08//9// Unless required by applicable law or agreed to in writing, software10// distributed under the License is distributed on an "AS IS" BASIS,11// See the License for the specific language governing permissions and12// limitations under the License.13package statistics14import (15 "fmt"16 "github.com/hanchuanchuan/goInception/infoschema"17 "github.com/hanchuanchuan/goInception/model"18 "github.com/hanchuanchuan/goInception/mysql"19 "github.com/hanchuanchuan/goInception/sessionctx"20 "github.com/hanchuanchuan/goInception/terror"21 "github.com/hanchuanchuan/goInception/types"22 "github.com/hanchuanchuan/goInception/util/chunk"23 "github.com/hanchuanchuan/goInception/util/sqlexec"24 "github.com/pingcap/errors"25 log "github.com/sirupsen/logrus"26 "golang.org/x/net/context"27)28func (h *Handle) initStatsMeta4Chunk(is infoschema.InfoSchema, tables statsCache, iter *chunk.Iterator4Chunk) {29 for row := iter.Begin(); row != iter.End(); row = iter.Next() {30 physicalID := row.GetInt64(1)31 table, ok := h.getTableByPhysicalID(is, physicalID)32 if !ok {33 log.Debugf("Unknown physical ID %d in stats meta table, maybe it has been dropped", physicalID)34 continue35 }36 tableInfo := table.Meta()37 newHistColl := HistColl{38 PhysicalID: physicalID,39 HavePhysicalID: true,40 Count: row.GetInt64(3),41 ModifyCount: row.GetInt64(2),42 Columns: make(map[int64]*Column, len(tableInfo.Columns)),43 Indices: make(map[int64]*Index, len(tableInfo.Indices)),44 }45 tbl := &Table{46 HistColl: newHistColl,47 Version: row.GetUint64(0),48 name: getFullTableName(is, tableInfo),49 }50 tables[physicalID] = tbl51 }52}53func (h *Handle) initStatsMeta(is infoschema.InfoSchema) (statsCache, error) {54 h.mu.Lock()55 defer h.mu.Unlock()56 sql := "select HIGH_PRIORITY version, table_id, modify_count, count from mysql.stats_meta"57 rc, err := h.mu.ctx.(sqlexec.SQLExecutor).Execute(context.TODO(), sql)58 if len(rc) > 0 {59 defer terror.Call(rc[0].Close)60 }61 if err != nil {62 return nil, errors.Trace(err)63 }64 tables := statsCache{}65 chk := rc[0].NewChunk()66 iter := chunk.NewIterator4Chunk(chk)67 for {68 err := rc[0].Next(context.TODO(), chk)69 if err != nil {70 return nil, errors.Trace(err)71 }72 if chk.NumRows() == 0 {73 break74 }75 h.initStatsMeta4Chunk(is, tables, iter)76 }77 return tables, nil78}79func (h *Handle) initStatsHistograms4Chunk(is infoschema.InfoSchema, tables statsCache, iter *chunk.Iterator4Chunk) {80 for row := iter.Begin(); row != iter.End(); row = iter.Next() {81 table, ok := tables[row.GetInt64(0)]82 if !ok {83 continue84 }85 id, ndv, nullCount, version, totColSize := row.GetInt64(2), row.GetInt64(3), row.GetInt64(5), row.GetUint64(4), row.GetInt64(7)86 tbl, _ := h.getTableByPhysicalID(is, table.PhysicalID)87 if row.GetInt64(1) > 0 {88 var idxInfo *model.IndexInfo89 for _, idx := range tbl.Meta().Indices {90 if idx.ID == id {91 idxInfo = idx92 break93 }94 }95 if idxInfo == nil {96 continue97 }98 cms, err := decodeCMSketch(row.GetBytes(6))99 if err != nil {100 cms = nil101 terror.Log(errors.Trace(err))102 }103 hist := NewHistogram(id, ndv, nullCount, version, types.NewFieldType(mysql.TypeBlob), chunk.InitialCapacity, 0)104 table.Indices[hist.ID] = &Index{Histogram: *hist, CMSketch: cms, Info: idxInfo, statsVer: row.GetInt64(8)}105 } else {106 var colInfo *model.ColumnInfo107 for _, col := range tbl.Meta().Columns {108 if col.ID == id {109 colInfo = col110 break111 }112 }113 if colInfo == nil {114 continue115 }116 hist := NewHistogram(id, ndv, nullCount, version, &colInfo.FieldType, 0, totColSize)117 table.Columns[hist.ID] = &Column{Histogram: *hist, Info: colInfo, Count: nullCount}118 }119 }120}121func (h *Handle) initStatsHistograms(is infoschema.InfoSchema, tables statsCache) error {122 h.mu.Lock()123 defer h.mu.Unlock()124 sql := "select HIGH_PRIORITY table_id, is_index, hist_id, distinct_count, version, null_count, cm_sketch, tot_col_size, stats_ver from mysql.stats_histograms"125 rc, err := h.mu.ctx.(sqlexec.SQLExecutor).Execute(context.TODO(), sql)126 if len(rc) > 0 {127 defer terror.Call(rc[0].Close)128 }129 if err != nil {130 return errors.Trace(err)131 }132 chk := rc[0].NewChunk()133 iter := chunk.NewIterator4Chunk(chk)134 for {135 err := rc[0].Next(context.TODO(), chk)136 if err != nil {137 return errors.Trace(err)138 }139 if chk.NumRows() == 0 {140 break141 }142 h.initStatsHistograms4Chunk(is, tables, iter)143 }144 return nil145}146func initStatsBuckets4Chunk(ctx sessionctx.Context, tables statsCache, iter *chunk.Iterator4Chunk) {147 for row := iter.Begin(); row != iter.End(); row = iter.Next() {148 tableID, isIndex, histID := row.GetInt64(0), row.GetInt64(1), row.GetInt64(2)149 table, ok := tables[tableID]150 if !ok {151 continue152 }153 var lower, upper types.Datum154 var hist *Histogram155 if isIndex > 0 {156 index, ok := table.Indices[histID]157 if !ok {158 continue159 }160 hist = &index.Histogram161 lower, upper = types.NewBytesDatum(row.GetBytes(5)), types.NewBytesDatum(row.GetBytes(6))162 } else {163 column, ok := table.Columns[histID]164 if !ok {165 continue166 }167 column.Count += row.GetInt64(3)168 if !mysql.HasPriKeyFlag(column.Info.Flag) {169 continue170 }171 hist = &column.Histogram172 d := types.NewBytesDatum(row.GetBytes(5))173 var err error174 lower, err = d.ConvertTo(ctx.GetSessionVars().StmtCtx, &column.Info.FieldType)175 if err != nil {176 log.Debugf("decode bucket lower bound failed: %s", errors.ErrorStack(err))177 delete(table.Columns, histID)178 continue179 }180 d = types.NewBytesDatum(row.GetBytes(6))181 upper, err = d.ConvertTo(ctx.GetSessionVars().StmtCtx, &column.Info.FieldType)182 if err != nil {183 log.Debugf("decode bucket upper bound failed: %s", errors.ErrorStack(err))184 delete(table.Columns, histID)185 continue186 }187 }188 hist.AppendBucket(&lower, &upper, row.GetInt64(3), row.GetInt64(4))189 }190}191func (h *Handle) initStatsBuckets(tables statsCache) error {192 h.mu.Lock()193 defer h.mu.Unlock()194 sql := "select HIGH_PRIORITY table_id, is_index, hist_id, count, repeats, lower_bound, upper_bound from mysql.stats_buckets order by table_id, is_index, hist_id, bucket_id"195 rc, err := h.mu.ctx.(sqlexec.SQLExecutor).Execute(context.TODO(), sql)196 if len(rc) > 0 {197 defer terror.Call(rc[0].Close)198 }199 if err != nil {200 return errors.Trace(err)201 }202 chk := rc[0].NewChunk()203 iter := chunk.NewIterator4Chunk(chk)204 for {205 err := rc[0].Next(context.TODO(), chk)206 if err != nil {207 return errors.Trace(err)208 }209 if chk.NumRows() == 0 {210 break211 }212 initStatsBuckets4Chunk(h.mu.ctx, tables, iter)213 }214 for _, table := range tables {215 if h.mu.lastVersion < table.Version {216 h.mu.lastVersion = table.Version217 }218 for _, idx := range table.Indices {219 for i := 1; i < idx.Len(); i++ {220 idx.Buckets[i].Count += idx.Buckets[i-1].Count221 }222 idx.PreCalculateScalar()223 }224 for _, col := range table.Columns {225 for i := 1; i < col.Len(); i++ {226 col.Buckets[i].Count += col.Buckets[i-1].Count227 }228 col.PreCalculateScalar()229 }230 }231 return nil232}233// InitStats will init the stats cache using full load strategy.234func (h *Handle) InitStats(is infoschema.InfoSchema) error {235 tables, err := h.initStatsMeta(is)236 if err != nil {237 return errors.Trace(err)238 }239 err = h.initStatsHistograms(is, tables)240 if err != nil {241 return errors.Trace(err)242 }243 err = h.initStatsBuckets(tables)244 if err != nil {245 return errors.Trace(err)246 }247 h.statsCache.Store(tables)248 return nil249}250func getFullTableName(is infoschema.InfoSchema, tblInfo *model.TableInfo) string {251 for _, schema := range is.AllSchemas() {252 if t, err := is.TableByName(schema.Name, tblInfo.Name); err == nil {253 if t.Meta().ID == tblInfo.ID {254 return schema.Name.O + "." + tblInfo.Name.O255 }256 }257 }258 return fmt.Sprintf("%d", tblInfo.ID)259}...

Full Screen

Full Screen

getInt64

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println(types.GetInt64(10))4}5import (6func main() {7 fmt.Println(types.GetInt64(10))8}9import (10func main() {11 fmt.Println(t.GetInt64(10))12}

Full Screen

Full Screen

getInt64

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 s := []types.Sortable{types.Int64(10), types.Int64(2), types.Int64(3)}4 types.Int64.Sort(s)5 fmt.Println(s)6}

Full Screen

Full Screen

getInt64

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println(types.GetInt64(1))4}5import (6func main() {7 fmt.Println(types.GetInt64(1))8}9import (10func main() {11 fmt.Println(types.GetInt64(1))12}13import (14func main() {15 fmt.Println(types.GetInt64(1))16}17import (18func main() {19 fmt.Println(types.GetInt64(1))20}21import (22func main() {23 fmt.Println(types.GetInt64(1))24}25import (26func main() {27 fmt.Println(types.GetInt64(1))28}29import (30func main() {31 fmt.Println(types.GetInt64(1))32}33import (34func main() {35 fmt.Println(types.GetInt64(1))36}

Full Screen

Full Screen

getInt64

Using AI Code Generation

copy

Full Screen

1import (2func main() {3 fmt.Println("Hello, playground")4 fmt.Println(types.GetInt64(i))5 fmt.Println(types.GetString(s))6 fmt.Println(types.GetFloat64(f))7}8import (9func main() {10 fmt.Println("Hello, playground")11 fmt.Println(types.GetInt64(i))12 fmt.Println(types.GetString(s))13 fmt.Println(types.GetFloat64(f))14}15import (16func GetInt64(i interface{}) int64 {17 switch i.(type) {18 return i.(int64)19 v, err := strconv.ParseInt(i.(string), 10, 64)20 if err != nil {21 fmt.Println("Error in parsing string to int64")22 }23 return int64(i.(float64))24 }25}26func GetString(i interface{}) string {27 switch i.(type) {28 return strconv.FormatInt(i.(int64), 10)29 return i.(string)30 return strconv.FormatFloat(i.(float64), 'f', -1, 64)31 }32}33func GetFloat64(i interface{}) float64 {34 switch i.(type) {35 return float64(i.(int64))36 v, err := strconv.ParseFloat(i.(string), 64)37 if err != nil {38 fmt.Println("Error in parsing string to float64")39 }40 return i.(float64)41 }42}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful