diff --git a/contrib/dolphin/expected/test_text2bool.out b/contrib/dolphin/expected/test_text2bool.out new file mode 100644 index 0000000000000000000000000000000000000000..b8e20465ce38f0710196ccc2db48c59fda82c4d7 --- /dev/null +++ b/contrib/dolphin/expected/test_text2bool.out @@ -0,0 +1,37 @@ +create or replace procedure text2bool() +as +begin +if('TRUE') then + raise info 'true'; +else + raise info 'false'; +end if; +end; +/ +call text2bool(); +INFO: true + text2bool +----------- + +(1 row) + +create or replace procedure text2bool() +as +declare + a text; +begin +a := 'TRUE'; +if(a) then + raise info 'true'; +else + raise info 'false'; +end if; +end; +/ +call text2bool(); +INFO: true + text2bool +----------- + +(1 row) + diff --git a/contrib/dolphin/parallel_schedule_dolphin b/contrib/dolphin/parallel_schedule_dolphin index 96d3afa6a23856f825fd912e81c3442c0765ccce..1ab3488ead789661ad31f304b54685d1486a3d8c 100644 --- a/contrib/dolphin/parallel_schedule_dolphin +++ b/contrib/dolphin/parallel_schedule_dolphin @@ -38,7 +38,7 @@ test: builtin_funcs/bin builtin_funcs/char builtin_funcs/char_length builtin_fun test: builtin_funcs/db_b_hex builtin_funcs/db_b_if builtin_funcs/elt builtin_funcs/field builtin_funcs/find_in_set builtin_funcs/soundex builtin_funcs/space builtin_funcs/make_set builtin_funcs/between builtin_funcs/not_between -test: uint_agg uint_and uint_cast uint_cast2 uint_div uint_mi uint_mod uint_mod2 uint_mul uint_numeric uint_operator uint_or uint_partition uint_pl uint_xor +test: uint_agg uint_and uint_cast uint_cast2 uint_div uint_mi uint_mod uint_mod2 uint_mul uint_numeric uint_operator uint_or uint_partition uint_pl uint_xor test: uint_procedure_col_bypass uint_smp uint_index uint_sql_mode uint_ignore uint_join signed_unsigned_cast uint_in implicit_cast uint_auto_increment signed_cast @@ -141,7 +141,7 @@ test: builtin_funcs/cast any_value_test default_function get_b_database union2 test: json_type json_pretty json_valid json_length json_objectagg json_arrayagg json_operator json_storage_size -test: test_uuid_short test_sleep distinct dual_test fulltext_index +test: test_uuid_short test_sleep distinct dual_test fulltext_index test_text2bool test: operator_compatibility_test/numeric_operator_test_normal operator_compatibility_test/numeric_operator_test_min operator_compatibility_test/numeric_operator_test_max operator_compatibility_test/time_operator_test operator_compatibility_test/string_operator_test operator_compatibility_test/multi_type_operator_test diff --git a/contrib/dolphin/plugin_utils/adt/varchar.cpp b/contrib/dolphin/plugin_utils/adt/varchar.cpp index 2384d676211b5d499ac6899492e9aafef66836b7..cd050741ea8cbb1286cfc63b40c7763ddbd71fcf 100644 --- a/contrib/dolphin/plugin_utils/adt/varchar.cpp +++ b/contrib/dolphin/plugin_utils/adt/varchar.cpp @@ -2156,18 +2156,23 @@ ScalarVector* vbpcharlen(PG_FUNCTION_ARGS) } #ifdef DOLPHIN + + PG_FUNCTION_INFO_V1_PUBLIC(text_bool); extern "C" DLL_PUBLIC Datum text_bool(PG_FUNCTION_ARGS); - Datum text_bool(PG_FUNCTION_ARGS) { text *input = PG_GETARG_TEXT_PP(0); + int len = VARSIZE_ANY_EXHDR(input); char *a1p = NULL; double tmp; a1p = VARDATA_ANY(input); tmp = atof(a1p); - + bool result = false; + if (parse_bool_with_len(a1p, len, &result)) { + PG_RETURN_BOOL((tmp ? true : false) || result); + } PG_RETURN_BOOL(tmp ? true : false); } diff --git a/contrib/dolphin/sql/test_text2bool.sql b/contrib/dolphin/sql/test_text2bool.sql new file mode 100644 index 0000000000000000000000000000000000000000..d0918bf24edc590a420aedd96b1776c846a47332 --- /dev/null +++ b/contrib/dolphin/sql/test_text2bool.sql @@ -0,0 +1,26 @@ +create or replace procedure text2bool() +as +begin +if('TRUE') then + raise info 'true'; +else + raise info 'false'; +end if; +end; +/ +call text2bool(); + +create or replace procedure text2bool() +as +declare + a text; +begin +a := 'TRUE'; +if(a) then + raise info 'true'; +else + raise info 'false'; +end if; +end; +/ +call text2bool(); \ No newline at end of file