diff --git a/src/common/backend/catalog/builtin_funcs.ini b/src/common/backend/catalog/builtin_funcs.ini index 22c0fa29334e6df195b1c898d1a4af04095fcd0a..d89b240501c20a0ef3127637a13ccf25491e484f 100755 --- a/src/common/backend/catalog/builtin_funcs.ini +++ b/src/common/backend/catalog/builtin_funcs.ini @@ -9708,15 +9708,33 @@ "regexnesel", 1, AddBuiltinFunc(_0(1821), _1("regexnesel"), _2(4), _3(true), _4(false), _5(regexnesel), _6(701), _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(4, 2281, 26, 2281, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexnesel"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("restriction selectivity of regex non-match"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), + AddFuncGroup( + "regexp_count", 3, + AddBuiltinFunc(_0(385), _1("regexp_count"), _2(2), _3(true), _4(false), _5(regexp_count_noopt), _6(23), _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(2, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_count_noopt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) count for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(386), _1("regexp_count"), _2(3), _3(false), _4(false), _5(regexp_count_position), _6(23), _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, 25, 25, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_count_position"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) count for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(387), _1("regexp_count"), _2(4), _3(false), _4(false), _5(regexp_count_matchopt), _6(23), _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(4, 25, 25, 23, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_count_matchopt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) count for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + ), + AddFuncGroup( + "regexp_instr", 5, + AddBuiltinFunc(_0(630), _1("regexp_instr"), _2(2), _3(true), _4(false), _5(regexp_instr_noopt), _6(23), _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(2, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_instr_noopt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) position for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(631), _1("regexp_instr"), _2(3), _3(false), _4(false), _5(regexp_instr_position), _6(23), _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, 25, 25, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_instr_position"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) position for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(632), _1("regexp_instr"), _2(4), _3(false), _4(false), _5(regexp_instr_occurren), _6(23), _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(4, 25, 25, 23, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_instr_occurren"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) position for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(633), _1("regexp_instr"), _2(5), _3(false), _4(false), _5(regexp_instr_returnopt), _6(23), _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(5, 25, 25, 23, 23, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_instr_returnopt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) position for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(634), _1("regexp_instr"), _2(6), _3(false), _4(false), _5(regexp_instr_matchopt), _6(23), _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(6, 25, 25, 23, 23, 23, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_instr_matchopt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) position for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + ), AddFuncGroup( "regexp_matches", 2, AddBuiltinFunc(_0(2763), _1("regexp_matches"), _2(2), _3(true), _4(true), _5(regexp_matches_no_flags), _6(1009), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(1), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(2, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_matches_no_flags"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), AddBuiltinFunc(_0(2764), _1("regexp_matches"), _2(3), _3(true), _4(true), _5(regexp_matches), _6(1009), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(10), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 25, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_matches"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("find match(es) for regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( - "regexp_replace", 2, + "regexp_replace", 6, + AddBuiltinFunc(_0(1116), _1("regexp_replace"), _2(2), _3(false), _4(false), _5(regexp_replace_noopt), _6(25), _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(2, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_replace_noopt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("replace text using regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), AddBuiltinFunc(_0(2284), _1("regexp_replace"), _2(3), _3(false), _4(false), _5(textregexreplace_noopt), _6(25), _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, 25, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("textregexreplace_noopt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("replace text using regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), - AddBuiltinFunc(_0(2285), _1("regexp_replace"), _2(4), _3(false), _4(false), _5(textregexreplace), _6(25), _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(4, 25, 25, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("textregexreplace"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("replace text using regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + AddBuiltinFunc(_0(2285), _1("regexp_replace"), _2(4), _3(false), _4(false), _5(textregexreplace), _6(25), _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(4, 25, 25, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("textregexreplace"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("replace text using regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(1117), _1("regexp_replace"), _2(4), _3(false), _4(false), _5(regexp_replace_position), _6(25), _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(4, 25, 25, 25, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_replace_position"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("replace text using regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(1118), _1("regexp_replace"), _2(5), _3(false), _4(false), _5(regexp_replace_occur), _6(25), _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(5, 25, 25, 25, 23, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_replace_occur"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("replace text using regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(1119), _1("regexp_replace"), _2(6), _3(false), _4(false), _5(regexp_replace_matchopt), _6(25), _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(6, 25, 25, 25, 23, 23, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_replace_matchopt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("replace text using regexp"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), AddFuncGroup( "regexp_split_to_array", 2, @@ -9728,6 +9746,12 @@ AddBuiltinFunc(_0(2765), _1("regexp_split_to_table"), _2(2), _3(true), _4(true), _5(regexp_split_to_table_no_flags), _6(25), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(1000), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(2, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_split_to_table_no_flags"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("split string by pattern"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), AddBuiltinFunc(_0(2766), _1("regexp_split_to_table"), _2(3), _3(true), _4(true), _5(regexp_split_to_table), _6(25), _7(PG_CATALOG_NAMESPACE), _8(BOOTSTRAP_SUPERUSERID), _9(INTERNALlanguageId), _10(1), _11(1000), _12(0), _13(0), _14(false), _15(false), _16(false), _17(false), _18('i'), _19(0), _20(3, 25, 25, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_split_to_table"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("split string by pattern"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) ), + AddFuncGroup( + "regexp_substr", 3, + AddBuiltinFunc(_0(1566), _1("regexp_substr"), _2(3), _3(false), _4(false), _5(regexp_substr_with_position), _6(25), _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, 25, 25, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_substr_with_position"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("extract text matching regular expression"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(1567), _1("regexp_substr"), _2(4), _3(false), _4(false), _5(regexp_substr_with_occur), _6(25), _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(4, 25, 25, 23, 23), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_substr_with_occur"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("extract text matching regular expression"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)), + AddBuiltinFunc(_0(1568), _1("regexp_substr"), _2(5), _3(false), _4(false), _5(regexp_substr_with_opt), _6(25), _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(5, 25, 25, 23, 23, 25), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regexp_substr_with_opt"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("extract text matching regular expression"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) + ), AddFuncGroup( "regoperatorin", 1, AddBuiltinFunc(_0(2216), _1("regoperatorin"), _2(1), _3(true), _4(false), _5(regoperatorin), _6(2204), _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, 2275), _21(NULL), _22(NULL), _23(NULL), _24(NULL), _25("regoperatorin"), _26(NULL), _27(NULL), _28(NULL), _29(0), _30(false), _31(NULL), _32(false), _33("I/O"), _34('f'), _35(NULL), _36(0), _37(false), _38(NULL), _39(NULL), _40(0)) diff --git a/src/common/backend/parser/parse_coerce.cpp b/src/common/backend/parser/parse_coerce.cpp index 7bdb4ddf73212d7ba93d53b2098cb308c9eb3729..03bfc777f9b59ef388f5fdc4cbaf9a31d0523b1c 100644 --- a/src/common/backend/parser/parse_coerce.cpp +++ b/src/common/backend/parser/parse_coerce.cpp @@ -44,9 +44,18 @@ static Node* coerce_record_to_complex( ParseState* pstate, Node* node, Oid targetTypeId, CoercionContext ccontext, CoercionForm cformat, int location); static bool is_complex_array(Oid typid); static bool typeIsOfTypedTable(Oid reltypeId, Oid reloftypeId); +static Oid choose_decode_result1_type(ParseState* pstate, List* exprs, const char* context); +static void handle_diff_category(ParseState* pstate, Node* nextExpr, const char* context, + TYPCATEGORY preferCategory, TYPCATEGORY nextCategory, Oid preferType, Oid nextType); +static bool category_can_be_matched(TYPCATEGORY preferCategory, TYPCATEGORY nextCategory); +static bool type_can_be_matched(Oid preferType, Oid nextType); static Oid choose_specific_expr_type(ParseState* pstate, List* exprs, const char* context); static Oid choose_nvl_type(ParseState* pstate, List* exprs, const char* context); static Oid choose_expr_type(ParseState* pstate, List* exprs, const char* context, Node** which_expr); +static bool check_category_in_whitelist(TYPCATEGORY category, Oid type); +static bool check_numeric_type_in_blacklist(Oid type); +static bool meet_decode_compatibility(List* exprs, const char* context); +static bool meet_c_format_compatibility(List* exprs, const char* context); /* * @Description: same as get_element_type() except this reports error @@ -1063,6 +1072,138 @@ int parser_coercion_errposition(ParseState* pstate, int coerce_location, Node* i } } +/* choose_decode_result1_type + * Choose case when and decode return value type in A_FORMAT. + */ +static Oid choose_decode_result1_type(ParseState* pstate, List* exprs, const char* context) +{ + Node* preferExpr = NULL; + Oid preferType = UNKNOWNOID; + TYPCATEGORY preferCategory = TYPCATEGORY_UNKNOWN; + ListCell* lc = NULL; + + /* result1 is the first expr, treat result1 type (or category) as return value type */ + foreach (lc, exprs) { + preferExpr = (Node*)lfirst(lc); + + /* if first expr is "null", treat it as unknown type */ + if (IsA(preferExpr, Const) && ((Const*)preferExpr)->constisnull) { + break; + } + + preferType = getBaseType(exprType(preferExpr)); + preferCategory = get_typecategory(preferType); + break; + } + if (lc == NULL) { + return preferType; + } + + lc = lnext(lc); + for_each_cell(lc, lc) + { + Node* nextExpr = (Node*)lfirst(lc); + Oid nextType = getBaseType(exprType(nextExpr)); + + /* skip "null" */ + if (IsA(nextExpr, Const) && ((Const*)nextExpr)->constisnull) { + continue; + } + + /* no need to check if nextType the same as preferType */ + if (nextType != preferType) { + TYPCATEGORY nextCategory = get_typecategory(nextType); + + /* + * Both types in different categories, we check if nextCategory/nextType can be implicitly + * converted to preferCategory/preferType. Here we will treat unknow type as text type. + */ + if (nextCategory != preferCategory) { + handle_diff_category(pstate, nextExpr, context, preferCategory, nextCategory, preferType, nextType); + } + /* both types is same categories, we choose a priority higher. */ + else if (GetPriority(preferType) < GetPriority(nextType)) { + preferType = nextType; + } + } + } + + /* + * If preferCategory is TYPCATEGORY_NUMERIC, choose NUMERICOID as preferType. + * To compatible with a string representing a large number needs to be converted to a number type. + * e.g., "select decode(1, 2, 2, '63274723794832454677432493248593478549543535453'::text);" + */ + if (preferCategory == TYPCATEGORY_NUMERIC) { + preferType = NUMERICOID; + } + + return preferType; +} + +/* + * Handle the case where nextCategory and preferCategory are different. + * Check whether nextCategory can be converted to preferCategory, + * or nextType can be converted to preferType. + */ +static void handle_diff_category(ParseState* pstate, Node* nextExpr, const char* context, + TYPCATEGORY preferCategory, TYPCATEGORY nextCategory, Oid preferType, Oid nextType) +{ + if (!category_can_be_matched(preferCategory, nextCategory) && + !type_can_be_matched(preferType, nextType)) { + ereport(ERROR, + (errcode(ERRCODE_DATATYPE_MISMATCH), + errmsg("%s types %s and %s cannot be matched", + context, + format_type_be(preferType == UNKNOWNOID ? TEXTOID : preferType), + format_type_be(nextType == UNKNOWNOID ? TEXTOID : nextType)), + parser_errposition(pstate, exprLocation(nextExpr)))); + } +} + +/* + * Check whether nextCategory can be converted to preferCategory. + */ +static bool category_can_be_matched(TYPCATEGORY preferCategory, TYPCATEGORY nextCategory) +{ + bool can_be_matched = false; + + static TYPCATEGORY categoryMatchedList[][2] = { + {TYPCATEGORY_STRING, TYPCATEGORY_UNKNOWN}, {TYPCATEGORY_STRING, TYPCATEGORY_NUMERIC}, + {TYPCATEGORY_UNKNOWN, TYPCATEGORY_STRING}, {TYPCATEGORY_UNKNOWN, TYPCATEGORY_NUMERIC}, + {TYPCATEGORY_NUMERIC, TYPCATEGORY_STRING}, {TYPCATEGORY_NUMERIC, TYPCATEGORY_UNKNOWN}, + {TYPCATEGORY_STRING, TYPCATEGORY_DATETIME}, {TYPCATEGORY_STRING, TYPCATEGORY_TIMESPAN}, + {TYPCATEGORY_UNKNOWN, TYPCATEGORY_DATETIME}, {TYPCATEGORY_UNKNOWN, TYPCATEGORY_TIMESPAN}}; + + for (unsigned int i = 0; i < sizeof(categoryMatchedList) / sizeof(categoryMatchedList[0]); i++) { + if (preferCategory == categoryMatchedList[i][0] && nextCategory == categoryMatchedList[i][1]) { + can_be_matched = true; + break; + } + } + + return can_be_matched; +} + +/* + * Check whether nextType can be converted to preferType. + */ +static bool type_can_be_matched(Oid preferType, Oid nextType) +{ + bool can_be_matched = false; + + static Oid typeMatchedList[][2] = { + {RAWOID, VARCHAROID}, {RAWOID, TEXTOID}, {VARCHAROID, RAWOID}, {TEXTOID, RAWOID}}; + + for (unsigned int i = 0; i < sizeof(typeMatchedList) / sizeof(typeMatchedList[0]); i++) { + if (preferType == typeMatchedList[i][0] && nextType == typeMatchedList[i][1]) { + can_be_matched = true; + break; + } + } + + return can_be_matched; +} + /* choose_specific_expr_type * Choose case when and coalesce return value type in C_FORMAT. */ @@ -1292,6 +1433,86 @@ static Oid choose_expr_type(ParseState* pstate, List* exprs, const char* context return ptype; } +/* + * To maintain forward compatibility, decode type conversion rules compatible with O is + * only valid for a few specific type categories. Save these type categories in the form + * of a whitelist. If any one is not in the whitelist, allInWhitelist is set to false. + */ +bool check_all_in_whitelist(List* resultexprs) +{ + bool allInWhitelist = true; + Node* exprTmp = NULL; + ListCell* lc = NULL; + Oid exprTypeTmp = UNKNOWNOID; + TYPCATEGORY exprCategoryTmp = TYPCATEGORY_UNKNOWN; + + foreach (lc, resultexprs) { + exprTmp = (Node*)lfirst(lc); + + /* if exprTmp is "null", treat it as unknown type, can skip it. */ + if (IsA(exprTmp, Const) && ((Const*)exprTmp)->constisnull) { + continue; + } + + exprTypeTmp = getBaseType(exprType(exprTmp)); + exprCategoryTmp = get_typecategory(exprTypeTmp); + if (!check_category_in_whitelist(exprCategoryTmp, exprTypeTmp)) { + allInWhitelist = false; + break; + } + } + + return allInWhitelist; +} + +/* + * Check whether the given category and type is in the whitelist. + */ +static bool check_category_in_whitelist(TYPCATEGORY category, Oid type) +{ + bool categoryInWhitelist = false; + + static TYPCATEGORY categoryWhitelist[] = {TYPCATEGORY_BOOLEAN, TYPCATEGORY_NUMERIC, TYPCATEGORY_STRING, + TYPCATEGORY_UNKNOWN, TYPCATEGORY_DATETIME, TYPCATEGORY_TIMESPAN, TYPCATEGORY_USER}; + + for (unsigned int i = 0; i < sizeof(categoryWhitelist) / sizeof(categoryWhitelist[0]); i++) { + if (category == categoryWhitelist[i]) { + /* + * For TYPCATEGORY_USER, just RAW in the whitelist. + * For TYPCATEGORY_NUMERIC, some numeric type not in the whitelist. + */ + if ((category == TYPCATEGORY_USER && type != RAWOID) || + (category == TYPCATEGORY_NUMERIC && check_numeric_type_in_blacklist(type))) { + break; + } + categoryInWhitelist = true; + break; + } + } + + return categoryInWhitelist; +} + +/* + * Check whether the given numeric type is in the blacklist. + */ +static bool check_numeric_type_in_blacklist(Oid type) +{ + bool typeInBlacklist = false; + + static Oid numericTypeBlacklist[] = {CASHOID, INT16OID, REGPROCOID, OIDOID, REGPROCEDUREOID, + REGOPEROID, REGOPERATOROID, REGCLASSOID, REGTYPEOID, REGCONFIGOID, REGDICTIONARYOID}; + + for (unsigned int i = 0; i < sizeof(numericTypeBlacklist) / sizeof(numericTypeBlacklist[0]); i++) { + if (type == numericTypeBlacklist[i]) { + typeInBlacklist = true; + break; + } + } + + return typeInBlacklist; +} + /* * select_common_type() * Determine the common supertype of a list of input expressions. @@ -1341,10 +1562,14 @@ Oid select_common_type(ParseState* pstate, List* exprs, const char* context, Nod } } - if ((u_sess->attr.attr_sql.sql_compatibility == C_FORMAT && context != NULL && - (0 == strncmp(context, "CASE", sizeof("CASE")) || 0 == strncmp(context, "COALESCE", sizeof("COALESCE")))) || - (ENABLE_SQL_BETA_FEATURE(A_STYLE_COERCE) && context != NULL && - (0 == strncmp(context, "CASE", sizeof("CASE"))))) { + if (meet_decode_compatibility(exprs, context)) { + /* + * For A format, result1 is considered the most significant type in determining preferred type. + * In this function, try to choose a higher priority type of the same category as result1. + * And check whether other parameters can be implicitly converted to the data type of result1. + */ + ptype = choose_decode_result1_type(pstate, exprs, context); + } else if (meet_c_format_compatibility(exprs, context)) { /* * To C format, we need handle numeric and string mix situation. * For A format, type should be coerced by the first case, therefore, it can accept cases like @@ -1353,9 +1578,8 @@ Oid select_common_type(ParseState* pstate, List* exprs, const char* context, Nod * using C format coercion. */ ptype = choose_specific_expr_type(pstate, exprs, context); - } - /* Follow A db nvl*/ - else if (context != NULL && 0 == strncmp(context, "NVL", sizeof("NVL"))) { + } else if (context != NULL && 0 == strncmp(context, "NVL", sizeof("NVL"))) { + /* Follow A db nvl*/ ptype = choose_nvl_type(pstate, exprs, context); } else { ptype = choose_expr_type(pstate, exprs, context, which_expr); @@ -1381,6 +1605,29 @@ Oid select_common_type(ParseState* pstate, List* exprs, const char* context, Nod return ptype; } +/* + * Check meet the decode type conversion rules compatibility or not. + */ +static bool meet_decode_compatibility(List* exprs, const char* context) +{ + bool res = u_sess->attr.attr_sql.sql_compatibility == A_FORMAT && ENABLE_SQL_BETA_FEATURE(A_STYLE_COERCE) && + context != NULL && 0 == strncmp(context, "CASE", sizeof("CASE")) && check_all_in_whitelist(exprs); + return res; +} + +/* + * Check meet the c format compatibility or not. + * For A format, some temporary are also in it. + */ +static bool meet_c_format_compatibility(List* exprs, const char* context) +{ + bool res = (u_sess->attr.attr_sql.sql_compatibility == C_FORMAT && context != NULL && + (0 == strncmp(context, "CASE", sizeof("CASE")) || 0 == strncmp(context, "COALESCE", sizeof("COALESCE")))) || + (ENABLE_SQL_BETA_FEATURE(A_STYLE_COERCE) && context != NULL && + (0 == strncmp(context, "CASE", sizeof("CASE")))); + return res; +} + /* * coerce_to_common_type() * Coerce an expression to the given type. diff --git a/src/common/backend/parser/parse_expr.cpp b/src/common/backend/parser/parse_expr.cpp index 00589084fbfb67a28ac66e0bade3e5d736794b47..8bd4b20db1ee4c297851a22208f5b33b1235161f 100644 --- a/src/common/backend/parser/parse_expr.cpp +++ b/src/common/backend/parser/parse_expr.cpp @@ -1634,12 +1634,28 @@ static Node* transformCaseExpr(ParseState* pstate, CaseExpr* c) } newc->defresult = (Expr*)transformExpr(pstate, defresult); + /* check results in resultexprs and defresult whether all are in the whitelist. */ + List* defresultexprs = NIL; + defresultexprs = lappend(defresultexprs, newc->defresult); + bool allInWhitelist = check_all_in_whitelist(resultexprs) && check_all_in_whitelist(defresultexprs); + + list_free_ext(defresultexprs); + /* * Note: default result is considered the most significant type in * determining preferred type. This is how the code worked before, but it * seems a little bogus to me --- tgl + * + * For A format, result1 is considered the most significant type in + * determining preferred type. So append default result to the end of + * the list. Make sure result1 is the first element of the list. */ - resultexprs = lcons(newc->defresult, resultexprs); + if (u_sess->attr.attr_sql.sql_compatibility == A_FORMAT && + ENABLE_SQL_BETA_FEATURE(A_STYLE_COERCE) && allInWhitelist) { + resultexprs = lappend(resultexprs, newc->defresult); + } else { + resultexprs = lcons(newc->defresult, resultexprs); + } ptype = select_common_type(pstate, resultexprs, "CASE", NULL); AssertEreport(OidIsValid(ptype), MOD_OPT, ""); diff --git a/src/common/backend/utils/init/globals.cpp b/src/common/backend/utils/init/globals.cpp index a5f733049c4f92333b8745965e19514c6f23c50f..0089318eb289d70fc0e94ba045dc52b9d117f222 100644 --- a/src/common/backend/utils/init/globals.cpp +++ b/src/common/backend/utils/init/globals.cpp @@ -59,7 +59,7 @@ bool open_join_children = true; bool will_shutdown = false; /* hard-wired binary version number */ -const uint32 GRAND_VERSION_NUM = 92609; +const uint32 GRAND_VERSION_NUM = 92610; const uint32 PREDPUSH_SAME_LEVEL_VERSION_NUM = 92522; const uint32 UPSERT_WHERE_VERSION_NUM = 92514; diff --git a/src/include/catalog/pg_proc.h_for_llt b/src/include/catalog/pg_proc.h_for_llt index 5b2455d855ef189c6f9bda730440fce52295ac24..e97b08936833628348d0b84d8f0b090f7ca793c7 100755 --- a/src/include/catalog/pg_proc.h_for_llt +++ b/src/include/catalog/pg_proc.h_for_llt @@ -2072,6 +2072,36 @@ DATA(insert OID = 2284 ( regexp_replace PGNSP PGUID 12 1 0 0 0 f f f f f f i DESCR("replace text using regexp"); DATA(insert OID = 2285 ( regexp_replace PGNSP PGUID 12 1 0 0 0 f f f f f f i 4 0 25 "25 25 25 25" _null_ _null_ _null_ _null_ textregexreplace _null_ _null_ _null_ "" f)); DESCR("replace text using regexp"); +DATA(insert OID = 1116 ( regexp_replace PGNSP PGUID 12 1 0 0 0 f f f f f f i 2 0 25 "25 25" _null_ _null_ _null_ _null_ regexp_replace_noopt _null_ _null_ _null_ "" f)); +DESCR("replace text using regexp"); +DATA(insert OID = 1117 ( regexp_replace PGNSP PGUID 12 1 0 0 0 f f f f f f i 4 0 25 "25 25 25 23" _null_ _null_ _null_ _null_ regexp_replace_position _null_ _null_ _null_ "" f)); +DESCR("replace text using regexp"); +DATA(insert OID = 1118 ( regexp_replace PGNSP PGUID 12 1 0 0 0 f f f f f f i 5 0 25 "25 25 25 23 23" _null_ _null_ _null_ _null_ regexp_replace_occur _null_ _null_ _null_ "" f)); +DESCR("replace text using regexp"); +DATA(insert OID = 1119 ( regexp_replace PGNSP PGUID 12 1 0 0 0 f f f f f f i 6 0 25 "25 25 25 23 23 25" _null_ _null_ _null_ _null_ regexp_replace_matchopt _null_ _null_ _null_ "" f)); +DESCR("replace text using regexp"); +DATA(insert OID = 385 ( regexp_count PGNSP PGUID 12 1 1 0 0 f f f f t f i 2 0 23 "25 25" _null_ _null_ _null_ _null_ regexp_count_noopt _null_ _null_ _null_ "" f)); +DESCR("find all match count for regexp"); +DATA(insert OID = 386 ( regexp_count PGNSP PGUID 12 1 1 0 0 f f f f f f i 3 0 23 "25 25 23" _null_ _null_ _null_ _null_ regexp_count_position _null_ _null_ _null_ "" f)); +DESCR("find all match count for regexp"); +DATA(insert OID = 387 ( regexp_count PGNSP PGUID 12 1 1 0 0 f f f f f f i 4 0 23 "25 25 23 25" _null_ _null_ _null_ _null_ regexp_count_matchopt _null_ _null_ _null_ "" f)); +DESCR("find all match count for regexp"); +DATA(insert OID = 630 ( regexp_instr PGNSP PGUID 12 1 1 0 0 f f f f t f i 2 0 23 "25 25" _null_ _null_ _null_ _null_ regexp_instr_noopt _null_ _null_ _null_ "" f)); +DESCR("find match position for regexp"); +DATA(insert OID = 631 ( regexp_instr PGNSP PGUID 12 1 1 0 0 f f f f f f i 3 0 23 "25 25 23" _null_ _null_ _null_ _null_ regexp_instr_position _null_ _null_ _null_ "" f)); +DESCR("find match position for regexp"); +DATA(insert OID = 632 ( regexp_instr PGNSP PGUID 12 1 1 0 0 f f f f f f i 4 0 23 "25 25 23 23" _null_ _null_ _null_ _null_ regexp_instr_occurren _null_ _null_ _null_ "" f)); +DESCR("find match position for regexp"); +DATA(insert OID = 633 ( regexp_instr PGNSP PGUID 12 1 1 0 0 f f f f f f i 5 0 23 "25 25 23 23 23" _null_ _null_ _null_ _null_ regexp_instr_returnopt _null_ _null_ _null_ "" f)); +DESCR("find match position for regexp"); +DATA(insert OID = 634 ( regexp_instr PGNSP PGUID 12 1 1 0 0 f f f f f f i 6 0 23 "25 25 23 23 23 25" _null_ _null_ _null_ _null_ regexp_instr_matchopt _null_ _null_ _null_ "" f)); +DESCR("find match position for regexp"); +DATA(insert OID = 1566 ( regexp_substr PGNSP PGUID 12 1 1 0 0 f f f f f f i 3 0 23 "25 25 23" _null_ _null_ _null_ _null_ regexp_substr_with_position _null_ _null_ _null_ "" f)); +DESCR("extract text matching regular expression"); +DATA(insert OID = 1567 ( regexp_substr PGNSP PGUID 12 1 1 0 0 f f f f f f i 4 0 23 "25 25 23 23" _null_ _null_ _null_ _null_ regexp_substr_with_occur _null_ _null_ _null_ "" f)); +DESCR("extract text matching regular expression"); +DATA(insert OID = 1568 ( regexp_substr PGNSP PGUID 12 1 1 0 0 f f f f f f i 5 0 23 "25 25 23 23 25" _null_ _null_ _null_ _null_ regexp_substr_with_opt _null_ _null_ _null_ "" f)); +DESCR("extract text matching regular expression"); DATA(insert OID = 2763 ( regexp_matches PGNSP PGUID 12 1 1 0 0 f f f f t t i 2 0 1009 "25 25" _null_ _null_ _null_ _null_ regexp_matches_no_flags _null_ _null_ _null_ "" f)); DESCR("find all match groups for regexp"); DATA(insert OID = 2764 ( regexp_matches PGNSP PGUID 12 1 10 0 0 f f f f t t i 3 0 1009 "25 25 25" _null_ _null_ _null_ _null_ regexp_matches _null_ _null_ _null_ "" f)); diff --git a/src/include/catalog/upgrade_sql/rollback_catalog_maindb/rollback-post_catalog_maindb_92_610.sql b/src/include/catalog/upgrade_sql/rollback_catalog_maindb/rollback-post_catalog_maindb_92_610.sql new file mode 100644 index 0000000000000000000000000000000000000000..d963ca5abca14d9ea599a0dccd19cf3631c3642d --- /dev/null +++ b/src/include/catalog/upgrade_sql/rollback_catalog_maindb/rollback-post_catalog_maindb_92_610.sql @@ -0,0 +1,18 @@ +DROP FUNCTION IF EXISTS pg_catalog.regexp_count(text, text) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_count(text, text, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_count(text, text, int, text) CASCADE; + +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text, int, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text, int, int, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text, int, int, int, text) CASCADE; + +DROP FUNCTION IF EXISTS pg_catalog.regexp_replace(text, text) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_replace(text, text, text, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_replace(text, text, text, int, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_replace(text, text, text, int, int, text) CASCADE; + +DROP FUNCTION IF EXISTS pg_catalog.regexp_substr(text, text, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_substr(text, text, int, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_substr(text, text, int, int, text) CASCADE; diff --git a/src/include/catalog/upgrade_sql/rollback_catalog_otherdb/rollback-post_catalog_otherdb_92_610.sql b/src/include/catalog/upgrade_sql/rollback_catalog_otherdb/rollback-post_catalog_otherdb_92_610.sql new file mode 100644 index 0000000000000000000000000000000000000000..d963ca5abca14d9ea599a0dccd19cf3631c3642d --- /dev/null +++ b/src/include/catalog/upgrade_sql/rollback_catalog_otherdb/rollback-post_catalog_otherdb_92_610.sql @@ -0,0 +1,18 @@ +DROP FUNCTION IF EXISTS pg_catalog.regexp_count(text, text) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_count(text, text, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_count(text, text, int, text) CASCADE; + +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text, int, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text, int, int, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_instr(text, text, int, int, int, text) CASCADE; + +DROP FUNCTION IF EXISTS pg_catalog.regexp_replace(text, text) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_replace(text, text, text, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_replace(text, text, text, int, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_replace(text, text, text, int, int, text) CASCADE; + +DROP FUNCTION IF EXISTS pg_catalog.regexp_substr(text, text, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_substr(text, text, int, int) CASCADE; +DROP FUNCTION IF EXISTS pg_catalog.regexp_substr(text, text, int, int, text) CASCADE; diff --git a/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade-post_catalog_maindb_92_610.sql b/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade-post_catalog_maindb_92_610.sql new file mode 100644 index 0000000000000000000000000000000000000000..65adc324d936e2296b3edc02ae648058a8534f37 --- /dev/null +++ b/src/include/catalog/upgrade_sql/upgrade_catalog_maindb/upgrade-post_catalog_maindb_92_610.sql @@ -0,0 +1,110 @@ +-- regexp_count +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 385; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_count(text, text) + RETURNS integer + LANGUAGE internal + IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE +AS $function$regexp_count_noopt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 386; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_count(text, text, int) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_count_position$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 387; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_count(text, text, int, text) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_count_matchopt$function$; + +-- regexp_instr +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 630; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text) + RETURNS integer + LANGUAGE internal + IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_noopt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 631; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text, int) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_position$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 632; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text, int, int) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_occurren$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 633; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text, int, int, int) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_returnopt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 634; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text, int, int, int, text) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_matchopt$function$; + +-- regexp_replace +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1116; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_replace_noopt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1117; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text, text, int) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_replace_position$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1118; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text, text, int, int) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_replace_occur$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1119; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text, text, int, int, text) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_replace_matchopt$function$; + +-- regexp_substr +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1566; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_substr(text, text, int) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_substr_with_position$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1567; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_substr(text, text, int, int) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_substr_with_occur$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1568; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_substr(text, text, int, int, text) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_substr_with_opt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 0; \ No newline at end of file diff --git a/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade-post_catalog_otherdb_92_610.sql b/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade-post_catalog_otherdb_92_610.sql new file mode 100644 index 0000000000000000000000000000000000000000..65adc324d936e2296b3edc02ae648058a8534f37 --- /dev/null +++ b/src/include/catalog/upgrade_sql/upgrade_catalog_otherdb/upgrade-post_catalog_otherdb_92_610.sql @@ -0,0 +1,110 @@ +-- regexp_count +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 385; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_count(text, text) + RETURNS integer + LANGUAGE internal + IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE +AS $function$regexp_count_noopt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 386; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_count(text, text, int) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_count_position$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 387; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_count(text, text, int, text) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_count_matchopt$function$; + +-- regexp_instr +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 630; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text) + RETURNS integer + LANGUAGE internal + IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_noopt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 631; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text, int) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_position$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 632; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text, int, int) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_occurren$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 633; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text, int, int, int) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_returnopt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 634; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_instr(text, text, int, int, int, text) + RETURNS integer + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_instr_matchopt$function$; + +-- regexp_replace +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1116; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_replace_noopt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1117; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text, text, int) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_replace_position$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1118; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text, text, int, int) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_replace_occur$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1119; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_replace(text, text, text, int, int, text) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_replace_matchopt$function$; + +-- regexp_substr +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1566; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_substr(text, text, int) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_substr_with_position$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1567; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_substr(text, text, int, int) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_substr_with_occur$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_PROC, 1568; +CREATE OR REPLACE FUNCTION pg_catalog.regexp_substr(text, text, int, int, text) + RETURNS text + LANGUAGE internal + IMMUTABLE NOT FENCED NOT SHIPPABLE +AS $function$regexp_substr_with_opt$function$; + +SET LOCAL inplace_upgrade_next_system_object_oids = IUO_CATALOG, false, true, 0, 0, 0, 0; \ No newline at end of file diff --git a/src/include/parser/parse_coerce.h b/src/include/parser/parse_coerce.h index 4c807a1509bb7ed2d4f84ddaaa6369fe0e4a74cc..d2630466498f4937af533160a55ca116b858f2fd 100644 --- a/src/include/parser/parse_coerce.h +++ b/src/include/parser/parse_coerce.h @@ -57,6 +57,7 @@ extern Node* coerce_to_specific_type(ParseState* pstate, Node* node, Oid targetT extern int parser_coercion_errposition(ParseState* pstate, int coerce_location, Node* input_expr); extern Oid select_common_type(ParseState* pstate, List* exprs, const char* context, Node** which_expr); +extern bool check_all_in_whitelist(List* resultexprs); extern Node* coerce_to_common_type(ParseState* pstate, Node* node, Oid targetTypeId, const char* context); extern bool check_generic_type_consistency(Oid* actual_arg_types, Oid* declared_arg_types, int nargs); diff --git a/src/test/regress/expected/col_count_distinct_4.out b/src/test/regress/expected/col_count_distinct_4.out index 4ea718eb99d076664b9b086eb82bbfce43fd776d..701d180b86f0d61501b042bc8720e94ab6f28864 100644 --- a/src/test/regress/expected/col_count_distinct_4.out +++ b/src/test/regress/expected/col_count_distinct_4.out @@ -170,11 +170,11 @@ select count(distinct(a)) col1, d, avg(b) col2, sum(distinct(a)) col3, avg(disti (7 rows) explain (costs off) select distinct case when min(distinct c)>60 then min(distinct c) else null end as min, count(distinct(b)) from t_distinct group by b; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------------ + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------- Row Adapter -> Vector Hash Aggregate - Group By Key: CASE WHEN (min(DISTINCT c) > 60) THEN min(DISTINCT c) ELSE NULL::integer END, count(DISTINCT b) + Group By Key: CASE WHEN (min(DISTINCT c) > 60) THEN (min(DISTINCT c))::numeric ELSE NULL::numeric END, count(DISTINCT b) -> Vector Sort Aggregate Group By Key: b -> Vector Sort diff --git a/src/test/regress/expected/count_distinct_part2.out b/src/test/regress/expected/count_distinct_part2.out index 875f58c035a15729d7fa1484aa16a9979cf7a2e9..b11582c9a1f924ddae230275557c59c01c5cc4a5 100644 --- a/src/test/regress/expected/count_distinct_part2.out +++ b/src/test/regress/expected/count_distinct_part2.out @@ -721,10 +721,10 @@ select count(distinct(a)) col1, d, avg(b) col2, sum(distinct(a)) col3, avg(disti (7 rows) explain (costs off) select distinct case when min(distinct c)>60 then min(distinct c) else null end as min, count(distinct(b)) from t_distinct group by b; - QUERY PLAN ------------------------------------------------------------------------------------------------------------------ + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------- HashAggregate - Group By Key: CASE WHEN (min(DISTINCT c) > 60) THEN min(DISTINCT c) ELSE NULL::integer END, count(DISTINCT b) + Group By Key: CASE WHEN (min(DISTINCT c) > 60) THEN (min(DISTINCT c))::numeric ELSE NULL::numeric END, count(DISTINCT b) -> GroupAggregate Group By Key: b -> Sort diff --git a/src/test/regress/expected/count_distinct_part4.out b/src/test/regress/expected/count_distinct_part4.out index c4000dcd8f7ba4f30def4c057f46337680b8d3f6..0bc168ca85f7fe0036a1d8db9467484a8b394696 100644 --- a/src/test/regress/expected/count_distinct_part4.out +++ b/src/test/regress/expected/count_distinct_part4.out @@ -350,12 +350,12 @@ select '20180831' rpt_Dt, org_id org_id, end) bxs from m_inte_counter_detail a left join m_pub_org_stat_stt b on a.org_id = b.net_bank group by a.org_id; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Row Adapter - Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = ANY ('{TTS,GXH}'::text[])) THEN a.term_code ELSE NULL::character varying END)), (count(DISTINCT CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.is_type)::text = ANY ('{TTS,GXH}'::text[]))) THEN a.term_code ELSE NULL::character varying END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), a.org_id + Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = ANY ('{TTS,GXH}'::text[])) THEN a.term_code ELSE NULL::character varying END)), (count(DISTINCT CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.is_type)::text = ANY ('{TTS,GXH}'::text[]))) THEN a.term_code ELSE NULL::character varying END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), a.org_id -> Vector Sort Aggregate - Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END), count(DISTINCT CASE WHEN ((a.is_type)::text = ANY ('{TTS,GXH}'::text[])) THEN a.term_code ELSE NULL::character varying END), count(DISTINCT CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.is_type)::text = ANY ('{TTS,GXH}'::text[]))) THEN a.term_code ELSE NULL::character varying END), count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END), a.org_id + Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END), count(DISTINCT CASE WHEN ((a.is_type)::text = ANY ('{TTS,GXH}'::text[])) THEN a.term_code ELSE NULL::character varying END), count(DISTINCT CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.is_type)::text = ANY ('{TTS,GXH}'::text[]))) THEN a.term_code ELSE NULL::character varying END), count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END), a.org_id Group By Key: a.org_id -> Vector Sort Output: a.org_id, a.rpt_dt, a.ywbh, a.is_type, a.term_code @@ -391,12 +391,12 @@ select '20180831' rpt_Dt, a.org_id, end) bxs from m_inte_counter_detail a left join m_pub_org_stat_stt b on a.org_id = b.net_bank group by org_id; - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Row Adapter - Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = ANY ('{TTS,GXH}'::text[])) THEN a.term_code ELSE NULL::character varying END)), (sum(DISTINCT (CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.is_type)::text = ANY ('{TTS,GXH}'::text[]))) THEN a.term_code ELSE NULL::character varying END)::numeric)), (sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric)), a.org_id + Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = ANY ('{TTS,GXH}'::text[])) THEN a.term_code ELSE NULL::character varying END)), (sum(DISTINCT (CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.is_type)::text = ANY ('{TTS,GXH}'::text[]))) THEN a.term_code ELSE NULL::character varying END)::numeric)), (sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric)), a.org_id -> Vector Sort Aggregate - Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END), count(DISTINCT CASE WHEN ((a.is_type)::text = ANY ('{TTS,GXH}'::text[])) THEN a.term_code ELSE NULL::character varying END), sum(DISTINCT (CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.is_type)::text = ANY ('{TTS,GXH}'::text[]))) THEN a.term_code ELSE NULL::character varying END)::numeric), sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric), a.org_id + Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END), count(DISTINCT CASE WHEN ((a.is_type)::text = ANY ('{TTS,GXH}'::text[])) THEN a.term_code ELSE NULL::character varying END), sum(DISTINCT (CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.is_type)::text = ANY ('{TTS,GXH}'::text[]))) THEN a.term_code ELSE NULL::character varying END)::numeric), sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric), a.org_id Group By Key: a.org_id -> Vector Sort Output: a.org_id, a.rpt_dt, a.ywbh, a.is_type, a.term_code @@ -425,12 +425,12 @@ select '20180831' rpt_Dt, a.org_id, from m_inte_counter_detail a left join m_pub_org_stat_stt b on a.org_id = b.net_bank group by org_id having count(distinct a.is_type) > 100; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Row Adapter - Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric)), a.org_id + Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric)), a.org_id -> Vector Sort Aggregate - Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END), sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric), a.org_id + Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END), sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric), a.org_id Group By Key: a.org_id Filter: (count(DISTINCT a.is_type) > 100) -> Vector Sort @@ -460,12 +460,12 @@ select '20180831' rpt_Dt, org_id, from m_inte_counter_detail a left join m_pub_org_stat_stt b on a.org_id = b.net_bank group by a.org_id having sum(distinct a.is_type) + avg(distinct org_id)> 100; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Row Adapter - Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric)), a.org_id + Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric)), a.org_id -> Vector Sort Aggregate - Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END), sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric), a.org_id + Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END), sum(DISTINCT (CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)::numeric), a.org_id Group By Key: a.org_id Filter: ((sum(DISTINCT (a.is_type)::numeric) + avg(DISTINCT (a.org_id)::numeric)) > 100::numeric) -> Vector Sort @@ -496,12 +496,12 @@ select '20180831' rpt_Dt, org_id, group by a.org_id having sum(distinct a.is_type) + avg(distinct org_id)> 100 order by 2; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Row Adapter - Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), a.org_id + Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), a.org_id -> Vector Sort Aggregate - Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END), count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END), a.org_id + Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END), count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END), a.org_id Group By Key: a.org_id Filter: ((sum(DISTINCT (a.is_type)::numeric) + avg(DISTINCT (a.org_id)::numeric)) > 100::numeric) -> Vector Sort @@ -532,12 +532,12 @@ select '20180831' rpt_Dt, org_id, group by a.org_id having sum(distinct a.is_type) + avg(distinct (a.org_id + org_id))> 100 order by 2; - QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Row Adapter - Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), a.org_id + Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), a.org_id -> Vector Sort Aggregate - Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END), count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END), a.org_id + Output: '20180831'::text, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END), count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END), a.org_id Group By Key: a.org_id Filter: ((sum(DISTINCT (a.is_type)::numeric) + avg(DISTINCT ((a.org_id)::numeric + (a.org_id)::numeric))) > 100::numeric) -> Vector Sort @@ -570,17 +570,17 @@ select '20180831' rpt_Dt, org_id, group by cube(a.org_id) having sum(distinct a.is_type) + avg(distinct (a.org_id + org_id))> 100 order by 2; - QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Row Adapter - Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), (GROUPING(a.org_id)), (rank() OVER (PARTITION BY a.org_id)), a.org_id + Output: ('20180831'::text), a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), (GROUPING(a.org_id)), (rank() OVER (PARTITION BY a.org_id)), a.org_id -> Vector WindowAgg - Output: '20180831'::text, a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), (GROUPING(a.org_id)), rank() OVER (PARTITION BY a.org_id), a.org_id + Output: '20180831'::text, a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), (GROUPING(a.org_id)), rank() OVER (PARTITION BY a.org_id), a.org_id -> Vector Sort - Output: a.org_id, a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), (GROUPING(a.org_id)) + Output: a.org_id, a.org_id, (count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END)), (count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END)), (GROUPING(a.org_id)) Sort Key: a.org_id -> Vector Sort Aggregate - Output: a.org_id, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1 ELSE NULL::integer END), count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END), GROUPING(a.org_id) + Output: a.org_id, a.org_id, count(CASE WHEN (((a.rpt_dt)::text = '20180831'::text) AND ((a.ywbh)::text = ANY ('{223,478,819,886}'::text[]))) THEN 1::numeric ELSE NULL::numeric END), count(DISTINCT CASE WHEN ((a.is_type)::text = 'BXS'::text) THEN a.term_code ELSE NULL::character varying END), GROUPING(a.org_id) Group By Key: a.org_id Group By Key: () Filter: ((sum(DISTINCT (a.is_type)::numeric) + avg(DISTINCT ((a.org_id)::numeric + (a.org_id)::numeric))) > 100::numeric) diff --git a/src/test/regress/expected/decode_compatible_with_o.out b/src/test/regress/expected/decode_compatible_with_o.out new file mode 100644 index 0000000000000000000000000000000000000000..620d8c14124073410784d43eea3b06c69fc5ced8 --- /dev/null +++ b/src/test/regress/expected/decode_compatible_with_o.out @@ -0,0 +1,5066 @@ +create database decode_compatibility dbcompatibility 'A'; +\c decode_compatibility +set timezone to '-08'; +set sql_beta_feature = 'a_style_coerce'; +drop table if exists tb_test; +NOTICE: table "tb_test" does not exist, skipping +create table tb_test( + c_bool bool, + c_int1 int1, + c_int2 int2, + c_int4 int4, + c_int8 int8, + c_float4 float4, + c_float8 float8, + c_numeric numeric, + c_money money, + c_char char(10), + c_bpchar bpchar, + c_varchar2 varchar2, + c_nvarchar2 nvarchar2, + c_text text, + c_char2number_success text, + c_raw raw, + c_date date, + c_time time without time zone, + c_timetz time with time zone, + c_timestamp timestamp without time zone, + c_timestamptz timestamp with time zone, + c_smalldatetime smalldatetime, + c_interval interval, + c_reltime reltime, + c_abstime abstime +); +-- ========================================================= +-- test1: implicit type conversion from defresult to result1 +-- ========================================================= +insert into tb_test values( + 't', 1, 2, 4, 8, 4.4, 8.8, 9.999, 66, 'char', 'bpchar', 'varchar2', 'nvarchar2', 'text', '7.77', '1234', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-12-12', '2013-12-11 pst', '2003-04-12 04:05:06', + interval '2' year, '30 DAYS 12:00:00', abstime 'Mon May 1 00:30:30 1995' +); +-- convert to bool +select decode(1, 2, c_bool, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and tinyint cannot be matched +LINE 1: select decode(1, 2, c_bool, c_int1) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and smallint cannot be matched +LINE 1: select decode(1, 2, c_bool, c_int2) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and integer cannot be matched +LINE 1: select decode(1, 2, c_bool, c_int4) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and bigint cannot be matched +LINE 1: select decode(1, 2, c_bool, c_int8) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and real cannot be matched +LINE 1: select decode(1, 2, c_bool, c_float4) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and double precision cannot be matched +LINE 1: select decode(1, 2, c_bool, c_float8) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and numeric cannot be matched +LINE 1: select decode(1, 2, c_bool, c_numeric) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and boolean cannot be matched +LINE 1: select decode(1, 2, c_bool, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and character cannot be matched +LINE 1: select decode(1, 2, c_bool, c_char) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and character cannot be matched +LINE 1: select decode(1, 2, c_bool, c_bpchar) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and character varying cannot be matched +LINE 1: select decode(1, 2, c_bool, c_varchar2) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_bool, c_nvarchar2) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and text cannot be matched +LINE 1: select decode(1, 2, c_bool, c_text) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and text cannot be matched +LINE 1: select decode(1, 2, c_bool, c_char2number_success) as result... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and raw cannot be matched +LINE 1: select decode(1, 2, c_bool, c_raw) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_bool, c_date) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_bool, c_time) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_bool, c_timetz) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_bool, c_timestamp) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_bool, c_timestamptz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_bool, c_smalldatetime) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and interval cannot be matched +LINE 1: select decode(1, 2, c_bool, c_interval) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and reltime cannot be matched +LINE 1: select decode(1, 2, c_bool, c_reltime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bool, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and abstime cannot be matched +LINE 1: select decode(1, 2, c_bool, c_abstime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +-- convert to int1 +select decode(1, 2, c_int1, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and boolean cannot be matched +LINE 1: select decode(1, 2, c_int1, c_bool) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | numeric +(1 row) + +select decode(1, 2, c_int1, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | numeric +(1 row) + +select decode(1, 2, c_int1, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | numeric +(1 row) + +select decode(1, 2, c_int1, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | numeric +(1 row) + +select decode(1, 2, c_int1, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | numeric +(1 row) + +select decode(1, 2, c_int1, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | numeric +(1 row) + +select decode(1, 2, c_int1, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type tinyint to money +LINE 1: select decode(1, 2, c_int1, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_char) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "char " +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "bpchar" +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "varchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "nvarchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_text) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "text" +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | numeric +(1 row) + +select decode(1, 2, c_int1, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and raw cannot be matched +LINE 1: select decode(1, 2, c_int1, c_raw) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_int1, c_date) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_int1, c_time) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_int1, c_timetz) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_int1, c_timestamp) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_int1, c_timestamptz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_int1, c_smalldatetime) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and interval cannot be matched +LINE 1: select decode(1, 2, c_int1, c_interval) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and reltime cannot be matched +LINE 1: select decode(1, 2, c_int1, c_reltime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int1, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types tinyint and abstime cannot be matched +LINE 1: select decode(1, 2, c_int1, c_abstime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +-- convert to int2 +select decode(1, 2, c_int2, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and boolean cannot be matched +LINE 1: select decode(1, 2, c_int2, c_bool) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | numeric +(1 row) + +select decode(1, 2, c_int2, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | numeric +(1 row) + +select decode(1, 2, c_int2, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | numeric +(1 row) + +select decode(1, 2, c_int2, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | numeric +(1 row) + +select decode(1, 2, c_int2, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | numeric +(1 row) + +select decode(1, 2, c_int2, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | numeric +(1 row) + +select decode(1, 2, c_int2, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to smallint +LINE 1: select decode(1, 2, c_int2, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_char) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "char " +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "bpchar" +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "varchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "nvarchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_text) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "text" +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | numeric +(1 row) + +select decode(1, 2, c_int2, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and raw cannot be matched +LINE 1: select decode(1, 2, c_int2, c_raw) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_int2, c_date) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_int2, c_time) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_int2, c_timetz) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_int2, c_timestamp) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_int2, c_timestamptz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_int2, c_smalldatetime) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and interval cannot be matched +LINE 1: select decode(1, 2, c_int2, c_interval) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and reltime cannot be matched +LINE 1: select decode(1, 2, c_int2, c_reltime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int2, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smallint and abstime cannot be matched +LINE 1: select decode(1, 2, c_int2, c_abstime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +-- convert to int4 +select decode(1, 2, c_int4, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and boolean cannot be matched +LINE 1: select decode(1, 2, c_int4, c_bool) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | numeric +(1 row) + +select decode(1, 2, c_int4, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | numeric +(1 row) + +select decode(1, 2, c_int4, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | numeric +(1 row) + +select decode(1, 2, c_int4, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | numeric +(1 row) + +select decode(1, 2, c_int4, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | numeric +(1 row) + +select decode(1, 2, c_int4, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | numeric +(1 row) + +select decode(1, 2, c_int4, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to integer +LINE 1: select decode(1, 2, c_int4, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_char) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "char " +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "bpchar" +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "varchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "nvarchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_text) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "text" +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | numeric +(1 row) + +select decode(1, 2, c_int4, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and raw cannot be matched +LINE 1: select decode(1, 2, c_int4, c_raw) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_int4, c_date) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_int4, c_time) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_int4, c_timetz) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_int4, c_timestamp) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_int4, c_timestamptz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_int4, c_smalldatetime) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and interval cannot be matched +LINE 1: select decode(1, 2, c_int4, c_interval) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and reltime cannot be matched +LINE 1: select decode(1, 2, c_int4, c_reltime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int4, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types integer and abstime cannot be matched +LINE 1: select decode(1, 2, c_int4, c_abstime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +-- convert to int8 +select decode(1, 2, c_int8, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and boolean cannot be matched +LINE 1: select decode(1, 2, c_int8, c_bool) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | numeric +(1 row) + +select decode(1, 2, c_int8, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | numeric +(1 row) + +select decode(1, 2, c_int8, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | numeric +(1 row) + +select decode(1, 2, c_int8, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | numeric +(1 row) + +select decode(1, 2, c_int8, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | numeric +(1 row) + +select decode(1, 2, c_int8, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | numeric +(1 row) + +select decode(1, 2, c_int8, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to bigint +LINE 1: select decode(1, 2, c_int8, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_char) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "char " +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "bpchar" +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "varchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "nvarchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_text) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "text" +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | numeric +(1 row) + +select decode(1, 2, c_int8, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and raw cannot be matched +LINE 1: select decode(1, 2, c_int8, c_raw) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_int8, c_date) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_int8, c_time) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_int8, c_timetz) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_int8, c_timestamp) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_int8, c_timestamptz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_int8, c_smalldatetime) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and interval cannot be matched +LINE 1: select decode(1, 2, c_int8, c_interval) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and reltime cannot be matched +LINE 1: select decode(1, 2, c_int8, c_reltime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_int8, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types bigint and abstime cannot be matched +LINE 1: select decode(1, 2, c_int8, c_abstime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +-- convert to float4 +select decode(1, 2, c_float4, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and boolean cannot be matched +LINE 1: select decode(1, 2, c_float4, c_bool) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | numeric +(1 row) + +select decode(1, 2, c_float4, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | numeric +(1 row) + +select decode(1, 2, c_float4, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | numeric +(1 row) + +select decode(1, 2, c_float4, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | numeric +(1 row) + +select decode(1, 2, c_float4, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | numeric +(1 row) + +select decode(1, 2, c_float4, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | numeric +(1 row) + +select decode(1, 2, c_float4, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to real +LINE 1: select decode(1, 2, c_float4, c_money) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_char) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "char " +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "bpchar" +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "varchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "nvarchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_text) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "text" +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | numeric +(1 row) + +select decode(1, 2, c_float4, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and raw cannot be matched +LINE 1: select decode(1, 2, c_float4, c_raw) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_float4, c_date) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_float4, c_time) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_float4, c_timetz) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_float4, c_timestamp) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_float4, c_timestamptz) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_float4, c_smalldatetime) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and interval cannot be matched +LINE 1: select decode(1, 2, c_float4, c_interval) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and reltime cannot be matched +LINE 1: select decode(1, 2, c_float4, c_reltime) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float4, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types real and abstime cannot be matched +LINE 1: select decode(1, 2, c_float4, c_abstime) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +-- convert to float8 +select decode(1, 2, c_float8, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and boolean cannot be matched +LINE 1: select decode(1, 2, c_float8, c_bool) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | numeric +(1 row) + +select decode(1, 2, c_float8, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | numeric +(1 row) + +select decode(1, 2, c_float8, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | numeric +(1 row) + +select decode(1, 2, c_float8, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | numeric +(1 row) + +select decode(1, 2, c_float8, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | numeric +(1 row) + +select decode(1, 2, c_float8, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | numeric +(1 row) + +select decode(1, 2, c_float8, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to double precision +LINE 1: select decode(1, 2, c_float8, c_money) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_char) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "char " +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "bpchar" +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "varchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "nvarchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_text) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "text" +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | numeric +(1 row) + +select decode(1, 2, c_float8, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and raw cannot be matched +LINE 1: select decode(1, 2, c_float8, c_raw) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_float8, c_date) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_float8, c_time) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_float8, c_timetz) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_float8, c_timestamp) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_float8, c_timestamptz) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_float8, c_smalldatetime) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and interval cannot be matched +LINE 1: select decode(1, 2, c_float8, c_interval) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and reltime cannot be matched +LINE 1: select decode(1, 2, c_float8, c_reltime) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_float8, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types double precision and abstime cannot be matched +LINE 1: select decode(1, 2, c_float8, c_abstime) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +-- convert to numeric +select decode(1, 2, c_numeric, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and boolean cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_bool) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | numeric +(1 row) + +select decode(1, 2, c_numeric, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | numeric +(1 row) + +select decode(1, 2, c_numeric, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | numeric +(1 row) + +select decode(1, 2, c_numeric, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | numeric +(1 row) + +select decode(1, 2, c_numeric, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | numeric +(1 row) + +select decode(1, 2, c_numeric, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | numeric +(1 row) + +select decode(1, 2, c_numeric, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to numeric +LINE 1: select decode(1, 2, c_numeric, c_money) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_char) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "char " +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "bpchar" +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "varchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "nvarchar2" +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_text) as result, pg_typeof(result) from tb_test; +ERROR: invalid input syntax for type numeric: "text" +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | numeric +(1 row) + +select decode(1, 2, c_numeric, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and raw cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_raw) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_date) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_time) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_timetz) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_timestamp) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_timestamptz) as result, pg_... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_smalldatetime) as result, p... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and interval cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_interval) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and reltime cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_reltime) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_numeric, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types numeric and abstime cannot be matched +LINE 1: select decode(1, 2, c_numeric, c_abstime) as result, pg_type... + ^ +CONTEXT: referenced column: result +-- convert to money +select decode(1, 2, c_money, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types boolean and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_bool) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to tinyint +LINE 1: select decode(1, 2, c_money, c_int1) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to smallint +LINE 1: select decode(1, 2, c_money, c_int2) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to integer +LINE 1: select decode(1, 2, c_money, c_int4) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to bigint +LINE 1: select decode(1, 2, c_money, c_int8) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to real +LINE 1: select decode(1, 2, c_money, c_float4) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to double precision +LINE 1: select decode(1, 2, c_money, c_float8) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to numeric +LINE 1: select decode(1, 2, c_money, c_numeric) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to character +LINE 1: select decode(1, 2, c_money, c_char) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to character +LINE 1: select decode(1, 2, c_money, c_bpchar) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to character varying +LINE 1: select decode(1, 2, c_money, c_varchar2) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to nvarchar2 +LINE 1: select decode(1, 2, c_money, c_nvarchar2) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to text +LINE 1: select decode(1, 2, c_money, c_text) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type money to text +LINE 1: select decode(1, 2, c_money, c_char2number_success) as resul... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_raw) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_date) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_time) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_timetz) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_timestamp) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_timestamptz) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_smalldatetime) as result, pg_... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_interval) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_reltime) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_money, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and money cannot be matched +LINE 1: select decode(1, 2, c_money, c_abstime) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +-- convert to char +select decode(1, 2, c_char, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types character and boolean cannot be matched +LINE 1: select decode(1, 2, c_char, c_bool) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | character +(1 row) + +select decode(1, 2, c_char, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | character +(1 row) + +select decode(1, 2, c_char, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | character +(1 row) + +select decode(1, 2, c_char, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | character +(1 row) + +select decode(1, 2, c_char, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | character +(1 row) + +select decode(1, 2, c_char, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | character +(1 row) + +select decode(1, 2, c_char, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | character +(1 row) + +select decode(1, 2, c_char, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to character +LINE 1: select decode(1, 2, c_char, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_bpchar) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + bpchar | character +(1 row) + +select decode(1, 2, c_char, c_varchar2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +----------+------------------- + varchar2 | character varying +(1 row) + +select decode(1, 2, c_char, c_nvarchar2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-----------+----------- + nvarchar2 | nvarchar2 +(1 row) + +select decode(1, 2, c_char, c_text) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + text | text +(1 row) + +select decode(1, 2, c_char, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | text +(1 row) + +select decode(1, 2, c_char, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types character and raw cannot be matched +LINE 1: select decode(1, 2, c_char, c_raw) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type timestamp without time zone to character +LINE 1: select decode(1, 2, c_char, c_date) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to character +LINE 1: select decode(1, 2, c_char, c_time) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to character +LINE 1: select decode(1, 2, c_char, c_timetz) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type timestamp without time zone to character +LINE 1: select decode(1, 2, c_char, c_timestamp) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type timestamp with time zone to character +LINE 1: select decode(1, 2, c_char, c_timestamptz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type smalldatetime to character +LINE 1: select decode(1, 2, c_char, c_smalldatetime) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type interval to character +LINE 1: select decode(1, 2, c_char, c_interval) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type reltime to character +LINE 1: select decode(1, 2, c_char, c_reltime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_char, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type abstime to character +LINE 1: select decode(1, 2, c_char, c_abstime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +-- convert to bpchar +select decode(1, 2, c_bpchar, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types character and boolean cannot be matched +LINE 1: select decode(1, 2, c_bpchar, c_bool) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | character +(1 row) + +select decode(1, 2, c_bpchar, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | character +(1 row) + +select decode(1, 2, c_bpchar, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | character +(1 row) + +select decode(1, 2, c_bpchar, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | character +(1 row) + +select decode(1, 2, c_bpchar, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | character +(1 row) + +select decode(1, 2, c_bpchar, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | character +(1 row) + +select decode(1, 2, c_bpchar, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | character +(1 row) + +select decode(1, 2, c_bpchar, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to character +LINE 1: select decode(1, 2, c_bpchar, c_money) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_char) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------+----------- + char | character +(1 row) + +select decode(1, 2, c_bpchar, c_varchar2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +----------+------------------- + varchar2 | character varying +(1 row) + +select decode(1, 2, c_bpchar, c_nvarchar2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-----------+----------- + nvarchar2 | nvarchar2 +(1 row) + +select decode(1, 2, c_bpchar, c_text) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + text | text +(1 row) + +select decode(1, 2, c_bpchar, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | text +(1 row) + +select decode(1, 2, c_bpchar, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types character and raw cannot be matched +LINE 1: select decode(1, 2, c_bpchar, c_raw) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type timestamp without time zone to character +LINE 1: select decode(1, 2, c_bpchar, c_date) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to character +LINE 1: select decode(1, 2, c_bpchar, c_time) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to character +LINE 1: select decode(1, 2, c_bpchar, c_timetz) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type timestamp without time zone to character +LINE 1: select decode(1, 2, c_bpchar, c_timestamp) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type timestamp with time zone to character +LINE 1: select decode(1, 2, c_bpchar, c_timestamptz) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type smalldatetime to character +LINE 1: select decode(1, 2, c_bpchar, c_smalldatetime) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type interval to character +LINE 1: select decode(1, 2, c_bpchar, c_interval) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type reltime to character +LINE 1: select decode(1, 2, c_bpchar, c_reltime) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_bpchar, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type abstime to character +LINE 1: select decode(1, 2, c_bpchar, c_abstime) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +-- convert to varchar2 +select decode(1, 2, c_varchar2, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types character varying and boolean cannot be matched +LINE 1: select decode(1, 2, c_varchar2, c_bool) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_varchar2, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + 1 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + 2 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + 4 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + 8 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + 4.4 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + 8.8 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + 9.999 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to character varying +LINE 1: select decode(1, 2, c_varchar2, c_money) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_varchar2, c_char) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + char | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_bpchar) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + bpchar | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_nvarchar2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-----------+------------------- + nvarchar2 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_text) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + text | text +(1 row) + +select decode(1, 2, c_varchar2, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | text +(1 row) + +select decode(1, 2, c_varchar2, c_raw) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+------------------- + 1234 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_date) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+------------------- + Fri Dec 10 00:00:00 2010 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to character varying +LINE 1: select decode(1, 2, c_varchar2, c_time) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_varchar2, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to character varying +LINE 1: select decode(1, 2, c_varchar2, c_timetz) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_varchar2, c_timestamp) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+------------------- + Sun Dec 12 00:00:00 2010 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type timestamp with time zone to character varying +LINE 1: select decode(1, 2, c_varchar2, c_timestamptz) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_varchar2, c_smalldatetime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+------------------- + Sat Apr 12 04:05:00 2003 | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_interval) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-----------+------------------- + @ 2 years | character varying +(1 row) + +select decode(1, 2, c_varchar2, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type reltime to character varying +LINE 1: select decode(1, 2, c_varchar2, c_reltime) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_varchar2, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type abstime to character varying +LINE 1: select decode(1, 2, c_varchar2, c_abstime) as result, pg_typ... + ^ +CONTEXT: referenced column: result +-- convert to nvarchar2 +select decode(1, 2, c_nvarchar2, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types nvarchar2 and boolean cannot be matched +LINE 1: select decode(1, 2, c_nvarchar2, c_bool) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_nvarchar2, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to nvarchar2 +LINE 1: select decode(1, 2, c_nvarchar2, c_money) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_nvarchar2, c_char) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + char | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_bpchar) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + bpchar | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_varchar2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +----------+----------- + varchar2 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_text) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + text | text +(1 row) + +select decode(1, 2, c_nvarchar2, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | text +(1 row) + +select decode(1, 2, c_nvarchar2, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types nvarchar2 and raw cannot be matched +LINE 1: select decode(1, 2, c_nvarchar2, c_raw) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_nvarchar2, c_date) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------- + Fri Dec 10 00:00:00 2010 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to nvarchar2 +LINE 1: select decode(1, 2, c_nvarchar2, c_time) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_nvarchar2, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to nvarchar2 +LINE 1: select decode(1, 2, c_nvarchar2, c_timetz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_nvarchar2, c_timestamp) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------- + Sun Dec 12 00:00:00 2010 | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type timestamp with time zone to nvarchar2 +LINE 1: select decode(1, 2, c_nvarchar2, c_timestamptz) as result, p... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_nvarchar2, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type smalldatetime to nvarchar2 +LINE 1: select decode(1, 2, c_nvarchar2, c_smalldatetime) as result,... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_nvarchar2, c_interval) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-----------+----------- + @ 2 years | nvarchar2 +(1 row) + +select decode(1, 2, c_nvarchar2, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type reltime to nvarchar2 +LINE 1: select decode(1, 2, c_nvarchar2, c_reltime) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_nvarchar2, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type abstime to nvarchar2 +LINE 1: select decode(1, 2, c_nvarchar2, c_abstime) as result, pg_ty... + ^ +CONTEXT: referenced column: result +-- convert to text +select decode(1, 2, c_text, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types text and boolean cannot be matched +LINE 1: select decode(1, 2, c_text, c_bool) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_text, c_int1) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1 | text +(1 row) + +select decode(1, 2, c_text, c_int2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 2 | text +(1 row) + +select decode(1, 2, c_text, c_int4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4 | text +(1 row) + +select decode(1, 2, c_text, c_int8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8 | text +(1 row) + +select decode(1, 2, c_text, c_float4) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 4.4 | text +(1 row) + +select decode(1, 2, c_text, c_float8) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 8.8 | text +(1 row) + +select decode(1, 2, c_text, c_numeric) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 9.999 | text +(1 row) + +select decode(1, 2, c_text, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type money to text +LINE 1: select decode(1, 2, c_text, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_text, c_char) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + char | text +(1 row) + +select decode(1, 2, c_text, c_bpchar) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + bpchar | text +(1 row) + +select decode(1, 2, c_text, c_varchar2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +----------+----------- + varchar2 | text +(1 row) + +select decode(1, 2, c_text, c_nvarchar2) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-----------+----------- + nvarchar2 | text +(1 row) + +select decode(1, 2, c_text, c_char2number_success) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 7.77 | text +(1 row) + +select decode(1, 2, c_text, c_raw) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------+----------- + 1234 | text +(1 row) + +select decode(1, 2, c_text, c_date) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------- + Fri Dec 10 00:00:00 2010 | text +(1 row) + +select decode(1, 2, c_text, c_time) as result, pg_typeof(result) from tb_test; + result | pg_typeof +----------+----------- + 21:21:21 | text +(1 row) + +select decode(1, 2, c_text, c_timetz) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-------------+----------- + 21:21:21-08 | text +(1 row) + +select decode(1, 2, c_text, c_timestamp) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------- + Sun Dec 12 00:00:00 2010 | text +(1 row) + +select decode(1, 2, c_text, c_timestamptz) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+----------- + Wed Dec 11 00:00:00 2013 -08 | text +(1 row) + +select decode(1, 2, c_text, c_smalldatetime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------- + Sat Apr 12 04:05:00 2003 | text +(1 row) + +select decode(1, 2, c_text, c_interval) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-----------+----------- + @ 2 years | text +(1 row) + +select decode(1, 2, c_text, c_reltime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------+----------- + @ 1 mon 12 hours | text +(1 row) + +select decode(1, 2, c_text, c_abstime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+----------- + Mon May 01 00:30:30 1995 -08 | text +(1 row) + +-- convert to raw +select decode(1, 2, c_raw, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and boolean cannot be matched +LINE 1: select decode(1, 2, c_raw, c_bool) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and tinyint cannot be matched +LINE 1: select decode(1, 2, c_raw, c_int1) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and smallint cannot be matched +LINE 1: select decode(1, 2, c_raw, c_int2) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and integer cannot be matched +LINE 1: select decode(1, 2, c_raw, c_int4) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and bigint cannot be matched +LINE 1: select decode(1, 2, c_raw, c_int8) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and real cannot be matched +LINE 1: select decode(1, 2, c_raw, c_float4) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and double precision cannot be matched +LINE 1: select decode(1, 2, c_raw, c_float8) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and numeric cannot be matched +LINE 1: select decode(1, 2, c_raw, c_numeric) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and raw cannot be matched +LINE 1: select decode(1, 2, c_raw, c_money) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and character cannot be matched +LINE 1: select decode(1, 2, c_raw, c_char) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and character cannot be matched +LINE 1: select decode(1, 2, c_raw, c_bpchar) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: invalid hexadecimal digit: "v" +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_raw, c_nvarchar2) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type text to raw +LINE 1: select decode(1, 2, c_raw, c_text) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type text to raw +LINE 1: select decode(1, 2, c_raw, c_char2number_success) as result,... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_raw, c_date) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_raw, c_time) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_raw, c_timetz) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_raw, c_timestamp) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_raw, c_timestamptz) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_raw, c_smalldatetime) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and interval cannot be matched +LINE 1: select decode(1, 2, c_raw, c_interval) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and reltime cannot be matched +LINE 1: select decode(1, 2, c_raw, c_reltime) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_raw, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types raw and abstime cannot be matched +LINE 1: select decode(1, 2, c_raw, c_abstime) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +-- convert to date +select decode(1, 2, c_date, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and boolean cannot be matched +LINE 1: select decode(1, 2, c_date, c_bool) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and tinyint cannot be matched +LINE 1: select decode(1, 2, c_date, c_int1) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and smallint cannot be matched +LINE 1: select decode(1, 2, c_date, c_int2) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and integer cannot be matched +LINE 1: select decode(1, 2, c_date, c_int4) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and bigint cannot be matched +LINE 1: select decode(1, 2, c_date, c_int8) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and real cannot be matched +LINE 1: select decode(1, 2, c_date, c_float4) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and double precision cannot be matched +LINE 1: select decode(1, 2, c_date, c_float8) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and numeric cannot be matched +LINE 1: select decode(1, 2, c_date, c_numeric) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_date, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and character cannot be matched +LINE 1: select decode(1, 2, c_date, c_char) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and character cannot be matched +LINE 1: select decode(1, 2, c_date, c_bpchar) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and character varying cannot be matched +LINE 1: select decode(1, 2, c_date, c_varchar2) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_date, c_nvarchar2) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and text cannot be matched +LINE 1: select decode(1, 2, c_date, c_text) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and text cannot be matched +LINE 1: select decode(1, 2, c_date, c_char2number_success) as result... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and raw cannot be matched +LINE 1: select decode(1, 2, c_date, c_raw) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to timestamp without time zone +LINE 1: select decode(1, 2, c_date, c_time) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to timestamp without time zone +LINE 1: select decode(1, 2, c_date, c_timetz) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_timestamp) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Sun Dec 12 00:00:00 2010 | timestamp without time zone +(1 row) + +select decode(1, 2, c_date, c_timestamptz) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+-------------------------- + Wed Dec 11 00:00:00 2013 -08 | timestamp with time zone +(1 row) + +select decode(1, 2, c_date, c_smalldatetime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Sat Apr 12 04:05:00 2003 | timestamp without time zone +(1 row) + +select decode(1, 2, c_date, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and interval cannot be matched +LINE 1: select decode(1, 2, c_date, c_interval) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and reltime cannot be matched +LINE 1: select decode(1, 2, c_date, c_reltime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_date, c_abstime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Mon May 01 00:30:30 1995 | timestamp without time zone +(1 row) + +-- convert to time +select decode(1, 2, c_time, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and boolean cannot be matched +LINE 1: select decode(1, 2, c_time, c_bool) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and tinyint cannot be matched +LINE 1: select decode(1, 2, c_time, c_int1) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and smallint cannot be matched +LINE 1: select decode(1, 2, c_time, c_int2) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and integer cannot be matched +LINE 1: select decode(1, 2, c_time, c_int4) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and bigint cannot be matched +LINE 1: select decode(1, 2, c_time, c_int8) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and real cannot be matched +LINE 1: select decode(1, 2, c_time, c_float4) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and double precision cannot be matched +LINE 1: select decode(1, 2, c_time, c_float8) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and numeric cannot be matched +LINE 1: select decode(1, 2, c_time, c_numeric) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_time, c_money) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and character cannot be matched +LINE 1: select decode(1, 2, c_time, c_char) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and character cannot be matched +LINE 1: select decode(1, 2, c_time, c_bpchar) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and character varying cannot be matched +LINE 1: select decode(1, 2, c_time, c_varchar2) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_time, c_nvarchar2) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and text cannot be matched +LINE 1: select decode(1, 2, c_time, c_text) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and text cannot be matched +LINE 1: select decode(1, 2, c_time, c_char2number_success) as result... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and raw cannot be matched +LINE 1: select decode(1, 2, c_time, c_raw) as result, pg_typeof(resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time without time zone to timestamp without time zone +LINE 1: select decode(1, 2, c_time, c_date) as result, pg_typeof(res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_timetz) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-------------+--------------------- + 21:21:21-08 | time with time zone +(1 row) + +select decode(1, 2, c_time, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time without time zone to timestamp without time zone +LINE 1: select decode(1, 2, c_time, c_timestamp) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time without time zone to timestamp with time zone +LINE 1: select decode(1, 2, c_time, c_timestamptz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time without time zone to smalldatetime +LINE 1: select decode(1, 2, c_time, c_smalldatetime) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and interval cannot be matched +LINE 1: select decode(1, 2, c_time, c_interval) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time without time zone and reltime cannot be matched +LINE 1: select decode(1, 2, c_time, c_reltime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_time, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time without time zone to abstime +LINE 1: select decode(1, 2, c_time, c_abstime) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +-- convert to timetz +select decode(1, 2, c_timetz, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and boolean cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_bool) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and tinyint cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_int1) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and smallint cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_int2) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and integer cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_int4) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and bigint cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_int8) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and real cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_float4) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and double precision cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_float8) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and numeric cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_numeric) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_money) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and character cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_char) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and character cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_bpchar) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and character varying cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_varchar2) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_nvarchar2) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and text cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_text) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and text cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_char2number_success) as resu... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and raw cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_raw) as result, pg_typeof(re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time with time zone to timestamp without time zone +LINE 1: select decode(1, 2, c_timetz, c_date) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_time) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-------------+--------------------- + 21:21:21-08 | time with time zone +(1 row) + +select decode(1, 2, c_timetz, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time with time zone to timestamp without time zone +LINE 1: select decode(1, 2, c_timetz, c_timestamp) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time with time zone to timestamp with time zone +LINE 1: select decode(1, 2, c_timetz, c_timestamptz) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time with time zone to smalldatetime +LINE 1: select decode(1, 2, c_timetz, c_smalldatetime) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and interval cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_interval) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types time with time zone and reltime cannot be matched +LINE 1: select decode(1, 2, c_timetz, c_reltime) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timetz, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE/WHEN could not convert type time with time zone to abstime +LINE 1: select decode(1, 2, c_timetz, c_abstime) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +-- convert to timestamp +select decode(1, 2, c_timestamp, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and boolean cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_bool) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and tinyint cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_int1) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and smallint cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_int2) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and integer cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_int4) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and bigint cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_int8) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and real cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_float4) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and double precision cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_float8) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and numeric cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_numeric) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_money) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and character cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_char) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and character cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_bpchar) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and character varying cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_varchar2) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_nvarchar2) as result, pg_... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and text cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_text) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and text cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_char2number_success) as r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and raw cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_raw) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_date) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Fri Dec 10 00:00:00 2010 | timestamp without time zone +(1 row) + +select decode(1, 2, c_timestamp, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to timestamp without time zone +LINE 1: select decode(1, 2, c_timestamp, c_time) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to timestamp without time zone +LINE 1: select decode(1, 2, c_timestamp, c_timetz) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_timestamptz) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+-------------------------- + Wed Dec 11 00:00:00 2013 -08 | timestamp with time zone +(1 row) + +select decode(1, 2, c_timestamp, c_smalldatetime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Sat Apr 12 04:05:00 2003 | timestamp without time zone +(1 row) + +select decode(1, 2, c_timestamp, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and interval cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_interval) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp without time zone and reltime cannot be matched +LINE 1: select decode(1, 2, c_timestamp, c_reltime) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamp, c_abstime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Mon May 01 00:30:30 1995 | timestamp without time zone +(1 row) + +-- convert to timestamptz +select decode(1, 2, c_timestamptz, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and boolean cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_bool) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and tinyint cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_int1) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and smallint cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_int2) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and integer cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_int4) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and bigint cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_int8) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and real cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_float4) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and double precision cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_float8) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and numeric cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_numeric) as result, pg_... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_money) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and character cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_char) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and character cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_bpchar) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and character varying cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_varchar2) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_nvarchar2) as result, p... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and text cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_text) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and text cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_char2number_success) as... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and raw cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_raw) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_date) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+-------------------------- + Fri Dec 10 00:00:00 2010 -08 | timestamp with time zone +(1 row) + +select decode(1, 2, c_timestamptz, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to timestamp with time zone +LINE 1: select decode(1, 2, c_timestamptz, c_time) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to timestamp with time zone +LINE 1: select decode(1, 2, c_timestamptz, c_timetz) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_timestamp) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+-------------------------- + Sun Dec 12 00:00:00 2010 -08 | timestamp with time zone +(1 row) + +select decode(1, 2, c_timestamptz, c_smalldatetime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+-------------------------- + Sat Apr 12 04:05:00 2003 -08 | timestamp with time zone +(1 row) + +select decode(1, 2, c_timestamptz, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and interval cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_interval) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types timestamp with time zone and reltime cannot be matched +LINE 1: select decode(1, 2, c_timestamptz, c_reltime) as result, pg_... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_timestamptz, c_abstime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+-------------------------- + Mon May 01 00:30:30 1995 -08 | timestamp with time zone +(1 row) + +-- convert to smalldatetime +select decode(1, 2, c_smalldatetime, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and boolean cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_bool) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and tinyint cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_int1) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and smallint cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_int2) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and integer cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_int4) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and bigint cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_int8) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and real cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_float4) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and double precision cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_float8) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and numeric cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_numeric) as result, p... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_money) as result, pg_... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and character cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_char) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and character cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_bpchar) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and character varying cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_varchar2) as result, ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_nvarchar2) as result,... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and text cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_text) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and text cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_char2number_success) ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and raw cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_raw) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_date) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Fri Dec 10 00:00:00 2010 | timestamp without time zone +(1 row) + +select decode(1, 2, c_smalldatetime, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to smalldatetime +LINE 1: select decode(1, 2, c_smalldatetime, c_time) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to smalldatetime +LINE 1: select decode(1, 2, c_smalldatetime, c_timetz) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_timestamp) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Sun Dec 12 00:00:00 2010 | timestamp without time zone +(1 row) + +select decode(1, 2, c_smalldatetime, c_timestamptz) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+-------------------------- + Wed Dec 11 00:00:00 2013 -08 | timestamp with time zone +(1 row) + +select decode(1, 2, c_smalldatetime, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and interval cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_interval) as result, ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types smalldatetime and reltime cannot be matched +LINE 1: select decode(1, 2, c_smalldatetime, c_reltime) as result, p... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_smalldatetime, c_abstime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+--------------- + Mon May 01 00:31:00 1995 | smalldatetime +(1 row) + +-- convert to interval +select decode(1, 2, c_interval, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and boolean cannot be matched +LINE 1: select decode(1, 2, c_interval, c_bool) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and tinyint cannot be matched +LINE 1: select decode(1, 2, c_interval, c_int1) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and smallint cannot be matched +LINE 1: select decode(1, 2, c_interval, c_int2) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and integer cannot be matched +LINE 1: select decode(1, 2, c_interval, c_int4) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and bigint cannot be matched +LINE 1: select decode(1, 2, c_interval, c_int8) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and real cannot be matched +LINE 1: select decode(1, 2, c_interval, c_float4) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and double precision cannot be matched +LINE 1: select decode(1, 2, c_interval, c_float8) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and numeric cannot be matched +LINE 1: select decode(1, 2, c_interval, c_numeric) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and interval cannot be matched +LINE 1: select decode(1, 2, c_interval, c_money) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and character cannot be matched +LINE 1: select decode(1, 2, c_interval, c_char) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and character cannot be matched +LINE 1: select decode(1, 2, c_interval, c_bpchar) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and character varying cannot be matched +LINE 1: select decode(1, 2, c_interval, c_varchar2) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_interval, c_nvarchar2) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and text cannot be matched +LINE 1: select decode(1, 2, c_interval, c_text) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and text cannot be matched +LINE 1: select decode(1, 2, c_interval, c_char2number_success) as re... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and raw cannot be matched +LINE 1: select decode(1, 2, c_interval, c_raw) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_interval, c_date) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_interval, c_time) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_interval, c_timetz) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_interval, c_timestamp) as result, pg_t... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_interval, c_timestamptz) as result, pg... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_interval, c_smalldatetime) as result, ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_interval, c_reltime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------+----------- + @ 1 mon 12 hours | interval +(1 row) + +select decode(1, 2, c_interval, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types interval and abstime cannot be matched +LINE 1: select decode(1, 2, c_interval, c_abstime) as result, pg_typ... + ^ +CONTEXT: referenced column: result +-- convert to reltime +select decode(1, 2, c_reltime, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and boolean cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_bool) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and tinyint cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_int1) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and smallint cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_int2) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and integer cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_int4) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and bigint cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_int8) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and real cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_float4) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and double precision cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_float8) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and numeric cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_numeric) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and reltime cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_money) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and character cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_char) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and character cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_bpchar) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and character varying cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_varchar2) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_nvarchar2) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and text cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_text) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and text cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_char2number_success) as res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and raw cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_raw) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_date) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_date) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and time without time zone cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_time) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and time with time zone cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_timetz) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_timestamp) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and timestamp without time zone cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_timestamp) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_timestamptz) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and timestamp with time zone cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_timestamptz) as result, pg_... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_smalldatetime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and smalldatetime cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_smalldatetime) as result, p... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_reltime, c_interval) as result, pg_typeof(result) from tb_test; + result | pg_typeof +-----------+----------- + @ 2 years | interval +(1 row) + +select decode(1, 2, c_reltime, c_abstime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types reltime and abstime cannot be matched +LINE 1: select decode(1, 2, c_reltime, c_abstime) as result, pg_type... + ^ +CONTEXT: referenced column: result +-- convert to abstime +select decode(1, 2, c_abstime, c_bool) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and boolean cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_bool) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_int1) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and tinyint cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_int1) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_int2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and smallint cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_int2) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_int4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and integer cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_int4) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_int8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and bigint cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_int8) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_float4) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and real cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_float4) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_float8) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and double precision cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_float8) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_numeric) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and numeric cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_numeric) as result, pg_type... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_money) as result, pg_typeof(result) from tb_test; +ERROR: CASE types money and abstime cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_money) as result, pg_typeof... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_char) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and character cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_char) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_bpchar) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and character cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_bpchar) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_varchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and character varying cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_varchar2) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_nvarchar2) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and nvarchar2 cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_nvarchar2) as result, pg_ty... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_text) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and text cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_text) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_char2number_success) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and text cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_char2number_success) as res... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_raw) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and raw cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_raw) as result, pg_typeof(r... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_date) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Fri Dec 10 00:00:00 2010 | timestamp without time zone +(1 row) + +select decode(1, 2, c_abstime, c_time) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time without time zone to abstime +LINE 1: select decode(1, 2, c_abstime, c_time) as result, pg_typeof(... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_timetz) as result, pg_typeof(result) from tb_test; +ERROR: CASE/ELSE could not convert type time with time zone to abstime +LINE 1: select decode(1, 2, c_abstime, c_timetz) as result, pg_typeo... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_timestamp) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+----------------------------- + Sun Dec 12 00:00:00 2010 | timestamp without time zone +(1 row) + +select decode(1, 2, c_abstime, c_timestamptz) as result, pg_typeof(result) from tb_test; + result | pg_typeof +------------------------------+-------------------------- + Wed Dec 11 00:00:00 2013 -08 | timestamp with time zone +(1 row) + +select decode(1, 2, c_abstime, c_smalldatetime) as result, pg_typeof(result) from tb_test; + result | pg_typeof +--------------------------+--------------- + Sat Apr 12 04:05:00 2003 | smalldatetime +(1 row) + +select decode(1, 2, c_abstime, c_interval) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and interval cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_interval) as result, pg_typ... + ^ +CONTEXT: referenced column: result +select decode(1, 2, c_abstime, c_reltime) as result, pg_typeof(result) from tb_test; +ERROR: CASE types abstime and reltime cannot be matched +LINE 1: select decode(1, 2, c_abstime, c_reltime) as result, pg_type... + ^ +CONTEXT: referenced column: result +-- ==================================================== +-- test2: implicit type conversion from expr to search1 +-- ==================================================== +-- number comparison +delete from tb_test; +insert into tb_test values( + 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1, '1', '1', '1', '1', '1', '1', '1', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-10-12', '2010-10-12 pst', '2010-10-12', + interval '2' year, '2 year', abstime '2010-10-12' +); +select decode(c_int1, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = boolean +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: raw = boolean +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_bool, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = tinyint +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = smallint +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = integer +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = bigint +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = real +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = double precision +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = numeric +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: boolean = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_int1, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: tinyint = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_int2, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: smallint = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_int4, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: integer = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_int8, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: bigint = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_float4, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: real = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_float8, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: double precision = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_numeric, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: numeric = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: character = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_bpchar, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: character = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_varchar2, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: character varying = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_nvarchar2, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: nvarchar2 = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_text, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: text = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_raw, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: raw = money +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_bool, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = character +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_bpchar, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = character +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = character varying +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bool, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = nvarchar2 +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int1, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int4, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_int8, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float4, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_float8, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_numeric, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_money, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = text +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_raw, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bool, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: boolean = raw +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_int1, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_int2, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_int4, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_int8, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_float4, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_float8, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_numeric, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_money, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +ERROR: operator does not exist: money = raw +HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. +CONTEXT: referenced column: case +select decode(c_char, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bpchar, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_varchar2, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_text, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +-- datetime comparison +delete from tb_test; +insert into tb_test values( + 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1, + '12-10-2010', '12-10-2010', '12-10-2010', '12-10-2010', '12-10-2010', '1', '1', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-10-12', '2010-10-12 pst', '2010-10-12', + interval '2' year, '2 year', abstime '2010-10-12' +); +select decode(c_bpchar, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_date, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timestamp, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamptz, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_smalldatetime, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_abstime, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_char, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_date, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timestamp, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamptz, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_smalldatetime, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_abstime, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_char, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_date, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timestamp, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamptz, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_smalldatetime, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_abstime, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_char, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_date, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timestamp, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamptz, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_smalldatetime, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_abstime, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_char, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_date, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timestamp, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamptz, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_smalldatetime, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_abstime, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_char, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timestamp, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamptz, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_smalldatetime, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_abstime, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_char, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bpchar, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_varchar2, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_nvarchar2, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_text, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_date, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamptz, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_smalldatetime, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_abstime, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_char, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bpchar, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_varchar2, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_nvarchar2, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_text, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_date, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamp, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_smalldatetime, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_abstime, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_char, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bpchar, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_varchar2, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_nvarchar2, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_text, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_date, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamp, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timestamptz, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_abstime, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_char, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bpchar, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_varchar2, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_nvarchar2, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_text, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_date, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_timestamp, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timestamptz, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_smalldatetime, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +-- time comparison +delete from tb_test; +insert into tb_test values( + 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1, + '21:21:21', '21:21:21', '21:21:21', '21:21:21', '21:21:21', '1', '1', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-10-12', '2010-10-12 pst', '2010-10-12', + interval '2' year, '2 year', abstime '2010-10-12' +); +select decode(c_time, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timetz, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_time, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timetz, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_time, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timetz, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_time, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timetz, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_time, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timetz, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_char, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_text, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_timetz, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_char, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_bpchar, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_varchar2, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_nvarchar2, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_text, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_time, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +-- interval comparison +delete from tb_test; +insert into tb_test values( + 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1, + '2 year', '2 year', '2 year', '2 year', '2 year', '1', '1', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-10-12', '2010-10-12 pst', '2010-10-12', + interval '2' year, '2 year', abstime '2010-10-12' +); +select decode(c_interval, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_reltime, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_interval, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_reltime, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_interval, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_reltime, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_interval, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_reltime, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_interval, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_reltime, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_char, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_text, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_reltime, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_char, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_bpchar, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_varchar2, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +select decode(c_nvarchar2, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_text, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------- + Conversion failed! +(1 row) + +select decode(c_interval, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + case +-------------------------- + Conversion successfully! +(1 row) + +set sql_beta_feature = 'none'; +\c regression +clean connection to all force for database decode_compatibility; +drop database decode_compatibility; diff --git a/src/test/regress/expected/forall_save_exceptions.out b/src/test/regress/expected/forall_save_exceptions.out index bef50e3abeda67a060431958c2cbfb25187af2ff..1589640779f86d586c1fab874ca264f4def75469 100644 --- a/src/test/regress/expected/forall_save_exceptions.out +++ b/src/test/regress/expected/forall_save_exceptions.out @@ -1199,26 +1199,28 @@ from test_decode_coercion; select decode(1, 2, 'never', col_bool) from test_decode_coercion; -ERROR: CASE types boolean and text cannot be matched +ERROR: CASE types text and boolean cannot be matched LINE 2: decode(1, 2, 'never', col_bool) - ^ + ^ CONTEXT: referenced column: col_bool --- still invalid +-- now supported select decode(1, 2, 'never', col_date) from test_decode_coercion; -ERROR: CASE types timestamp without time zone and text cannot be matched -LINE 2: decode(1, 2, 'never', col_date) - ^ -CONTEXT: referenced column: col_date --- still invalid + col_date +-------------------------- + Sat Jan 01 01:01:01 2000 +(1 row) + +-- now supported select decode(1, 2, 'never', col_time) from test_decode_coercion; -ERROR: CASE types timestamp without time zone and text cannot be matched -LINE 2: decode(1, 2, 'never', col_time) - ^ -CONTEXT: referenced column: col_time + col_time +-------------------------- + Sat Jan 01 01:01:01 2000 +(1 row) + drop schema forall_save_exceptions cascade; NOTICE: drop cascades to 17 other objects DETAIL: drop cascades to table test_forall diff --git a/src/test/regress/expected/setop_1.out b/src/test/regress/expected/setop_1.out index 11fa2b7ea0ae8d2560a3fa704a1d78854771c1c5..7ab8c86fa6c76314a03ee6b44cf08ffd415a9ccd 100644 --- a/src/test/regress/expected/setop_1.out +++ b/src/test/regress/expected/setop_1.out @@ -224,10 +224,10 @@ explain (verbose on, costs off) select b, c from test_union_1 minus select b, c (11 rows) explain (verbose on, costs off) select b, substr(c, 1, 3), c from test_union_1 minus (select 1, t2.b::varchar(10), t1.c from (select a,b,case c when 1 then 1 else null end as c from test_union_2 where b<0) t1 right join test_union_2 t2 on t1.b=t2.c group by 1, 2, 3); - QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------- + QUERY PLAN +----------------------------------------------------------------------------------------------------------------------------------------- HashSetOp Except - Output: "*SELECT* 1".b, "*SELECT* 1".substr, "*SELECT* 1".c, (0) + Output: "*SELECT* 1".b, "*SELECT* 1".substr, (("*SELECT* 1".c)::numeric), (0) -> Append -> Subquery Scan on "*SELECT* 1" Output: "*SELECT* 1".b, "*SELECT* 1".substr, "*SELECT* 1".c, 0 @@ -236,17 +236,17 @@ explain (verbose on, costs off) select b, substr(c, 1, 3), c from test_union_1 -> Subquery Scan on "*SELECT* 2" Output: 1, ("*SELECT* 2".b)::text, "*SELECT* 2".c, 1 -> HashAggregate - Output: (1), ((t2.b)::character varying(10)), (CASE test_union_2.c WHEN 1 THEN 1 ELSE NULL::integer END) - Group By Key: 1, (t2.b)::character varying(10), (CASE test_union_2.c WHEN 1 THEN 1 ELSE NULL::integer END) + Output: (1), ((t2.b)::character varying(10)), (CASE test_union_2.c WHEN 1 THEN 1::numeric ELSE NULL::numeric END) + Group By Key: 1, (t2.b)::character varying(10), (CASE test_union_2.c WHEN 1 THEN 1::numeric ELSE NULL::numeric END) -> Hash Left Join - Output: 1, (t2.b)::character varying(10), (CASE test_union_2.c WHEN 1 THEN 1 ELSE NULL::integer END) + Output: 1, (t2.b)::character varying(10), (CASE test_union_2.c WHEN 1 THEN 1::numeric ELSE NULL::numeric END) Hash Cond: (t2.c = test_union_2.b) -> Seq Scan on distribute_setop_1.test_union_2 t2 Output: t2.a, t2.b, t2.c -> Hash - Output: test_union_2.b, (CASE test_union_2.c WHEN 1 THEN 1 ELSE NULL::integer END) + Output: test_union_2.b, (CASE test_union_2.c WHEN 1 THEN 1::numeric ELSE NULL::numeric END) -> Seq Scan on distribute_setop_1.test_union_2 - Output: test_union_2.b, CASE test_union_2.c WHEN 1 THEN 1 ELSE NULL::integer END + Output: test_union_2.b, CASE test_union_2.c WHEN 1 THEN 1::numeric ELSE NULL::numeric END Filter: (test_union_2.b < 0) (22 rows) diff --git a/src/test/regress/expected/single_node_enum.out b/src/test/regress/expected/single_node_enum.out index 5a2e6ec8189a2c04dd80d8b2604850d0d92e13f1..0a6098ddb221e7fb8dd72e73ea7a47d47242580a 100644 --- a/src/test/regress/expected/single_node_enum.out +++ b/src/test/regress/expected/single_node_enum.out @@ -140,15 +140,15 @@ WHERE enumtypid = 'insenum'::regtype ORDER BY enumsortorder; enumlabel | so -----------+---- - L1 | 1 - i1 | 2 - i2 | 3 - i3 | 4 - i4 | 5 - i5 | 6 - i6 | 7 - i7 | 8 - i8 | 9 + L1 | 1 + i1 | 2 + i2 | 3 + i3 | 4 + i4 | 5 + i5 | 6 + i6 | 7 + i7 | 8 + i8 | 9 i9 | 10 i10 | 11 i11 | 12 @@ -160,18 +160,18 @@ ORDER BY enumsortorder; i17 | 18 i18 | 19 i19 | 20 - i20 | - i21 | - i22 | - i23 | - i24 | - i25 | - i26 | - i27 | - i28 | - i29 | - i30 | - L2 | + i20 | + i21 | + i22 | + i23 | + i24 | + i25 | + i26 | + i27 | + i28 | + i29 | + i30 | + L2 | (32 rows) -- diff --git a/src/test/regress/expected/single_node_regex_temp.out b/src/test/regress/expected/single_node_regex_temp.out index e6d1ca5e7a38b7ade0724b86bcdc219bedbcf233..ba49c672402f8ef6b207227f24c30d13cdc47031 100644 --- a/src/test/regress/expected/single_node_regex_temp.out +++ b/src/test/regress/expected/single_node_regex_temp.out @@ -1,3 +1,1046 @@ +-- test regexp_count(source_char, pattern [, position [, match_param] ]) +set behavior_compat_options = aformat_regexp_match; +select regexp_count('abc', '^a'); + regexp_count +-------------- + 1 +(1 row) + +select regexp_count('abc', ''); + regexp_count +-------------- + +(1 row) + +select regexp_count(null, ''); + regexp_count +-------------- + +(1 row) + +select regexp_count(null, null); + regexp_count +-------------- + +(1 row) + +select regexp_count('abc', null); + regexp_count +-------------- + +(1 row) + +select regexp_count('abc'||chr(10)||'def', '^(a|d)'); + regexp_count +-------------- + 1 +(1 row) + +select regexp_count('abc'||chr(10)||'def', '^(a|d)', 1, 'm'); + regexp_count +-------------- + 2 +(1 row) + +select regexp_count('abc'||chr(13)||chr(10)||'def', '^(a|d)', 1, 'm'); + regexp_count +-------------- + 2 +(1 row) + +select regexp_count('abc'||chr(13)||chr(10)||'def', '^(a|d)', 1, 'n'); + regexp_count +-------------- + 1 +(1 row) + +select regexp_count('abc'||chr(13)||chr(10)||'def', '^(a|d)', 1, 'p'); + regexp_count +-------------- + 1 +(1 row) + +select regexp_count('abc'||chr(13)||chr(10)||'def', '^(a|d)', 1, 'w'); + regexp_count +-------------- + 2 +(1 row) + +select regexp_count('abc'||chr(10)||'def', 'abc.d'); + regexp_count +-------------- + 0 +(1 row) + +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1, 'w'); + regexp_count +-------------- + 1 +(1 row) + +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1, 'g'); +ERROR: invalid regexp option: "g" +CONTEXT: referenced column: regexp_count +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1, 'p'); + regexp_count +-------------- + 0 +(1 row) + +select regexp_count('abc'||chr(10)||'def', 'abc.d', 2, 'w'); + regexp_count +-------------- + 0 +(1 row) + +select regexp_count('abc'||chr(10)||'def', 'abc.d', null, 'w'); + regexp_count +-------------- + +(1 row) + +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1000, 'w'); + regexp_count +-------------- + 0 +(1 row) + +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1000, null); + regexp_count +-------------- + 0 +(1 row) + +select regexp_count('abc', 'b', 0, ''); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_count +select regexp_count('abc', 'b', -1, ''); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_count +select regexp_count(null, 'b', -1, ''); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_count +select regexp_count(null, 'b', 1, 'g'); +ERROR: invalid regexp option: "g" +CONTEXT: referenced column: regexp_count +select regexp_count('abc', null, 1, 'g'); +ERROR: invalid regexp option: "g" +CONTEXT: referenced column: regexp_count +select regexp_count('abc def', '[a-z]{0,}'); + regexp_count +-------------- + 4 +(1 row) + +select regexp_count('abc def', '[a-z]*'); + regexp_count +-------------- + 4 +(1 row) + +select regexp_count('abc def', '[a-z]+'); + regexp_count +-------------- + 2 +(1 row) + +select regexp_count('smishtm1_23','^\w+$',3); + regexp_count +-------------- + 0 +(1 row) + +select regexp_count('smishtm1_23','\w+$',3); + regexp_count +-------------- + 1 +(1 row) + +select regexp_count('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 5); + regexp_count +-------------- + 5 +(1 row) + +select regexp_count('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 20); + regexp_count +-------------- + 3 +(1 row) + +select regexp_count('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 35); + regexp_count +-------------- + 1 +(1 row) + +select regexp_count('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 36); + regexp_count +-------------- + 0 +(1 row) + +create table regexptable(id int,char_value CHAR(255), nchar_value NCHAR(255), varchar2_value VARCHAR2(255), nvarchar2_value NVARCHAR2(255), clob_value CLOB, text_value TEXT); +insert into regexptable values(1,'123jui','56700986.58 ','ring1023','smishtm1_23','qwe@qq.com','homeoooo9876000'); +insert into regexptable values(2,'rooob000','-89098.980 ','9999.99900','j_ack_990','123@sina.com','-765489097.07658'); +insert into regexptable values(3,'ring1023','9999.99900 ','marry_10','marry_10','qwe@11.cm','kingqueen0980_'); +insert into regexptable values(4,'happyeveryday999','-900876','KINGGGkingooo765','_123abc','rty@qq.com','oplplPPPPPP11098'); +insert into regexptable values(5,'clobbiger9098','654799009.9076','KINGkoo5','__acbcbf__','qwe@sina.com','oplplPPPPPP11098'); +insert into regexptable values(6,'homeoooo9876000','-765489097.07658','KINGKkingooo098','kingqueen0980_','123@163.com','oplplPPPPPP11098'); +insert into regexptable values(7,regexp_count('1233444',''),regexp_count('1233444',''),regexp_count('1233444','1'),regexp_count('1233444','2'),regexp_count('1233444','3'),regexp_count('1233444','4')); +select id, regexp_count(char_value,'^[A-Za-z0-9]+$',1) as result , char_value from regexptable order by 1, 2, 3; + id | result | char_value +----+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | 1 | 123jui + 2 | 1 | rooob000 + 3 | 1 | ring1023 + 4 | 1 | happyeveryday999 + 5 | 1 | clobbiger9098 + 6 | 1 | homeoooo9876000 + 7 | | +(7 rows) + +--error +select id, regexp_count(char_value,'^[A-Za-z0-9]+$',2) as result , char_value from regexptable order by 1, 2, 3; + id | result | char_value +----+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | 0 | 123jui + 2 | 0 | rooob000 + 3 | 0 | ring1023 + 4 | 0 | happyeveryday999 + 5 | 0 | clobbiger9098 + 6 | 0 | homeoooo9876000 + 7 | | +(7 rows) + +select id, regexp_count(nchar_value,'^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$') as result , nchar_value from regexptable order by 1, 2, 3; + id | result | nchar_value +----+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | 1 | 56700986.58 + 2 | 0 | -89098.980 + 3 | 1 | 9999.99900 + 4 | 0 | -900876 + 5 | 1 | 654799009.9076 + 6 | 0 | -765489097.07658 + 7 | | +(7 rows) + +--error +select id, regexp_count(nchar_value,'^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$',2) as result , nchar_value from regexptable order by 1, 2, 3; + id | result | nchar_value +----+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 1 | 0 | 56700986.58 + 2 | 0 | -89098.980 + 3 | 0 | 9999.99900 + 4 | 0 | -900876 + 5 | 0 | 654799009.9076 + 6 | 0 | -765489097.07658 + 7 | | +(7 rows) + +select id, regexp_count(varchar2_value,'^.{3,8}$',1,'i') as result , varchar2_value from regexptable order by 1, 2, 3; + id | result | varchar2_value +----+--------+------------------ + 1 | 1 | ring1023 + 2 | 0 | 9999.99900 + 3 | 1 | marry_10 + 4 | 0 | KINGGGkingooo765 + 5 | 1 | KINGkoo5 + 6 | 0 | KINGKkingooo098 + 7 | 0 | 1 +(7 rows) + +-- test regexp_instr(source_char, pattern [, position [, occurrence [, return_opt [, match_param]]]]) +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', ''); + regexp_instr +-------------- + +(1 row) + +select regexp_instr(null, ''); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('abc', ''); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('abc', null); + regexp_instr +-------------- + +(1 row) + +select regexp_instr(null, 'b', 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr(null, 'b', 1); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('abc', 'b', null); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('abc', 'b', 1, null); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('abc', 'b', -1, ''); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr(null, 'b', -1, ''); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr(null, 'b', 1, -1); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr(null, 'b', 1, 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr('abc', null, 1, -1); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr('abc', null, 1, 1, -1); +ERROR: argument '-1' is out of range +HINT: should start from 0 +CONTEXT: referenced column: regexp_instr +select regexp_instr('abc', null, 1, 1, 0); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('abc def', '[a-z]{0,}', 1, 1); + regexp_instr +-------------- + 1 +(1 row) + +select regexp_instr('abc def', '[a-z]{0,}', 1, 2); + regexp_instr +-------------- + 4 +(1 row) + +select regexp_instr('abc def', '[a-z]{0,}', 1, 3); + regexp_instr +-------------- + 5 +(1 row) + +select regexp_instr('abc def', '[a-z]{0,}', 1, 4); + regexp_instr +-------------- + 8 +(1 row) + +select regexp_instr('abc def', '[a-z]{0,}', 1000); + regexp_instr +-------------- + 0 +(1 row) + +select regexp_instr('abc def', '[a-z]{0,}', 7); + regexp_instr +-------------- + 7 +(1 row) + +select regexp_instr('abc def', '[a-z]{0,}', 8); + regexp_instr +-------------- + 0 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', null); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+'); + regexp_instr +-------------- + 1 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 0, 6); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', -1, 6); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', null, 1); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, null); + regexp_instr +-------------- + +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 6, 0); + regexp_instr +-------------- + 34 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 6, -1); +ERROR: argument '-1' is out of range +HINT: should start from 0 +CONTEXT: referenced column: regexp_instr +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 6, 1); + regexp_instr +-------------- + 36 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 5, 5); + regexp_instr +-------------- + 34 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 5, 5, 2); + regexp_instr +-------------- + 36 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 100, 5); + regexp_instr +-------------- + 0 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 100, 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 100, -1); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_instr +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 100); + regexp_instr +-------------- + 0 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 0, 'i'); + regexp_instr +-------------- + 18 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i'); + regexp_instr +-------------- + 25 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'c'); + regexp_instr +-------------- + 0 +(1 row) + +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'g'); +ERROR: invalid regexp option: "g" +CONTEXT: referenced column: regexp_instr +select regexp_instr('abc'||chr(10)||'def', '^(a|d)?.', 1, 2, 0, 'm'); + regexp_instr +-------------- + 5 +(1 row) + +select regexp_instr('abc'||chr(10)||'def', '^(a|d)?.', 1, 2, 1, 'm'); + regexp_instr +-------------- + 7 +(1 row) + +select regexp_instr('smishtm1_23','^\w+$',3); + regexp_instr +-------------- + 0 +(1 row) + +select regexp_instr('smishtm1_23','\w+$',3); + regexp_instr +-------------- + 3 +(1 row) + +-- test regexp_substr(source_char, pattern [, position [, occurrence [, match_param]]]) +select regexp_substr('', '[^ ]+'); + regexp_substr +--------------- + +(1 row) + +select regexp_substr(null, '[^ ]+'); + regexp_substr +--------------- + +(1 row) + +select regexp_substr(null, ''); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc', ''); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc', null); + regexp_substr +--------------- + +(1 row) + +select regexp_substr(null, 'b', 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_substr +select regexp_substr(null, 'b', 1); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc', 'b', null); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc', 'b', 1, null); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc', 'b', -1, ''); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_substr +select regexp_substr(null, 'b', -1, ''); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_substr +select regexp_substr(null, 'b', 1, -1); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_substr +select regexp_substr(null, 'b', 1, 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_substr +select regexp_substr(null, 'b', 1, 1); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('smishtm1_23','^\w+$',3,1); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc def', '[a-z]{0,}', 7); + regexp_substr +--------------- + f +(1 row) + +select regexp_substr('abc def', '[a-z]{0,}', 8); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc def', '[a-z]{0,}', 9); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('sping'||chr(10)||'sppkg', 'sp.+g'); + regexp_substr +--------------- + sping +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', ''); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', null); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+'); + regexp_substr +--------------- + 500 +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', null); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_substr +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1); + regexp_substr +--------------- + 500 +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1000); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9); + regexp_substr +--------------- + Parkway, +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, null); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_substr +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 1); + regexp_substr +--------------- + Parkway, +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 3); + regexp_substr +--------------- + Shores, +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 5); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 4, ''); + regexp_substr +--------------- + CA +(1 row) + +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 4, 'g'); +ERROR: invalid regexp option: "g" +CONTEXT: referenced column: regexp_substr +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 4, null); + regexp_substr +--------------- + CA +(1 row) + +select regexp_substr('', '^(a|d)?.', 1, 2, 'm'); + regexp_substr +--------------- + +(1 row) + +select regexp_substr(null, '^(a|d)?.', 1, 2, 'm'); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc'||chr(10)||'def', null, 1, 2, 'm'); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc'||chr(10)||'def', '', 1, 2, 'm'); + regexp_substr +--------------- + +(1 row) + +select regexp_substr('abc'||chr(10)||'def', '^(a|d)?.', 1, 2, 'm'); + regexp_substr +--------------- + de +(1 row) + +select regexp_substr('abc'||chr(10)||'def', '^(a|d)?.', 1, null, 'm'); + regexp_substr +--------------- + +(1 row) + +-- test regexp_replace(source_char, pattern [, replace_str [, position [, occurrence [, match_param]]]]) +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+'); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('', '[^ ]+'); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('abc', ''); + regexp_replace +---------------- + abc +(1 row) + +select regexp_replace('abc', null); + regexp_replace +---------------- + abc +(1 row) + +select regexp_replace(null, '[^ ]+'); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', ''); + regexp_replace +------------------------------------- + 500 OMG Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('', '[^ ]+', '-', 1); + regexp_replace +---------------- + +(1 row) + +select regexp_replace(null, '[^ ]+', '-', 1); + regexp_replace +---------------- + +(1 row) + +select regexp_replace(null, 'b', 'a', 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_replace +select regexp_replace(null, 'b', 'a', 1); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('abc', 'b', 'a', null); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('abc', 'b', 'a', 1, null); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('abc', 'b', 'a', -1, ''); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_replace +select regexp_replace(null, 'b', 'a', -1, ''); +ERROR: argument '-1' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_replace +select regexp_replace(null, 'b', 'a', 1, -1); +ERROR: argument '-1' is out of range +HINT: should start from 0 +CONTEXT: referenced column: regexp_replace +select regexp_replace(null, 'b', 'a', 1, 0); + regexp_replace +---------------- + +(1 row) + +select regexp_replace(null, 'b', 'a', 1, 1); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('abc', 'b', null, 1, 1); + regexp_replace +---------------- + ac +(1 row) + +select regexp_replace('abc', 'b', null, 1, null); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('abc', 'b', null, 1, -1); +ERROR: argument '-1' is out of range +HINT: should start from 0 +CONTEXT: referenced column: regexp_replace +select regexp_replace('abc', 'b', '-', null, -1, 'n'); +ERROR: argument '-1' is out of range +HINT: should start from 0 +CONTEXT: referenced column: regexp_replace +select regexp_replace('sping'||chr(10)||'sppkg', 'sp.+g', '-'); + regexp_replace +---------------- + - + + - +(1 row) + +select regexp_replace('smishtm1_23','^\w+$','*',3,1); + regexp_replace +---------------- + smishtm1_23 +(1 row) + +select regexp_replace('123abc', '[0-9]*','9',100); + regexp_replace +---------------- + 123abc +(1 row) + +select regexp_replace('', '[a-z]{0,}', '$'); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('a', '[a-z]{0,}', '$'); + regexp_replace +---------------- + $$ +(1 row) + +select regexp_replace('abc def', '[a-z]{0,}', '$'); + regexp_replace +---------------- + $$ $$ +(1 row) + +select regexp_replace('abc def', '[a-z]{0,}', '$', 3); + regexp_replace +---------------- + ab$$ $$ +(1 row) + +select regexp_replace('abc def', '[a-z]{0,}', '$', 4); + regexp_replace +---------------- + abc$ $$ +(1 row) + +select regexp_replace('abc def', '[a-z]{0,}', '$', 5); + regexp_replace +---------------- + abc $$ +(1 row) + +select regexp_replace('abc def', '[a-z]{0,}', '$', 7); + regexp_replace +---------------- + abc de$$ +(1 row) + +select regexp_replace('abc def', '[a-z]{0,}', '$', 8); + regexp_replace +---------------- + abc def +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '', '-', null); + regexp_replace +------------------------------------- + 500 OMG Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '', '-', 1); + regexp_replace +------------------------------------- + 500 OMG Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', null, '-', 1); + regexp_replace +------------------------------------- + 500 OMG Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '', 1); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', null, 1); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 0); +ERROR: argument '0' is out of range +HINT: should start from 1 +CONTEXT: referenced column: regexp_replace +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1000); + regexp_replace +------------------------------------- + 500 OMG Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 5); + regexp_replace +---------------- + 500 - - - - - +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 34); + regexp_replace +------------------------------------ + 500 OMG Parkway, Redwood Shores, - +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 35); + regexp_replace +------------------------------------- + 500 OMG Parkway, Redwood Shores, C- +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, -1); +ERROR: argument '-1' is out of range +HINT: should start from 0 +CONTEXT: referenced column: regexp_replace +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 0); + regexp_replace +---------------- + - - - - - - +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 1); + regexp_replace +----------------------------------- + - OMG Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 6); + regexp_replace +------------------------------------ + 500 OMG Parkway, Redwood Shores, - +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 7); + regexp_replace +------------------------------------- + 500 OMG Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, null); + regexp_replace +---------------- + +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 2, null); + regexp_replace +----------------------------------- + 500 - Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 2, ''); + regexp_replace +----------------------------------- + 500 - Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 2, 'm'); + regexp_replace +----------------------------------- + 500 - Parkway, Redwood Shores, CA +(1 row) + +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 2, 'g'); +ERROR: invalid regexp option: "g" +CONTEXT: referenced column: regexp_replace +select regexp_replace('abc'||chr(10)||'def', '^(a|d)?.', '-', 1, 2, 'm'); + regexp_replace +---------------- + abc + + -f +(1 row) + +select regexp_replace('abc'||chr(13)||chr(10)||'def', '^(a|d)?.', '-', 1, 2, 'm'); + regexp_replace +---------------- + abc\r + + -f +(1 row) + +set behavior_compat_options = ''; -- Test regexp_matches select regexp_matches('abb', '(?<=a)b*'); regexp_matches diff --git a/src/test/regress/parallel_schedule0 b/src/test/regress/parallel_schedule0 index 0fe447426788ac24b875d21577313c8d04f73e62..9504097abfd0a88f0dfaead69878801c772a7515 100644 --- a/src/test/regress/parallel_schedule0 +++ b/src/test/regress/parallel_schedule0 @@ -7,7 +7,7 @@ # ---------- test: alter_hw_package test: hw_grant_package gsc_func gsc_db -test: uppercase_attribute_name +test: uppercase_attribute_name decode_compatible_with_o test: replace_func_with_two_args trunc_func_for_date nlssort_pinyin updatable_views # parse xlog and page diff --git a/src/test/regress/sql/decode_compatible_with_o.sql b/src/test/regress/sql/decode_compatible_with_o.sql new file mode 100644 index 0000000000000000000000000000000000000000..bedef3b534286b81a314236f2de39d03315715cd --- /dev/null +++ b/src/test/regress/sql/decode_compatible_with_o.sql @@ -0,0 +1,1072 @@ +create database decode_compatibility dbcompatibility 'A'; +\c decode_compatibility + +set timezone to '-08'; +set sql_beta_feature = 'a_style_coerce'; + +drop table if exists tb_test; +create table tb_test( + c_bool bool, + c_int1 int1, + c_int2 int2, + c_int4 int4, + c_int8 int8, + c_float4 float4, + c_float8 float8, + c_numeric numeric, + c_money money, + c_char char(10), + c_bpchar bpchar, + c_varchar2 varchar2, + c_nvarchar2 nvarchar2, + c_text text, + c_char2number_success text, + c_raw raw, + c_date date, + c_time time without time zone, + c_timetz time with time zone, + c_timestamp timestamp without time zone, + c_timestamptz timestamp with time zone, + c_smalldatetime smalldatetime, + c_interval interval, + c_reltime reltime, + c_abstime abstime +); + +-- ========================================================= +-- test1: implicit type conversion from defresult to result1 +-- ========================================================= +insert into tb_test values( + 't', 1, 2, 4, 8, 4.4, 8.8, 9.999, 66, 'char', 'bpchar', 'varchar2', 'nvarchar2', 'text', '7.77', '1234', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-12-12', '2013-12-11 pst', '2003-04-12 04:05:06', + interval '2' year, '30 DAYS 12:00:00', abstime 'Mon May 1 00:30:30 1995' +); + +-- convert to bool +select decode(1, 2, c_bool, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bool, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to int1 +select decode(1, 2, c_int1, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int1, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to int2 +select decode(1, 2, c_int2, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int2, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to int4 +select decode(1, 2, c_int4, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int4, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to int8 +select decode(1, 2, c_int8, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_int8, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to float4 +select decode(1, 2, c_float4, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float4, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to float8 +select decode(1, 2, c_float8, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_float8, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to numeric +select decode(1, 2, c_numeric, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_numeric, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to money +select decode(1, 2, c_money, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_money, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to char +select decode(1, 2, c_char, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_char, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to bpchar +select decode(1, 2, c_bpchar, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_bpchar, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to varchar2 +select decode(1, 2, c_varchar2, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_varchar2, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to nvarchar2 +select decode(1, 2, c_nvarchar2, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_nvarchar2, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to text +select decode(1, 2, c_text, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_text, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to raw +select decode(1, 2, c_raw, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_raw, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to date +select decode(1, 2, c_date, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_date, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to time +select decode(1, 2, c_time, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_time, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to timetz +select decode(1, 2, c_timetz, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timetz, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to timestamp +select decode(1, 2, c_timestamp, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamp, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to timestamptz +select decode(1, 2, c_timestamptz, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_timestamptz, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to smalldatetime +select decode(1, 2, c_smalldatetime, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_smalldatetime, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to interval +select decode(1, 2, c_interval, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_reltime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_interval, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to reltime +select decode(1, 2, c_reltime, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_reltime, c_abstime) as result, pg_typeof(result) from tb_test; +-- convert to abstime +select decode(1, 2, c_abstime, c_bool) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_int1) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_int2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_int4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_int8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_float4) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_float8) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_numeric) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_money) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_char) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_bpchar) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_varchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_nvarchar2) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_text) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_char2number_success) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_raw) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_date) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_time) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_timetz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_timestamp) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_timestamptz) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_smalldatetime) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_interval) as result, pg_typeof(result) from tb_test; +select decode(1, 2, c_abstime, c_reltime) as result, pg_typeof(result) from tb_test; + +-- ==================================================== +-- test2: implicit type conversion from expr to search1 +-- ==================================================== + +-- number comparison +delete from tb_test; +insert into tb_test values( + 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1, '1', '1', '1', '1', '1', '1', '1', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-10-12', '2010-10-12 pst', '2010-10-12', + interval '2' year, '2 year', abstime '2010-10-12' +); + +select decode(c_int1, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_bool, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_int1, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_int2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_int4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_int8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_float4, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_float8, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_numeric, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_money, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_raw, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_bool, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int1, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int2, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int4, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_int8, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float4, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_float8, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_numeric, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_money, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_char, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_raw, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +-- datetime comparison +delete from tb_test; +insert into tb_test values( + 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1, + '12-10-2010', '12-10-2010', '12-10-2010', '12-10-2010', '12-10-2010', '1', '1', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-10-12', '2010-10-12 pst', '2010-10-12', + interval '2' year, '2 year', abstime '2010-10-12' +); + +select decode(c_bpchar, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_date, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_timestamp, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_timestamptz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_abstime, c_smalldatetime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_date, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamp, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timestamptz, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_smalldatetime, c_abstime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +-- time comparison +delete from tb_test; +insert into tb_test values( + 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1, + '21:21:21', '21:21:21', '21:21:21', '21:21:21', '21:21:21', '1', '1', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-10-12', '2010-10-12 pst', '2010-10-12', + interval '2' year, '2 year', abstime '2010-10-12' +); + +select decode(c_time, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timetz, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_time, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timetz, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_time, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timetz, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_time, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timetz, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_time, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timetz, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_timetz, c_time, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_time, c_timetz, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +-- interval comparison +delete from tb_test; +insert into tb_test values( + 1, 1, 1, 1, 1, 1.0, 1.0, 1.0, 1, + '2 year', '2 year', '2 year', '2 year', '2 year', '1', '1', + date '12-10-2010', '21:21:21', '21:21:21 pst', '2010-10-12', '2010-10-12 pst', '2010-10-12', + interval '2' year, '2 year', abstime '2010-10-12' +); + +select decode(c_interval, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_reltime, c_char, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_interval, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_reltime, c_bpchar, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_interval, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_reltime, c_varchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_interval, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_reltime, c_nvarchar2, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_interval, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_reltime, c_text, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_reltime, c_interval, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +select decode(c_char, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_bpchar, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_varchar2, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_nvarchar2, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_text, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; +select decode(c_interval, c_reltime, 'Conversion successfully!', 'Conversion failed!') from tb_test; + +set sql_beta_feature = 'none'; + +\c regression +clean connection to all force for database decode_compatibility; +drop database decode_compatibility; diff --git a/src/test/regress/sql/forall_save_exceptions.sql b/src/test/regress/sql/forall_save_exceptions.sql index 95bd85eb073357f28a79d3d41a8d042f6f3f63e9..a7dec97367f66344c56c3317fa20b84901228c5a 100644 --- a/src/test/regress/sql/forall_save_exceptions.sql +++ b/src/test/regress/sql/forall_save_exceptions.sql @@ -966,12 +966,12 @@ select decode(1, 2, 'never', col_bool) from test_decode_coercion; --- still invalid +-- now supported select decode(1, 2, 'never', col_date) from test_decode_coercion; --- still invalid +-- now supported select decode(1, 2, 'never', col_time) from test_decode_coercion; diff --git a/src/test/regress/sql/single_node_regex_temp.sql b/src/test/regress/sql/single_node_regex_temp.sql index 4fb78fe5cd376e78f8cae6694f52e02e3e28861e..1821df77429dee50885da2b6fbfdeb521b955690 100644 --- a/src/test/regress/sql/single_node_regex_temp.sql +++ b/src/test/regress/sql/single_node_regex_temp.sql @@ -1,3 +1,202 @@ +-- test regexp_count(source_char, pattern [, position [, match_param] ]) +set behavior_compat_options = aformat_regexp_match; +select regexp_count('abc', '^a'); +select regexp_count('abc', ''); +select regexp_count(null, ''); +select regexp_count(null, null); +select regexp_count('abc', null); +select regexp_count('abc'||chr(10)||'def', '^(a|d)'); +select regexp_count('abc'||chr(10)||'def', '^(a|d)', 1, 'm'); +select regexp_count('abc'||chr(13)||chr(10)||'def', '^(a|d)', 1, 'm'); +select regexp_count('abc'||chr(13)||chr(10)||'def', '^(a|d)', 1, 'n'); +select regexp_count('abc'||chr(13)||chr(10)||'def', '^(a|d)', 1, 'p'); +select regexp_count('abc'||chr(13)||chr(10)||'def', '^(a|d)', 1, 'w'); +select regexp_count('abc'||chr(10)||'def', 'abc.d'); +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1, 'w'); +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1, 'g'); +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1, 'p'); +select regexp_count('abc'||chr(10)||'def', 'abc.d', 2, 'w'); +select regexp_count('abc'||chr(10)||'def', 'abc.d', null, 'w'); +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1000, 'w'); +select regexp_count('abc'||chr(10)||'def', 'abc.d', 1000, null); +select regexp_count('abc', 'b', 0, ''); +select regexp_count('abc', 'b', -1, ''); +select regexp_count(null, 'b', -1, ''); +select regexp_count(null, 'b', 1, 'g'); +select regexp_count('abc', null, 1, 'g'); +select regexp_count('abc def', '[a-z]{0,}'); +select regexp_count('abc def', '[a-z]*'); +select regexp_count('abc def', '[a-z]+'); +select regexp_count('smishtm1_23','^\w+$',3); +select regexp_count('smishtm1_23','\w+$',3); +select regexp_count('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 5); +select regexp_count('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 20); +select regexp_count('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 35); +select regexp_count('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 36); + +create table regexptable(id int,char_value CHAR(255), nchar_value NCHAR(255), varchar2_value VARCHAR2(255), nvarchar2_value NVARCHAR2(255), clob_value CLOB, text_value TEXT); +insert into regexptable values(1,'123jui','56700986.58 ','ring1023','smishtm1_23','qwe@qq.com','homeoooo9876000'); +insert into regexptable values(2,'rooob000','-89098.980 ','9999.99900','j_ack_990','123@sina.com','-765489097.07658'); +insert into regexptable values(3,'ring1023','9999.99900 ','marry_10','marry_10','qwe@11.cm','kingqueen0980_'); +insert into regexptable values(4,'happyeveryday999','-900876','KINGGGkingooo765','_123abc','rty@qq.com','oplplPPPPPP11098'); +insert into regexptable values(5,'clobbiger9098','654799009.9076','KINGkoo5','__acbcbf__','qwe@sina.com','oplplPPPPPP11098'); +insert into regexptable values(6,'homeoooo9876000','-765489097.07658','KINGKkingooo098','kingqueen0980_','123@163.com','oplplPPPPPP11098'); +insert into regexptable values(7,regexp_count('1233444',''),regexp_count('1233444',''),regexp_count('1233444','1'),regexp_count('1233444','2'),regexp_count('1233444','3'),regexp_count('1233444','4')); +select id, regexp_count(char_value,'^[A-Za-z0-9]+$',1) as result , char_value from regexptable order by 1, 2, 3; +--error +select id, regexp_count(char_value,'^[A-Za-z0-9]+$',2) as result , char_value from regexptable order by 1, 2, 3; +select id, regexp_count(nchar_value,'^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$') as result , nchar_value from regexptable order by 1, 2, 3; +--error +select id, regexp_count(nchar_value,'^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$',2) as result , nchar_value from regexptable order by 1, 2, 3; +select id, regexp_count(varchar2_value,'^.{3,8}$',1,'i') as result , varchar2_value from regexptable order by 1, 2, 3; + +-- test regexp_instr(source_char, pattern [, position [, occurrence [, return_opt [, match_param]]]]) +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', ''); +select regexp_instr(null, ''); +select regexp_instr('abc', ''); +select regexp_instr('abc', null); +select regexp_instr(null, 'b', 0); +select regexp_instr(null, 'b', 1); +select regexp_instr('abc', 'b', null); +select regexp_instr('abc', 'b', 1, null); +select regexp_instr('abc', 'b', -1, ''); +select regexp_instr(null, 'b', -1, ''); +select regexp_instr(null, 'b', 1, -1); +select regexp_instr(null, 'b', 1, 0); +select regexp_instr('abc', null, 1, -1); +select regexp_instr('abc', null, 1, 1, -1); +select regexp_instr('abc', null, 1, 1, 0); +select regexp_instr('abc def', '[a-z]{0,}', 1, 1); +select regexp_instr('abc def', '[a-z]{0,}', 1, 2); +select regexp_instr('abc def', '[a-z]{0,}', 1, 3); +select regexp_instr('abc def', '[a-z]{0,}', 1, 4); +select regexp_instr('abc def', '[a-z]{0,}', 1000); +select regexp_instr('abc def', '[a-z]{0,}', 7); +select regexp_instr('abc def', '[a-z]{0,}', 8); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', null); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+'); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 0, 6); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', -1, 6); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 0); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', null, 1); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, null); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 6, 0); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 6, -1); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 6, 1); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 5, 5); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 5, 5, 2); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 100, 5); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 100, 0); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 100, -1); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1, 100); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 0, 'i'); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i'); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'c'); +select regexp_instr('500 OMG Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'g'); +select regexp_instr('abc'||chr(10)||'def', '^(a|d)?.', 1, 2, 0, 'm'); +select regexp_instr('abc'||chr(10)||'def', '^(a|d)?.', 1, 2, 1, 'm'); +select regexp_instr('smishtm1_23','^\w+$',3); +select regexp_instr('smishtm1_23','\w+$',3); + +-- test regexp_substr(source_char, pattern [, position [, occurrence [, match_param]]]) +select regexp_substr('', '[^ ]+'); +select regexp_substr(null, '[^ ]+'); +select regexp_substr(null, ''); +select regexp_substr('abc', ''); +select regexp_substr('abc', null); +select regexp_substr(null, 'b', 0); +select regexp_substr(null, 'b', 1); +select regexp_substr('abc', 'b', null); +select regexp_substr('abc', 'b', 1, null); +select regexp_substr('abc', 'b', -1, ''); +select regexp_substr(null, 'b', -1, ''); +select regexp_substr(null, 'b', 1, -1); +select regexp_substr(null, 'b', 1, 0); +select regexp_substr(null, 'b', 1, 1); +select regexp_substr('smishtm1_23','^\w+$',3,1); +select regexp_substr('abc def', '[a-z]{0,}', 7); +select regexp_substr('abc def', '[a-z]{0,}', 8); +select regexp_substr('abc def', '[a-z]{0,}', 9); +select regexp_substr('sping'||chr(10)||'sppkg', 'sp.+g'); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', ''); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', null); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+'); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', null); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 0); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 1000); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, null); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 0); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 1); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 3); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 5); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 4, ''); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 4, 'g'); +select regexp_substr('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', 9, 4, null); +select regexp_substr('', '^(a|d)?.', 1, 2, 'm'); +select regexp_substr(null, '^(a|d)?.', 1, 2, 'm'); +select regexp_substr('abc'||chr(10)||'def', null, 1, 2, 'm'); +select regexp_substr('abc'||chr(10)||'def', '', 1, 2, 'm'); +select regexp_substr('abc'||chr(10)||'def', '^(a|d)?.', 1, 2, 'm'); +select regexp_substr('abc'||chr(10)||'def', '^(a|d)?.', 1, null, 'm'); + +-- test regexp_replace(source_char, pattern [, replace_str [, position [, occurrence [, match_param]]]]) +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+'); +select regexp_replace('', '[^ ]+'); +select regexp_replace('abc', ''); +select regexp_replace('abc', null); +select regexp_replace(null, '[^ ]+'); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', ''); +select regexp_replace('', '[^ ]+', '-', 1); +select regexp_replace(null, '[^ ]+', '-', 1); +select regexp_replace(null, 'b', 'a', 0); +select regexp_replace(null, 'b', 'a', 1); +select regexp_replace('abc', 'b', 'a', null); +select regexp_replace('abc', 'b', 'a', 1, null); +select regexp_replace('abc', 'b', 'a', -1, ''); +select regexp_replace(null, 'b', 'a', -1, ''); +select regexp_replace(null, 'b', 'a', 1, -1); +select regexp_replace(null, 'b', 'a', 1, 0); +select regexp_replace(null, 'b', 'a', 1, 1); +select regexp_replace('abc', 'b', null, 1, 1); +select regexp_replace('abc', 'b', null, 1, null); +select regexp_replace('abc', 'b', null, 1, -1); +select regexp_replace('abc', 'b', '-', null, -1, 'n'); +select regexp_replace('sping'||chr(10)||'sppkg', 'sp.+g', '-'); +select regexp_replace('smishtm1_23','^\w+$','*',3,1); +select regexp_replace('123abc', '[0-9]*','9',100); +select regexp_replace('', '[a-z]{0,}', '$'); +select regexp_replace('a', '[a-z]{0,}', '$'); +select regexp_replace('abc def', '[a-z]{0,}', '$'); +select regexp_replace('abc def', '[a-z]{0,}', '$', 3); +select regexp_replace('abc def', '[a-z]{0,}', '$', 4); +select regexp_replace('abc def', '[a-z]{0,}', '$', 5); +select regexp_replace('abc def', '[a-z]{0,}', '$', 7); +select regexp_replace('abc def', '[a-z]{0,}', '$', 8); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '', '-', null); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '', '-', 1); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', null, '-', 1); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '', 1); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', null, 1); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 0); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1000); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 5); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 34); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 35); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, -1); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 0); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 1); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 6); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 7); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, null); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 2, null); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 2, ''); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 2, 'm'); +select regexp_replace('500 OMG Parkway, Redwood Shores, CA', '[^ ]+', '-', 1, 2, 'g'); +select regexp_replace('abc'||chr(10)||'def', '^(a|d)?.', '-', 1, 2, 'm'); +select regexp_replace('abc'||chr(13)||chr(10)||'def', '^(a|d)?.', '-', 1, 2, 'm'); +set behavior_compat_options = ''; -- Test regexp_matches select regexp_matches('abb', '(?<=a)b*'); select regexp_matches('a', 'a(?<=a)b*');