github.com/matrixorigin/matrixone@v0.7.0/pkg/sql/plan/function/builtins.go (about) 1 // Copyright 2021 - 2022 Matrix Origin 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 at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package function 16 17 import ( 18 "context" 19 "math" 20 21 "github.com/matrixorigin/matrixone/pkg/container/vector" 22 "github.com/matrixorigin/matrixone/pkg/vm/process" 23 24 "github.com/matrixorigin/matrixone/pkg/container/types" 25 "github.com/matrixorigin/matrixone/pkg/pb/plan" 26 "github.com/matrixorigin/matrixone/pkg/sql/plan/function/builtin/binary" 27 "github.com/matrixorigin/matrixone/pkg/sql/plan/function/builtin/ctl" 28 "github.com/matrixorigin/matrixone/pkg/sql/plan/function/builtin/multi" 29 "github.com/matrixorigin/matrixone/pkg/sql/plan/function/builtin/unary" 30 "github.com/matrixorigin/matrixone/pkg/sql/plan/function/operator" 31 ) 32 33 func initBuiltIns() { 34 var err error 35 36 for fid, fs := range builtins { 37 err = appendFunction(context.Background(), fid, fs) 38 if err != nil { 39 panic(err) 40 } 41 } 42 } 43 44 // builtins contains the builtin function indexed by function id. 45 var builtins = map[int]Functions{ 46 ABS: { 47 Id: ABS, 48 Flag: plan.Function_STRICT, 49 Layout: STANDARD_FUNCTION, 50 Overloads: []Function{ 51 { 52 Index: 0, 53 Args: []types.T{types.T_int64}, 54 ReturnTyp: types.T_int64, 55 Fn: unary.AbsInt64, 56 }, 57 { 58 Index: 1, 59 Args: []types.T{types.T_uint64}, 60 ReturnTyp: types.T_uint64, 61 Fn: unary.AbsUInt64, 62 }, 63 { 64 Index: 2, 65 Args: []types.T{types.T_float64}, 66 ReturnTyp: types.T_float64, 67 Fn: unary.AbsFloat64, 68 }, 69 { 70 Index: 3, 71 Args: []types.T{types.T_decimal128}, 72 ReturnTyp: types.T_decimal128, 73 Fn: unary.AbsDecimal128, 74 }, 75 }, 76 }, 77 ACOS: { 78 Id: ACOS, 79 Flag: plan.Function_STRICT, 80 Layout: STANDARD_FUNCTION, 81 Overloads: []Function{ 82 { 83 Index: 0, 84 Args: []types.T{types.T_float64}, 85 ReturnTyp: types.T_float64, 86 Fn: unary.Acos, 87 }, 88 }, 89 }, 90 BIT_LENGTH: { 91 Id: BIT_LENGTH, 92 Flag: plan.Function_STRICT, 93 Layout: STANDARD_FUNCTION, 94 Overloads: []Function{ 95 { 96 Index: 0, 97 Args: []types.T{types.T_char}, // todo? check if there is implicit upcast for char/varchar, it not, register another type or add upcast 98 ReturnTyp: types.T_int64, 99 Fn: unary.BitLengthFunc, 100 }, 101 }, 102 }, 103 CONCAT_WS: { 104 Id: CONCAT_WS, 105 Flag: plan.Function_STRICT, 106 Layout: STANDARD_FUNCTION, 107 TypeCheckFn: func(_ []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 108 if len(inputs) > 1 { 109 ret := make([]types.T, len(inputs)) 110 convert := false 111 for i, t := range inputs { 112 if t != types.T_char && t != types.T_varchar && t != types.T_any && t != types.T_blob && t != types.T_text { 113 if castTable[t][types.T_varchar] { 114 ret[i] = types.T_varchar 115 convert = true 116 continue 117 } 118 return wrongFunctionParameters, nil 119 } 120 ret[i] = t 121 } 122 if convert { 123 return int32(0), ret 124 } 125 return int32(0), nil 126 } 127 return wrongFunctionParameters, nil 128 }, 129 Overloads: []Function{ 130 { 131 Index: 0, 132 Args: []types.T{}, 133 ReturnTyp: types.T_varchar, 134 Fn: multi.Concat_ws, 135 }, 136 }, 137 }, 138 CONCAT: { 139 Id: CONCAT, 140 Flag: plan.Function_STRICT, 141 Layout: STANDARD_FUNCTION, 142 TypeCheckFn: func(_ []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 143 if len(inputs) > 1 { 144 ret := make([]types.T, len(inputs)) 145 convert := false 146 for i, t := range inputs { 147 if t != types.T_char && t != types.T_varchar && t != types.T_any && t != types.T_blob && t != types.T_text { 148 if castTable[t][types.T_varchar] { 149 ret[i] = types.T_varchar 150 convert = true 151 continue 152 } 153 return wrongFunctionParameters, nil 154 } 155 ret[i] = t 156 } 157 if convert { 158 return int32(0), ret 159 } 160 return int32(0), nil 161 } 162 return wrongFunctionParameters, nil 163 }, 164 Overloads: []Function{ 165 { 166 Index: 0, 167 Args: []types.T{}, 168 ReturnTyp: types.T_varchar, 169 Fn: multi.Concat, 170 }, 171 }, 172 }, 173 CURRENT_TIMESTAMP: { 174 Id: CURRENT_TIMESTAMP, 175 Flag: plan.Function_STRICT, 176 Layout: STANDARD_FUNCTION, 177 TypeCheckFn: func(_ []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 178 if len(inputs) == 0 { 179 return int32(0), nil 180 } 181 if len(inputs) == 1 && inputs[0] == types.T_int64 { 182 return int32(0), nil 183 } 184 return wrongFunctionParameters, nil 185 }, 186 Overloads: []Function{ 187 { 188 Index: 0, 189 Volatile: false, 190 RealTimeRelated: true, 191 Args: []types.T{}, 192 ReturnTyp: types.T_timestamp, 193 Fn: multi.CurrentTimestamp, 194 }, 195 }, 196 }, 197 UUID: { 198 // uuid function contains a hidden placeholder parameter 199 Id: UUID, 200 Flag: plan.Function_STRICT, 201 Layout: STANDARD_FUNCTION, 202 TypeCheckFn: func(_ []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 203 if len(inputs) == 0 { 204 return int32(0), nil 205 } 206 return wrongFunctionParameters, nil 207 }, 208 Overloads: []Function{ 209 { 210 Index: 0, 211 Volatile: true, 212 AppendHideArg: true, 213 ReturnTyp: types.T_varchar, 214 Fn: multi.UUID, 215 }, 216 }, 217 }, 218 DATE: { 219 Id: DATE, 220 Flag: plan.Function_STRICT | plan.Function_MONOTONIC, 221 Layout: STANDARD_FUNCTION, 222 Overloads: []Function{ 223 { 224 Index: 0, 225 Args: []types.T{types.T_date}, 226 ReturnTyp: types.T_date, 227 Fn: unary.DateToDate, 228 }, 229 { 230 Index: 1, 231 Args: []types.T{types.T_time}, 232 ReturnTyp: types.T_date, 233 Fn: unary.TimeToDate, 234 }, 235 { 236 Index: 2, 237 Args: []types.T{types.T_datetime}, 238 ReturnTyp: types.T_date, 239 Fn: unary.DatetimeToDate, 240 }, 241 { 242 Index: 3, 243 Args: []types.T{types.T_varchar}, 244 ReturnTyp: types.T_date, 245 Fn: unary.DateStringToDate, 246 }, 247 { 248 Index: 4, 249 Args: []types.T{types.T_char}, 250 ReturnTyp: types.T_date, 251 Fn: unary.DateStringToDate, 252 }, 253 }, 254 }, 255 TIME: { 256 Id: TIME, 257 Flag: plan.Function_STRICT, 258 Layout: STANDARD_FUNCTION, 259 Overloads: []Function{ 260 { 261 Index: 0, 262 Args: []types.T{types.T_time}, 263 ReturnTyp: types.T_time, 264 Fn: unary.TimeToTime, 265 }, 266 { 267 Index: 1, 268 Args: []types.T{types.T_date}, 269 ReturnTyp: types.T_time, 270 Fn: unary.DateToTime, 271 }, 272 { 273 Index: 2, 274 Args: []types.T{types.T_datetime}, 275 ReturnTyp: types.T_time, 276 Fn: unary.DatetimeToTime, 277 }, 278 { 279 Index: 3, 280 Args: []types.T{types.T_int64}, 281 ReturnTyp: types.T_time, 282 Fn: unary.Int64ToTime, 283 }, 284 { 285 Index: 4, 286 Args: []types.T{types.T_decimal128}, 287 ReturnTyp: types.T_time, 288 Fn: unary.Decimal128ToTime, 289 }, 290 { 291 Index: 5, 292 Args: []types.T{types.T_varchar}, 293 ReturnTyp: types.T_time, 294 Fn: unary.DateStringToTime, 295 }, 296 { 297 Index: 6, 298 Args: []types.T{types.T_char}, 299 ReturnTyp: types.T_time, 300 Fn: unary.DateStringToTime, 301 }, 302 { 303 Index: 7, 304 Args: []types.T{types.T_text}, 305 ReturnTyp: types.T_time, 306 Fn: unary.DateStringToTime, 307 }, 308 { 309 Index: 8, 310 Args: []types.T{types.T_blob}, 311 ReturnTyp: types.T_time, 312 Fn: unary.DateStringToTime, 313 }, 314 }, 315 }, 316 HOUR: { 317 Id: HOUR, 318 Flag: plan.Function_STRICT, 319 Layout: STANDARD_FUNCTION, 320 Overloads: []Function{ 321 { 322 Index: 0, 323 Args: []types.T{types.T_timestamp}, 324 ReturnTyp: types.T_uint8, 325 Fn: unary.TimestampToHour, 326 }, 327 { 328 Index: 1, 329 Args: []types.T{types.T_datetime}, 330 ReturnTyp: types.T_uint8, 331 Fn: unary.DatetimeToHour, 332 }, 333 }, 334 }, 335 MINUTE: { 336 Id: MINUTE, 337 Flag: plan.Function_STRICT, 338 Layout: STANDARD_FUNCTION, 339 Overloads: []Function{ 340 { 341 Index: 0, 342 Args: []types.T{types.T_timestamp}, 343 ReturnTyp: types.T_uint8, 344 Fn: unary.TimestampToMinute, 345 }, 346 { 347 Index: 1, 348 Args: []types.T{types.T_datetime}, 349 ReturnTyp: types.T_uint8, 350 Fn: unary.DatetimeToMinute, 351 }, 352 }, 353 }, 354 SECOND: { 355 Id: SECOND, 356 Flag: plan.Function_STRICT, 357 Layout: STANDARD_FUNCTION, 358 Overloads: []Function{ 359 { 360 Index: 0, 361 Args: []types.T{types.T_timestamp}, 362 ReturnTyp: types.T_uint8, 363 Fn: unary.TimestampToSecond, 364 }, 365 { 366 Index: 1, 367 Args: []types.T{types.T_datetime}, 368 ReturnTyp: types.T_uint8, 369 Fn: unary.DatetimeToSecond, 370 }, 371 }, 372 }, 373 DAY: { 374 Id: DAY, 375 Flag: plan.Function_STRICT, 376 Layout: STANDARD_FUNCTION, 377 Overloads: []Function{ 378 { 379 Index: 0, 380 Args: []types.T{types.T_date}, 381 ReturnTyp: types.T_uint8, 382 Fn: unary.DateToDay, 383 }, 384 { 385 Index: 1, 386 Args: []types.T{types.T_datetime}, 387 ReturnTyp: types.T_uint8, 388 Fn: unary.DatetimeToDay, 389 }, 390 }, 391 }, 392 DAYOFYEAR: { 393 Id: DAYOFYEAR, 394 Flag: plan.Function_STRICT, 395 Layout: STANDARD_FUNCTION, 396 Overloads: []Function{ 397 { 398 Index: 0, 399 Args: []types.T{types.T_date}, 400 ReturnTyp: types.T_uint16, 401 Fn: unary.DayOfYear, 402 }, 403 }, 404 }, 405 EMPTY: { 406 Id: EMPTY, 407 Flag: plan.Function_STRICT, 408 Layout: STANDARD_FUNCTION, 409 Overloads: []Function{ 410 { 411 Index: 0, 412 Args: []types.T{types.T_char}, 413 ReturnTyp: types.T_uint8, 414 Fn: unary.Empty, 415 }, 416 }, 417 }, 418 EXP: { 419 Id: EXP, 420 Flag: plan.Function_STRICT, 421 Layout: STANDARD_FUNCTION, 422 Overloads: []Function{ 423 { 424 Index: 0, 425 Args: []types.T{types.T_float64}, 426 ReturnTyp: types.T_float64, 427 Fn: unary.Exp, 428 }, 429 }, 430 }, 431 EXTRACT: { 432 Id: EXTRACT, 433 Flag: plan.Function_STRICT, 434 Layout: STANDARD_FUNCTION, 435 Overloads: []Function{ 436 { 437 Index: 0, 438 Args: []types.T{types.T_varchar, types.T_datetime}, 439 ReturnTyp: types.T_varchar, 440 Fn: binary.ExtractFromDatetime, 441 }, 442 { 443 Index: 1, 444 Args: []types.T{types.T_varchar, types.T_date}, 445 ReturnTyp: types.T_uint32, 446 Fn: binary.ExtractFromDate, 447 }, 448 }, 449 }, 450 LENGTH: { 451 Id: LENGTH, 452 Flag: plan.Function_STRICT, 453 Layout: STANDARD_FUNCTION, 454 Overloads: []Function{ 455 { 456 Index: 0, 457 Args: []types.T{types.T_varchar}, 458 ReturnTyp: types.T_int64, 459 Fn: unary.Length, 460 }, 461 { 462 Index: 1, 463 Args: []types.T{types.T_char}, 464 ReturnTyp: types.T_int64, 465 Fn: unary.Length, 466 }, 467 { 468 Index: 2, 469 Args: []types.T{types.T_blob}, 470 ReturnTyp: types.T_int64, 471 Fn: unary.Length, 472 }, 473 { 474 Index: 3, 475 Args: []types.T{types.T_text}, 476 ReturnTyp: types.T_int64, 477 Fn: unary.Length, 478 }, 479 }, 480 }, 481 LENGTH_UTF8: { 482 Id: LENGTH_UTF8, 483 Flag: plan.Function_STRICT, 484 Layout: STANDARD_FUNCTION, 485 Overloads: []Function{ 486 { 487 Index: 0, 488 Args: []types.T{types.T_varchar}, 489 ReturnTyp: types.T_uint64, Fn: unary.LengthUTF8, 490 }, 491 { 492 Index: 1, 493 Args: []types.T{types.T_char}, 494 ReturnTyp: types.T_uint64, 495 Fn: unary.LengthUTF8, 496 }, 497 }, 498 }, 499 LN: { 500 Id: LN, 501 Flag: plan.Function_STRICT, 502 Layout: STANDARD_FUNCTION, 503 Overloads: []Function{ 504 { 505 Index: 0, 506 Args: []types.T{types.T_float64}, 507 ReturnTyp: types.T_float64, 508 Fn: unary.Ln, 509 }, 510 }, 511 }, 512 LOG: { 513 Id: LOG, 514 Flag: plan.Function_STRICT, 515 Layout: STANDARD_FUNCTION, 516 Overloads: []Function{ 517 { 518 Index: 0, 519 Args: []types.T{types.T_float64}, 520 ReturnTyp: types.T_float64, 521 Fn: unary.Log, 522 }, 523 { 524 Index: 1, 525 Args: []types.T{types.T_float64, types.T_float64}, 526 ReturnTyp: types.T_float64, 527 Fn: unary.Log, 528 }, 529 }, 530 }, 531 LTRIM: { 532 Id: LTRIM, 533 Flag: plan.Function_STRICT, 534 Layout: STANDARD_FUNCTION, 535 Overloads: []Function{ 536 { 537 Index: 0, 538 Args: []types.T{types.T_char}, 539 ReturnTyp: types.T_varchar, 540 Fn: unary.Ltrim, 541 }, 542 }, 543 }, 544 MONTH: { 545 Id: MONTH, 546 Flag: plan.Function_STRICT, 547 Layout: STANDARD_FUNCTION, 548 Overloads: []Function{ 549 { 550 Index: 0, 551 Args: []types.T{types.T_date}, 552 ReturnTyp: types.T_uint8, 553 Fn: unary.DateToMonth, 554 }, 555 { 556 Index: 1, 557 Args: []types.T{types.T_datetime}, 558 ReturnTyp: types.T_uint8, 559 Fn: unary.DatetimeToMonth, 560 }, 561 { 562 Index: 2, 563 Args: []types.T{types.T_varchar}, 564 ReturnTyp: types.T_uint8, 565 Fn: unary.DateStringToMonth, 566 }, 567 }, 568 }, 569 OCT: { 570 Id: OCT, 571 Flag: plan.Function_STRICT, 572 Layout: STANDARD_FUNCTION, 573 Overloads: []Function{ 574 { 575 Index: 0, 576 Args: []types.T{types.T_uint8}, 577 ReturnTyp: types.T_decimal128, 578 Fn: unary.Oct[uint8], 579 }, 580 { 581 Index: 1, 582 Args: []types.T{types.T_uint16}, 583 ReturnTyp: types.T_decimal128, 584 Fn: unary.Oct[uint16], 585 }, 586 { 587 Index: 2, 588 Args: []types.T{types.T_uint32}, 589 ReturnTyp: types.T_decimal128, 590 Fn: unary.Oct[uint32], 591 }, 592 { 593 Index: 3, 594 Args: []types.T{types.T_uint64}, 595 ReturnTyp: types.T_decimal128, 596 Fn: unary.Oct[uint64], 597 }, 598 { 599 Index: 4, 600 Args: []types.T{types.T_int8}, 601 ReturnTyp: types.T_decimal128, 602 Fn: unary.Oct[int8], 603 }, 604 { 605 Index: 5, 606 Args: []types.T{types.T_int16}, 607 ReturnTyp: types.T_decimal128, 608 Fn: unary.Oct[int16], 609 }, 610 { 611 Index: 6, 612 Args: []types.T{types.T_int32}, 613 ReturnTyp: types.T_decimal128, 614 Fn: unary.Oct[int32], 615 }, 616 { 617 Index: 7, 618 Args: []types.T{types.T_int64}, 619 ReturnTyp: types.T_decimal128, 620 Fn: unary.Oct[int64], 621 }, 622 { 623 Index: 8, 624 Args: []types.T{types.T_float32}, 625 ReturnTyp: types.T_decimal128, 626 Fn: unary.OctFloat[float32], 627 }, 628 { 629 Index: 9, 630 Args: []types.T{types.T_float64}, 631 ReturnTyp: types.T_decimal128, 632 Fn: unary.OctFloat[float64], 633 }, 634 }, 635 }, 636 REVERSE: { 637 Id: REVERSE, 638 Flag: plan.Function_STRICT, 639 Layout: STANDARD_FUNCTION, 640 Overloads: []Function{ 641 { 642 Index: 0, 643 Args: []types.T{types.T_char}, 644 ReturnTyp: types.T_varchar, 645 Fn: unary.Reverse, 646 }, 647 { 648 Index: 1, 649 Args: []types.T{types.T_varchar}, 650 ReturnTyp: types.T_varchar, 651 Fn: unary.Reverse, 652 }, 653 }, 654 }, 655 RTRIM: { 656 Id: RTRIM, 657 Flag: plan.Function_STRICT, 658 Layout: STANDARD_FUNCTION, 659 Overloads: []Function{ 660 { 661 Index: 0, 662 Args: []types.T{types.T_char}, 663 ReturnTyp: types.T_varchar, 664 Fn: unary.Rtrim, 665 }, 666 }, 667 }, 668 LEFT: { 669 Id: LEFT, 670 Flag: plan.Function_STRICT, 671 Layout: STANDARD_FUNCTION, 672 Overloads: []Function{ 673 { 674 Index: 0, 675 Args: []types.T{types.T_varchar, types.T_int64}, 676 ReturnTyp: types.T_varchar, 677 Fn: binary.Left, 678 }, 679 { 680 Index: 1, 681 Args: []types.T{types.T_char, types.T_int64}, 682 ReturnTyp: types.T_char, 683 Fn: binary.Left, 684 }, 685 }, 686 }, 687 SIN: { 688 Id: SIN, 689 Flag: plan.Function_STRICT, 690 Layout: STANDARD_FUNCTION, 691 Overloads: []Function{ 692 { 693 Index: 0, 694 Args: []types.T{types.T_float64}, 695 ReturnTyp: types.T_float64, 696 Fn: unary.Sin, 697 }, 698 }, 699 }, 700 SPACE: { 701 Id: SPACE, 702 Flag: plan.Function_STRICT, 703 Layout: STANDARD_FUNCTION, 704 Overloads: []Function{ 705 { 706 Index: 0, 707 Args: []types.T{types.T_uint64}, 708 ReturnTyp: types.T_varchar, 709 Fn: unary.SpaceNumber[uint64], 710 }, 711 { 712 Index: 1, 713 Args: []types.T{types.T_int64}, 714 ReturnTyp: types.T_varchar, 715 Fn: unary.SpaceNumber[int64], 716 }, 717 }, 718 }, 719 WEEK: { 720 Id: WEEK, 721 Flag: plan.Function_STRICT, 722 Layout: STANDARD_FUNCTION, 723 Overloads: []Function{ 724 { 725 Index: 0, 726 Args: []types.T{types.T_date}, 727 ReturnTyp: types.T_uint8, 728 Fn: unary.DateToWeek, 729 }, 730 { 731 Index: 1, 732 Args: []types.T{types.T_datetime}, 733 ReturnTyp: types.T_uint8, 734 Fn: unary.DatetimeToWeek, 735 }, 736 }, 737 }, 738 WEEKDAY: { 739 Id: WEEKDAY, 740 Flag: plan.Function_STRICT, 741 Layout: STANDARD_FUNCTION, 742 Overloads: []Function{ 743 { 744 Index: 0, 745 Args: []types.T{types.T_date}, 746 ReturnTyp: types.T_int64, 747 Fn: unary.DateToWeekday, 748 }, 749 { 750 Index: 1, 751 Args: []types.T{types.T_datetime}, 752 ReturnTyp: types.T_int64, 753 Fn: unary.DatetimeToWeekday, 754 }, 755 }, 756 }, 757 YEAR: { 758 Id: YEAR, 759 Flag: plan.Function_STRICT | plan.Function_MONOTONIC, 760 Layout: STANDARD_FUNCTION, 761 Overloads: []Function{ 762 { 763 Index: 0, 764 Args: []types.T{types.T_date}, 765 ReturnTyp: types.T_int64, 766 Fn: unary.DateToYear, 767 }, 768 { 769 Index: 1, 770 Args: []types.T{types.T_datetime}, 771 ReturnTyp: types.T_int64, 772 Fn: unary.DatetimeToYear, 773 }, 774 { 775 Index: 2, 776 Args: []types.T{types.T_varchar}, 777 ReturnTyp: types.T_int64, 778 Fn: unary.DateStringToYear, 779 }, 780 }, 781 }, 782 // binary functions 783 ENDSWITH: { 784 Id: ENDSWITH, 785 Flag: plan.Function_STRICT, 786 Layout: STANDARD_FUNCTION, 787 Overloads: []Function{ 788 { 789 Index: 0, 790 Args: []types.T{types.T_varchar, types.T_varchar}, 791 ReturnTyp: types.T_uint8, 792 Fn: binary.Endswith, 793 }, 794 }, 795 }, 796 FINDINSET: { 797 Id: FINDINSET, 798 Flag: plan.Function_STRICT, 799 Layout: STANDARD_FUNCTION, 800 Overloads: []Function{ 801 { 802 Index: 0, 803 Args: []types.T{types.T_varchar, types.T_varchar}, 804 ReturnTyp: types.T_uint64, 805 Fn: binary.FindInSet, 806 }, 807 }, 808 }, 809 POW: { 810 Id: POW, 811 Flag: plan.Function_STRICT, 812 Layout: STANDARD_FUNCTION, 813 Overloads: []Function{ 814 { 815 Index: 0, 816 Args: []types.T{types.T_float64, types.T_float64}, 817 ReturnTyp: types.T_float64, 818 Fn: binary.Power, 819 }, 820 }, 821 }, 822 STARTSWITH: { 823 Id: STARTSWITH, 824 Flag: plan.Function_STRICT, 825 Layout: STANDARD_FUNCTION, 826 Overloads: []Function{ 827 { 828 Index: 0, 829 Args: []types.T{types.T_varchar, types.T_varchar}, 830 ReturnTyp: types.T_uint8, 831 Fn: binary.Startswith, 832 }, 833 }, 834 }, 835 DATE_FORMAT: { 836 Id: DATE_FORMAT, 837 Flag: plan.Function_STRICT, 838 Layout: STANDARD_FUNCTION, 839 Overloads: []Function{ 840 { 841 Index: 0, 842 Args: []types.T{types.T_datetime, types.T_varchar}, 843 ReturnTyp: types.T_varchar, 844 Fn: binary.DateFormat, 845 }, 846 { 847 Index: 1, 848 Args: []types.T{types.T_datetime, types.T_char}, 849 ReturnTyp: types.T_varchar, 850 Fn: binary.DateFormat, 851 }, 852 }, 853 }, 854 // variadic functions 855 CEIL: { 856 Id: CEIL, 857 Flag: plan.Function_STRICT | plan.Function_MONOTONIC, 858 Layout: STANDARD_FUNCTION, 859 Overloads: []Function{ 860 { 861 Index: 0, 862 Args: []types.T{types.T_uint64}, 863 ReturnTyp: types.T_uint64, 864 Fn: multi.CeilUint64, 865 }, 866 { 867 Index: 1, 868 Args: []types.T{types.T_uint64, types.T_int64}, 869 ReturnTyp: types.T_uint64, 870 Fn: multi.CeilUint64, 871 }, 872 { 873 Index: 2, 874 Args: []types.T{types.T_int64}, 875 ReturnTyp: types.T_int64, 876 Fn: multi.CeilInt64, 877 }, 878 { 879 Index: 3, 880 Args: []types.T{types.T_int64, types.T_int64}, 881 ReturnTyp: types.T_int64, 882 Fn: multi.CeilInt64, 883 }, 884 { 885 Index: 4, 886 Args: []types.T{types.T_float64}, 887 ReturnTyp: types.T_float64, 888 Fn: multi.CeilFloat64, 889 }, 890 { 891 Index: 5, 892 Args: []types.T{types.T_float64, types.T_int64}, 893 ReturnTyp: types.T_float64, 894 Fn: multi.CeilFloat64, 895 }, 896 { 897 Index: 6, 898 Args: []types.T{types.T_decimal128}, 899 ReturnTyp: types.T_decimal128, 900 Fn: multi.CeilDecimal128, 901 }, 902 { 903 Index: 7, 904 Args: []types.T{types.T_varchar}, 905 ReturnTyp: types.T_float64, 906 Fn: multi.CeilStr, 907 }, 908 }, 909 }, 910 FLOOR: { 911 Id: FLOOR, 912 Flag: plan.Function_STRICT | plan.Function_MONOTONIC, 913 Layout: STANDARD_FUNCTION, 914 Overloads: []Function{ 915 { 916 Index: 0, 917 Args: []types.T{types.T_uint64}, 918 ReturnTyp: types.T_uint64, 919 Fn: multi.FloorUInt64, 920 }, 921 { 922 Index: 1, 923 Args: []types.T{types.T_uint64, types.T_int64}, 924 ReturnTyp: types.T_uint64, 925 Fn: multi.FloorUInt64, 926 }, 927 { 928 Index: 2, 929 Args: []types.T{types.T_int64}, 930 ReturnTyp: types.T_int64, 931 Fn: multi.FloorInt64, 932 }, 933 { 934 Index: 3, 935 Args: []types.T{types.T_int64, types.T_int64}, 936 ReturnTyp: types.T_int64, 937 Fn: multi.FloorInt64, 938 }, 939 { 940 Index: 4, 941 Args: []types.T{types.T_float64}, 942 ReturnTyp: types.T_float64, 943 Fn: multi.FloorFloat64, 944 }, 945 { 946 Index: 5, 947 Args: []types.T{types.T_float64, types.T_int64}, 948 ReturnTyp: types.T_float64, 949 Fn: multi.FloorFloat64, 950 }, 951 { 952 Index: 6, 953 Args: []types.T{types.T_decimal128}, 954 ReturnTyp: types.T_decimal128, 955 Fn: multi.FloorDecimal128, 956 }, 957 { 958 Index: 7, 959 Args: []types.T{types.T_varchar}, 960 ReturnTyp: types.T_float64, 961 Fn: multi.FloorStr, 962 }, 963 }, 964 }, 965 LPAD: { 966 Id: LPAD, 967 Flag: plan.Function_STRICT, 968 Layout: STANDARD_FUNCTION, 969 Overloads: []Function{ 970 { 971 Index: 0, 972 Args: []types.T{types.T_varchar, types.T_int64, types.T_varchar}, 973 ReturnTyp: types.T_varchar, 974 Fn: multi.Lpad, 975 }, 976 { 977 Index: 1, 978 Args: []types.T{types.T_varchar, types.T_float64, types.T_varchar}, 979 ReturnTyp: types.T_varchar, Fn: multi.Lpad, 980 }, 981 { 982 Index: 2, 983 Args: []types.T{types.T_varchar, types.T_uint64, types.T_varchar}, 984 ReturnTyp: types.T_varchar, Fn: multi.Lpad, 985 }, 986 }, 987 }, 988 PI: { 989 Id: PI, 990 Flag: plan.Function_STRICT | plan.Function_MONOTONIC, 991 Layout: STANDARD_FUNCTION, 992 Overloads: []Function{ 993 { 994 Index: 0, 995 Args: []types.T{}, 996 ReturnTyp: types.T_float64, 997 Fn: multi.Pi, 998 }, 999 }, 1000 }, 1001 ROUND: { 1002 Id: ROUND, 1003 Flag: plan.Function_STRICT | plan.Function_MONOTONIC, 1004 Layout: STANDARD_FUNCTION, 1005 Overloads: []Function{ 1006 { 1007 Index: 0, 1008 Args: []types.T{types.T_uint64}, 1009 ReturnTyp: types.T_uint64, 1010 Fn: multi.RoundUint64, 1011 }, 1012 { 1013 Index: 1, 1014 Args: []types.T{types.T_uint64, types.T_int64}, 1015 ReturnTyp: types.T_uint64, 1016 Fn: multi.RoundUint64, 1017 }, 1018 { 1019 Index: 2, 1020 Args: []types.T{types.T_int64}, 1021 ReturnTyp: types.T_int64, 1022 Fn: multi.RoundInt64, 1023 }, 1024 { 1025 Index: 3, 1026 Args: []types.T{types.T_int64, types.T_int64}, 1027 ReturnTyp: types.T_int64, 1028 Fn: multi.RoundInt64, 1029 }, 1030 { 1031 Index: 4, 1032 Args: []types.T{types.T_float64}, 1033 ReturnTyp: types.T_float64, 1034 Fn: multi.RoundFloat64, 1035 }, 1036 { 1037 Index: 5, 1038 Args: []types.T{types.T_float64, types.T_int64}, 1039 ReturnTyp: types.T_float64, 1040 Fn: multi.RoundFloat64, 1041 }, 1042 }, 1043 }, 1044 RPAD: { 1045 Id: RPAD, 1046 Flag: plan.Function_STRICT, 1047 Layout: STANDARD_FUNCTION, 1048 Overloads: []Function{ 1049 { 1050 Index: 0, 1051 Args: []types.T{types.T_varchar, types.T_int64, types.T_int64}, 1052 ReturnTyp: types.T_varchar, 1053 Fn: multi.Rpad, 1054 }, 1055 { 1056 Index: 1, 1057 Args: []types.T{types.T_varchar, types.T_int64, types.T_uint64}, 1058 ReturnTyp: types.T_varchar, 1059 Fn: multi.Rpad, 1060 }, 1061 { 1062 Index: 2, 1063 Args: []types.T{types.T_varchar, types.T_int64, types.T_float64}, 1064 ReturnTyp: types.T_varchar, 1065 Fn: multi.Rpad, 1066 }, 1067 { 1068 Index: 3, 1069 Args: []types.T{types.T_varchar, types.T_int64, types.T_varchar}, 1070 ReturnTyp: types.T_varchar, 1071 Fn: multi.Rpad, 1072 }, 1073 { 1074 Index: 4, 1075 Args: []types.T{types.T_varchar, types.T_int64, types.T_char}, 1076 ReturnTyp: types.T_varchar, 1077 Fn: multi.Rpad, 1078 }, 1079 { 1080 Index: 5, 1081 Args: []types.T{types.T_varchar, types.T_uint64, types.T_int64}, 1082 ReturnTyp: types.T_varchar, 1083 Fn: multi.Rpad, 1084 }, 1085 { 1086 Index: 6, 1087 Args: []types.T{types.T_varchar, types.T_uint64, types.T_uint64}, 1088 ReturnTyp: types.T_varchar, 1089 Fn: multi.Rpad, 1090 }, 1091 { 1092 Index: 7, 1093 Args: []types.T{types.T_varchar, types.T_uint64, types.T_float64}, 1094 ReturnTyp: types.T_varchar, 1095 Fn: multi.Rpad, 1096 }, 1097 { 1098 Index: 8, 1099 Args: []types.T{types.T_varchar, types.T_uint64, types.T_varchar}, 1100 ReturnTyp: types.T_varchar, 1101 Fn: multi.Rpad, 1102 }, 1103 { 1104 Index: 9, 1105 Args: []types.T{types.T_varchar, types.T_uint64, types.T_char}, 1106 ReturnTyp: types.T_varchar, 1107 Fn: multi.Rpad, 1108 }, 1109 { 1110 Index: 10, 1111 Args: []types.T{types.T_varchar, types.T_float64, types.T_int64}, 1112 ReturnTyp: types.T_varchar, 1113 Fn: multi.Rpad, 1114 }, 1115 { 1116 Index: 11, 1117 Args: []types.T{types.T_varchar, types.T_float64, types.T_uint64}, 1118 ReturnTyp: types.T_varchar, 1119 Fn: multi.Rpad, 1120 }, 1121 { 1122 Index: 12, 1123 Args: []types.T{types.T_varchar, types.T_float64, types.T_float64}, 1124 ReturnTyp: types.T_varchar, 1125 Fn: multi.Rpad, 1126 }, 1127 { 1128 Index: 13, 1129 Args: []types.T{types.T_varchar, types.T_float64, types.T_varchar}, 1130 ReturnTyp: types.T_varchar, 1131 Fn: multi.Rpad, 1132 }, 1133 { 1134 Index: 14, 1135 Args: []types.T{types.T_varchar, types.T_float64, types.T_char}, 1136 ReturnTyp: types.T_varchar, 1137 Fn: multi.Rpad, 1138 }, 1139 { 1140 Index: 15, 1141 Args: []types.T{types.T_varchar, types.T_varchar, types.T_int64}, 1142 ReturnTyp: types.T_varchar, 1143 Fn: multi.Rpad, 1144 }, 1145 { 1146 Index: 16, 1147 Args: []types.T{types.T_varchar, types.T_varchar, types.T_uint64}, 1148 ReturnTyp: types.T_varchar, 1149 Fn: multi.Rpad, 1150 }, 1151 { 1152 Index: 17, 1153 Args: []types.T{types.T_varchar, types.T_varchar, types.T_float64}, 1154 ReturnTyp: types.T_varchar, 1155 Fn: multi.Rpad, 1156 }, 1157 { 1158 Index: 18, 1159 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 1160 ReturnTyp: types.T_varchar, 1161 Fn: multi.Rpad, 1162 }, 1163 { 1164 Index: 19, 1165 Args: []types.T{types.T_varchar, types.T_varchar, types.T_char}, 1166 ReturnTyp: types.T_varchar, 1167 Fn: multi.Rpad, 1168 }, 1169 { 1170 Index: 20, 1171 Args: []types.T{types.T_varchar, types.T_char, types.T_int64}, 1172 ReturnTyp: types.T_varchar, 1173 Fn: multi.Rpad, 1174 }, 1175 { 1176 Index: 21, 1177 Args: []types.T{types.T_varchar, types.T_char, types.T_uint64}, 1178 ReturnTyp: types.T_varchar, 1179 Fn: multi.Rpad, 1180 }, 1181 { 1182 Index: 22, 1183 Args: []types.T{types.T_varchar, types.T_char, types.T_float64}, 1184 ReturnTyp: types.T_varchar, 1185 Fn: multi.Rpad, 1186 }, 1187 { 1188 Index: 23, 1189 Args: []types.T{types.T_varchar, types.T_char, types.T_varchar}, 1190 ReturnTyp: types.T_varchar, 1191 Fn: multi.Rpad, 1192 }, 1193 { 1194 Index: 24, 1195 Args: []types.T{types.T_varchar, types.T_char, types.T_char}, 1196 ReturnTyp: types.T_varchar, 1197 Fn: multi.Rpad, 1198 }, 1199 { 1200 Index: 25, 1201 Args: []types.T{types.T_char, types.T_int64, types.T_int64}, 1202 ReturnTyp: types.T_char, 1203 Fn: multi.Rpad, 1204 }, 1205 { 1206 Index: 26, 1207 Args: []types.T{types.T_char, types.T_int64, types.T_uint64}, 1208 ReturnTyp: types.T_char, 1209 Fn: multi.Rpad, 1210 }, 1211 { 1212 Index: 27, 1213 Args: []types.T{types.T_char, types.T_int64, types.T_float64}, 1214 ReturnTyp: types.T_char, 1215 Fn: multi.Rpad, 1216 }, 1217 { 1218 Index: 28, 1219 Args: []types.T{types.T_char, types.T_int64, types.T_varchar}, 1220 ReturnTyp: types.T_char, 1221 Fn: multi.Rpad, 1222 }, 1223 { 1224 Index: 29, 1225 Args: []types.T{types.T_char, types.T_int64, types.T_char}, 1226 ReturnTyp: types.T_char, 1227 Fn: multi.Rpad, 1228 }, 1229 { 1230 Index: 30, 1231 Args: []types.T{types.T_char, types.T_uint64, types.T_int64}, 1232 ReturnTyp: types.T_char, 1233 Fn: multi.Rpad, 1234 }, 1235 { 1236 Index: 31, 1237 Args: []types.T{types.T_char, types.T_uint64, types.T_uint64}, 1238 ReturnTyp: types.T_char, 1239 Fn: multi.Rpad, 1240 }, 1241 { 1242 Index: 32, 1243 Args: []types.T{types.T_char, types.T_uint64, types.T_float64}, 1244 ReturnTyp: types.T_char, 1245 Fn: multi.Rpad, 1246 }, 1247 { 1248 Index: 33, 1249 Args: []types.T{types.T_char, types.T_uint64, types.T_varchar}, 1250 ReturnTyp: types.T_char, 1251 Fn: multi.Rpad, 1252 }, 1253 { 1254 Index: 34, 1255 Args: []types.T{types.T_char, types.T_uint64, types.T_char}, 1256 ReturnTyp: types.T_char, 1257 Fn: multi.Rpad, 1258 }, 1259 { 1260 Index: 35, 1261 Args: []types.T{types.T_char, types.T_float64, types.T_int64}, 1262 ReturnTyp: types.T_char, 1263 Fn: multi.Rpad, 1264 }, 1265 { 1266 Index: 36, 1267 Args: []types.T{types.T_char, types.T_float64, types.T_uint64}, 1268 ReturnTyp: types.T_char, 1269 Fn: multi.Rpad, 1270 }, 1271 { 1272 Index: 37, 1273 Args: []types.T{types.T_char, types.T_float64, types.T_float64}, 1274 ReturnTyp: types.T_char, 1275 Fn: multi.Rpad, 1276 }, 1277 { 1278 Index: 38, 1279 Args: []types.T{types.T_char, types.T_float64, types.T_varchar}, 1280 ReturnTyp: types.T_char, 1281 Fn: multi.Rpad, 1282 }, 1283 { 1284 Index: 39, 1285 Args: []types.T{types.T_char, types.T_float64, types.T_char}, 1286 ReturnTyp: types.T_char, 1287 Fn: multi.Rpad, 1288 }, 1289 { 1290 Index: 40, 1291 Args: []types.T{types.T_char, types.T_varchar, types.T_int64}, 1292 ReturnTyp: types.T_char, 1293 Fn: multi.Rpad, 1294 }, 1295 { 1296 Index: 41, 1297 Args: []types.T{types.T_char, types.T_varchar, types.T_uint64}, 1298 ReturnTyp: types.T_char, 1299 Fn: multi.Rpad, 1300 }, 1301 { 1302 Index: 42, 1303 Args: []types.T{types.T_char, types.T_varchar, types.T_float64}, 1304 ReturnTyp: types.T_char, 1305 Fn: multi.Rpad, 1306 }, 1307 { 1308 Index: 43, 1309 Args: []types.T{types.T_char, types.T_varchar, types.T_varchar}, 1310 ReturnTyp: types.T_char, 1311 Fn: multi.Rpad, 1312 }, 1313 { 1314 Index: 44, 1315 Args: []types.T{types.T_char, types.T_varchar, types.T_char}, 1316 ReturnTyp: types.T_char, 1317 Fn: multi.Rpad, 1318 }, 1319 { 1320 Index: 45, 1321 Args: []types.T{types.T_char, types.T_char, types.T_int64}, 1322 ReturnTyp: types.T_char, 1323 Fn: multi.Rpad, 1324 }, 1325 { 1326 Index: 46, 1327 Args: []types.T{types.T_char, types.T_char, types.T_uint64}, 1328 ReturnTyp: types.T_char, 1329 Fn: multi.Rpad, 1330 }, 1331 { 1332 Index: 47, 1333 Args: []types.T{types.T_char, types.T_char, types.T_float64}, 1334 ReturnTyp: types.T_char, 1335 Fn: multi.Rpad, 1336 }, 1337 { 1338 Index: 48, 1339 Args: []types.T{types.T_char, types.T_char, types.T_varchar}, 1340 ReturnTyp: types.T_char, 1341 Fn: multi.Rpad, 1342 }, 1343 { 1344 Index: 49, 1345 Args: []types.T{types.T_char, types.T_char, types.T_char}, 1346 ReturnTyp: types.T_char, 1347 Fn: multi.Rpad, 1348 }, 1349 }, 1350 }, 1351 SUBSTRING: { 1352 Id: SUBSTRING, 1353 Flag: plan.Function_STRICT, 1354 Layout: STANDARD_FUNCTION, 1355 Overloads: []Function{ 1356 { 1357 Index: 0, 1358 Args: []types.T{types.T_varchar, types.T_int64}, 1359 ReturnTyp: types.T_varchar, 1360 Fn: multi.Substring, 1361 }, 1362 { 1363 Index: 1, 1364 Args: []types.T{types.T_varchar, types.T_uint64}, 1365 ReturnTyp: types.T_varchar, 1366 Fn: multi.Substring, 1367 }, 1368 { 1369 Index: 2, 1370 Args: []types.T{types.T_char, types.T_int64}, 1371 ReturnTyp: types.T_char, 1372 Fn: multi.Substring, 1373 }, 1374 { 1375 Index: 3, 1376 Args: []types.T{types.T_char, types.T_uint64}, 1377 ReturnTyp: types.T_char, 1378 Fn: multi.Substring, 1379 }, 1380 { 1381 Index: 4, 1382 Args: []types.T{types.T_char, types.T_float64}, 1383 ReturnTyp: types.T_char, 1384 Fn: multi.Substring, 1385 }, 1386 { 1387 Index: 5, 1388 Args: []types.T{types.T_varchar, types.T_float64, types.T_int64}, 1389 ReturnTyp: types.T_varchar, 1390 Fn: multi.Substring, 1391 }, 1392 { 1393 Index: 6, 1394 Args: []types.T{types.T_varchar, types.T_float64, types.T_uint64}, 1395 ReturnTyp: types.T_varchar, 1396 Fn: multi.Substring, 1397 }, 1398 { 1399 Index: 7, 1400 Args: []types.T{types.T_varchar, types.T_int64, types.T_float64}, 1401 ReturnTyp: types.T_varchar, 1402 Fn: multi.Substring, 1403 }, 1404 { 1405 Index: 8, 1406 Args: []types.T{types.T_varchar, types.T_uint64, types.T_float64}, 1407 ReturnTyp: types.T_varchar, 1408 Fn: multi.Substring, 1409 }, 1410 { 1411 Index: 9, 1412 Args: []types.T{types.T_varchar, types.T_float64, types.T_float64}, 1413 ReturnTyp: types.T_varchar, 1414 Fn: multi.Substring, 1415 }, 1416 { 1417 Index: 10, 1418 Args: []types.T{types.T_varchar, types.T_int64, types.T_int64}, 1419 ReturnTyp: types.T_varchar, 1420 Fn: multi.Substring, 1421 }, 1422 { 1423 Index: 11, 1424 Args: []types.T{types.T_varchar, types.T_int64, types.T_uint64}, 1425 ReturnTyp: types.T_varchar, 1426 Fn: multi.Substring, 1427 }, 1428 { 1429 Index: 12, 1430 Args: []types.T{types.T_varchar, types.T_uint64, types.T_int64}, 1431 ReturnTyp: types.T_varchar, 1432 Fn: multi.Substring, 1433 }, 1434 { 1435 Index: 13, 1436 Args: []types.T{types.T_varchar, types.T_uint64, types.T_uint64}, 1437 ReturnTyp: types.T_varchar, 1438 Fn: multi.Substring, 1439 }, 1440 { 1441 Index: 14, 1442 Args: []types.T{types.T_char, types.T_int64, types.T_int64}, 1443 ReturnTyp: types.T_char, 1444 Fn: multi.Substring, 1445 }, 1446 { 1447 Index: 15, 1448 Args: []types.T{types.T_char, types.T_int64, types.T_uint64}, 1449 ReturnTyp: types.T_char, 1450 Fn: multi.Substring, 1451 }, 1452 { 1453 Index: 16, 1454 Args: []types.T{types.T_char, types.T_uint64, types.T_int64}, 1455 ReturnTyp: types.T_char, 1456 Fn: multi.Substring, 1457 }, 1458 { 1459 Index: 17, 1460 Args: []types.T{types.T_char, types.T_uint64, types.T_uint64}, 1461 ReturnTyp: types.T_char, 1462 Fn: multi.Substring, 1463 }, 1464 { 1465 Index: 18, 1466 Args: []types.T{types.T_blob, types.T_int64, types.T_int64}, 1467 ReturnTyp: types.T_char, 1468 Fn: multi.Substring, 1469 }, 1470 { 1471 Index: 19, 1472 Args: []types.T{types.T_blob, types.T_int64, types.T_uint64}, 1473 ReturnTyp: types.T_char, 1474 Fn: multi.Substring, 1475 }, 1476 { 1477 Index: 20, 1478 Args: []types.T{types.T_blob, types.T_uint64, types.T_int64}, 1479 ReturnTyp: types.T_char, 1480 Fn: multi.Substring, 1481 }, 1482 { 1483 Index: 21, 1484 Args: []types.T{types.T_blob, types.T_uint64, types.T_uint64}, 1485 ReturnTyp: types.T_char, 1486 Fn: multi.Substring, 1487 }, 1488 1489 { 1490 Index: 22, 1491 Args: []types.T{types.T_text, types.T_int64, types.T_int64}, 1492 ReturnTyp: types.T_char, 1493 Fn: multi.Substring, 1494 }, 1495 { 1496 Index: 23, 1497 Args: []types.T{types.T_text, types.T_int64, types.T_uint64}, 1498 ReturnTyp: types.T_char, 1499 Fn: multi.Substring, 1500 }, 1501 { 1502 Index: 24, 1503 Args: []types.T{types.T_text, types.T_uint64, types.T_int64}, 1504 ReturnTyp: types.T_char, 1505 Fn: multi.Substring, 1506 }, 1507 { 1508 Index: 25, 1509 Args: []types.T{types.T_text, types.T_uint64, types.T_uint64}, 1510 ReturnTyp: types.T_char, 1511 Fn: multi.Substring, 1512 }, 1513 }, 1514 }, 1515 FROM_UNIXTIME: { 1516 Id: FROM_UNIXTIME, 1517 Flag: plan.Function_STRICT, 1518 Layout: STANDARD_FUNCTION, 1519 Overloads: []Function{ 1520 { 1521 Index: 0, 1522 Volatile: true, 1523 Args: []types.T{types.T_int64}, 1524 ReturnTyp: types.T_datetime, 1525 Fn: multi.FromUnixTimeInt64, 1526 }, 1527 { 1528 Index: 1, 1529 Volatile: true, 1530 Args: []types.T{types.T_uint64}, 1531 ReturnTyp: types.T_datetime, 1532 Fn: multi.FromUnixTimeUint64, 1533 }, 1534 { 1535 Index: 2, 1536 Volatile: true, 1537 Args: []types.T{types.T_float64}, 1538 ReturnTyp: types.T_datetime, 1539 Fn: multi.FromUnixTimeFloat64, 1540 }, 1541 { 1542 Index: 3, 1543 Volatile: true, 1544 Args: []types.T{types.T_int64, types.T_varchar}, 1545 ReturnTyp: types.T_varchar, 1546 Fn: multi.FromUnixTimeInt64Format, 1547 }, 1548 { 1549 Index: 4, 1550 Volatile: true, 1551 Args: []types.T{types.T_uint64, types.T_varchar}, 1552 ReturnTyp: types.T_varchar, 1553 Fn: multi.FromUnixTimeUint64Format, 1554 }, 1555 { 1556 Index: 5, 1557 Volatile: true, 1558 Args: []types.T{types.T_float64, types.T_varchar}, 1559 ReturnTyp: types.T_varchar, 1560 Fn: multi.FromUnixTimeFloat64Format, 1561 }, 1562 }, 1563 }, 1564 UNIX_TIMESTAMP: { 1565 Id: UNIX_TIMESTAMP, 1566 Flag: plan.Function_STRICT, 1567 Layout: STANDARD_FUNCTION, 1568 Overloads: []Function{ 1569 { 1570 Index: 0, 1571 Volatile: true, 1572 Args: []types.T{}, 1573 ReturnTyp: types.T_int64, 1574 Fn: multi.UnixTimestamp, 1575 }, 1576 { 1577 Index: 1, 1578 Volatile: true, 1579 Args: []types.T{types.T_timestamp}, 1580 ReturnTyp: types.T_int64, 1581 Fn: multi.UnixTimestamp, 1582 }, 1583 { 1584 Index: 2, 1585 Volatile: true, 1586 Args: []types.T{types.T_varchar, types.T_int64}, 1587 ReturnTyp: types.T_int64, 1588 Fn: multi.UnixTimestampVarcharToInt64, 1589 }, 1590 { 1591 Index: 3, 1592 Volatile: true, 1593 Args: []types.T{types.T_varchar, types.T_decimal128}, 1594 ReturnTyp: types.T_decimal128, 1595 Fn: multi.UnixTimestampVarcharToDecimal128, 1596 }, 1597 }, 1598 }, 1599 UTC_TIMESTAMP: { 1600 Id: UTC_TIMESTAMP, 1601 Flag: plan.Function_STRICT, 1602 Layout: STANDARD_FUNCTION, 1603 Overloads: []Function{ 1604 { 1605 Index: 0, 1606 Args: []types.T{}, 1607 ReturnTyp: types.T_datetime, 1608 Fn: multi.UTCTimestamp, 1609 }, 1610 }, 1611 }, 1612 DATE_ADD: { 1613 Id: DATE_ADD, 1614 Flag: plan.Function_STRICT, 1615 Layout: STANDARD_FUNCTION, 1616 Overloads: []Function{ 1617 { 1618 Index: 0, 1619 Volatile: true, 1620 Args: []types.T{types.T_date, types.T_int64, types.T_int64}, 1621 ReturnTyp: types.T_date, 1622 Fn: multi.DateAdd, 1623 }, 1624 { 1625 Index: 1, 1626 Volatile: true, 1627 Args: []types.T{types.T_datetime, types.T_int64, types.T_int64}, 1628 ReturnTyp: types.T_datetime, 1629 Fn: multi.DatetimeAdd, 1630 }, 1631 { 1632 Index: 2, 1633 Volatile: true, 1634 Args: []types.T{types.T_varchar, types.T_int64, types.T_int64}, 1635 ReturnTyp: types.T_datetime, 1636 Fn: multi.DateStringAdd, 1637 }, 1638 { 1639 Index: 3, 1640 Volatile: true, 1641 Args: []types.T{types.T_char, types.T_int64, types.T_int64}, 1642 ReturnTyp: types.T_datetime, 1643 Fn: multi.DateStringAdd, 1644 }, 1645 { 1646 Index: 4, 1647 Volatile: true, 1648 Args: []types.T{types.T_timestamp, types.T_int64, types.T_int64}, 1649 ReturnTyp: types.T_timestamp, 1650 Fn: multi.TimeStampAdd, 1651 }, 1652 { 1653 Index: 5, 1654 Volatile: true, 1655 Args: []types.T{types.T_time, types.T_int64, types.T_int64}, 1656 ReturnTyp: types.T_time, 1657 Fn: multi.TimeAdd, 1658 }, 1659 }, 1660 }, 1661 DATE_SUB: { 1662 Id: DATE_SUB, 1663 Flag: plan.Function_STRICT, 1664 Layout: STANDARD_FUNCTION, 1665 Overloads: []Function{ 1666 { 1667 Index: 0, 1668 Volatile: true, 1669 Args: []types.T{types.T_date, types.T_int64, types.T_int64}, 1670 ReturnTyp: types.T_date, 1671 Fn: multi.DateSub, 1672 }, 1673 { 1674 Index: 1, 1675 Volatile: true, 1676 Args: []types.T{types.T_datetime, types.T_int64, types.T_int64}, 1677 ReturnTyp: types.T_datetime, 1678 Fn: multi.DatetimeSub, 1679 }, 1680 { 1681 Index: 2, 1682 Volatile: true, 1683 Args: []types.T{types.T_varchar, types.T_int64, types.T_int64}, 1684 ReturnTyp: types.T_datetime, 1685 Fn: multi.DateStringSub, 1686 }, 1687 { 1688 Index: 3, 1689 Volatile: true, 1690 Args: []types.T{types.T_char, types.T_int64, types.T_int64}, 1691 ReturnTyp: types.T_datetime, 1692 Fn: multi.DateStringSub, 1693 }, 1694 { 1695 Index: 4, 1696 Volatile: true, 1697 Args: []types.T{types.T_timestamp, types.T_int64, types.T_int64}, 1698 ReturnTyp: types.T_timestamp, 1699 Fn: multi.TimeStampSub, 1700 }, 1701 }, 1702 }, 1703 TAN: { 1704 Id: TAN, 1705 Flag: plan.Function_STRICT, 1706 Layout: STANDARD_FUNCTION, 1707 Overloads: []Function{ 1708 { 1709 Index: 0, 1710 Args: []types.T{types.T_float64}, 1711 ReturnTyp: types.T_float64, 1712 Fn: unary.Tan, 1713 }, 1714 }, 1715 }, 1716 SINH: { 1717 Id: SINH, 1718 Flag: plan.Function_STRICT, 1719 Layout: STANDARD_FUNCTION, 1720 Overloads: []Function{ 1721 { 1722 Index: 0, 1723 Args: []types.T{types.T_float64}, 1724 ReturnTyp: types.T_float64, 1725 Fn: unary.Sinh, 1726 }, 1727 }, 1728 }, 1729 TO_DATE: { 1730 Id: TO_DATE, 1731 Flag: plan.Function_STRICT, 1732 Layout: STANDARD_FUNCTION, 1733 TypeCheckFn: func(_ []Function, inputs []types.T) (overloadIndex int32, _ []types.T) { 1734 if len(inputs) == 2 { 1735 if inputs[0] == types.T_char || inputs[0] == types.T_varchar { 1736 if inputs[1] == types.T_char || inputs[1] == types.T_varchar { 1737 return int32(0), nil 1738 } 1739 } 1740 } 1741 return wrongFunctionParameters, nil 1742 }, 1743 Overloads: []Function{ 1744 { 1745 Index: 0, 1746 Args: []types.T{types.T_varchar, types.T_varchar}, 1747 ReturnTyp: types.T_varchar, 1748 Fn: binary.ToDate, 1749 }, 1750 }, 1751 }, 1752 STR_TO_DATE: { 1753 Id: STR_TO_DATE, 1754 Flag: plan.Function_STRICT, 1755 Layout: STANDARD_FUNCTION, 1756 Overloads: []Function{ 1757 { 1758 Index: 0, 1759 Args: []types.T{types.T_varchar, types.T_varchar, types.T_datetime}, 1760 ReturnTyp: types.T_datetime, 1761 Fn: binary.StrToDateTime, 1762 }, 1763 { 1764 Index: 1, 1765 Args: []types.T{types.T_varchar, types.T_varchar, types.T_date}, 1766 ReturnTyp: types.T_date, 1767 Fn: binary.StrToDate, 1768 }, 1769 { 1770 Index: 2, 1771 Args: []types.T{types.T_varchar, types.T_varchar, types.T_time}, 1772 ReturnTyp: types.T_time, 1773 Fn: binary.StrToTime, 1774 }, 1775 { 1776 Index: 3, 1777 Args: []types.T{types.T_char, types.T_char, types.T_datetime}, 1778 ReturnTyp: types.T_datetime, 1779 Fn: binary.StrToDateTime, 1780 }, 1781 { 1782 Index: 4, 1783 Args: []types.T{types.T_char, types.T_char, types.T_date}, 1784 ReturnTyp: types.T_date, 1785 Fn: binary.StrToDate, 1786 }, 1787 { 1788 Index: 5, 1789 Args: []types.T{types.T_char, types.T_char, types.T_time}, 1790 ReturnTyp: types.T_time, 1791 Fn: binary.StrToTime, 1792 }, 1793 }, 1794 }, 1795 ATAN: { 1796 Id: ATAN, 1797 Flag: plan.Function_STRICT, 1798 Layout: STANDARD_FUNCTION, 1799 Overloads: []Function{ 1800 { 1801 Index: 0, 1802 Args: []types.T{types.T_float64}, 1803 ReturnTyp: types.T_float64, 1804 Fn: unary.Atan, 1805 }, 1806 { 1807 Index: 1, 1808 Args: []types.T{types.T_float64, types.T_float64}, 1809 ReturnTyp: types.T_float64, 1810 Fn: unary.Atan, 1811 }, 1812 }, 1813 }, 1814 COS: { 1815 Id: COS, 1816 Flag: plan.Function_STRICT, 1817 Layout: STANDARD_FUNCTION, 1818 Overloads: []Function{ 1819 { 1820 Index: 0, 1821 Args: []types.T{types.T_float64}, 1822 ReturnTyp: types.T_float64, 1823 Fn: unary.Cos, 1824 }, 1825 }, 1826 }, 1827 COT: { 1828 Id: COT, 1829 Flag: plan.Function_STRICT, 1830 Layout: STANDARD_FUNCTION, 1831 Overloads: []Function{ 1832 { 1833 Index: 0, 1834 Args: []types.T{types.T_float64}, 1835 ReturnTyp: types.T_float64, 1836 Fn: unary.Cot, 1837 }, 1838 }, 1839 }, 1840 TIMESTAMP: { 1841 Id: TIMESTAMP, 1842 Flag: plan.Function_STRICT, 1843 Layout: STANDARD_FUNCTION, 1844 Overloads: []Function{ 1845 { 1846 Index: 0, 1847 Volatile: true, 1848 Args: []types.T{types.T_date}, 1849 ReturnTyp: types.T_timestamp, 1850 Fn: unary.DateToTimestamp, 1851 }, 1852 { 1853 Index: 1, 1854 Volatile: true, 1855 Args: []types.T{types.T_datetime}, 1856 ReturnTyp: types.T_timestamp, 1857 Fn: unary.DatetimeToTimestamp, 1858 }, 1859 { 1860 Index: 2, 1861 Args: []types.T{types.T_timestamp}, 1862 ReturnTyp: types.T_timestamp, 1863 Fn: unary.TimestampToTimestamp, 1864 }, 1865 { 1866 Index: 3, 1867 Volatile: true, 1868 Args: []types.T{types.T_varchar}, 1869 ReturnTyp: types.T_timestamp, 1870 Fn: unary.DateStringToTimestamp, 1871 }, 1872 { 1873 Index: 4, 1874 Volatile: true, 1875 Args: []types.T{types.T_char}, 1876 ReturnTyp: types.T_timestamp, 1877 Fn: unary.DateStringToTimestamp, 1878 }, 1879 }, 1880 }, 1881 DATABASE: { 1882 Id: DATABASE, 1883 Flag: plan.Function_STRICT, 1884 Layout: STANDARD_FUNCTION, 1885 Overloads: []Function{ 1886 { 1887 Index: 0, 1888 Volatile: true, 1889 Args: []types.T{}, 1890 ReturnTyp: types.T_varchar, 1891 Fn: unary.Database, 1892 }, 1893 }, 1894 }, 1895 USER: { 1896 Id: USER, 1897 Flag: plan.Function_STRICT, 1898 Layout: STANDARD_FUNCTION, 1899 Overloads: []Function{ 1900 { 1901 Index: 0, 1902 Volatile: true, 1903 Args: []types.T{}, 1904 ReturnTyp: types.T_varchar, 1905 Fn: unary.User, 1906 }, 1907 }, 1908 }, 1909 CONNECTION_ID: { 1910 Id: CONNECTION_ID, 1911 Flag: plan.Function_STRICT, 1912 Layout: STANDARD_FUNCTION, 1913 Overloads: []Function{ 1914 { 1915 Index: 0, 1916 Volatile: true, 1917 Args: []types.T{}, 1918 ReturnTyp: types.T_uint64, 1919 Fn: unary.ConnectionID, 1920 }, 1921 }, 1922 }, 1923 CHARSET: { 1924 Id: CHARSET, 1925 Flag: plan.Function_STRICT, 1926 Layout: STANDARD_FUNCTION, 1927 Overloads: []Function{ 1928 { 1929 Index: 0, 1930 Volatile: true, 1931 Args: []types.T{types.T_varchar}, 1932 ReturnTyp: types.T_varchar, 1933 Fn: unary.Charset, 1934 }, 1935 }, 1936 }, 1937 CURRENT_ROLE: { 1938 Flag: plan.Function_STRICT, 1939 Layout: STANDARD_FUNCTION, 1940 Id: CURRENT_ROLE, 1941 Overloads: []Function{ 1942 { 1943 Index: 0, 1944 Volatile: true, 1945 Args: []types.T{}, 1946 ReturnTyp: types.T_varchar, 1947 Fn: unary.CurrentRole, 1948 }, 1949 }, 1950 }, 1951 FOUND_ROWS: { 1952 Id: FOUND_ROWS, 1953 Flag: plan.Function_STRICT, 1954 Layout: STANDARD_FUNCTION, 1955 Overloads: []Function{ 1956 { 1957 Index: 0, 1958 Volatile: true, 1959 Args: []types.T{}, 1960 ReturnTyp: types.T_uint64, 1961 Fn: unary.FoundRows, 1962 }, 1963 }, 1964 }, 1965 ICULIBVERSION: { 1966 Id: ICULIBVERSION, 1967 Flag: plan.Function_STRICT, 1968 Layout: STANDARD_FUNCTION, 1969 Overloads: []Function{ 1970 { 1971 Index: 0, 1972 Volatile: true, 1973 Args: []types.T{}, 1974 ReturnTyp: types.T_varchar, 1975 Fn: unary.ICULIBVersion, 1976 }, 1977 }, 1978 }, 1979 LAST_INSERT_ID: { 1980 Id: LAST_INSERT_ID, 1981 Flag: plan.Function_STRICT, 1982 Layout: STANDARD_FUNCTION, 1983 Overloads: []Function{ 1984 { 1985 Index: 0, 1986 Volatile: true, 1987 Args: []types.T{}, 1988 ReturnTyp: types.T_uint64, 1989 Fn: unary.LastInsertID, 1990 }, 1991 }, 1992 }, 1993 LAST_QUERY_ID: { 1994 Id: LAST_QUERY_ID, 1995 Flag: plan.Function_STRICT, 1996 Layout: STANDARD_FUNCTION, 1997 Overloads: []Function{ 1998 { 1999 Index: 0, 2000 Volatile: true, 2001 Args: []types.T{}, 2002 ReturnTyp: types.T_varchar, 2003 Fn: unary.LastQueryIDWithoutParam, 2004 }, 2005 { 2006 Index: 1, 2007 Volatile: true, 2008 Args: []types.T{types.T_int64}, 2009 ReturnTyp: types.T_varchar, 2010 Fn: unary.LastQueryID, 2011 }, 2012 }, 2013 }, 2014 ROLES_GRAPHML: { 2015 Id: ROLES_GRAPHML, 2016 Flag: plan.Function_STRICT, 2017 Layout: STANDARD_FUNCTION, 2018 Overloads: []Function{ 2019 { 2020 Index: 0, 2021 Volatile: true, 2022 Args: []types.T{}, 2023 ReturnTyp: types.T_varchar, 2024 Fn: unary.RolesGraphml, 2025 }, 2026 }, 2027 }, 2028 ROW_COUNT: { 2029 Id: ROW_COUNT, 2030 Flag: plan.Function_STRICT, 2031 Layout: STANDARD_FUNCTION, 2032 Overloads: []Function{ 2033 { 2034 Index: 0, 2035 Volatile: true, 2036 Args: []types.T{}, 2037 ReturnTyp: types.T_uint64, 2038 Fn: unary.RowCount, 2039 }, 2040 }, 2041 }, 2042 VERSION: { 2043 Id: VERSION, 2044 Flag: plan.Function_STRICT, 2045 Layout: STANDARD_FUNCTION, 2046 Overloads: []Function{ 2047 { 2048 Index: 0, 2049 Volatile: true, 2050 Args: []types.T{}, 2051 ReturnTyp: types.T_varchar, 2052 Fn: unary.Version, 2053 }, 2054 }, 2055 }, 2056 COLLATION: { 2057 Id: COLLATION, 2058 Flag: plan.Function_STRICT, 2059 Layout: STANDARD_FUNCTION, 2060 Overloads: []Function{ 2061 { 2062 Index: 0, 2063 Volatile: true, 2064 Args: []types.T{types.T_varchar}, 2065 ReturnTyp: types.T_varchar, 2066 Fn: unary.Collation, 2067 }, 2068 }, 2069 }, 2070 JSON_EXTRACT: { 2071 Id: JSON_EXTRACT, 2072 Flag: plan.Function_STRICT, 2073 Layout: STANDARD_FUNCTION, 2074 TypeCheckFn: func(overloads []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 2075 if len(inputs) < 2 { 2076 return wrongFunctionParameters, nil 2077 } 2078 if inputs[0] != types.T_json && !types.IsString(inputs[0]) && inputs[0] != types.T_any { //any: null scalar 2079 return wrongFunctionParameters, nil 2080 } 2081 ts = make([]types.T, len(inputs)) 2082 ts[0] = inputs[0] 2083 for i := 1; i < len(inputs); i++ { 2084 if !types.IsString(inputs[i]) && inputs[i] != types.T_any { 2085 ts[i] = types.T_varchar 2086 continue 2087 } 2088 ts[i] = inputs[i] 2089 } 2090 return 0, ts 2091 }, 2092 Overloads: []Function{ 2093 { 2094 Index: 0, 2095 Volatile: false, 2096 Args: []types.T{}, 2097 ReturnTyp: types.T_json, 2098 UseNewFramework: true, 2099 NewFn: multi.JsonExtract, 2100 }, 2101 }, 2102 }, 2103 JSON_QUOTE: { 2104 Id: JSON_QUOTE, 2105 Flag: plan.Function_STRICT, 2106 Layout: STANDARD_FUNCTION, 2107 Overloads: []Function{ 2108 { 2109 Index: 0, 2110 Volatile: false, 2111 Args: []types.T{types.T_varchar}, 2112 ReturnTyp: types.T_json, 2113 Fn: unary.JsonQuote, 2114 }, 2115 }, 2116 }, 2117 JSON_UNQUOTE: { 2118 Id: JSON_UNQUOTE, 2119 Flag: plan.Function_STRICT, 2120 Layout: STANDARD_FUNCTION, 2121 Overloads: []Function{ 2122 { 2123 Index: 0, 2124 Args: []types.T{types.T_json}, 2125 ReturnTyp: types.T_varchar, 2126 Fn: unary.JsonUnquote, 2127 }, 2128 { 2129 Index: 1, 2130 Args: []types.T{types.T_varchar}, 2131 ReturnTyp: types.T_varchar, 2132 Fn: unary.JsonUnquote, 2133 }, 2134 { 2135 Index: 2, 2136 Args: []types.T{types.T_char}, 2137 ReturnTyp: types.T_varchar, 2138 Fn: unary.JsonUnquote, 2139 }, 2140 { 2141 Index: 3, 2142 Args: []types.T{types.T_text}, 2143 ReturnTyp: types.T_varchar, 2144 Fn: unary.JsonUnquote, 2145 }, 2146 }, 2147 }, 2148 2149 ENABLE_FAULT_INJECTION: { 2150 Id: ENABLE_FAULT_INJECTION, 2151 Flag: plan.Function_INTERNAL, 2152 Layout: STANDARD_FUNCTION, 2153 Overloads: []Function{ 2154 { 2155 Index: 0, 2156 Volatile: true, 2157 Args: []types.T{}, 2158 ReturnTyp: types.T_bool, 2159 Fn: multi.EnableFaultInjection, 2160 }, 2161 }, 2162 }, 2163 DISABLE_FAULT_INJECTION: { 2164 Id: DISABLE_FAULT_INJECTION, 2165 Flag: plan.Function_INTERNAL, 2166 Layout: STANDARD_FUNCTION, 2167 Overloads: []Function{ 2168 { 2169 Index: 0, 2170 Volatile: true, 2171 Args: []types.T{}, 2172 ReturnTyp: types.T_bool, 2173 Fn: multi.DisableFaultInjection, 2174 }, 2175 }, 2176 }, 2177 ADD_FAULT_POINT: { 2178 Id: ADD_FAULT_POINT, 2179 Flag: plan.Function_INTERNAL, 2180 Layout: STANDARD_FUNCTION, 2181 Overloads: []Function{ 2182 { 2183 Index: 0, 2184 Volatile: true, 2185 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar, types.T_int64, types.T_varchar}, 2186 ReturnTyp: types.T_bool, 2187 Fn: multi.AddFaultPoint, 2188 }, 2189 }, 2190 }, 2191 REMOVE_FAULT_POINT: { 2192 Id: REMOVE_FAULT_POINT, 2193 Flag: plan.Function_INTERNAL, 2194 Layout: STANDARD_FUNCTION, 2195 Overloads: []Function{ 2196 { 2197 Index: 0, 2198 Volatile: true, 2199 Args: []types.T{types.T_varchar}, 2200 ReturnTyp: types.T_bool, 2201 Fn: multi.RemoveFaultPoint, 2202 }, 2203 }, 2204 }, 2205 TRIGGER_FAULT_POINT: { 2206 Id: REMOVE_FAULT_POINT, 2207 Flag: plan.Function_INTERNAL, 2208 Layout: STANDARD_FUNCTION, 2209 Overloads: []Function{ 2210 { 2211 Index: 0, 2212 Volatile: true, 2213 Args: []types.T{types.T_varchar}, 2214 ReturnTyp: types.T_int64, 2215 Fn: multi.TriggerFaultPoint, 2216 }, 2217 }, 2218 }, 2219 LOAD_FILE: { 2220 Id: LOAD_FILE, 2221 Flag: plan.Function_STRICT, 2222 Layout: STANDARD_FUNCTION, 2223 Overloads: []Function{ 2224 { 2225 Index: 0, 2226 Volatile: true, 2227 Args: []types.T{types.T_varchar}, 2228 ReturnTyp: types.T_text, 2229 Fn: unary.LoadFile, 2230 }, 2231 { 2232 Index: 1, 2233 Volatile: true, 2234 Args: []types.T{types.T_char}, 2235 ReturnTyp: types.T_text, 2236 Fn: unary.LoadFile, 2237 }, 2238 // { 2239 // Index: 2, 2240 // Args: []types.T{types.T_text}, 2241 // ReturnTyp: types.T_blob, 2242 // Fn: unary.LoadFile, 2243 // }, 2244 }, 2245 }, 2246 HEX: { 2247 Id: HEX, 2248 Flag: plan.Function_STRICT, 2249 Layout: STANDARD_FUNCTION, 2250 Overloads: []Function{ 2251 { 2252 Index: 0, 2253 Args: []types.T{types.T_varchar}, 2254 ReturnTyp: types.T_varchar, 2255 Fn: unary.HexString, 2256 }, 2257 { 2258 Index: 1, 2259 Args: []types.T{types.T_char}, 2260 ReturnTyp: types.T_varchar, 2261 Fn: unary.HexString, 2262 }, 2263 { 2264 Index: 2, 2265 Args: []types.T{types.T_int64}, 2266 ReturnTyp: types.T_varchar, 2267 Fn: unary.HexInt64, 2268 }, 2269 }, 2270 }, 2271 SERIAL: { 2272 Id: SERIAL, 2273 Flag: plan.Function_STRICT, 2274 Layout: STANDARD_FUNCTION, 2275 TypeCheckFn: func(_ []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 2276 return int32(0), nil 2277 }, 2278 Overloads: []Function{ 2279 { 2280 Index: 0, 2281 Args: []types.T{}, 2282 ReturnTyp: types.T_varchar, 2283 Fn: multi.Serial, 2284 }, 2285 }, 2286 }, 2287 HASH: { 2288 Id: HASH, 2289 Flag: plan.Function_STRICT, 2290 Layout: STANDARD_FUNCTION, 2291 TypeCheckFn: func(_ []Function, typs []types.T) (int32, []types.T) { 2292 return 0, typs 2293 }, 2294 Overloads: []Function{ 2295 { 2296 Index: 0, 2297 Args: []types.T{}, 2298 ReturnTyp: types.T_int64, 2299 Fn: multi.Hash, 2300 }, 2301 }, 2302 }, 2303 BIN: { 2304 Id: BIN, 2305 Flag: plan.Function_STRICT, 2306 Layout: STANDARD_FUNCTION, 2307 Overloads: []Function{ 2308 { 2309 Index: 0, 2310 Args: []types.T{types.T_uint8}, 2311 ReturnTyp: types.T_varchar, 2312 Fn: unary.Bin[uint8], 2313 }, 2314 { 2315 Index: 1, 2316 Args: []types.T{types.T_uint16}, 2317 ReturnTyp: types.T_varchar, 2318 Fn: unary.Bin[uint16], 2319 }, 2320 { 2321 Index: 2, 2322 Args: []types.T{types.T_uint32}, 2323 ReturnTyp: types.T_varchar, 2324 Fn: unary.Bin[uint32], 2325 }, 2326 { 2327 Index: 3, 2328 Args: []types.T{types.T_uint64}, 2329 ReturnTyp: types.T_varchar, 2330 Fn: unary.Bin[uint64], 2331 }, 2332 { 2333 Index: 4, 2334 Args: []types.T{types.T_int8}, 2335 ReturnTyp: types.T_varchar, 2336 Fn: unary.Bin[int8], 2337 }, 2338 { 2339 Index: 5, 2340 Args: []types.T{types.T_int16}, 2341 ReturnTyp: types.T_varchar, 2342 Fn: unary.Bin[int16], 2343 }, 2344 { 2345 Index: 6, 2346 Args: []types.T{types.T_int32}, 2347 ReturnTyp: types.T_varchar, 2348 Fn: unary.Bin[int32], 2349 }, 2350 { 2351 Index: 7, 2352 Args: []types.T{types.T_int64}, 2353 ReturnTyp: types.T_varchar, 2354 Fn: unary.Bin[int64], 2355 }, 2356 { 2357 Index: 8, 2358 Args: []types.T{types.T_float32}, 2359 ReturnTyp: types.T_varchar, 2360 Fn: unary.BinFloat[float32], 2361 }, 2362 { 2363 Index: 9, 2364 Args: []types.T{types.T_float64}, 2365 ReturnTyp: types.T_varchar, 2366 Fn: unary.BinFloat[float64], 2367 }, 2368 }, 2369 }, 2370 REGEXP_INSTR: { 2371 Id: REGEXP_INSTR, 2372 Flag: plan.Function_STRICT, 2373 Layout: STANDARD_FUNCTION, 2374 Overloads: []Function{ 2375 { 2376 Index: 0, 2377 Args: []types.T{types.T_varchar, types.T_varchar}, 2378 ReturnTyp: types.T_int64, 2379 Fn: multi.RegularInstr, 2380 }, 2381 { 2382 Index: 1, 2383 Args: []types.T{types.T_varchar, types.T_varchar, types.T_int64}, 2384 ReturnTyp: types.T_int64, 2385 Fn: multi.RegularInstr, 2386 }, 2387 { 2388 Index: 2, 2389 Args: []types.T{types.T_varchar, types.T_varchar, types.T_int64, types.T_int64}, 2390 ReturnTyp: types.T_int64, 2391 Fn: multi.RegularInstr, 2392 }, 2393 { 2394 Index: 3, 2395 Args: []types.T{types.T_varchar, types.T_varchar, types.T_int64, types.T_int64, types.T_uint8}, 2396 ReturnTyp: types.T_int64, 2397 Fn: multi.RegularInstr, 2398 }, 2399 }, 2400 }, 2401 REPLACE: { 2402 Id: REPLACE, 2403 Flag: plan.Function_STRICT, 2404 Layout: STANDARD_FUNCTION, 2405 Overloads: []Function{ 2406 { 2407 Index: 0, 2408 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 2409 ReturnTyp: types.T_varchar, 2410 Fn: multi.Replace, 2411 }, 2412 }, 2413 }, 2414 REGEXP_REPLACE: { 2415 Id: REGEXP_REPLACE, 2416 Flag: plan.Function_STRICT, 2417 Layout: STANDARD_FUNCTION, 2418 Overloads: []Function{ 2419 { 2420 Index: 0, 2421 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 2422 ReturnTyp: types.T_varchar, 2423 Fn: multi.RegularReplace, 2424 }, 2425 { 2426 Index: 1, 2427 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar, types.T_int64}, 2428 ReturnTyp: types.T_varchar, 2429 Fn: multi.RegularReplace, 2430 }, 2431 { 2432 Index: 2, 2433 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar, types.T_int64, types.T_int64}, 2434 ReturnTyp: types.T_varchar, 2435 Fn: multi.RegularReplace, 2436 }, 2437 }, 2438 }, 2439 REGEXP_LIKE: { 2440 Id: REGEXP_LIKE, 2441 Flag: plan.Function_STRICT, 2442 Layout: STANDARD_FUNCTION, 2443 Overloads: []Function{ 2444 { 2445 Index: 0, 2446 Args: []types.T{types.T_varchar, types.T_varchar}, 2447 ReturnTyp: types.T_bool, 2448 Fn: multi.RegularLike, 2449 }, 2450 { 2451 Index: 1, 2452 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 2453 ReturnTyp: types.T_bool, 2454 Fn: multi.RegularLike, 2455 }, 2456 }, 2457 }, 2458 REGEXP_SUBSTR: { 2459 Id: REGEXP_SUBSTR, 2460 Flag: plan.Function_STRICT, 2461 Layout: STANDARD_FUNCTION, 2462 Overloads: []Function{ 2463 { 2464 Index: 0, 2465 Args: []types.T{types.T_varchar, types.T_varchar}, 2466 ReturnTyp: types.T_varchar, 2467 Fn: multi.RegularSubstr, 2468 }, 2469 { 2470 Index: 1, 2471 Args: []types.T{types.T_varchar, types.T_varchar, types.T_int64}, 2472 ReturnTyp: types.T_varchar, 2473 Fn: multi.RegularSubstr, 2474 }, 2475 { 2476 Index: 2, 2477 Args: []types.T{types.T_varchar, types.T_varchar, types.T_int64, types.T_int64}, 2478 ReturnTyp: types.T_varchar, 2479 Fn: multi.RegularSubstr, 2480 }, 2481 }, 2482 }, 2483 2484 MO_MEMORY_USAGE: { 2485 Id: MO_MEMORY_USAGE, 2486 Flag: plan.Function_INTERNAL, 2487 Layout: STANDARD_FUNCTION, 2488 Overloads: []Function{ 2489 { 2490 Index: 0, 2491 Volatile: true, 2492 Args: []types.T{types.T_varchar}, 2493 ReturnTyp: types.T_varchar, 2494 Fn: unary.MoMemUsage, 2495 }, 2496 }, 2497 }, 2498 2499 MO_ENABLE_MEMORY_USAGE_DETAIL: { 2500 Id: MO_ENABLE_MEMORY_USAGE_DETAIL, 2501 Flag: plan.Function_INTERNAL, 2502 Layout: STANDARD_FUNCTION, 2503 Overloads: []Function{ 2504 { 2505 Index: 0, 2506 Volatile: true, 2507 Args: []types.T{types.T_varchar}, 2508 ReturnTyp: types.T_varchar, 2509 Fn: unary.MoEnableMemUsageDetail, 2510 }, 2511 }, 2512 }, 2513 MO_DISABLE_MEMORY_USAGE_DETAIL: { 2514 Id: MO_DISABLE_MEMORY_USAGE_DETAIL, 2515 Flag: plan.Function_INTERNAL, 2516 Layout: STANDARD_FUNCTION, 2517 Overloads: []Function{ 2518 { 2519 Index: 0, 2520 Volatile: true, 2521 Args: []types.T{types.T_varchar}, 2522 ReturnTyp: types.T_varchar, 2523 Fn: unary.MoDisableMemUsageDetail, 2524 }, 2525 }, 2526 }, 2527 DATEDIFF: { 2528 Id: DATEDIFF, 2529 Flag: plan.Function_STRICT, 2530 Layout: STANDARD_FUNCTION, 2531 Overloads: []Function{ 2532 { 2533 Index: 0, 2534 Volatile: true, 2535 Args: []types.T{types.T_date, types.T_date}, 2536 ReturnTyp: types.T_int64, 2537 Fn: binary.DateDiff, 2538 }, 2539 }, 2540 }, 2541 TIMESTAMPDIFF: { 2542 Id: TIMESTAMPDIFF, 2543 Flag: plan.Function_STRICT, 2544 Layout: STANDARD_FUNCTION, 2545 Overloads: []Function{ 2546 { 2547 Index: 0, 2548 Volatile: true, 2549 Args: []types.T{types.T_varchar, types.T_datetime, types.T_datetime}, 2550 ReturnTyp: types.T_int64, 2551 Fn: multi.TimeStampDiff, 2552 }, 2553 }, 2554 }, 2555 TIMEDIFF: { 2556 Id: TIMEDIFF, 2557 Flag: plan.Function_STRICT, 2558 Layout: STANDARD_FUNCTION, 2559 Overloads: []Function{ 2560 { 2561 Index: 0, 2562 Volatile: true, 2563 Args: []types.T{types.T_time, types.T_time}, 2564 ReturnTyp: types.T_time, 2565 Fn: binary.TimeDiff[types.Time], 2566 }, 2567 { 2568 Index: 1, 2569 Volatile: true, 2570 Args: []types.T{types.T_datetime, types.T_datetime}, 2571 ReturnTyp: types.T_time, 2572 Fn: binary.TimeDiff[types.Datetime], 2573 }, 2574 }, 2575 }, 2576 MO_CTL: { 2577 Id: MO_CTL, 2578 Flag: plan.Function_STRICT, 2579 Layout: STANDARD_FUNCTION, 2580 Overloads: []Function{ 2581 { 2582 Index: 0, 2583 Volatile: true, 2584 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 2585 ReturnTyp: types.T_varchar, 2586 Fn: ctl.Handler, 2587 }, 2588 }, 2589 }, 2590 MO_SHOW_VISIBLE_BIN: { 2591 Id: MO_SHOW_VISIBLE_BIN, 2592 Flag: plan.Function_STRICT, 2593 Layout: STANDARD_FUNCTION, 2594 Overloads: []Function{ 2595 { 2596 Index: 0, 2597 Volatile: true, 2598 Args: []types.T{types.T_varchar, types.T_uint8}, 2599 ReturnTyp: types.T_varchar, 2600 Fn: binary.ShowVisibleBin, 2601 }, 2602 { 2603 Index: 1, 2604 Volatile: true, 2605 Args: []types.T{types.T_text, types.T_uint8}, 2606 ReturnTyp: types.T_varchar, 2607 Fn: binary.ShowVisibleBin, 2608 }, 2609 }, 2610 }, 2611 FIELD: { 2612 Id: FIELD, 2613 Flag: plan.Function_STRICT, 2614 Layout: STANDARD_FUNCTION, 2615 TypeCheckFn: func(overloads []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 2616 l := len(inputs) 2617 if l < 2 { 2618 return wrongFunctionParameters, nil 2619 } 2620 2621 //If all arguments are strings, all arguments are compared as strings && 2622 //If all arguments are numbers, all arguments are compared as numbers. 2623 returnType := [...]types.T{types.T_varchar, types.T_char, types.T_int8, types.T_int16, types.T_int32, types.T_int64, types.T_uint8, types.T_uint16, types.T_uint32, types.T_uint64, types.T_float32, types.T_float64} 2624 for i := range returnType { 2625 if operator.CoalesceTypeCheckFn(inputs, nil, returnType[i]) { 2626 if i < 2 { 2627 return 0, nil 2628 } else { 2629 return int32(i - 1), nil 2630 } 2631 } 2632 } 2633 2634 //Otherwise, the arguments are compared as double. 2635 targetTypes := make([]types.T, l) 2636 2637 for j := 0; j < l; j++ { 2638 targetTypes[j] = types.T_float64 2639 } 2640 if code, _ := tryToMatch(inputs, targetTypes); code == matchedByConvert { 2641 return 10, targetTypes 2642 } 2643 2644 return wrongFunctionParameters, nil 2645 }, 2646 Overloads: []Function{ 2647 { 2648 Index: 0, 2649 Volatile: true, 2650 ReturnTyp: types.T_uint64, 2651 Fn: multi.FieldString, 2652 }, 2653 { 2654 Index: 1, 2655 Volatile: true, 2656 ReturnTyp: types.T_uint64, 2657 Fn: multi.FieldNumber[int8], 2658 }, 2659 { 2660 Index: 2, 2661 Volatile: true, 2662 ReturnTyp: types.T_uint64, 2663 Fn: multi.FieldNumber[int16], 2664 }, 2665 { 2666 Index: 3, 2667 Volatile: true, 2668 ReturnTyp: types.T_uint64, 2669 Fn: multi.FieldNumber[int32], 2670 }, 2671 { 2672 Index: 4, 2673 Volatile: true, 2674 ReturnTyp: types.T_uint64, 2675 Fn: multi.FieldNumber[int64], 2676 }, 2677 { 2678 Index: 5, 2679 Volatile: true, 2680 ReturnTyp: types.T_uint64, 2681 Fn: multi.FieldNumber[uint8], 2682 }, 2683 { 2684 Index: 6, 2685 Volatile: true, 2686 ReturnTyp: types.T_uint64, 2687 Fn: multi.FieldNumber[uint16], 2688 }, 2689 { 2690 Index: 7, 2691 Volatile: true, 2692 ReturnTyp: types.T_uint64, 2693 Fn: multi.FieldNumber[uint32], 2694 }, 2695 { 2696 Index: 8, 2697 Volatile: true, 2698 ReturnTyp: types.T_uint64, 2699 Fn: multi.FieldNumber[uint64], 2700 }, 2701 { 2702 Index: 9, 2703 Volatile: true, 2704 ReturnTyp: types.T_uint64, 2705 Fn: multi.FieldNumber[float32], 2706 }, 2707 { 2708 Index: 10, 2709 Volatile: true, 2710 ReturnTyp: types.T_uint64, 2711 Fn: multi.FieldNumber[float64], 2712 }, 2713 }, 2714 }, 2715 SUBSTRING_INDEX: { 2716 Id: SUBSTRING_INDEX, 2717 Flag: plan.Function_STRICT, 2718 Layout: STANDARD_FUNCTION, 2719 TypeCheckFn: func(overloads []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 2720 l := len(inputs) 2721 if l != 3 { 2722 return wrongFunctionParameters, nil 2723 } 2724 2725 stringType := [...]types.T{types.T_varchar, types.T_char, types.T_text, types.T_blob} 2726 numberType := [...]types.T{types.T_int8, types.T_int16, types.T_int32, types.T_int64, types.T_uint8, types.T_uint16, types.T_uint32, types.T_uint64, types.T_float32, types.T_float64} 2727 //the first and second arg's types 2728 stringTypeSet := make(map[types.T]bool) 2729 for _, v := range stringType { 2730 stringTypeSet[v] = true 2731 } 2732 //the third arg's types 2733 numberTypeSet := make(map[types.T]bool) 2734 for _, v := range numberType { 2735 numberTypeSet[v] = true 2736 } 2737 if stringTypeSet[inputs[0]] && stringTypeSet[inputs[1]] && numberTypeSet[inputs[2]] { 2738 return 0, nil 2739 } 2740 2741 //otherwise, try to cast 2742 minCost, minIndex := math.MaxInt32, -1 2743 convertTypes := make([]types.T, l) 2744 thirdArgType := [...]types.T{types.T_float64, types.T_uint64, types.T_int64} 2745 2746 for _, first := range stringType { 2747 for _, second := range stringType { 2748 for _, third := range thirdArgType { 2749 targetTypes := []types.T{first, second, third} 2750 if code, c := tryToMatch(inputs, targetTypes); code == matchedByConvert { 2751 if c < minCost { 2752 minCost = c 2753 copy(convertTypes, targetTypes) 2754 minIndex = 0 2755 } 2756 } 2757 } 2758 } 2759 } 2760 if minIndex != -1 { 2761 return 0, convertTypes 2762 } 2763 2764 return wrongFunctionParameters, nil 2765 }, 2766 Overloads: []Function{ 2767 { 2768 Index: 0, 2769 ReturnTyp: types.T_varchar, 2770 Fn: multi.SubStrIndex, 2771 }, 2772 }, 2773 }, 2774 FORMAT: { 2775 Id: FORMAT, 2776 Flag: plan.Function_STRICT, 2777 Layout: STANDARD_FUNCTION, 2778 TypeCheckFn: func(overloads []Function, inputs []types.T) (overloadIndex int32, ts []types.T) { 2779 l := len(inputs) 2780 if l < 2 { 2781 return wrongFunctionParameters, nil 2782 } 2783 2784 //if the first param's type is timeType, return wrongFunctionParameters 2785 timeType := [...]types.T{types.T_date, types.T_datetime, types.T_timestamp, types.T_time} 2786 timeTypeSet := make(map[types.T]bool) 2787 for _, v := range timeType { 2788 timeTypeSet[v] = true 2789 } 2790 if timeTypeSet[inputs[0]] { 2791 return wrongFunctionParameters, nil 2792 } 2793 2794 return normalTypeCheck(overloads, inputs) 2795 }, 2796 Overloads: []Function{ 2797 { 2798 Index: 0, 2799 Volatile: true, 2800 Args: []types.T{types.T_varchar, types.T_varchar}, 2801 ReturnTyp: types.T_varchar, 2802 Fn: multi.Format, 2803 }, 2804 { 2805 Index: 1, 2806 Volatile: true, 2807 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 2808 ReturnTyp: types.T_varchar, 2809 Fn: multi.Format, 2810 }, 2811 }, 2812 }, 2813 SLEEP: { 2814 Id: SLEEP, 2815 Flag: plan.Function_STRICT, 2816 Layout: STANDARD_FUNCTION, 2817 Overloads: []Function{ 2818 { 2819 Index: 0, 2820 Args: []types.T{types.T_uint64}, 2821 ReturnTyp: types.T_uint8, 2822 Volatile: true, 2823 Fn: unary.Sleep[uint64], 2824 }, 2825 { 2826 Index: 1, 2827 Args: []types.T{types.T_float64}, 2828 ReturnTyp: types.T_uint8, 2829 Volatile: true, 2830 Fn: unary.Sleep[float64], 2831 }, 2832 }, 2833 }, 2834 INSTR: { 2835 Id: INSTR, 2836 Flag: plan.Function_STRICT, 2837 Layout: STANDARD_FUNCTION, 2838 Overloads: []Function{ 2839 { 2840 Index: 0, 2841 Args: []types.T{types.T_varchar, types.T_varchar}, 2842 ReturnTyp: types.T_int64, 2843 Volatile: false, 2844 Fn: binary.Instr, 2845 }, 2846 }, 2847 }, 2848 SPLIT_PART: { 2849 Id: SPLIT_PART, 2850 Flag: plan.Function_STRICT, 2851 Layout: STANDARD_FUNCTION, 2852 Overloads: []Function{ 2853 { 2854 Index: 0, 2855 Args: []types.T{types.T_varchar, types.T_varchar, types.T_uint32}, 2856 ReturnTyp: types.T_varchar, 2857 Volatile: false, 2858 Fn: multi.SplitPart, 2859 }, 2860 }, 2861 }, 2862 CURRENT_DATE: { 2863 Id: CURRENT_DATE, 2864 Flag: plan.Function_STRICT, 2865 Layout: STANDARD_FUNCTION, 2866 Overloads: []Function{ 2867 { 2868 Index: 0, 2869 Args: []types.T{}, 2870 ReturnTyp: types.T_date, 2871 Volatile: false, 2872 RealTimeRelated: true, 2873 Fn: unary.CurrentDate, 2874 }, 2875 }, 2876 }, 2877 ASCII: { 2878 Id: ASCII, 2879 Flag: plan.Function_STRICT, 2880 Layout: STANDARD_FUNCTION, 2881 Overloads: []Function{ 2882 { 2883 Index: 0, 2884 Args: []types.T{types.T_varchar}, 2885 ReturnTyp: types.T_uint8, 2886 Fn: unary.AsciiString, 2887 }, 2888 { 2889 Index: 1, 2890 Args: []types.T{types.T_char}, 2891 ReturnTyp: types.T_uint8, 2892 Fn: unary.AsciiString, 2893 }, 2894 { 2895 Index: 2, 2896 Args: []types.T{types.T_text}, 2897 ReturnTyp: types.T_uint8, 2898 Fn: unary.AsciiString, 2899 }, 2900 { 2901 Index: 3, 2902 Args: []types.T{types.T_int8}, 2903 ReturnTyp: types.T_uint8, 2904 Fn: unary.AsciiInt[int8], 2905 }, 2906 { 2907 Index: 4, 2908 Args: []types.T{types.T_int16}, 2909 ReturnTyp: types.T_uint8, 2910 Fn: unary.AsciiInt[int16], 2911 }, 2912 { 2913 Index: 5, 2914 Args: []types.T{types.T_int32}, 2915 ReturnTyp: types.T_uint8, 2916 Fn: unary.AsciiInt[int32], 2917 }, 2918 { 2919 Index: 6, 2920 Args: []types.T{types.T_int64}, 2921 ReturnTyp: types.T_uint8, 2922 Fn: unary.AsciiInt[int64], 2923 }, 2924 { 2925 Index: 7, 2926 Args: []types.T{types.T_uint8}, 2927 ReturnTyp: types.T_uint8, 2928 Fn: unary.AsciiUint[uint8], 2929 }, 2930 { 2931 Index: 8, 2932 Args: []types.T{types.T_uint16}, 2933 ReturnTyp: types.T_uint8, 2934 Fn: unary.AsciiUint[uint16], 2935 }, 2936 { 2937 Index: 9, 2938 Args: []types.T{types.T_uint32}, 2939 ReturnTyp: types.T_uint8, 2940 Fn: unary.AsciiUint[uint32], 2941 }, 2942 { 2943 Index: 10, 2944 Args: []types.T{types.T_uint64}, 2945 ReturnTyp: types.T_uint8, 2946 Fn: unary.AsciiUint[uint64], 2947 }, 2948 }, 2949 }, 2950 MO_TABLE_ROWS: { 2951 Id: MO_TABLE_ROWS, 2952 Flag: plan.Function_STRICT, 2953 Layout: STANDARD_FUNCTION, 2954 Overloads: []Function{ 2955 { 2956 Index: 0, 2957 Args: []types.T{types.T_varchar, types.T_varchar}, 2958 ReturnTyp: types.T_int64, 2959 Volatile: true, 2960 RealTimeRelated: true, 2961 Fn: ctl.MoTableRows, 2962 }, 2963 }, 2964 }, 2965 MO_TABLE_SIZE: { 2966 Id: MO_TABLE_SIZE, 2967 Flag: plan.Function_STRICT, 2968 Layout: STANDARD_FUNCTION, 2969 Overloads: []Function{ 2970 { 2971 Index: 0, 2972 Args: []types.T{types.T_varchar, types.T_varchar}, 2973 ReturnTyp: types.T_int64, 2974 Volatile: true, 2975 RealTimeRelated: true, 2976 Fn: ctl.MoTableSize, 2977 }, 2978 }, 2979 }, 2980 CURRENT_ACCOUNT_ID: { 2981 Id: CURRENT_ACCOUNT_ID, 2982 Flag: plan.Function_STRICT, 2983 Layout: STANDARD_FUNCTION, 2984 Overloads: []Function{ 2985 { 2986 Index: 0, 2987 Args: []types.T{}, 2988 ReturnTyp: types.T_uint32, 2989 UseNewFramework: true, 2990 NewFn: func(parameters []*vector.Vector, result vector.FunctionResultWrapper, proc *process.Process, length int) error { 2991 res := vector.MustFunctionResult[uint32](result) 2992 return res.Append(proc.SessionInfo.AccountId, false) 2993 }, 2994 }, 2995 }, 2996 }, 2997 CURRENT_ACCOUNT_NAME: { 2998 Id: CURRENT_ACCOUNT_NAME, 2999 Flag: plan.Function_STRICT, 3000 Layout: STANDARD_FUNCTION, 3001 Overloads: []Function{ 3002 { 3003 Index: 0, 3004 Args: []types.T{}, 3005 ReturnTyp: types.T_varchar, 3006 UseNewFramework: true, 3007 NewFn: func(parameters []*vector.Vector, result vector.FunctionResultWrapper, proc *process.Process, length int) error { 3008 res := vector.MustFunctionResult[types.Varlena](result) 3009 return res.AppendStr([]byte(proc.SessionInfo.Account), false) 3010 }, 3011 }, 3012 }, 3013 }, 3014 CURRENT_ROLE_ID: { 3015 Id: CURRENT_ROLE_ID, 3016 Flag: plan.Function_STRICT, 3017 Layout: STANDARD_FUNCTION, 3018 Overloads: []Function{ 3019 { 3020 Index: 0, 3021 Args: []types.T{}, 3022 ReturnTyp: types.T_uint32, 3023 UseNewFramework: true, 3024 NewFn: func(parameters []*vector.Vector, result vector.FunctionResultWrapper, proc *process.Process, length int) error { 3025 res := vector.MustFunctionResult[uint32](result) 3026 return res.Append(proc.SessionInfo.RoleId, false) 3027 }, 3028 }, 3029 }, 3030 }, 3031 CURRENT_ROLE_NAME: { 3032 Id: CURRENT_ROLE_NAME, 3033 Flag: plan.Function_STRICT, 3034 Layout: STANDARD_FUNCTION, 3035 Overloads: []Function{ 3036 { 3037 Index: 0, 3038 Args: []types.T{}, 3039 ReturnTyp: types.T_varchar, 3040 UseNewFramework: true, 3041 NewFn: func(parameters []*vector.Vector, result vector.FunctionResultWrapper, proc *process.Process, length int) error { 3042 res := vector.MustFunctionResult[types.Varlena](result) 3043 return res.AppendStr([]byte(proc.SessionInfo.Role), false) 3044 }, 3045 }, 3046 }, 3047 }, 3048 CURRENT_USER_ID: { 3049 Id: CURRENT_USER_ID, 3050 Flag: plan.Function_STRICT, 3051 Layout: STANDARD_FUNCTION, 3052 Overloads: []Function{ 3053 { 3054 Index: 0, 3055 Args: []types.T{}, 3056 ReturnTyp: types.T_uint32, 3057 UseNewFramework: true, 3058 NewFn: func(parameters []*vector.Vector, result vector.FunctionResultWrapper, proc *process.Process, length int) error { 3059 res := vector.MustFunctionResult[uint32](result) 3060 return res.Append(proc.SessionInfo.UserId, false) 3061 }, 3062 }, 3063 }, 3064 }, 3065 CURRENT_USER_NAME: { 3066 Id: CURRENT_USER_NAME, 3067 Flag: plan.Function_STRICT, 3068 Layout: STANDARD_FUNCTION, 3069 Overloads: []Function{ 3070 { 3071 Index: 0, 3072 Args: []types.T{}, 3073 ReturnTyp: types.T_varchar, 3074 UseNewFramework: true, 3075 NewFn: func(parameters []*vector.Vector, result vector.FunctionResultWrapper, proc *process.Process, length int) error { 3076 res := vector.MustFunctionResult[types.Varlena](result) 3077 return res.AppendStr([]byte(proc.SessionInfo.User), false) 3078 }, 3079 }, 3080 }, 3081 }, 3082 MO_TABLE_COL_MAX: { 3083 Id: MO_TABLE_COL_MAX, 3084 Flag: plan.Function_STRICT, 3085 Layout: STANDARD_FUNCTION, 3086 Overloads: []Function{ 3087 { 3088 Index: 0, 3089 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 3090 ReturnTyp: types.T_varchar, 3091 Volatile: true, 3092 RealTimeRelated: true, 3093 Fn: ctl.MoTableColMax, 3094 }, 3095 }, 3096 }, 3097 MO_TABLE_COL_MIN: { 3098 Id: MO_TABLE_COL_MIN, 3099 Flag: plan.Function_STRICT, 3100 Layout: STANDARD_FUNCTION, 3101 Overloads: []Function{ 3102 { 3103 Index: 0, 3104 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 3105 ReturnTyp: types.T_varchar, 3106 Volatile: true, 3107 RealTimeRelated: true, 3108 Fn: ctl.MoTableColMin, 3109 }, 3110 }, 3111 }, 3112 TRIM: { 3113 Id: TRIM, 3114 Flag: plan.Function_STRICT, 3115 Layout: STANDARD_FUNCTION, 3116 Overloads: []Function{ 3117 { 3118 Index: 0, 3119 Args: []types.T{types.T_varchar, types.T_varchar, types.T_varchar}, 3120 ReturnTyp: types.T_varchar, 3121 UseNewFramework: true, 3122 ParameterMustScalar: []bool{true, false, false}, 3123 NewFn: multi.Trim, 3124 }, 3125 }, 3126 }, 3127 MO_LOG_DATE: { 3128 Id: MO_LOG_DATE, 3129 Flag: plan.Function_STRICT, 3130 Layout: STANDARD_FUNCTION, 3131 Overloads: []Function{ 3132 { 3133 Index: 0, 3134 Args: []types.T{types.T_varchar}, 3135 ReturnTyp: types.T_date, 3136 Volatile: true, 3137 RealTimeRelated: true, 3138 Fn: ctl.MOLogDate, 3139 }, 3140 }, 3141 }, 3142 }