diff --git a/src/query/scan_manager.c b/src/query/scan_manager.c index fef17971132..a1314d1a2a2 100644 --- a/src/query/scan_manager.c +++ b/src/query/scan_manager.c @@ -1503,6 +1503,7 @@ scan_dbvals_to_midxkey (THREAD_ENTRY * thread_p, DB_VALUE * retval, bool * index bool need_new_setdomain = false; TP_DOMAIN *idx_setdomain = NULL, *vals_setdomain = NULL; TP_DOMAIN *idx_dom = NULL, *val_dom = NULL, *dom = NULL, *next = NULL; + DB_TYPE idx_type_id; TP_DOMAIN dom_buf; DB_VALUE *coerced_values = NULL; bool *has_coerced_values = NULL; @@ -1585,7 +1586,16 @@ scan_dbvals_to_midxkey (THREAD_ENTRY * thread_p, DB_VALUE * retval, bool * index } } + idx_type_id = TP_DOMAIN_TYPE (idx_dom); val_type_id = DB_VALUE_DOMAIN_TYPE (val); + + if (!tp_valid_indextype (val_type_id)) + { + er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, ER_TP_CANT_COERCE, 2, pr_type_name (idx_type_id), + pr_type_name (val_type_id)); + goto err_exit; + } + if (TP_IS_STRING_TYPE (val_type_id)) { /* we need to check for maxes */ @@ -1600,7 +1610,7 @@ scan_dbvals_to_midxkey (THREAD_ENTRY * thread_p, DB_VALUE * retval, bool * index } } - if (TP_DOMAIN_TYPE (idx_dom) != val_type_id) + if (idx_type_id != val_type_id) { /* allocate DB_VALUE array to store coerced values. */ if (has_coerced_values == NULL) @@ -1635,8 +1645,8 @@ scan_dbvals_to_midxkey (THREAD_ENTRY * thread_p, DB_VALUE * retval, bool * index has_coerced_values[i] = true; } } - else if (TP_DOMAIN_TYPE (idx_dom) == DB_TYPE_NUMERIC || TP_DOMAIN_TYPE (idx_dom) == DB_TYPE_CHAR - || TP_DOMAIN_TYPE (idx_dom) == DB_TYPE_BIT || TP_DOMAIN_TYPE (idx_dom) == DB_TYPE_NCHAR) + else if (idx_type_id == DB_TYPE_NUMERIC || idx_type_id == DB_TYPE_CHAR || idx_type_id == DB_TYPE_BIT + || idx_type_id == DB_TYPE_NCHAR) { /* skip variable string domain : DB_TYPE_VARCHAR, DB_TYPE_VARNCHAR, DB_TYPE_VARBIT */ diff --git a/src/storage/btree.c b/src/storage/btree.c index a1547b978b9..f8e3958406f 100644 --- a/src/storage/btree.c +++ b/src/storage/btree.c @@ -18690,9 +18690,6 @@ btree_compare_key (DB_VALUE * key1, DB_VALUE * key2, TP_DOMAIN * key_domain, int assert (key1_type != DB_TYPE_MIDXKEY); assert (key2_type != DB_TYPE_MIDXKEY); - assert (tp_valid_indextype (key1_type)); - assert (tp_valid_indextype (key2_type)); - /* safe code */ if (key1_type == DB_TYPE_MIDXKEY) { @@ -18737,6 +18734,9 @@ btree_compare_key (DB_VALUE * key1, DB_VALUE * key2, TP_DOMAIN * key_domain, int } } + assert (tp_valid_indextype (key1_type)); + assert (tp_valid_indextype (key2_type)); + assert_release (c == DB_UNK || (DB_LT <= c && c <= DB_GT)); /* for single-column desc index */