/* * Copyright (c) 2019 TAOS Data, Inc. * * This program is free software: you can use, redistribute, and/or modify * it under the terms of the GNU Affero General Public License, version 3 * or later ("AGPL"), as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #include "os.h" #include "ttype.h" #include "tutil.h" #include "tarithoperator.h" #include "tcompare.h" //GET_TYPED_DATA(v, double, _right_type, (char *)&((right)[i])); #define ARRAY_LIST_OP_DIV(left, right, _left_type, _right_type, len1, len2, out, op, _res_type, _ord) \ { \ int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : MAX(len1, len2) - 1; \ int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; \ \ if ((len1) == (len2)) { \ for (; i < (len2) && i >= 0; i += step, (out) += 1) { \ if (isNull((char *)&((left)[i]), _left_type) || isNull((char *)&((right)[i]), _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ double v, z = 0.0; \ GET_TYPED_DATA(v, double, _right_type, (char *)&((right)[i])); \ if (getComparFunc(TSDB_DATA_TYPE_DOUBLE, 0)(&v, &z) == 0) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[i] op(right)[i]; \ } \ } else if ((len1) == 1) { \ for (; i >= 0 && i < (len2); i += step, (out) += 1) { \ if (isNull((char *)(left), _left_type) || isNull((char *)&(right)[i], _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ double v, z = 0.0; \ GET_TYPED_DATA(v, double, _right_type, (char *)&((right)[i])); \ if (getComparFunc(TSDB_DATA_TYPE_DOUBLE, 0)(&v, &z) == 0) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[0] op(right)[i]; \ } \ } else if ((len2) == 1) { \ for (; i >= 0 && i < (len1); i += step, (out) += 1) { \ if (isNull((char *)&(left)[i], _left_type) || isNull((char *)(right), _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ double v, z = 0.0; \ GET_TYPED_DATA(v, double, _right_type, (char *)&((right)[0])); \ if (getComparFunc(TSDB_DATA_TYPE_DOUBLE, 0)(&v, &z) == 0) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[i] op(right)[0]; \ } \ } \ } #define ARRAY_LIST_OP(left, right, _left_type, _right_type, len1, len2, out, op, _res_type, _ord) \ { \ int32_t i = ((_ord) == TSDB_ORDER_ASC) ? 0 : MAX(len1, len2) - 1; \ int32_t step = ((_ord) == TSDB_ORDER_ASC) ? 1 : -1; \ \ if ((len1) == (len2)) { \ for (; i < (len2) && i >= 0; i += step, (out) += 1) { \ if (isNull((char *)&((left)[i]), _left_type) || isNull((char *)&((right)[i]), _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[i] op(right)[i]; \ } \ } else if ((len1) == 1) { \ for (; i >= 0 && i < (len2); i += step, (out) += 1) { \ if (isNull((char *)(left), _left_type) || isNull((char *)&(right)[i], _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[0] op(right)[i]; \ } \ } else if ((len2) == 1) { \ for (; i >= 0 && i < (len1); i += step, (out) += 1) { \ if (isNull((char *)&(left)[i], _left_type) || isNull((char *)(right), _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[i] op(right)[0]; \ } \ } \ } #define ARRAY_LIST_OP_REM(left, right, _left_type, _right_type, len1, len2, out, op, _res_type, _ord) \ { \ int32_t i = (_ord == TSDB_ORDER_ASC) ? 0 : MAX(len1, len2) - 1; \ int32_t step = (_ord == TSDB_ORDER_ASC) ? 1 : -1; \ \ if (len1 == (len2)) { \ for (; i >= 0 && i < (len2); i += step, (out) += 1) { \ if (isNull((char *)&(left[i]), _left_type) || isNull((char *)&(right[i]), _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ double v, z = 0.0; \ GET_TYPED_DATA(v, double, _right_type, (char *)&((right)[i])); \ if (getComparFunc(TSDB_DATA_TYPE_DOUBLE, 0)(&v, &z) == 0) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[i] - ((int64_t)(((double)(left)[i]) / (right)[i])) * (right)[i]; \ } \ } else if (len1 == 1) { \ for (; i >= 0 && i < (len2); i += step, (out) += 1) { \ if (isNull((char *)(left), _left_type) || isNull((char *)&((right)[i]), _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ double v, z = 0.0; \ GET_TYPED_DATA(v, double, _right_type, (char *)&((right)[i])); \ if (getComparFunc(TSDB_DATA_TYPE_DOUBLE, 0)(&v, &z) == 0) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[0] - ((int64_t)(((double)(left)[0]) / (right)[i])) * (right)[i]; \ } \ } else if ((len2) == 1) { \ for (; i >= 0 && i < len1; i += step, (out) += 1) { \ if (isNull((char *)&((left)[i]), _left_type) || isNull((char *)(right), _right_type)) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ double v, z = 0.0; \ GET_TYPED_DATA(v, double, _right_type, (char *)&((right)[0])); \ if (getComparFunc(TSDB_DATA_TYPE_DOUBLE, 0)(&v, &z) == 0) { \ SET_DOUBLE_NULL(out); \ continue; \ } \ *(out) = (double)(left)[i] - ((int64_t)(((double)(left)[i]) / (right)[0])) * (right)[0]; \ } \ } \ } #define ARRAY_LIST_ADD(left, right, _left_type, _right_type, len1, len2, out, _ord) \ ARRAY_LIST_OP(left, right, _left_type, _right_type, len1, len2, out, +, TSDB_DATA_TYPE_DOUBLE, _ord) #define ARRAY_LIST_SUB(left, right, _left_type, _right_type, len1, len2, out, _ord) \ ARRAY_LIST_OP(left, right, _left_type, _right_type, len1, len2, out, -, TSDB_DATA_TYPE_DOUBLE, _ord) #define ARRAY_LIST_MULTI(left, right, _left_type, _right_type, len1, len2, out, _ord) \ ARRAY_LIST_OP(left, right, _left_type, _right_type, len1, len2, out, *, TSDB_DATA_TYPE_DOUBLE, _ord) #define ARRAY_LIST_DIV(left, right, _left_type, _right_type, len1, len2, out, _ord) \ ARRAY_LIST_OP_DIV(left, right, _left_type, _right_type, len1, len2, out, /, TSDB_DATA_TYPE_DOUBLE, _ord) #define ARRAY_LIST_REM(left, right, _left_type, _right_type, len1, len2, out, _ord) \ ARRAY_LIST_OP_REM(left, right, _left_type, _right_type, len1, len2, out, %, TSDB_DATA_TYPE_DOUBLE, _ord) #define TYPE_CONVERT_DOUBLE_RES(left, right, out, _type_left, _type_right, _type_res) \ _type_left * pLeft = (_type_left *)(left); \ _type_right *pRight = (_type_right *)(right); \ _type_res * pOutput = (_type_res *)(out); #define DO_VECTOR_ADD(left, numLeft, leftType, leftOriginType, right, numRight, rightType, rightOriginType, _output, \ _order) \ do { \ TYPE_CONVERT_DOUBLE_RES(left, right, _output, leftOriginType, rightOriginType, double); \ ARRAY_LIST_ADD(pLeft, pRight, leftType, rightType, numLeft, numRight, pOutput, _order); \ } while (0) #define DO_VECTOR_SUB(left, numLeft, leftType, leftOriginType, right, numRight, rightType, rightOriginType, _output, \ _order) \ do { \ TYPE_CONVERT_DOUBLE_RES(left, right, _output, leftOriginType, rightOriginType, double); \ ARRAY_LIST_SUB(pLeft, pRight, leftType, rightType, numLeft, numRight, pOutput, _order); \ } while (0) #define DO_VECTOR_MULTIPLY(left, numLeft, leftType, leftOriginType, right, numRight, rightType, rightOriginType, \ _output, _order) \ do { \ TYPE_CONVERT_DOUBLE_RES(left, right, _output, leftOriginType, rightOriginType, double); \ ARRAY_LIST_MULTI(pLeft, pRight, leftType, rightType, numLeft, numRight, pOutput, _order); \ } while (0) #define DO_VECTOR_DIVIDE(left, numLeft, leftType, leftOriginType, right, numRight, rightType, rightOriginType, \ _output, _order) \ do { \ TYPE_CONVERT_DOUBLE_RES(left, right, _output, leftOriginType, rightOriginType, double); \ ARRAY_LIST_DIV(pLeft, pRight, leftType, rightType, numLeft, numRight, pOutput, _order); \ } while (0) #define DO_VECTOR_REMAINDER(left, numLeft, leftType, leftOriginType, right, numRight, rightType, rightOriginType, \ _output, _order) \ do { \ TYPE_CONVERT_DOUBLE_RES(left, right, _output, leftOriginType, rightOriginType, double); \ ARRAY_LIST_REM(pLeft, pRight, leftType, rightType, numLeft, numRight, pOutput, _order); \ } while (0) void calc_i32_i32_add(void *left, void *right, int32_t numLeft, int32_t numRight, void *output, int32_t order) { int32_t *pLeft = (int32_t *)left; int32_t *pRight = (int32_t *)right; double * pOutput = (double *)output; int32_t i = (order == TSDB_ORDER_ASC) ? 0 : MAX(numLeft, numRight) - 1; int32_t step = (order == TSDB_ORDER_ASC) ? 1 : -1; if (numLeft == numRight) { for (; i >= 0 && i < numRight; i += step, pOutput += 1) { if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) { SET_DOUBLE_NULL(pOutput); continue; } *pOutput = (double)pLeft[i] + pRight[i]; } } else if (numLeft == 1) { for (; i >= 0 && i < numRight; i += step, pOutput += 1) { if (isNull((char *)(pLeft), TSDB_DATA_TYPE_INT) || isNull((char *)&(pRight[i]), TSDB_DATA_TYPE_INT)) { SET_DOUBLE_NULL(pOutput); continue; } *pOutput = (double)pLeft[0] + pRight[i]; } } else if (numRight == 1) { for (; i >= 0 && i < numLeft; i += step, pOutput += 1) { if (isNull((char *)&(pLeft[i]), TSDB_DATA_TYPE_INT) || isNull((char *)(pRight), TSDB_DATA_TYPE_INT)) { SET_DOUBLE_NULL(pOutput); continue; } *pOutput = (double)pLeft[i] + pRight[0]; } } } void vectorAdd(void *left, int32_t numLeft, int32_t leftType, void *right, int32_t numRight, int32_t rightType, void *output, int32_t order) { switch(leftType) { case TSDB_DATA_TYPE_TINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, int8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UTINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, uint8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_SMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, int16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_USMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, uint16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_INT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, int32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, uint32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_BIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, int64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UBIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, uint64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_FLOAT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, float, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_DOUBLE: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_ADD(left, numLeft, leftType, double, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } default:; } } void vectorSub(void *left, int32_t numLeft, int32_t leftType, void *right, int32_t numRight, int32_t rightType, void *output, int32_t order) { switch(leftType) { case TSDB_DATA_TYPE_TINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, int8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UTINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, uint8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_SMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, int16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_USMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, uint16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_INT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, int32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, uint32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_BIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, int64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UBIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, uint64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_FLOAT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, float, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_DOUBLE: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_SUB(left, numLeft, leftType, double, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } default:; } } void vectorMultiply(void *left, int32_t numLeft, int32_t leftType, void *right, int32_t numRight, int32_t rightType, void *output, int32_t order) { switch(leftType) { case TSDB_DATA_TYPE_TINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UTINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_SMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_USMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_INT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_BIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, int64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UBIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, uint64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_FLOAT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, float, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_DOUBLE: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_MULTIPLY(left, numLeft, leftType, double, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } default:; } } void vectorDivide(void *left, int32_t numLeft, int32_t leftType, void *right, int32_t numRight, int32_t rightType, void *output, int32_t order) { switch(leftType) { case TSDB_DATA_TYPE_TINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UTINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_SMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_USMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_INT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_BIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, int64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UBIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, uint64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_FLOAT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, float, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_DOUBLE: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_DIVIDE(left, numLeft, leftType, double, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } default:; } } void vectorRemainder(void *left, int32_t numLeft, int32_t leftType, void *right, int32_t numRight, int32_t rightType, void *output, int32_t order) { switch(leftType) { case TSDB_DATA_TYPE_TINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UTINYINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint8_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_SMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_USMALLINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint16_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_INT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint32_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_BIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, int64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_UBIGINT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, uint64_t, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_FLOAT: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, float, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } case TSDB_DATA_TYPE_DOUBLE: { switch (rightType) { case TSDB_DATA_TYPE_TINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, int8_t, output, order); break; } case TSDB_DATA_TYPE_UTINYINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, uint8_t, output, order); break; } case TSDB_DATA_TYPE_SMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, int16_t, output, order); break; } case TSDB_DATA_TYPE_USMALLINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, uint16_t, output, order); break; } case TSDB_DATA_TYPE_INT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, int32_t, output, order); break; } case TSDB_DATA_TYPE_UINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, uint32_t, output, order); break; } case TSDB_DATA_TYPE_BIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, int64_t, output, order); break; } case TSDB_DATA_TYPE_UBIGINT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, uint64_t, output, order); break; } case TSDB_DATA_TYPE_FLOAT: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, float, output, order); break; } case TSDB_DATA_TYPE_DOUBLE: { DO_VECTOR_REMAINDER(left, numLeft, leftType, double, right, numRight, rightType, double, output, order); break; } default: assert(0); } break; } default:; } } _arithmetic_operator_fn_t getArithmeticOperatorFn(int32_t arithmeticOptr) { switch (arithmeticOptr) { case TSDB_BINARY_OP_ADD: return vectorAdd; case TSDB_BINARY_OP_SUBTRACT: return vectorSub; case TSDB_BINARY_OP_MULTIPLY: return vectorMultiply; case TSDB_BINARY_OP_DIVIDE: return vectorDivide; case TSDB_BINARY_OP_REMAINDER: return vectorRemainder; default: assert(0); return NULL; } }