From 02a79de0144b4171272c034f9c8e8a9ff1d112c0 Mon Sep 17 00:00:00 2001 From: h30054849 Date: Wed, 18 Dec 2024 10:22:53 +0800 Subject: [PATCH] modify vector cast --- src/common/backend/catalog/builtin_funcs.ini | 24 ++++++++++---------- src/common/backend/utils/adt/vector.cpp | 21 +---------------- 2 files changed, 13 insertions(+), 32 deletions(-) diff --git a/src/common/backend/catalog/builtin_funcs.ini b/src/common/backend/catalog/builtin_funcs.ini index e83248505..25656eac1 100644 --- a/src/common/backend/catalog/builtin_funcs.ini +++ b/src/common/backend/catalog/builtin_funcs.ini @@ -13386,40 +13386,40 @@ AddFuncGroup( ), AddFuncGroup( "vector", 1, - AddBuiltinFunc(_0(8214), _1("vector"), _2(3), _3(true), _4(false), _5(vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 8305, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8214), _1("vector"), _2(3), _3(true), _4(false), _5(vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 8305, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "array_to_vector", 4, - AddBuiltinFunc(_0(8215), _1("array_to_vector"), _2(3), _3(true), _4(false), _5(array_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 1007, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("array_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), - AddBuiltinFunc(_0(8216), _1("array_to_vector"), _2(3), _3(true), _4(false), _5(array_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 1021, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("array_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), - AddBuiltinFunc(_0(8217), _1("array_to_vector"), _2(3), _3(true), _4(false), _5(array_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 1022, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("array_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), - AddBuiltinFunc(_0(8218), _1("array_to_vector"), _2(3), _3(true), _4(false), _5(array_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 1231, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("array_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8215), _1("array_to_vector"), _2(3), _3(true), _4(false), _5(array_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 1007, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("array_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(8216), _1("array_to_vector"), _2(3), _3(true), _4(false), _5(array_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 1021, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("array_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(8217), _1("array_to_vector"), _2(3), _3(true), _4(false), _5(array_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 1022, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("array_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(8218), _1("array_to_vector"), _2(3), _3(true), _4(false), _5(array_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 1231, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("array_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "vector_to_float4", 1, - AddBuiltinFunc(_0(8219), _1("vector_to_float4"), _2(3), _3(true), _4(false), _5(vector_to_float4), _6(1021), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 8305, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_float4"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8219), _1("vector_to_float4"), _2(3), _3(true), _4(false), _5(vector_to_float4), _6(1021), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 8305, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_float4"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "vector_to_int4", 1, - AddBuiltinFunc(_0(8212), _1("vector_to_int4"), _2(1), _3(true), _4(false), _5(vector_to_int4), _6(1007), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(1, 8305), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_int4"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8212), _1("vector_to_int4"), _2(1), _3(true), _4(false), _5(vector_to_int4), _6(1007), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(1, 8305), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_int4"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "vector_to_float8", 1, - AddBuiltinFunc(_0(8213), _1("vector_to_float8"), _2(1), _3(true), _4(false), _5(vector_to_float8), _6(1022), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(1, 8305), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_float8"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8213), _1("vector_to_float8"), _2(1), _3(true), _4(false), _5(vector_to_float8), _6(1022), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(1, 8305), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_float8"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "vector_to_numeric", 1, - AddBuiltinFunc(_0(8221), _1("vector_to_numeric"), _2(2), _3(true), _4(false), _5(vector_to_numeric), _6(1231), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(2, 8305, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_numeric"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8221), _1("vector_to_numeric"), _2(1), _3(true), _4(false), _5(vector_to_numeric), _6(1231), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(1, 8305), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_numeric"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "sparsevec", 1, - AddBuiltinFunc(_0(8228), _1("sparsevec"), _2(3), _3(true), _4(false), _5(sparsevec), _6(8307), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 8307, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("sparsevec"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8228), _1("sparsevec"), _2(3), _3(true), _4(false), _5(sparsevec), _6(8307), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 8307, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("sparsevec"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "vector_to_sparsevec", 1, - AddBuiltinFunc(_0(8229), _1("vector_to_sparsevec"), _2(3), _3(true), _4(false), _5(vector_to_sparsevec), _6(8307), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 8305, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_sparsevec"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8229), _1("vector_to_sparsevec"), _2(3), _3(true), _4(false), _5(vector_to_sparsevec), _6(8307), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 8305, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("vector_to_sparsevec"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "sparsevec_to_vector", 1, - AddBuiltinFunc(_0(8230), _1("sparsevec_to_vector"), _2(3), _3(true), _4(false), _5(sparsevec_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('s'), _19(0), _20(3, 8307, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("sparsevec_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(8230), _1("sparsevec_to_vector"), _2(3), _3(true), _4(false), _5(sparsevec_to_vector), _6(8305), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(0), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 8307, 23, 16), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("sparsevec_to_vector"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(false), _32(false), _33("NULL"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), diff --git a/src/common/backend/utils/adt/vector.cpp b/src/common/backend/utils/adt/vector.cpp index baf8ed903..1d5d3cade 100644 --- a/src/common/backend/utils/adt/vector.cpp +++ b/src/common/backend/utils/adt/vector.cpp @@ -543,26 +543,8 @@ PGDLLEXPORT PG_FUNCTION_INFO_V1(vector_to_numeric); Datum vector_to_numeric(PG_FUNCTION_ARGS) { Vector *vec = PG_GETARG_VECTOR_P(0); - int32 typmod = PG_GETARG_INT32(1); Datum *datums; ArrayType *result; - int32 tmp_typmod; - int precision; - int scale; - - tmp_typmod = typmod - VARHDRSZ; - precision = (tmp_typmod >> 16) & NUMERIC_TYPEMOD_MASK; - scale = (int16)(tmp_typmod & NUMERIC_TYPEMOD_MASK); - if (precision < 1 || precision > NUMERIC_MAX_PRECISION) { - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("NUMERIC precision %d must be between 1 and %d", precision, NUMERIC_MAX_PRECISION))); - } - if (scale < NUMERIC_MIN_SCALE || scale > NUMERIC_MAX_SCALE) { - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("NUMERIC scale must be between %d and %d", NUMERIC_MIN_SCALE, NUMERIC_MAX_SCALE))); - } datums = (Datum *)palloc(sizeof(Datum) * vec->dim); @@ -570,8 +552,7 @@ Datum vector_to_numeric(PG_FUNCTION_ARGS) Datum numericVal; Numeric typmod_numericVal; numericVal = DirectFunctionCall1(float4_numeric, Float4GetDatum(vec->x[i])); - typmod_numericVal = DatumGetNumeric(DirectFunctionCall2(numeric, numericVal, typmod)); - datums[i] = NumericGetDatum(typmod_numericVal); + datums[i] = NumericGetDatum(numericVal); } /* Use TYPALIGN_INT for numeric */