CUBRID Engine  latest
type_checking.c File Reference
#include "config.h"
#include <assert.h>
#include <stdarg.h>
#include <ctype.h>
#include <float.h>
#include <math.h>
#include <limits.h>
#include <vector>
#include <sys/time.h>
#include "authenticate.h"
#include "error_manager.h"
#include "parser.h"
#include "parser_message.h"
#include "parse_type.hpp"
#include "set_object.h"
#include "arithmetic.h"
#include "string_opfunc.h"
#include "object_domain.h"
#include "object_primitive.h"
#include "object_representation.h"
#include "semantic_check.h"
#include "xasl_generation.h"
#include "language_support.h"
#include "schema_manager.h"
#include "system_parameter.h"
#include "network_interface_cl.h"
#include "object_template.h"
#include "db.h"
#include "tz_support.h"
#include "func_type.hpp"
#include "dbtype.h"

Go to the source code of this file.

Classes

struct  compare_between_operator
 
struct  expression_signature
 
struct  expression_definition
 

Macros

#define SET_EXPECTED_DOMAIN(node, dom)
 
#define PT_ARE_COMPARABLE_CHAR_TYPE(typ1, typ2)
 
#define PT_ARE_COMPARABLE_NUMERIC_TYPE(typ1, typ2)
 
#define PT_ARE_COMPARABLE(typ1, typ2)   ((typ1 == typ2) || PT_ARE_COMPARABLE_CHAR_TYPE (typ1, typ2) || PT_ARE_COMPARABLE_NUMERIC_TYPE (typ1, typ2))
 
#define PT_IS_RECURSIVE_EXPRESSION(node)   ((node)->node_type == PT_EXPR && (PT_IS_LEFT_RECURSIVE_EXPRESSION (node) || PT_IS_RIGHT_RECURSIVE_EXPRESSION (node)))
 
#define PT_IS_LEFT_RECURSIVE_EXPRESSION(node)   ((node)->info.expr.op == PT_GREATEST || (node)->info.expr.op == PT_LEAST || (node)->info.expr.op == PT_COALESCE)
 
#define PT_IS_RIGHT_RECURSIVE_EXPRESSION(node)   ((node)->info.expr.op == PT_CASE || (node)->info.expr.op == PT_DECODE)
 
#define PT_IS_CAST_MAYBE(node)
 
#define PT_NODE_IS_SESSION_VARIABLE(node)
 
#define COMPARE_BETWEEN_OPERATOR_COUNT
 
#define PT_COLL_WRAP_TYPE_FOR_MAYBE(type)   ((PT_IS_CHAR_STRING_TYPE (type)) ? (type) : PT_TYPE_VARCHAR)
 
#define MAX_OVERLOADS   16
 
#define MORE_COERCIBLE(arg1_coll_infer, arg2_coll_infer)
 

Typedefs

typedef struct compare_between_operator COMPARE_BETWEEN_OPERATOR
 
typedef struct expression_signature EXPRESSION_SIGNATURE
 
typedef struct expression_definition EXPRESSION_DEFINITION
 
typedef enum collation_result COLLATION_RESULT
 

Enumerations

enum  collation_result { ERROR_COLLATION = -1, NO_COLLATION = 0, HAS_COLLATION = 1 }
 

Functions

static PT_TYPE_ENUM pt_infer_common_type (const PT_OP_TYPE op, PT_TYPE_ENUM *arg1, PT_TYPE_ENUM *arg2, PT_TYPE_ENUM *arg3, const TP_DOMAIN *expected_domain)
 
static bool pt_get_expression_definition (const PT_OP_TYPE op, EXPRESSION_DEFINITION *def)
 
static bool does_op_specially_treat_null_arg (PT_OP_TYPE op)
 
static int pt_apply_expressions_definition (PARSER_CONTEXT *parser, PT_NODE **expr)
 
static PT_TYPE_ENUM pt_expr_get_return_type (PT_NODE *expr, const EXPRESSION_SIGNATURE sig)
 
static int pt_coerce_expression_argument (PARSER_CONTEXT *parser, PT_NODE *expr, PT_NODE **arg, const PT_TYPE_ENUM arg_type, PT_NODE *data_type)
 
static PT_NODEpt_coerce_expr_arguments (PARSER_CONTEXT *parser, PT_NODE *expr, PT_NODE *arg1, PT_NODE *arg2, PT_NODE *arg3, EXPRESSION_SIGNATURE sig)
 
static PT_NODEpt_coerce_range_expr_arguments (PARSER_CONTEXT *parser, PT_NODE *expr, PT_NODE *arg1, PT_NODE *arg2, PT_NODE *arg3, EXPRESSION_SIGNATURE sig)
 
static bool pt_is_range_expression (const PT_OP_TYPE op)
 
static bool pt_are_unmatchable_types (const PT_ARG_TYPE def_type, const PT_TYPE_ENUM op_type)
 
static PT_TYPE_ENUM pt_get_equivalent_type_with_op (const PT_ARG_TYPE def_type, const PT_TYPE_ENUM arg_type, PT_OP_TYPE op)
 
static PT_NODEpt_evaluate_new_data_type (const PT_TYPE_ENUM old_type, const PT_TYPE_ENUM new_type, PT_NODE *data_type)
 
static PT_TYPE_ENUM pt_get_common_collection_type (const PT_NODE *set, bool *is_multitype)
 
static bool pt_is_collection_of_type (const PT_NODE *collection, const PT_TYPE_ENUM collection_type, const PT_TYPE_ENUM element_type)
 
static bool pt_is_symmetric_type (const PT_TYPE_ENUM type_enum)
 
static PT_NODEpt_propagate_types (PARSER_CONTEXT *parser, PT_NODE *expr, PT_NODE *otype1, PT_NODE *otype2)
 
static int pt_union_sets (PARSER_CONTEXT *parser, TP_DOMAIN *domain, DB_VALUE *set1, DB_VALUE *set2, DB_VALUE *result, PT_NODE *o2)
 
static int pt_difference_sets (PARSER_CONTEXT *parser, TP_DOMAIN *domain, DB_VALUE *set1, DB_VALUE *set2, DB_VALUE *result, PT_NODE *o2)
 
static int pt_product_sets (PARSER_CONTEXT *parser, TP_DOMAIN *domain, DB_VALUE *set1, DB_VALUE *set2, DB_VALUE *result, PT_NODE *o2)
 
static PT_NODEpt_to_false_subquery (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEpt_eval_recursive_expr_type (PARSER_CONTEXT *parser, PT_NODE *gl_expr)
 
static PT_NODEpt_eval_type_pre (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_eval_type (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_fold_constants_pre (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_fold_constants_post (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static void pt_chop_to_one_select_item (PARSER_CONTEXT *parser, PT_NODE *node)
 
static bool pt_is_able_to_determine_return_type (const PT_OP_TYPE op)
 
static PT_NODEpt_eval_expr_type (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEpt_eval_opt_type (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_TYPE_ENUM pt_common_type_op (PT_TYPE_ENUM t1, PT_OP_TYPE op, PT_TYPE_ENUM t2)
 
static int pt_upd_domain_info (PARSER_CONTEXT *parser, PT_NODE *arg1, PT_NODE *arg2, PT_OP_TYPE op, PT_TYPE_ENUM common_type, PT_NODE *node)
 
static int pt_check_and_coerce_to_time (PARSER_CONTEXT *parser, PT_NODE *src)
 
static int pt_check_and_coerce_to_date (PARSER_CONTEXT *parser, PT_NODE *src)
 
static int pt_coerce_str_to_time_date_utime_datetime (PARSER_CONTEXT *parser, PT_NODE *src, PT_TYPE_ENUM *result_type)
 
static int pt_coerce_3args (PARSER_CONTEXT *parser, PT_NODE *arg1, PT_NODE *arg2, PT_NODE *arg3)
 
static PT_NODEpt_eval_function_type (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEpt_eval_function_type_new (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEpt_eval_function_type_old (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEpt_eval_method_call_type (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEpt_fold_const_expr (PARSER_CONTEXT *parser, PT_NODE *expr, void *arg)
 
static PT_NODEpt_fold_const_function (PARSER_CONTEXT *parser, PT_NODE *func)
 
static const char * pt_class_name (const PT_NODE *type)
 
static int pt_set_default_data_type (PARSER_CONTEXT *parser, PT_TYPE_ENUM type, PT_NODE **dtp)
 
static bool pt_is_explicit_coerce_allowed_for_default_value (PARSER_CONTEXT *parser, PT_TYPE_ENUM data_type, PT_TYPE_ENUM desired_type)
 
static int pt_coerce_value_internal (PARSER_CONTEXT *parser, PT_NODE *src, PT_NODE *dest, PT_TYPE_ENUM desired_type, PT_NODE *data_type, bool check_string_precision, bool implicit_coercion)
 
static int pt_coerce_value_explicit (PARSER_CONTEXT *parser, PT_NODE *src, PT_NODE *dest, PT_TYPE_ENUM desired_type, PT_NODE *data_type)
 
static PT_NODEpt_compare_bounds_to_value (PARSER_CONTEXT *parser, PT_NODE *expr, PT_OP_TYPE op, PT_TYPE_ENUM lhs_type, DB_VALUE *rhs_val, PT_TYPE_ENUM rhs_type)
 
static PT_TYPE_ENUM pt_get_common_datetime_type (PARSER_CONTEXT *parser, PT_TYPE_ENUM common_type, PT_TYPE_ENUM arg1_type, PT_TYPE_ENUM arg2_type, PT_NODE *arg1, PT_NODE *arg2)
 
static int pt_character_length_for_node (PT_NODE *node, const PT_TYPE_ENUM coerce_type)
 
static PT_NODEpt_wrap_expr_w_exp_dom_cast (PARSER_CONTEXT *parser, PT_NODE *expr)
 
static bool pt_is_op_with_forced_common_type (PT_OP_TYPE op)
 
static bool pt_check_const_fold_op_w_args (PT_OP_TYPE op, DB_VALUE *arg1, DB_VALUE *arg2, DB_VALUE *arg3, TP_DOMAIN *domain)
 
static bool pt_is_range_or_comp (PT_OP_TYPE op)
 
static bool pt_is_op_w_collation (const PT_OP_TYPE op)
 
static COLLATION_RESULT pt_get_collation_info_for_collection_type (PARSER_CONTEXT *parser, const PT_NODE *node, PT_COLL_INFER *coll_infer)
 
static COLLATION_RESULT pt_get_collation_of_collection (PARSER_CONTEXT *parser, const PT_NODE *node, PT_COLL_INFER *coll_infer, const bool is_inner_collection, bool *is_first_element)
 
static PT_NODEpt_coerce_node_collection_of_collection (PARSER_CONTEXT *parser, PT_NODE *node, const int coll_id, const INTL_CODESET codeset, bool force_mode, bool use_collate_modifier, PT_TYPE_ENUM wrap_type_for_maybe, PT_TYPE_ENUM wrap_type_collection)
 
static int pt_check_expr_collation (PARSER_CONTEXT *parser, PT_NODE **node)
 
static int pt_check_recursive_expr_collation (PARSER_CONTEXT *parser, PT_NODE **node)
 
static PT_NODEpt_node_to_enumeration_expr (PARSER_CONTEXT *parser, PT_NODE *data_type, PT_NODE *node)
 
static PT_NODEpt_select_list_to_enumeration_expr (PARSER_CONTEXT *parser, PT_NODE *data_type, PT_NODE *node)
 
static bool pt_is_enumeration_special_comparison (PT_NODE *arg1, PT_OP_TYPE op, PT_NODE *arg2)
 
static PT_NODEpt_fix_enumeration_comparison (PARSER_CONTEXT *parser, PT_NODE *expr)
 
static PT_TYPE_ENUM pt_get_common_arg_type_of_width_bucket (PARSER_CONTEXT *parser, PT_NODE *node)
 
static bool pt_is_const_foldable_width_bucket (PARSER_CONTEXT *parser, PT_NODE *expr)
 
static PT_TYPE_ENUM pt_wrap_type_for_collation (const PT_NODE *arg1, const PT_NODE *arg2, const PT_NODE *arg3, PT_TYPE_ENUM *wrap_type_collection)
 
static void pt_fix_arguments_collation_flag (PT_NODE *expr)
 
static PT_NODEpt_check_function_collation (PARSER_CONTEXT *parser, PT_NODE *node)
 
static void pt_hv_consistent_data_type_with_domain (PARSER_CONTEXT *parser, PT_NODE *node)
 
static void pt_update_host_var_data_type (PARSER_CONTEXT *parser, PT_NODE *hv_node)
 
static bool pt_cast_needs_wrap_for_collation (PT_NODE *node, const INTL_CODESET codeset)
 
bool pt_is_symmetric_op (const PT_OP_TYPE op)
 
PT_NODEpt_where_type (PARSER_CONTEXT *parser, PT_NODE *where)
 
PT_NODEpt_where_type_keep_true (PARSER_CONTEXT *parser, PT_NODE *where)
 
bool pt_false_where (PARSER_CONTEXT *parser, PT_NODE *node)
 
bool pt_false_search_condition (PARSER_CONTEXT *parser, const PT_NODE *node)
 
PT_NODEpt_append_query_select_list (PARSER_CONTEXT *parser, PT_NODE *query, PT_NODE *attrs)
 
int pt_wrap_select_list_with_cast_op (PARSER_CONTEXT *parser, PT_NODE *query, PT_TYPE_ENUM new_type, int p, int s, PT_NODE *data_type, bool force_wrap)
 
PT_NODEpt_wrap_collection_with_cast_op (PARSER_CONTEXT *parser, PT_NODE *arg, PT_TYPE_ENUM set_type, PT_NODE *set_data, bool for_collation)
 
PT_NODEpt_wrap_with_cast_op (PARSER_CONTEXT *parser, PT_NODE *arg, PT_TYPE_ENUM new_type, int p, int s, PT_NODE *desired_dt)
 
void pt_preset_hostvar (PARSER_CONTEXT *parser, PT_NODE *hv_node)
 
void pt_set_expected_domain (PT_NODE *node, TP_DOMAIN *domain)
 
PT_TYPE_ENUM pt_common_type (PT_TYPE_ENUM arg1_type, PT_TYPE_ENUM arg2_type)
 
int pt_evaluate_db_value_expr (PARSER_CONTEXT *parser, PT_NODE *expr, PT_OP_TYPE op, DB_VALUE *arg1, DB_VALUE *arg2, DB_VALUE *arg3, DB_VALUE *result, TP_DOMAIN *domain, PT_NODE *o1, PT_NODE *o2, PT_NODE *o3, PT_MISC_TYPE qualifier)
 
int pt_evaluate_function_w_args (PARSER_CONTEXT *parser, FUNC_TYPE fcode, DB_VALUE *args[], const int num_args, DB_VALUE *result)
 
int pt_evaluate_function (PARSER_CONTEXT *parser, PT_NODE *func, DB_VALUE *dbval_res)
 
PT_NODEpt_semantic_type (PARSER_CONTEXT *parser, PT_NODE *tree, SEMANTIC_CHK_INFO *sc_info_ptr)
 
int pt_coerce_value (PARSER_CONTEXT *parser, PT_NODE *src, PT_NODE *dest, PT_TYPE_ENUM desired_type, PT_NODE *data_type)
 
int pt_coerce_value_for_default_value (PARSER_CONTEXT *parser, PT_NODE *src, PT_NODE *dest, PT_TYPE_ENUM desired_type, PT_NODE *data_type, DB_DEFAULT_EXPR_TYPE default_expr_type)
 
int pt_type_generic_func (PARSER_CONTEXT *parser, PT_NODE *node)
 
PT_OP_TYPE pt_converse_op (PT_OP_TYPE op)
 
int pt_is_between_range_op (PT_OP_TYPE op)
 
int pt_is_comp_op (PT_OP_TYPE op)
 
PT_OP_TYPE pt_negate_op (PT_OP_TYPE op)
 
int pt_comp_to_between_op (PT_OP_TYPE left, PT_OP_TYPE right, PT_COMP_TO_BETWEEN_OP_CODE_TYPE type, PT_OP_TYPE *between)
 
int pt_between_to_comp_op (PT_OP_TYPE between, PT_OP_TYPE *left, PT_OP_TYPE *right)
 
bool pt_is_op_hv_late_bind (PT_OP_TYPE op)
 
bool pt_get_collation_info (const PT_NODE *node, PT_COLL_INFER *coll_infer)
 
PT_NODEpt_coerce_node_collation (PARSER_CONTEXT *parser, PT_NODE *node, const int coll_id, const INTL_CODESET codeset, bool force_mode, bool use_collate_modifier, PT_TYPE_ENUM wrap_type_for_maybe, PT_TYPE_ENUM wrap_type_collection)
 
int pt_common_collation (PT_COLL_INFER *arg1_coll_infer, PT_COLL_INFER *arg2_coll_infer, PT_COLL_INFER *arg3_coll_infer, const int args_w_coll, bool op_has_3_args, int *common_coll, INTL_CODESET *common_cs)
 
PT_TYPE_ENUM pt_to_variable_size_type (PT_TYPE_ENUM type_enum)
 

Variables

static COMPARE_BETWEEN_OPERATOR pt_Compare_between_operator_table []
 

Macro Definition Documentation

#define COMPARE_BETWEEN_OPERATOR_COUNT
Value:
static COMPARE_BETWEEN_OPERATOR pt_Compare_between_operator_table[]

Definition at line 159 of file type_checking.c.

Referenced by pt_between_to_comp_op(), and pt_comp_to_between_op().

#define MAX_OVERLOADS   16

Definition at line 167 of file type_checking.c.

Referenced by pt_get_expression_definition().

#define MORE_COERCIBLE (   arg1_coll_infer,
  arg2_coll_infer 
)
Value:
((((arg1_coll_infer)->can_force_cs) && !((arg2_coll_infer)->can_force_cs)) \
|| ((arg1_coll_infer)->coerc_level > (arg2_coll_infer)->coerc_level \
&& (arg1_coll_infer)->can_force_cs == (arg2_coll_infer)->can_force_cs))

Referenced by pt_common_collation().

#define PT_ARE_COMPARABLE (   typ1,
  typ2 
)    ((typ1 == typ2) || PT_ARE_COMPARABLE_CHAR_TYPE (typ1, typ2) || PT_ARE_COMPARABLE_NUMERIC_TYPE (typ1, typ2))

Definition at line 112 of file type_checking.c.

Referenced by pt_coerce_expr_arguments().

#define PT_ARE_COMPARABLE_CHAR_TYPE (   typ1,
  typ2 
)
Value:
#define PT_IS_NATIONAL_CHAR_STRING_TYPE(t)
Definition: parse_tree.h:156
#define PT_IS_SIMPLE_CHAR_STRING_TYPE(t)
Definition: parse_tree.h:160

Definition at line 102 of file type_checking.c.

#define PT_ARE_COMPARABLE_NUMERIC_TYPE (   typ1,
  typ2 
)
Value:
|| (PT_IS_NUMERIC_TYPE (typ1) && typ2 == PT_TYPE_MAYBE) \
|| (typ1 == PT_TYPE_MAYBE && PT_IS_NUMERIC_TYPE (typ2)))
#define PT_IS_NUMERIC_TYPE(t)
Definition: parse_tree.h:125

Definition at line 106 of file type_checking.c.

#define PT_COLL_WRAP_TYPE_FOR_MAYBE (   type)    ((PT_IS_CHAR_STRING_TYPE (type)) ? (type) : PT_TYPE_VARCHAR)
#define PT_IS_CAST_MAYBE (   node)
Value:
((node)->node_type == PT_EXPR && (node)->info.expr.op == PT_CAST \
&& (node)->info.expr.arg1 != NULL && (node)->info.expr.arg1->type_enum == PT_TYPE_MAYBE)
#define NULL
Definition: freelistheap.h:34

Definition at line 124 of file type_checking.c.

Referenced by pt_check_function_collation(), and pt_eval_function_type_old().

#define PT_IS_LEFT_RECURSIVE_EXPRESSION (   node)    ((node)->info.expr.op == PT_GREATEST || (node)->info.expr.op == PT_LEAST || (node)->info.expr.op == PT_COALESCE)

Definition at line 118 of file type_checking.c.

Referenced by pt_eval_recursive_expr_type(), and pt_eval_type_pre().

#define PT_IS_RECURSIVE_EXPRESSION (   node)    ((node)->node_type == PT_EXPR && (PT_IS_LEFT_RECURSIVE_EXPRESSION (node) || PT_IS_RIGHT_RECURSIVE_EXPRESSION (node)))
#define PT_IS_RIGHT_RECURSIVE_EXPRESSION (   node)    ((node)->info.expr.op == PT_CASE || (node)->info.expr.op == PT_DECODE)

Definition at line 121 of file type_checking.c.

Referenced by pt_check_recursive_expr_collation().

#define PT_NODE_IS_SESSION_VARIABLE (   node)
Value:
((((node) != NULL) && \
((node)->node_type == PT_EXPR) && \
(((node)->info.expr.op == PT_EVALUATE_VARIABLE) || \
(((node)->info.expr.op == PT_CAST) && \
((node)->info.expr.arg1 != NULL) && \
((node)->info.expr.arg1->node_type == PT_EXPR) && \
((node)->info.expr.arg1->info.expr.op == PT_EVALUATE_VARIABLE)) \
)) ? true : false )
#define NULL
Definition: freelistheap.h:34

Definition at line 128 of file type_checking.c.

Referenced by pt_upd_domain_info().

#define SET_EXPECTED_DOMAIN (   node,
  dom 
)
Value:
do \
{ \
(node)->expected_domain = (dom); \
if ((node)->or_next) \
{ \
PT_NODE *_or_next = (node)->or_next; \
while (_or_next) \
{ \
if (_or_next->type_enum == PT_TYPE_MAYBE && _or_next->expected_domain == NULL) \
{ \
_or_next->expected_domain = (dom); \
} \
_or_next = _or_next->or_next; \
} \
} \
} \
while (0)
struct parser_node PT_NODE
Definition: parse_tree.h:1562
#define NULL
Definition: freelistheap.h:34
if(extra_options)
Definition: dynamic_load.c:958
while(1)
Definition: cnvlex.c:816

Definition at line 66 of file type_checking.c.

Referenced by pt_coerce_expression_argument(), pt_coerce_node_collation(), pt_coerce_range_expr_arguments(), pt_eval_expr_type(), and pt_eval_type().

Typedef Documentation

Enumeration Type Documentation

Enumerator
ERROR_COLLATION 
NO_COLLATION 
HAS_COLLATION 

Definition at line 187 of file type_checking.c.

Function Documentation

static bool does_op_specially_treat_null_arg ( PT_OP_TYPE  op)
static
static bool pt_are_unmatchable_types ( const PT_ARG_TYPE  def_type,
const PT_TYPE_ENUM  op_type 
)
static

Definition at line 4975 of file type_checking.c.

References pt_arg_type::NORMAL, PT_TYPE_NONE, pt_arg_type::type, pt_arg_type::pt_arg_type_val::type, and pt_arg_type::val.

Referenced by pt_apply_expressions_definition().

Here is the caller graph for this function:

int pt_between_to_comp_op ( PT_OP_TYPE  between,
PT_OP_TYPE left,
PT_OP_TYPE right 
)
static int pt_check_and_coerce_to_date ( PARSER_CONTEXT parser,
PT_NODE src 
)
static
static int pt_check_and_coerce_to_time ( PARSER_CONTEXT parser,
PT_NODE src 
)
static
static bool pt_check_const_fold_op_w_args ( PT_OP_TYPE  op,
DB_VALUE arg1,
DB_VALUE arg2,
DB_VALUE arg3,
TP_DOMAIN domain 
)
static
static int pt_check_expr_collation ( PARSER_CONTEXT parser,
PT_NODE **  node 
)
static

Definition at line 23133 of file type_checking.c.

References pt_expr_info::arg1, pt_expr_info::arg2, pt_expr_info::arg3, assert, pt_coll_infer::can_force_cs, lang_collation::codeset, pt_coll_infer::codeset, pt_coll_infer::coerc_level, pt_coll_infer::coll_id, pt_data_type_info::collation_id, pt_statement_info::data_type, parser_node::data_type, ER_FAILED, error(), ERROR_COLLATION, parser_node::expected_domain, pt_statement_info::expr, parser_node::flag, HAS_COLLATION, parser_node::info, INTL_CODESET_NONE, parser_node::is_wrapped_res_for_coll, LANG_COERCIBLE_CODESET, LANG_COERCIBLE_COLL, lang_get_codeset_name(), lang_get_collation(), MSGCAT_SEMANTIC_COLLATE_NOT_ALLOWED, MSGCAT_SEMANTIC_COLLATION_OP_ERROR, MSGCAT_SEMANTIC_CS_MATCH_COLLATE, MSGCAT_SET_PARSER_SEMANTIC, NO_ERROR, parser_node::node_type, NULL, pt_expr_info::op, prm_get_bool_value(), PRM_ID_PLUS_AS_CONCAT, PT_BETWEEN, PT_CHR, PT_CLOB_TO_CHAR, PT_COALESCE, pt_coerce_node_collation(), PT_COLL_WRAP_TYPE_FOR_MAYBE, PT_COLLATION_NOT_APPLICABLE, pt_common_collation(), PT_CONCAT, PT_CONCAT_WS, PT_CONNECT_BY_ROOT, PT_DATE_FORMAT, PT_DATEF, PT_ERRORm, PT_ERRORmf, PT_ERRORmf2, PT_EVALUATE_VARIABLE, PT_EXPR, PT_FIELD, pt_fix_arguments_collation_flag(), pt_get_collation_info(), pt_get_collation_info_for_collection_type(), PT_GET_COLLATION_MODIFIER, PT_GREATEST, PT_HAS_COLLATION, PT_IF, PT_IFNULL, PT_INDEX_PREFIX, pt_is_between_range_op(), PT_IS_COLLECTION_TYPE, pt_is_comp_op(), pt_is_op_w_collation(), PT_LEAST, PT_LEFT, PT_LOWER, PT_LPAD, PT_LTRIM, PT_MID, PT_MINUS, PT_NOT_BETWEEN, PT_NULLIF, PT_NVL, PT_NVL2, PT_PLUS, PT_PRIOR, PT_QPRIOR, PT_REPEAT, PT_REPLACE, PT_REVERSE, PT_RIGHT, PT_RPAD, PT_RTRIM, pt_show_binopcode(), PT_STRCAT, PT_SUBSTRING, PT_SUBSTRING_INDEX, PT_TIME_FORMAT, PT_TIMEF, PT_TRANSLATE, PT_TRIM, PT_TYPE_MAYBE, PT_TYPE_NONE, PT_TYPE_NULL, PT_UPPER, pt_wrap_type_for_collation(), TP_DOMAIN_TYPE, TP_IS_SET_TYPE, parser_node::type_enum, and pt_data_type_info::units.

Referenced by pt_eval_expr_type().

Here is the caller graph for this function:

static const char * pt_class_name ( const PT_NODE type)
static
static int pt_coerce_3args ( PARSER_CONTEXT parser,
PT_NODE arg1,
PT_NODE arg2,
PT_NODE arg3 
)
static
static int pt_coerce_expression_argument ( PARSER_CONTEXT parser,
PT_NODE expr,
PT_NODE **  arg,
const PT_TYPE_ENUM  arg_type,
PT_NODE data_type 
)
static
PT_NODE* pt_coerce_node_collation ( PARSER_CONTEXT parser,
PT_NODE node,
const int  coll_id,
const INTL_CODESET  codeset,
bool  force_mode,
bool  use_collate_modifier,
PT_TYPE_ENUM  wrap_type_for_maybe,
PT_TYPE_ENUM  wrap_type_collection 
)

Definition at line 22319 of file type_checking.c.

References pt_union_info::arg2, pt_function_info::arg_list, assert, pt_expr_info::cast_type, tp_domain::codeset, tp_domain::collation_flag, pt_data_type_info::collation_flag, tp_domain::collation_id, pt_data_type_info::collation_id, pt_statement_info::data_type, parser_node::data_type, pt_value_info::data_value, db_get_set(), db_get_string_size(), db_string_put_cs_and_collation(), pt_value_info::db_value, pt_value_info::db_value_is_initialized, DB_VALUE_TYPE, pt_data_type_info::dec_precision, parser_node::expected_domain, pt_statement_info::expr, F_MULTISET, F_SEQUENCE, F_SET, pt_statement_info::function, pt_function_info::function_type, i, parser_node::info, INTL_CODESET_RAW_BYTES, tp_domain::is_cached, pt_value_info::is_collate_allowed, LANG_COERCIBLE_CODESET, LANG_IS_COERCIBLE_COLL, LANG_SYS_CODESET, LANG_SYS_COLLATION, parser_varchar::length, pt_select_info::list, tp_domain::next, parser_node::next, NO_ERROR, parser_node::node_type, NULL, pt_expr_info::op, parser_copy_tree_list(), parser_free_node(), parser_new_node(), pt_data_type_info::precision, pt_value_info::print_charset, PT_CAST, pt_cast_needs_wrap_for_collation(), pt_coerce_node_collection_of_collection(), PT_DATA_TYPE, PT_DIFFERENCE, PT_DOT_, PT_EXPR, PT_EXPR_INFO_CAST_COLL_MODIFIER, PT_EXPR_INFO_CAST_SHOULD_FOLD, PT_EXPR_INFO_IS_FLAGED, PT_EXPR_INFO_SET_FLAG, pt_fold_const_expr(), PT_FUNCTION, PT_HAS_COLLATION, PT_HOST_VAR, PT_INTERSECTION, PT_IS_CHAR_STRING_TYPE, PT_IS_COLLECTION_TYPE, pt_length_of_list(), PT_METHOD_CALL, PT_NAME, PT_NODE_PRINT_VALUE_TO_TEXT, pt_preset_hostvar(), PT_SELECT, PT_SET_NODE_COLL_MODIFIER, pt_type_enum_to_db(), PT_TYPE_MAYBE, PT_UNION, PT_VALUE, pt_wrap_collection_with_cast_op(), pt_wrap_select_list_with_cast_op(), pt_wrap_with_cast_op(), pt_query_info::q, pt_statement_info::query, pt_query_info::select, db_set::set, SET_EXPECTED_DOMAIN, set_size(), tp_domain::setdomain, setobj_get_element_ptr(), setobj_size(), pt_data_value::str, pt_value_info::text, tp_domain_add(), tp_domain_cache(), TP_DOMAIN_COLL_ENFORCE, TP_DOMAIN_COLL_LEAVE, TP_DOMAIN_COLL_NORMAL, TP_DOMAIN_COLLATION, TP_DOMAIN_COLLATION_FLAG, tp_domain_copy(), tp_domain_resolve_default(), tp_domain_resolve_default_w_coll(), TP_DOMAIN_TYPE, TP_FLOATING_PRECISION_VALUE, TP_IS_CHAR_TYPE, TP_IS_SET_TYPE, TP_TYPE_HAS_COLLATION, parser_node::type_enum, pt_query_info::union_, pt_data_type_info::units, and pt_statement_info::value.

Referenced by func_type::Node::apply_argument(), pt_check_expr_collation(), pt_check_function_collation(), pt_check_recursive_expr_collation(), pt_coerce_node_collection_of_collection(), pt_eval_function_type_old(), and func_type::Node::set_return_type().

Here is the caller graph for this function:

static PT_NODE * pt_coerce_range_expr_arguments ( PARSER_CONTEXT parser,
PT_NODE expr,
PT_NODE arg1,
PT_NODE arg2,
PT_NODE arg3,
EXPRESSION_SIGNATURE  sig 
)
static

Definition at line 5230 of file type_checking.c.

References pt_query_info::all_distinct, pt_expr_info::arg1, expression_signature::arg1_type, pt_expr_info::arg2, expression_signature::arg2_type, pt_expr_info::arg3, expression_signature::arg3_type, assert, pt_data_type_info::collation_id, pt_statement_info::data_type, parser_node::data_type, pt_value_info::data_value, pt_data_type_info::dec_precision, error(), parser_context::error_msgs, EXCLUDE_HIDDEN_COLUMNS, pt_statement_info::expr, parser_node::info, LANG_SYS_CODESET, LANG_SYS_COLLATION, MSGCAT_SEMANTIC_NOT_SINGLE_COL, MSGCAT_SET_PARSER_SEMANTIC, parser_node::next, NO_ERROR, parser_node::node_type, NULL, pt_expr_info::op, parser_free_tree(), parser_new_node(), pt_data_type_info::precision, pt_coerce_expression_argument(), pt_coerce_value(), pt_common_type_op(), PT_DATA_TYPE, PT_DISTINCT, PT_ERRORm, PT_FUNCTION, pt_get_common_collection_type(), pt_get_equivalent_type(), pt_get_select_list(), pt_has_error, PT_IS_BIT_STRING_TYPE, PT_IS_CHAR_STRING_TYPE, PT_IS_COLLECTION_TYPE, PT_IS_DISCRETE_NUMBER_TYPE, pt_is_enumeration_special_comparison(), PT_IS_HOSTVAR, PT_IS_NUMERIC_TYPE, PT_IS_PARAMETERIZED_TYPE, PT_IS_QUERY_NODE_TYPE, PT_IS_STRING_TYPE, pt_length_of_select_list(), pt_preset_hostvar(), pt_try_remove_order_by(), PT_TYPE_BIT, PT_TYPE_CHAR, pt_type_enum_to_db(), PT_TYPE_ENUMERATION, PT_TYPE_LOGICAL, PT_TYPE_MAYBE, PT_TYPE_NCHAR, PT_TYPE_NONE, PT_TYPE_NULL, PT_TYPE_NUMERIC, PT_TYPE_OBJECT, PT_TYPE_SET, PT_TYPE_VARBIT, PT_TYPE_VARCHAR, PT_TYPE_VARNCHAR, PT_VALUE, pt_wrap_collection_with_cast_op(), pt_wrap_select_list_with_cast_op(), pt_statement_info::query, pt_data_value::set, SET_EXPECTED_DOMAIN, TP_BIGINT_PRECISION, tp_domain_resolve_default(), TP_FLOATING_PRECISION_VALUE, pt_arg_type::pt_arg_type_val::type, parser_node::type_enum, pt_data_type_info::units, pt_arg_type::val, and pt_statement_info::value.

Referenced by pt_apply_expressions_definition().

Here is the caller graph for this function:

static int pt_coerce_str_to_time_date_utime_datetime ( PARSER_CONTEXT parser,
PT_NODE src,
PT_TYPE_ENUM result_type 
)
static
int pt_coerce_value_explicit ( PARSER_CONTEXT parser,
PT_NODE src,
PT_NODE dest,
PT_TYPE_ENUM  desired_type,
PT_NODE data_type 
)
static

Definition at line 20333 of file type_checking.c.

References pt_coerce_value_internal().

Referenced by pt_eval_expr_type().

Here is the caller graph for this function:

int pt_coerce_value_for_default_value ( PARSER_CONTEXT parser,
PT_NODE src,
PT_NODE dest,
PT_TYPE_ENUM  desired_type,
PT_NODE data_type,
DB_DEFAULT_EXPR_TYPE  default_expr_type 
)
static int pt_coerce_value_internal ( PARSER_CONTEXT parser,
PT_NODE src,
PT_NODE dest,
PT_TYPE_ENUM  desired_type,
PT_NODE data_type,
bool  check_string_precision,
bool  implicit_coercion 
)
static

Definition at line 20382 of file type_checking.c.

References parser_node::alias_print, assert, pt_data_type_info::collation_id, parser_node::column_number, pt_statement_info::data_type, parser_node::data_type, db_make_null(), pt_value_info::db_value_is_in_workspace, pt_data_type_info::dec_precision, DOMAIN_COMPATIBLE, DOMAIN_ERROR, DOMAIN_INCOMPATIBLE, DOMAIN_OVERFLOW, er_errid(), ER_GENERIC_ERROR, ER_IT_DATA_OVERFLOW, ER_IT_INCOMPATIBLE_DATATYPE, err, F_MULTISET, F_SEQUENCE, F_SET, F_TABLE_MULTISET, F_TABLE_SEQUENCE, F_TABLE_SET, parser_context::flag, pt_statement_info::function, pt_function_info::function_type, parser_node::info, intl_identifier_casecmp(), pt_value_info::is_collate_allowed, parser_node::line_number, MSGCAT_SEMANTIC_CANT_COERCE_TO, MSGCAT_SEMANTIC_OVERFLOW_COERCING_TO, MSGCAT_SET_PARSER_SEMANTIC, parser_node::next, NO_ERROR, parser_node::node_type, NULL, parser_clear_node(), parser_copy_tree_list(), parser_free_node(), pr_clear_value(), pt_data_type_info::precision, pt_value_info::print_charset, pt_value_info::print_collation, prm_get_bool_value(), PRM_ID_HOSTVAR_LATE_BINDING, pt_class_name(), pt_common_type(), pt_dbval_to_value(), PT_ERRORmf2, PT_FUNCTION, PT_HAS_COLLATION, PT_HOST_VAR, PT_IS_PARAMETERIZED_TYPE, PT_IS_STRING_TYPE, pt_node_data_type_to_db_domain(), pt_set_default_data_type(), pt_short_print(), pt_show_type_enum(), PT_TYPE_MULTISET, PT_TYPE_NA, PT_TYPE_NONE, PT_TYPE_NULL, PT_TYPE_NUMERIC, PT_TYPE_OBJECT, PT_TYPE_SEQUENCE, PT_TYPE_SET, PT_VALUE, pt_value_to_db(), pt_xasl_type_enum_to_domain(), parser_context::set_host_var, tp_domain_cache(), tp_value_cast(), parser_node::type_enum, and pt_statement_info::value.

Referenced by pt_coerce_value(), pt_coerce_value_explicit(), and pt_coerce_value_for_default_value().

Here is the caller graph for this function:

int pt_common_collation ( PT_COLL_INFER arg1_coll_infer,
PT_COLL_INFER arg2_coll_infer,
PT_COLL_INFER arg3_coll_infer,
const int  args_w_coll,
bool  op_has_3_args,
int *  common_coll,
INTL_CODESET common_cs 
)
int pt_comp_to_between_op ( PT_OP_TYPE  left,
PT_OP_TYPE  right,
PT_COMP_TO_BETWEEN_OP_CODE_TYPE  type,
PT_OP_TYPE between 
)
PT_OP_TYPE pt_converse_op ( PT_OP_TYPE  op)

Definition at line 21042 of file type_checking.c.

References PT_EQ, PT_GE, PT_GT, PT_LE, PT_LT, and PT_NE.

Referenced by pt_to_range_key(), qo_analyze_term(), and qo_converse_sarg_terms().

Here is the caller graph for this function:

static int pt_difference_sets ( PARSER_CONTEXT parser,
TP_DOMAIN domain,
DB_VALUE set1,
DB_VALUE set2,
DB_VALUE result,
PT_NODE o2 
)
static

Definition at line 6632 of file type_checking.c.

References assert, db_error_string(), db_get_set(), error(), NULL, PT_ERRORc, pt_has_error, set_difference(), and set_make_collection().

Referenced by pt_evaluate_db_value_expr().

Here is the caller graph for this function:

static PT_NODE * pt_eval_expr_type ( PARSER_CONTEXT parser,
PT_NODE node 
)
static

Definition at line 8727 of file type_checking.c.

References parser_node::alias_print, pt_expr_info::arg1, pt_expr_info::arg2, pt_expr_info::arg3, pt_function_info::arg_list, assert, pt_expr_info::cast_type, lang_collation::codeset, pt_data_type_info::collation_id, parser_node::column_number, COMPAT_MYSQL, pt_statement_info::data_type, parser_node::data_type, pt_value_info::data_value, DATE_SPECIFIER, DATETIME_SPECIFIER, DATETIMETZ_SPECIFIER, db_check_time_date_format(), db_make_int(), DB_TYPE_STRING, DB_TYPE_UNKNOWN, DB_TYPE_VARCHAR, pt_value_info::db_value, pt_data_type_info::dec_precision, err, error(), parser_context::error_msgs, parser_node::expected_domain, pt_statement_info::expr, pt_statement_info::function, parser_node::info, lang_get_collation(), lang_get_lang_id_from_flag(), lang_set_flag_from_lang(), parser_node::line_number, pt_expr_info::location, pt_value_info::location, MSGCAT_SEMANTIC_CANT_EXTRACT_FROM, MSGCAT_SEMANTIC_COLLATE_NOT_ALLOWED, MSGCAT_SEMANTIC_OP_NOT_DEFINED_ON, MSGCAT_SEMANTIC_OP_NOT_DEFINED_ON_1, MSGCAT_SEMANTIC_OP_NOT_DEFINED_ON_3, MSGCAT_SEMANTIC_WANT_LOGICAL_CASE_COND, MSGCAT_SET_PARSER_SEMANTIC, parser_node::next, NO_ERROR, parser_node::node_type, NULL, pt_expr_info::op, parser_node::or_next, p, parser_copy_tree(), parser_copy_tree_list(), parser_free_node(), parser_free_tree(), parser_new_node(), pt_data_type_info::precision, prm_get_bool_value(), prm_get_integer_value(), prm_get_string_value(), PRM_ID_COMPAT_MODE, PRM_ID_INTL_NUMBER_LANG, PRM_ID_ORACLE_STYLE_EMPTY_STRING, PRM_ID_RETURN_NULL_ON_FUNCTION_ERRORS, pt_apply_expressions_definition(), PT_ASSIGN, PT_BETWEEN, PT_BETWEEN_AND, PT_BETWEEN_GE_LE, PT_BETWEEN_GE_LT, PT_BETWEEN_GT_LE, PT_BETWEEN_GT_LT, PT_BIT_COUNT, PT_BIT_NOT, PT_CASE, PT_CAST, pt_check_and_coerce_to_date(), pt_check_and_coerce_to_time(), pt_check_cast_op(), pt_check_expr_collation(), pt_chop_to_one_select_item(), PT_COALESCE, pt_coerce_expression_argument(), pt_coerce_value(), pt_coerce_value_explicit(), pt_common_type(), pt_common_type_op(), PT_CONNECT_BY_ROOT, PT_DATA_TYPE, PT_DATE_ADD, PT_DATE_SUB, PT_DAY, pt_db_to_type_enum(), PT_DECODE, PT_DOES_FUNCTION_HAVE_DIFFERENT_ARGS, pt_domain_to_data_type(), PT_DRAND, PT_DRANDOM, PT_EQ, PT_ERRORm, PT_ERRORmf2, PT_ERRORmf3, PT_ERRORmf4, pt_eval_function_type(), PT_EVALUATE_VARIABLE, PT_EXISTS, PT_EXPR, PT_EXPR_INFO_CAST_COLL_MODIFIER, PT_EXPR_INFO_CAST_NOFAIL, PT_EXPR_INFO_IS_FLAGED, PT_EXPR_INFO_SET_FLAG, PT_EXTRACT, PT_FIELD, pt_fix_enumeration_comparison(), PT_FROM_TZ, PT_FUNCTION, PT_FUNCTION_HOLDER, PT_GET_COLLATION_MODIFIER, PT_HAS_COLLATION, PT_HAS_DATE_PART, pt_has_error, PT_HAS_TIME_PART, PT_HOST_VAR, PT_HOUR, PT_IF, pt_is_able_to_determine_return_type(), pt_is_between_range_op(), PT_IS_CHAR_STRING_TYPE, PT_IS_COLLECTION_TYPE, PT_IS_COMPLEX_TYPE, PT_IS_DATE_TIME_TYPE, PT_IS_DISCRETE_NUMBER_TYPE, pt_is_enumeration_special_comparison(), PT_IS_FUNCTION, PT_IS_HOSTVAR, PT_IS_IN, PT_IS_INPUT_HOSTVAR, PT_IS_NOT_IN, PT_IS_NULL_NODE, PT_IS_NUMERIC_TYPE, PT_IS_PARAMETERIZED_TYPE, pt_is_query, pt_is_set_type, PT_IS_STRING_TYPE, pt_is_symmetric_op(), pt_is_symmetric_type(), PT_IS_VALUE_NODE, PT_LIKE, PT_LIKE_ESCAPE, PT_LIKE_LOWER_BOUND, PT_LIKE_UPPER_BOUND, pt_list_has_logical_nodes(), pt_make_prim_data_type(), PT_MILLISECOND, PT_MINUS, PT_MINUTE, PT_MONTH, PT_NAME, PT_NE, PT_NEW_TIME, pt_node_to_db_domain(), PT_NOT_BETWEEN, PT_NOT_LIKE, PT_OID_OF_DUPLICATE_KEY, PT_PATH_EXPR_SET, PT_PLUS, pt_preset_hostvar(), PT_PRIOR, pt_propagate_types(), PT_QPRIOR, PT_QUARTER, PT_RAND, PT_RANDOM, PT_RANGE, PT_SECOND, pt_show_binopcode(), pt_show_misc_type(), pt_show_type_enum(), PT_STR_TO_DATE, PT_TIMEDIFF, PT_TO_CHAR, pt_to_variable_size_type(), PT_TYPE_BIGINT, PT_TYPE_CHAR, PT_TYPE_DATE, PT_TYPE_DATETIME, PT_TYPE_DATETIMELTZ, PT_TYPE_DATETIMETZ, pt_type_enum_to_db(), PT_TYPE_ENUMERATION, PT_TYPE_INTEGER, PT_TYPE_LOGICAL, PT_TYPE_MAYBE, PT_TYPE_NA, PT_TYPE_NCHAR, PT_TYPE_NONE, PT_TYPE_NULL, PT_TYPE_OBJECT, PT_TYPE_TIME, PT_TYPE_TIMESTAMP, PT_TYPE_TIMESTAMPLTZ, PT_TYPE_TIMESTAMPTZ, PT_TYPE_VARCHAR, PT_TYPE_VARNCHAR, PT_UNARY_MINUS, pt_upd_domain_info(), PT_VALUE, pt_value_to_db(), PT_WEEK, pt_wrap_expr_w_exp_dom_cast(), pt_wrap_with_cast_op(), pt_xasl_type_enum_to_domain(), PT_YEAR, PT_YEAR_MONTH, pt_expr_info::qualifier, pt_expr_info::recursive_type, pt_data_value::set, SET_EXPECTED_DOMAIN, TIME_SPECIFIER, tp_domain_cache(), tp_domain_resolve_default(), TP_DOMAIN_TYPE, TP_FLOATING_PRECISION_VALUE, TP_IS_NUMERIC_TYPE, TP_IS_STRING_TYPE, tp_more_general_type(), TP_TYPE_HAS_COLLATION, parser_node::type_enum, pt_data_type_info::units, and pt_statement_info::value.

Referenced by pt_eval_recursive_expr_type(), and pt_eval_type().

Here is the caller graph for this function:

static PT_NODE * pt_eval_function_type_old ( PARSER_CONTEXT parser,
PT_NODE node 
)
static

Definition at line 12551 of file type_checking.c.

References pt_function_info::arg_list, assert, pt_coll_infer::can_force_cs, pt_coll_infer::codeset, pt_coll_infer::coerc_level, pt_coll_infer::coll_id, pt_data_type_info::collation_flag, pt_statement_info::data_type, parser_node::data_type, DB_MAX_NUMERIC_PRECISION, pt_data_type_info::dec_precision, F_ELT, F_INSERT_SUBSTRING, F_MULTISET, F_SEQUENCE, F_SET, F_TABLE_MULTISET, F_TABLE_SEQUENCE, F_TABLE_SET, fcode_get_lowercase_name(), pt_statement_info::function, pt_function_info::function_type, i, if(), parser_node::info, pt_function_info::is_type_checked, LANG_SYS_CODESET, LANG_SYS_COLLATION, MSGCAT_SEMANTIC_AGG_FUN_WANT_1_ARG, MSGCAT_SEMANTIC_COLLATION_OP_ERROR, MSGCAT_SEMANTIC_FUNC_NOT_DEFINED_ON, MSGCAT_SEMANTIC_FUNC_NOT_DEFINED_ON_2, MSGCAT_SEMANTIC_FUNC_NOT_DEFINED_ON_3, MSGCAT_SEMANTIC_FUNC_NOT_DEFINED_ON_4, MSGCAT_SEMANTIC_FUNC_NOT_DEFINED_ON_INDEX, MSGCAT_SEMANTIC_FUNCTION_NO_ARGS, MSGCAT_SEMANTIC_INCOMPATIBLE_OPDS, MSGCAT_SEMANTIC_OP_NOT_DEFINED_ON, MSGCAT_SET_PARSER_SEMANTIC, parser_node::next, NO_ERROR, NULL, NUM_F_INSERT_SUBSTRING_ARGS, parser_copy_tree_list(), pt_data_type_info::precision, pt_add_type_to_set(), PT_AGG_BIT_AND, PT_AGG_BIT_OR, PT_AGG_BIT_XOR, PT_AVG, pt_character_length_for_node(), pt_check_function_collation(), pt_coerce_node_collation(), PT_COLL_WRAP_TYPE_FOR_MAYBE, PT_COLLATION_NOT_APPLICABLE, pt_common_collation(), PT_COUNT, PT_COUNT_STAR, PT_CUME_DIST, PT_DENSE_RANK, PT_ERRORmf, PT_ERRORmf2, PT_ERRORmf3, PT_ERRORmf4, PT_ERRORmf5, PT_FIRST_VALUE, pt_get_collation_info(), pt_get_select_list(), PT_GROUP_CONCAT, PT_GROUPBY_NUM, PT_HAS_COLLATION, pt_is_aggregate_function(), PT_IS_CAST_MAYBE, PT_IS_CHAR_STRING_TYPE, PT_IS_DATE_TIME_TYPE, PT_IS_DISCRETE_NUMBER_TYPE, PT_IS_NUMERIC_TYPE, pt_is_set_type, PT_IS_STRING_TYPE, PT_LAG, PT_LAST_VALUE, PT_LEAD, pt_list_has_logical_nodes(), pt_make_prim_data_type(), PT_MAX, PT_MEDIAN, PT_MIN, pt_node_list_to_array(), PT_NTH_VALUE, PT_NTILE, PT_PERCENT_RANK, PT_PERCENTILE_CONT, PT_PERCENTILE_DISC, PT_RANK, PT_ROW_NUMBER, pt_short_print(), pt_show_type_enum(), PT_STDDEV, PT_STDDEV_POP, PT_STDDEV_SAMP, PT_SUM, PT_TYPE_BIGINT, PT_TYPE_BIT, PT_TYPE_CHAR, PT_TYPE_DOUBLE, PT_TYPE_ENUMERATION, PT_TYPE_INTEGER, PT_TYPE_LOGICAL, PT_TYPE_MAX, PT_TYPE_MAYBE, PT_TYPE_MIN, PT_TYPE_MULTISET, PT_TYPE_NA, PT_TYPE_NCHAR, PT_TYPE_NONE, PT_TYPE_NULL, PT_TYPE_NUMERIC, PT_TYPE_SEQUENCE, PT_TYPE_SET, PT_TYPE_VARBIT, PT_TYPE_VARCHAR, PT_TYPE_VARNCHAR, PT_VAR_POP, PT_VAR_SAMP, PT_VARIANCE, pt_wrap_with_cast_op(), TP_DOMAIN_COLL_LEAVE, TP_FLOATING_PRECISION_VALUE, and parser_node::type_enum.

Referenced by pt_eval_function_type().

Here is the caller graph for this function:

static PT_NODE * pt_eval_recursive_expr_type ( PARSER_CONTEXT parser,
PT_NODE gl_expr 
)
static
static PT_NODE * pt_eval_type ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static

Definition at line 7754 of file type_checking.c.

References pt_select_info::after_cb_filter, pt_union_info::arg1, pt_union_info::arg2, assert, pt_insert_info::attr_list, pt_merge_info::attr_list, pt_select_info::connect_by, pt_statement_info::cte, pt_statement_info::data_type, parser_node::data_type, pt_merge_info::del_search_cond, pt_statement_info::delete_, pt_statement_info::do_, semantic_chk_info::donot_fold, pt_data_type_info::entity, parser_node::expected_domain, pt_do_info::expr, parser_context::flag, pt_spec_info::flat_entity_list, pt_select_info::from, pt_select_info::having, pt_statement_info::host_var, pt_statement_info::index, parser_node::info, pt_merge_info::insert, pt_statement_info::insert, pt_query_info::is_subquery, pt_node_list_info::list, pt_select_info::list, pt_statement_info::merge, parser_node::next, pt_statement_info::node_list, parser_node::node_type, pt_cte_info::non_recursive_part, NULL, pt_spec_info::on_cond, pt_query_info::orderby_for, parser_copy_tree(), parser_copy_tree_list(), parser_free_tree(), parser_new_node(), pt_check_type_compatibility_of_values_query(), pt_check_union_compatibility(), pt_check_union_is_foldable(), pt_check_union_type_compatibility_of_values_query(), PT_CREATE_INDEX, PT_CTE, PT_DATA_TYPE, PT_DELETE, PT_DIFFERENCE, PT_DO, PT_DOT_, pt_eval_expr_type(), pt_eval_function_type(), pt_eval_method_call_type(), pt_eval_opt_type(), PT_EXPR, pt_false_where(), pt_fold_union(), PT_FUNCTION, PT_GET_OPT_LVL, pt_has_error, PT_HOST_IN, PT_HOST_VAR, PT_INSERT, PT_INTERNAL_ERROR, PT_INTERSECTION, PT_IS_CTE_NON_REC_SUBQUERY, PT_IS_CTE_REC_SUBQUERY, PT_IS_HOSTVAR, PT_IS_SUBQUERY, PT_IS_UNION_SUBQUERY, PT_IS_VALUE_QUERY, PT_MERGE, PT_METHOD_CALL, PT_NAME, pt_node_to_db_domain(), pt_preset_hostvar(), PT_SELECT, PT_SET_OPT_LVL, PT_SPEC, pt_to_false_subquery(), PT_TYPE_MAYBE, PT_TYPE_NONE, PT_TYPE_OBJECT, PT_UNION, PT_UPDATE, PT_VALUE, pt_where_type(), pt_where_type_keep_true(), pt_query_info::q, pt_statement_info::query, pt_cte_info::recursive_part, pt_delete_info::search_cond, pt_update_info::search_cond, pt_merge_info::search_cond, pt_query_info::select, SET_EXPECTED_DOMAIN, parser_context::set_host_var, pt_insert_info::spec, pt_statement_info::spec, pt_select_info::start_with, STATEMENT_SET_FOLD_NOTHING, tp_domain_cache(), parser_node::type_enum, pt_query_info::union_, pt_merge_info::update, pt_statement_info::update, pt_insert_info::value_clauses, pt_merge_info::value_clauses, pt_host_var_info::var_type, pt_index_info::where, and pt_select_info::where.

Referenced by pt_semantic_type().

Here is the caller graph for this function:

static PT_NODE * pt_eval_type_pre ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static

Definition at line 7287 of file type_checking.c.

References pt_query_info::all_distinct, pt_expr_info::arg1, pt_union_info::arg1, pt_expr_info::arg2, pt_union_info::arg2, pt_expr_info::arg3, pt_statement_info::delete_, pt_spec_info::derived_table, semantic_chk_info::donot_fold, pt_sort_spec_info::expr, pt_statement_info::expr, pt_query_info::flag, pt_select_info::group_by, pt_query_info::has_outer_spec, pt_select_info::having, parser_node::info, pt_statement_info::insert, pt_query_info::is_insert_select, pt_query_info::is_sort_spec, pt_spec_info::join_type, pt_delete_info::limit, pt_query_info::limit, pt_update_info::limit, pt_node_list_info::list, pt_node_list_info::list_type, MSGCAT_SEMANTIC_OUT_OF_MEMORY, MSGCAT_SET_PARSER_SEMANTIC, parser_node::next, NO_ERROR, pt_statement_info::node_list, parser_node::node_type, NULL, pt_expr_info::op, pt_query_info::order_by, pt_update_info::order_by, pt_query_info::orderby_for, pt_update_info::orderby_for, pt_expr_info::paren_type, PT_CASE, pt_check_recursive_expr_collation(), pt_common_type(), PT_CONTINUE_WALK, PT_DECODE, PT_DELETE, PT_DIFFERENCE, PT_DISTINCT, PT_ERRORm, pt_eval_recursive_expr_type(), PT_EXPR, pt_has_error, PT_INSERT, PT_INST_NUM, PT_INTERSECTION, PT_IS_LEFT_RECURSIVE_EXPRESSION, pt_is_query, PT_IS_QUERY, PT_IS_RECURSIVE_EXPRESSION, PT_IS_SUBQUERY, PT_JOIN_LEFT_OUTER, PT_JOIN_RIGHT_OUTER, PT_LAST_OPCODE, pt_limit_to_numbering_expr(), PT_LIST_WALK, PT_ORDERBY_NUM, PT_SELECT, pt_semantic_type(), PT_SORT_SPEC, PT_SPEC, PT_TYPE_ENUMERATION, PT_TYPE_NONE, PT_UNION, PT_UPDATE, pt_query_info::q, pt_statement_info::query, pt_expr_info::recursive_type, pt_delete_info::rewrite_limit, pt_query_info::rewrite_limit, pt_update_info::rewrite_limit, pt_delete_info::search_cond, pt_update_info::search_cond, pt_query_info::select, pt_statement_info::sort_spec, pt_statement_info::spec, parser_node::type_enum, pt_query_info::union_, pt_statement_info::update, pt_insert_info::value_clauses, and pt_select_info::where.

Referenced by pt_semantic_type().

Here is the caller graph for this function:

int pt_evaluate_db_value_expr ( PARSER_CONTEXT parser,
PT_NODE expr,
PT_OP_TYPE  op,
DB_VALUE arg1,
DB_VALUE arg2,
DB_VALUE arg3,
DB_VALUE result,
TP_DOMAIN domain,
PT_NODE o1,
PT_NODE o2,
PT_NODE o3,
PT_MISC_TYPE  qualifier 
)

Definition at line 13684 of file type_checking.c.

References db_monetary::amount, pt_expr_info::arg1, pt_expr_info::arg2, ARG_FILE_LINE, assert, ASSERT_ERROR, au_user_name(), cmp, COMPAT_MYSQL, csession_get_last_insert_id(), d1, DATA_STATUS_OK, parser_node::data_type, pt_value_info::data_value, db_datetime::date, db_datetimetz::datetime, db_abs_dbval(), db_acos_dbval(), db_add_days_to_year(), db_add_int_to_datetime(), db_add_months(), db_add_time(), db_ascii(), db_asin_dbval(), db_atan2_dbval(), db_atan_dbval(), DB_BIGINT_MIN, db_bigint_to_binary_string(), db_bit_count_dbval(), db_bit_to_blob(), db_blob_from_file(), db_blob_length(), db_blob_to_bit(), db_ceil_dbval(), db_char_to_blob(), db_char_to_clob(), db_clob_from_file(), db_clob_length(), db_clob_to_char(), db_conv(), db_conv_tz(), db_convert_sec_to_time(), db_convert_time_to_sec(), db_convert_to_time(), db_cos_dbval(), db_cot_dbval(), db_crc32_dbval(), DB_CURRENCY_DEFAULT, db_date_add_interval_days(), db_date_add_interval_expr(), db_date_dbval(), db_date_decode(), db_date_diff(), db_date_format(), DB_DATE_MAX, DB_DATE_MIN, db_date_sub_interval_days(), db_date_sub_interval_expr(), DB_DEFAULT_PRECISION, DB_DEFAULT_SCALE, db_degrees_dbval(), DB_ENUM_OVERFLOW_VAL, DB_EQ, db_exp_dbval(), db_find_string_in_in_set(), db_floor_dbval(), db_format(), db_from_tz(), db_from_unixtime(), db_get_bigint(), db_get_bit(), db_get_cs_coll_info(), db_get_database_name(), db_get_database_version(), db_get_date(), db_get_date_dayofyear(), db_get_date_from_days(), db_get_date_item(), db_get_date_quarter(), db_get_date_totaldays(), db_get_date_week(), db_get_date_weekday(), db_get_datetime(), db_get_datetimetz(), db_get_double(), db_get_enum_short(), db_get_float(), db_get_int(), db_get_monetary(), db_get_numeric(), db_get_row_count(), db_get_row_count_cache(), db_get_schema_def_dbval(), db_get_set(), db_get_short(), db_get_string(), db_get_string_codeset(), db_get_string_collation(), db_get_string_length(), db_get_string_size(), db_get_time(), db_get_time_item(), db_get_timestamp(), db_get_timestamptz(), db_get_user_and_host_name(), db_get_variable(), DB_GT, db_hex(), db_inet_aton(), db_inet_ntoa(), DB_INT16_MIN, DB_INT32_MIN, DB_IS_NULL, db_last_day(), db_least_or_greatest(), db_like_bound(), db_log_dbval(), db_log_generic_dbval(), DB_LT, db_make_bigint(), db_make_char(), db_make_date(), db_make_datetime(), db_make_datetimeltz(), db_make_datetimetz(), db_make_double(), db_make_float(), db_make_int(), db_make_monetary(), db_make_nchar(), db_make_null(), db_make_numeric(), db_make_short(), db_make_string(), db_make_string_copy(), db_make_time(), db_make_timestamp(), db_make_timestampltz(), db_make_timestamptz(), db_mod_dbval(), db_months_between(), DB_NE, db_new_time(), db_power_dbval(), db_private_free, db_radians_dbval(), db_round_dbval(), DB_ROW_COUNT_NOT_SET, db_set_compare(), db_set_size(), db_sign_dbval(), db_sin_dbval(), db_sleep(), db_sqrt_dbval(), db_str_to_date(), db_string_aes_decrypt(), db_string_aes_encrypt(), db_string_bit_length(), db_string_char_length(), db_string_chr(), db_string_compare(), db_string_concatenate(), db_string_extract_dbval(), db_string_free(), db_string_from_base64(), db_string_index_prefix(), db_string_instr(), db_string_like(), db_string_lower(), db_string_md5(), db_string_pad(), db_string_position(), db_string_repeat(), db_string_replace(), db_string_reverse(), db_string_rlike(), db_string_sha_one(), db_string_sha_two(), db_string_space(), db_string_substring(), db_string_substring_index(), db_string_to_base64(), db_string_translate(), db_string_trim(), db_string_upper(), DB_SUBSET, db_subtract_int_from_datetime(), DB_SUPERSET, db_sys_timezone(), db_tan_dbval(), db_time_dbval(), db_time_decode(), db_time_diff(), db_time_encode(), db_time_format(), db_timestamp(), db_timestamp_encode_ses(), db_timestamp_encode_sys(), db_to_char(), db_to_date(), db_to_datetime(), db_to_number(), db_to_time(), db_to_timestamp(), db_trunc_dbval(), DB_TYPE_BIGINT, DB_TYPE_BIT, DB_TYPE_CHAR, DB_TYPE_DATE, DB_TYPE_DATETIME, DB_TYPE_DATETIMELTZ, DB_TYPE_DATETIMETZ, DB_TYPE_DOUBLE, DB_TYPE_FLOAT, DB_TYPE_INTEGER, DB_TYPE_MONETARY, DB_TYPE_MULTISET, DB_TYPE_NCHAR, DB_TYPE_NULL, DB_TYPE_NUMERIC, DB_TYPE_SEQUENCE, DB_TYPE_SET, DB_TYPE_SHORT, DB_TYPE_SMALLINT, DB_TYPE_TIME, DB_TYPE_TIMESTAMP, DB_TYPE_TIMESTAMPLTZ, DB_TYPE_TIMESTAMPTZ, DB_TYPE_VARBIT, DB_TYPE_VARCHAR, DB_TYPE_VARIABLE, DB_TYPE_VARNCHAR, db_typeof_dbval(), db_tz_offset(), db_unix_timestamp(), DB_UNK, db_update_row_count_cache(), db_value_clone(), db_value_compare(), db_value_domain_init(), DB_VALUE_DOMAIN_TYPE, DB_VALUE_PRECISION, db_value_put_encoded_date(), db_value_put_encoded_time(), DB_VALUE_SCALE, db_value_to_enumeration_value(), DB_VALUE_TYPE, db_width_bucket(), db_value::domain, DOMAIN_COMPATIBLE, parser_context::drand, ER_ATTEMPT_TO_USE_ZERODATE, ER_AU_SELECT_FAILURE, er_clear(), er_errid(), ER_ERROR_SEVERITY, ER_IT_DATA_OVERFLOW, er_msg(), ER_OBJ_NOT_A_CLASS, ER_QSTR_INVALID_DATA_TYPE, ER_REGEX_COMPILE_ERROR, ER_REGEX_EXEC_ERROR, er_set(), err, error(), pt_statement_info::expr, db_domain_info::general_info, i, pt_data_value::i, pr_type::id, parser_node::info, db_domain_info::general_info::is_null, julian_encode(), LANG_SYS_CODESET, LANG_SYS_COLLATION, LEADING, parser_context::local_transaction_id, parser_context::lrand, MILLISECONDS_OF_ONE_DAY, MSGCAT_RUNTIME_IS_NOT_AUTHORIZED_ON, MSGCAT_SEMANTIC_CANT_COERCE_TO, MSGCAT_SEMANTIC_DATA_OVERFLOW_ON, MSGCAT_SEMANTIC_DATE_UNDERFLOW, MSGCAT_SEMANTIC_IS_NOT_A, MSGCAT_SEMANTIC_TIME_UNDERFLOW, MSGCAT_SEMANTIC_ZERO_DIVIDE, MSGCAT_SET_PARSER_RUNTIME, MSGCAT_SET_PARSER_SEMANTIC, db_value::need_clear, parser_node::next, NO_ERROR, parser_node::node_type, NULL, numeric_db_value_add(), numeric_db_value_div(), numeric_db_value_is_zero(), numeric_db_value_mul(), numeric_db_value_negate(), numeric_db_value_sub(), obt_Last_insert_id_generated, pt_expr_info::op, OR_CHECK_ADD_OVERFLOW, OR_CHECK_BIGINT_DIV_OVERFLOW, OR_CHECK_DOUBLE_OVERFLOW, OR_CHECK_FLOAT_OVERFLOW, OR_CHECK_INT_DIV_OVERFLOW, OR_CHECK_INT_OVERFLOW, OR_CHECK_MULT_OVERFLOW, OR_CHECK_SHORT_DIV_OVERFLOW, OR_CHECK_SUB_UNDERFLOW, OR_CHECK_UNS_ADD_OVERFLOW, OR_CHECK_UNS_SUB_UNDERFLOW, parser_print_tree(), pr_clear_value(), pr_clone_value(), pr_data_writeval_disk_size(), prm_get_bool_value(), prm_get_integer_value(), PRM_ID_COMPAT_MODE, PRM_ID_NO_BACKSLASH_ESCAPES, PRM_ID_ORACLE_STYLE_EMPTY_STRING, PRM_ID_PLUS_AS_CONCAT, PRM_ID_RETURN_NULL_ON_FUNCTION_ERRORS, PT_ABS, PT_ACOS, PT_ADD_MONTHS, PT_ADDDATE, PT_ADDTIME, PT_AES_DECRYPT, PT_AES_ENCRYPT, PT_AND, PT_ASCII, PT_ASIN, PT_ASSIGN, PT_ATAN, PT_ATAN2, PT_BETWEEN, PT_BETWEEN_AND, PT_BETWEEN_EQ_NA, PT_BETWEEN_GE_INF, PT_BETWEEN_GE_LE, PT_BETWEEN_GE_LT, PT_BETWEEN_GT_INF, PT_BETWEEN_GT_LE, PT_BETWEEN_GT_LT, PT_BETWEEN_INF_LE, PT_BETWEEN_INF_LT, PT_BIN, PT_BIT_AND, PT_BIT_COUNT, PT_BIT_LENGTH, PT_BIT_NOT, PT_BIT_OR, PT_BIT_TO_BLOB, PT_BIT_XOR, PT_BITSHIFT_LEFT, PT_BITSHIFT_RIGHT, PT_BLOB_FROM_FILE, PT_BLOB_LENGTH, PT_BLOB_TO_BIT, PT_CASE, PT_CAST, PT_CEIL, PT_CHAR_LENGTH, PT_CHAR_TO_BLOB, PT_CHAR_TO_CLOB, PT_CHARSET, PT_CHR, PT_CLASS, PT_CLOB_FROM_FILE, PT_CLOB_LENGTH, PT_CLOB_TO_CHAR, PT_COALESCE, PT_COERCIBILITY, PT_COLLATION, pt_common_type(), PT_CONCAT, PT_CONCAT_WS, PT_CONNECT_BY_ROOT, PT_CONV, PT_CONV_TZ, PT_COS, PT_COT, PT_CRC32, PT_CURRENT_DATE, PT_CURRENT_DATETIME, PT_CURRENT_TIME, PT_CURRENT_TIMESTAMP, PT_CURRENT_USER, pt_data_type_to_db_domain(), PT_DATABASE, PT_DATE_ADD, PT_DATE_FORMAT, PT_DATE_SUB, PT_DATEDIFF, PT_DATEF, PT_DAYF, PT_DAYOFMONTH, PT_DAYOFWEEK, PT_DAYOFYEAR, pt_db_to_type_enum(), PT_DECODE, PT_DEGREES, pt_difference_sets(), PT_DISK_SIZE, PT_DIV, PT_DIVIDE, PT_DRAND, PT_DRANDOM, PT_EQ, PT_EQ_ALL, PT_EQ_SOME, PT_EQ_TORDER, PT_ERRORc, PT_ERRORm, PT_ERRORmf, PT_ERRORmf2, PT_EVALUATE_VARIABLE, PT_EXISTS, PT_EXP, PT_EXPR, PT_EXPR_INFO_CAST_NOFAIL, PT_EXPR_INFO_IS_FLAGED, PT_EXTRACT, PT_FIELD, PT_FINDINSET, PT_FLOOR, PT_FORMAT, PT_FROM_BASE64, PT_FROM_TZ, PT_FROM_UNIXTIME, PT_FROMDAYS, PT_GE, PT_GE_ALL, PT_GE_SOME, PT_GREATEST, PT_GT, PT_GT_ALL, PT_GT_SOME, PT_HEX, PT_HOURF, PT_IF, PT_IFNULL, PT_INDEX_CARDINALITY, PT_INDEX_PREFIX, PT_INET_ATON, PT_INET_NTOA, PT_INSTR, PT_IS, PT_IS_CHAR_STRING_TYPE, PT_IS_DATE_TIME_TYPE, PT_IS_IN, PT_IS_NOT, PT_IS_NOT_IN, PT_IS_NOT_NULL, PT_IS_NULL, PT_IS_NUMERIC_TYPE, pt_is_op_hv_late_bind(), PT_IS_STRING_TYPE, PT_ISNULL, PT_LAST_DAY, PT_LAST_INSERT_ID, PT_LE, PT_LE_ALL, PT_LE_SOME, PT_LEAST, PT_LEFT, PT_LIKE, PT_LIKE_ESCAPE, PT_LIKE_LOWER_BOUND, PT_LIKE_UPPER_BOUND, PT_LIST_DBS, PT_LN, PT_LOCAL_TRANSACTION_ID, PT_LOCATE, PT_LOG, PT_LOG10, PT_LOG2, PT_LOWER, PT_LPAD, PT_LT, PT_LT_ALL, PT_LT_SOME, PT_LTRIM, PT_MAKEDATE, PT_MAKETIME, PT_MD5, PT_MID, PT_MINUS, PT_MINUTEF, pt_misc_to_qp_misc_operand(), PT_MOD, PT_MODULUS, PT_MONTHF, PT_MONTHS_BETWEEN, PT_NE, PT_NE_ALL, PT_NE_SOME, PT_NEW_TIME, PT_NOT, PT_NOT_BETWEEN, PT_NOT_LIKE, PT_NOT_RLIKE, PT_NOT_RLIKE_BINARY, PT_NULLIF, PT_NULLSAFE_EQ, PT_NVL, PT_NVL2, PT_OCTET_LENGTH, PT_OR, PT_PI, PT_PLUS, PT_POSITION, PT_POWER, PT_PRIOR, pt_product_sets(), PT_QPRIOR, PT_QUARTERF, PT_RADIANS, PT_RAND, PT_RANDOM, PT_RANGE, PT_REPEAT, PT_REPLACE, PT_REVERSE, PT_RIGHT, PT_RLIKE, PT_RLIKE_BINARY, PT_ROUND, PT_ROW_COUNT, PT_RPAD, PT_RTRIM, PT_SCHEMA, PT_SCHEMA_DEF, PT_SECONDF, PT_SECTOTIME, PT_SETEQ, PT_SETNEQ, PT_SHA_ONE, PT_SHA_TWO, pt_short_print(), pt_show_misc_type(), pt_show_type_enum(), PT_SIGN, PT_SIN, PT_SLEEP, PT_SPACE, PT_SQRT, PT_STR_TO_DATE, PT_STRCAT, PT_STRCMP, PT_SUBDATE, PT_SUBSET, PT_SUBSETEQ, PT_SUBSTRING, PT_SUBSTRING_INDEX, PT_SUPERSET, PT_SUPERSETEQ, PT_SYS_CONNECT_BY_PATH, PT_SYS_DATE, PT_SYS_DATETIME, PT_SYS_GUID, PT_SYS_TIME, PT_SYS_TIMESTAMP, PT_TAN, PT_TIME_FORMAT, PT_TIMEDIFF, PT_TIMEF, PT_TIMES, PT_TIMESTAMP, PT_TIMETOSEC, PT_TO_BASE64, PT_TO_CHAR, PT_TO_DATE, PT_TO_DATETIME, PT_TO_DATETIME_TZ, PT_TO_ENUMERATION_VALUE, PT_TO_NUMBER, PT_TO_TIME, PT_TO_TIMESTAMP, PT_TO_TIMESTAMP_TZ, PT_TODAYS, PT_TRANSLATE, PT_TRIM, PT_TRUNC, PT_TYPE_DOUBLE, pt_type_enum_to_db(), PT_TYPE_INTEGER, PT_TYPE_MULTISET, PT_TYPE_NA, PT_TYPE_NULL, PT_TYPE_SEQUENCE, PT_TYPE_SET, PT_TYPEOF, PT_TZ_OFFSET, PT_UNARY_MINUS, pt_union_sets(), PT_UNIX_TIMESTAMP, PT_UPPER, PT_USER, PT_UTC_DATE, PT_UTC_TIME, PT_UTC_TIMESTAMP, PT_VALUE, pt_value_to_db(), PT_VERSION, PT_WEEKDAY, PT_WEEKF, PT_WIDTH_BUCKET, PT_XOR, PT_YEARF, QSTR_IS_BIT, pt_expr_info::qualifier, SECONDS_OF_ONE_DAY, set_issome(), strlen, SUBSTRING, parser_context::sys_datetime, parser_context::sys_epochtime, db_datetime::time, db_timestamptz::timestamp, tp_domain_cache(), tp_domain_resolve_default(), tp_domain_resolve_value(), tp_domain_status_er_set(), TP_DOMAIN_TYPE, tp_infer_common_domain(), tp_Integer_domain, TP_IS_DATE_OR_TIME_TYPE, TP_IS_DATE_TYPE, TP_IS_SET_TYPE, tp_value_cast(), tp_value_coerce(), tp_value_compare(), TRAILING, tp_domain::type, db_domain_info::general_info::type, parser_node::type_enum, tz_conv_tz_datetime_w_region(), tz_conv_tz_time_w_zone_name(), tz_datetimetz_fix_zone(), tz_get_session_local_timezone(), tz_get_session_tz_region(), tz_get_system_timezone(), tz_get_system_tz_region(), db_timestamptz::tz_id, db_datetimetz::tz_id, tz_timestamp_decode_no_leap_sec(), tz_timestamptz_fix_zone(), V_FALSE, V_TRUE, and pt_statement_info::value.

Referenced by pt_evaluate_tree_internal(), and pt_fold_const_expr().

Here is the caller graph for this function:

int pt_evaluate_function_w_args ( PARSER_CONTEXT parser,
FUNC_TYPE  fcode,
DB_VALUE args[],
const int  num_args,
DB_VALUE result 
)

Definition at line 19731 of file type_checking.c.

References assert, db_evaluate_json_array(), db_evaluate_json_array_append(), db_evaluate_json_array_insert(), db_evaluate_json_contains(), db_evaluate_json_contains_path(), db_evaluate_json_depth(), db_evaluate_json_extract(), db_evaluate_json_get_all_paths(), db_evaluate_json_insert(), db_evaluate_json_keys(), db_evaluate_json_length(), db_evaluate_json_merge_patch(), db_evaluate_json_merge_preserve(), db_evaluate_json_object(), db_evaluate_json_pretty(), db_evaluate_json_quote(), db_evaluate_json_remove(), db_evaluate_json_replace(), db_evaluate_json_search(), db_evaluate_json_set(), db_evaluate_json_type_dbval(), db_evaluate_json_unquote(), db_evaluate_json_valid(), db_string_elt(), db_string_insert_substring(), db_string_regexp_count(), db_string_regexp_instr(), db_string_regexp_like(), db_string_regexp_replace(), db_string_regexp_substr(), er_msg(), error(), F_ELT, F_INSERT_SUBSTRING, F_JSON_ARRAY, F_JSON_ARRAY_APPEND, F_JSON_ARRAY_INSERT, F_JSON_CONTAINS, F_JSON_CONTAINS_PATH, F_JSON_DEPTH, F_JSON_EXTRACT, F_JSON_GET_ALL_PATHS, F_JSON_INSERT, F_JSON_KEYS, F_JSON_LENGTH, F_JSON_MERGE, F_JSON_MERGE_PATCH, F_JSON_OBJECT, F_JSON_PRETTY, F_JSON_QUOTE, F_JSON_REMOVE, F_JSON_REPLACE, F_JSON_SEARCH, F_JSON_SET, F_JSON_TYPE, F_JSON_UNQUOTE, F_JSON_VALID, F_REGEXP_COUNT, F_REGEXP_INSTR, F_REGEXP_LIKE, F_REGEXP_REPLACE, F_REGEXP_SUBSTR, i, NO_ERROR, NULL, and PT_ERRORc.

Referenced by pt_evaluate_function().

Here is the caller graph for this function:

static PT_NODE * pt_evaluate_new_data_type ( const PT_TYPE_ENUM  old_type,
const PT_TYPE_ENUM  new_type,
PT_NODE data_type 
)
static

Definition at line 4992 of file type_checking.c.

References NULL, PT_TYPE_BIGINT, PT_TYPE_INTEGER, PT_TYPE_NUMERIC, and PT_TYPE_SMALLINT.

static PT_NODE * pt_fold_const_expr ( PARSER_CONTEXT parser,
PT_NODE expr,
void *  arg 
)
static

Definition at line 18738 of file type_checking.c.

References parser_node::alias_print, pt_dot_info::arg1, pt_expr_info::arg1, pt_dot_info::arg2, pt_expr_info::arg2, pt_expr_info::arg3, ARG_FILE_LINE, assert, pt_coll_infer::can_force_cs, pt_expr_info::cast_type, pt_coll_infer::coerc_level, parser_node::column_number, pt_expr_info::continued_case, pt_statement_info::data_type, parser_node::data_type, db_find_class(), db_get_int(), db_get_row_count(), db_get_row_count_cache(), db_make_int(), db_make_null(), db_make_oid(), pt_name_info::db_object, DB_ROW_COUNT_NOT_SET, DB_TYPE_INTEGER, DB_TYPE_NULL, db_update_row_count_cache(), pt_value_info::db_value, pt_value_info::db_value_is_initialized, DB_VALUE_TYPE, default_value, pt_name_info::default_value, parser_node::do_not_fold, pt_statement_info::dot, pt_data_type_info::entity, pt_spec_info::entity_name, er_clear(), er_msg(), ER_OBJ_INVALID_ARGUMENTS, er_set(), ER_WARNING_SEVERITY, pt_statement_info::expr, parser_node::flag, parser_node::info, parser_node::is_alias_enabled_expr, parser_node::is_hidden_column, parser_node::is_value_query, parser_node::line_number, pt_expr_info::location, pt_statement_info::name, parser_node::next, parser_node::node_type, NULL, null_oid, OID_SET_NULL, pt_expr_info::op, parser_node::or_next, pt_name_info::original, parser_copy_tree(), parser_copy_tree_list(), parser_free_tree(), parser_new_node(), pr_clear_value(), pt_data_type_info::precision, prm_get_bool_value(), PRM_ID_ORACLE_STYLE_EMPTY_STRING, PRM_ID_RETURN_NULL_ON_FUNCTION_ERRORS, PT_AND, pt_append_string(), PT_BETWEEN, PT_BETWEEN_AND, PT_BETWEEN_EQ_NA, PT_BETWEEN_GE_INF, PT_BETWEEN_GE_LE, PT_BETWEEN_GT_INF, PT_BETWEEN_INF_LE, PT_BETWEEN_INF_LT, PT_BIT_TO_BLOB, PT_BLOB_LENGTH, PT_BLOB_TO_BIT, PT_CASE, PT_CAST, PT_CHAR_TO_BLOB, PT_CHAR_TO_CLOB, pt_check_const_fold_op_w_args(), pt_check_same_datatype(), PT_CLOB_LENGTH, PT_CLOB_TO_CHAR, PT_COALESCE, PT_COERCIBILITY, PT_COLLATION_L2_BIN_COERC, PT_COLLATION_L2_COERC, pt_compare_bounds_to_value(), PT_CONCAT, PT_CONCAT_WS, PT_CONVERT_RANGE, PT_CURRENT_VALUE, PT_DATA_TYPE, pt_dbval_to_value(), PT_DECODE, PT_DECR, PT_DEFAULTF, PT_DOT_, PT_EQ, PT_EQ_TORDER, PT_ERRORc, PT_ERRORf, pt_evaluate_db_value_expr(), PT_EXEC_STATS, PT_EXPR, PT_EXPR_INFO_CAST_SHOULD_FOLD, PT_EXPR_INFO_IS_FLAGED, PT_EXPR_INFO_SET_FLAG, PT_EXTRACT, pt_find_entity(), PT_FROM_UNIXTIME, PT_FUNCTION, PT_FUNCTION_HOLDER, PT_GE, pt_get_collation_info(), PT_GT, pt_has_error, PT_IF, PT_IFNULL, PT_INCR, PT_INST_NUM, pt_is_between_range_op(), pt_is_const_foldable_width_bucket(), PT_IS_PARAMETERIZED_TYPE, pt_is_set_type, PT_IS_STRING_TYPE, PT_IS_VALUE_NODE, PT_LE, PT_LIKE, PT_LIKE_LOWER_BOUND, PT_LIKE_UPPER_BOUND, PT_LPAD, PT_LT, PT_LTRIM, pt_name(), PT_NAME, PT_NEXT_VALUE, PT_NODE_PRINT_TO_ALIAS, PT_NOT_BETWEEN, PT_NULLIF, PT_NVL, PT_NVL2, PT_OID_ATTR, PT_OID_OF_DUPLICATE_KEY, PT_OR, PT_ORDERBY_NUM, PT_PLUS, pt_print_bytes(), PT_RANGE, PT_REPLACE, PT_ROW_COUNT, PT_RPAD, PT_RTRIM, PT_SELECT, PT_STRCAT, PT_SUBSTRING, PT_SYS_CONNECT_BY_PATH, PT_TIMESTAMP, PT_TO_CHAR, PT_TO_DATE, PT_TO_DATETIME, PT_TO_DATETIME_TZ, PT_TO_NUMBER, PT_TO_TIME, PT_TO_TIMESTAMP, PT_TO_TIMESTAMP_TZ, PT_TRACE_STATS, PT_TRIM, PT_TYPE_BIGINT, PT_TYPE_BIT, PT_TYPE_CHAR, PT_TYPE_ENUMERATION, PT_TYPE_INTEGER, PT_TYPE_LOGICAL, PT_TYPE_MAYBE, PT_TYPE_NA, PT_TYPE_NCHAR, PT_TYPE_NONE, PT_TYPE_NULL, PT_TYPE_NUMERIC, PT_TYPE_OBJECT, PT_TYPE_VARBIT, PT_TYPE_VARCHAR, PT_TYPE_VARNCHAR, PT_TZ_OFFSET, PT_VALUE, pt_value_to_db(), PT_WIDTH_BUCKET, pt_xasl_node_to_domain(), QSTR_IS_ANY_CHAR_OR_BIT, pt_expr_info::qualifier, pt_name_info::resolved, sm_att_info(), pt_statement_info::spec, pt_name_info::spec_id, semantic_chk_info::top_node, TP_DOMAIN_TYPE, parser_node::type_enum, pt_statement_info::value, and pt_data_type_info::virt_type_enum.

Referenced by pt_coerce_node_collation(), and pt_fold_constants_post().

Here is the caller graph for this function:

static PT_NODE * pt_fold_constants_post ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static
static PT_NODE * pt_fold_constants_pre ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static

Definition at line 7666 of file type_checking.c.

References F_BENCHMARK, pt_statement_info::function, pt_function_info::function_type, parser_node::info, parser_node::node_type, NULL, PT_FUNCTION, and PT_LIST_WALK.

Referenced by pt_semantic_type().

Here is the caller graph for this function:

bool pt_get_collation_info ( const PT_NODE node,
PT_COLL_INFER coll_infer 
)

Definition at line 21650 of file type_checking.c.

References pt_expr_info::arg1, assert, pt_coll_infer::can_force_cs, lang_collation::codeset, pt_coll_infer::codeset, pt_coll_infer::coerc_level, pt_coll_infer::coll_id, pt_data_type_info::collation_flag, pt_data_type_info::collation_id, pt_statement_info::data_type, parser_node::data_type, parser_node::expected_domain, pt_statement_info::expr, if(), parser_node::info, LANG_COERCIBLE_CODESET, LANG_COERCIBLE_COLL, LANG_COLL_BINARY, lang_get_collation(), LANG_IS_COERCIBLE_COLL, LANG_SYS_CODESET, LANG_SYS_COLLATION, parser_node::node_type, NULL, pt_expr_info::op, PT_CAST, PT_COLLATION_FULLY_COERC, PT_COLLATION_L1_BIN_COERC, PT_COLLATION_L1_COERC, PT_COLLATION_L1_ISO_BIN_COERC, PT_COLLATION_L2_BIN_COERC, PT_COLLATION_L2_BINARY_COERC, PT_COLLATION_L2_COERC, PT_COLLATION_L3_COERC, PT_COLLATION_L4_BIN_COERC, PT_COLLATION_L4_BINARY_COERC, PT_COLLATION_L4_COERC, PT_COLLATION_L5_COERC, PT_COLLATION_NOT_COERC, PT_CURRENT_USER, PT_DATABASE, PT_DEFINE_VARIABLE, PT_DIFFERENCE, PT_DOT_, PT_EVALUATE_VARIABLE, PT_EXPR, PT_EXPR_INFO_CAST_SHOULD_FOLD, PT_EXPR_INFO_IS_FLAGED, PT_FUNCTION, PT_GET_COLLATION_MODIFIER, PT_HAS_COLLATION, PT_HOST_VAR, PT_INTERSECTION, pt_is_input_parameter, PT_METHOD_CALL, PT_NAME, PT_NAME_GENERATED_DERIVED_SPEC, PT_NAME_INFO_IS_FLAGED, PT_SCHEMA, PT_SELECT, PT_TYPE_MAYBE, PT_UNION, PT_USER, PT_VALUE, PT_VERSION, TP_DOMAIN_CODESET, TP_DOMAIN_COLL_LEAVE, TP_DOMAIN_COLLATION, TP_DOMAIN_COLLATION_FLAG, TP_DOMAIN_TYPE, TP_TYPE_HAS_COLLATION, parser_node::type_enum, and pt_data_type_info::units.

Referenced by func_type::Node::check_arg_compat(), pt_assignment_compatible(), pt_check_expr_collation(), pt_check_function_collation(), pt_check_recursive_expr_collation(), pt_eval_function_type_old(), pt_fold_const_expr(), pt_get_compatible_info_from_node(), and func_type::Node::set_return_type().

Here is the caller graph for this function:

static COLLATION_RESULT pt_get_collation_info_for_collection_type ( PARSER_CONTEXT parser,
const PT_NODE node,
PT_COLL_INFER coll_infer 
)
static

Definition at line 21854 of file type_checking.c.

References pt_function_info::arg_list, assert, pt_coll_infer::can_force_cs, lang_collation::codeset, pt_coll_infer::codeset, pt_coll_infer::coerc_level, pt_coll_infer::coll_id, parser_node::data_type, pt_value_info::data_value, error(), ERROR_COLLATION, parser_node::expected_domain, F_MULTISET, F_SEQUENCE, F_SET, F_TABLE_MULTISET, F_TABLE_SEQUENCE, F_TABLE_SET, pt_statement_info::function, pt_function_info::function_type, HAS_COLLATION, parser_node::info, LANG_COERCIBLE_CODESET, LANG_COERCIBLE_COLL, LANG_COLL_BINARY, lang_get_collation(), LANG_IS_COERCIBLE_COLL, LANG_SYS_COLLATION, pt_select_info::list, MSGCAT_SEMANTIC_COLLECTION_EL_COLLATION_ERROR, MSGCAT_SET_PARSER_SEMANTIC, parser_node::next, NO_COLLATION, parser_node::node_type, NULL, PT_COLLATION_FULLY_COERC, PT_COLLATION_L1_BIN_COERC, PT_COLLATION_L1_COERC, PT_COLLATION_L1_ISO_BIN_COERC, PT_COLLATION_L2_BIN_COERC, PT_COLLATION_L2_BINARY_COERC, PT_COLLATION_L2_COERC, PT_COLLATION_L4_BIN_COERC, PT_COLLATION_L4_BINARY_COERC, PT_COLLATION_L4_COERC, PT_COLLATION_L5_COERC, PT_COLLATION_NOT_COERC, PT_DIFFERENCE, PT_DOT_, PT_ERRORm, PT_EXPR, PT_FUNCTION, PT_GET_COLLATION_MODIFIER, pt_get_collation_of_collection(), PT_HOST_VAR, PT_INTERSECTION, PT_IS_COLLECTION_TYPE, PT_NAME, PT_SELECT, PT_TYPE_MAYBE, PT_UNION, PT_VALUE, pt_query_info::q, pt_statement_info::query, pt_query_info::select, pt_data_value::set, TP_DOMAIN_TYPE, TP_IS_SET_TYPE, parser_node::type_enum, and pt_statement_info::value.

Referenced by pt_check_expr_collation(), and pt_get_collation_of_collection().

Here is the caller graph for this function:

static PT_TYPE_ENUM pt_get_common_arg_type_of_width_bucket ( PARSER_CONTEXT parser,
PT_NODE node 
)
static
static PT_TYPE_ENUM pt_get_common_collection_type ( const PT_NODE set,
bool is_multitype 
)
static
static PT_TYPE_ENUM pt_get_common_datetime_type ( PARSER_CONTEXT parser,
PT_TYPE_ENUM  common_type,
PT_TYPE_ENUM  arg1_type,
PT_TYPE_ENUM  arg2_type,
PT_NODE arg1,
PT_NODE arg2 
)
static
static PT_TYPE_ENUM pt_get_equivalent_type_with_op ( const PT_ARG_TYPE  def_type,
const PT_TYPE_ENUM  arg_type,
PT_OP_TYPE  op 
)
static

Definition at line 21306 of file type_checking.c.

References pt_arg_type::GENERIC, pt_get_equivalent_type(), pt_is_op_hv_late_bind(), PT_TYPE_MAYBE, and pt_arg_type::type.

Referenced by pt_coerce_expr_arguments().

Here is the caller graph for this function:

static bool pt_get_expression_definition ( const PT_OP_TYPE  op,
EXPRESSION_DEFINITION def 
)
static

Definition at line 305 of file type_checking.c.

References expression_signature::arg1_type, expression_signature::arg2_type, expression_signature::arg3_type, assert, pt_arg_type::GENERIC, pt_arg_type::pt_arg_type_val::generic_type, MAX_OVERLOADS, pt_arg_type::NORMAL, NULL, expression_definition::op, expression_definition::overloads, expression_definition::overloads_count, prm_get_bool_value(), PRM_ID_PLUS_AS_CONCAT, PT_ABS, PT_ACOS, PT_ADD_MONTHS, PT_ADDDATE, PT_ADDTIME, PT_AES_DECRYPT, PT_AES_ENCRYPT, PT_AND, PT_ASCII, PT_ASIN, PT_ATAN, PT_ATAN2, PT_BETWEEN, PT_BETWEEN_EQ_NA, PT_BETWEEN_GE_INF, PT_BETWEEN_GT_INF, PT_BETWEEN_INF_LE, PT_BETWEEN_INF_LT, PT_BIN, PT_BIT_AND, PT_BIT_COUNT, PT_BIT_LENGTH, PT_BIT_NOT, PT_BIT_OR, PT_BIT_TO_BLOB, PT_BIT_XOR, PT_BITSHIFT_LEFT, PT_BITSHIFT_RIGHT, PT_BLOB_FROM_FILE, PT_BLOB_LENGTH, PT_BLOB_TO_BIT, PT_CEIL, PT_CHAR_LENGTH, PT_CHAR_TO_BLOB, PT_CHAR_TO_CLOB, PT_CHARSET, PT_CHR, PT_CLOB_FROM_FILE, PT_CLOB_LENGTH, PT_CLOB_TO_CHAR, PT_COALESCE, PT_COERCIBILITY, PT_COLLATION, PT_CONCAT, PT_CONCAT_WS, PT_CONNECT_BY_ISCYCLE, PT_CONNECT_BY_ISLEAF, PT_CONNECT_BY_ROOT, PT_CONV, PT_CONV_TZ, PT_COS, PT_COT, PT_CRC32, PT_CURRENT_DATE, PT_CURRENT_DATETIME, PT_CURRENT_TIME, PT_CURRENT_TIMESTAMP, PT_CURRENT_USER, PT_CURRENT_VALUE, PT_DATABASE, PT_DATE_FORMAT, PT_DATEDIFF, PT_DATEF, PT_DAYF, PT_DAYOFMONTH, PT_DAYOFWEEK, PT_DAYOFYEAR, PT_DBTIMEZONE, PT_DECR, PT_DEFAULTF, PT_DEFINE_VARIABLE, PT_DEGREES, PT_DISK_SIZE, PT_DIV, PT_DIVIDE, PT_DRAND, PT_DRANDOM, PT_EQ, PT_EQ_ALL, PT_EQ_SOME, PT_EVALUATE_VARIABLE, PT_EXEC_STATS, PT_EXP, PT_EXTRACT, PT_FINDINSET, PT_FLOOR, PT_FORMAT, PT_FROM_BASE64, PT_FROM_TZ, PT_FROM_UNIXTIME, PT_FROMDAYS, PT_GE, PT_GE_ALL, PT_GE_SOME, PT_GENERIC_TYPE_ANY, PT_GENERIC_TYPE_BIT, PT_GENERIC_TYPE_CHAR, PT_GENERIC_TYPE_DATE, PT_GENERIC_TYPE_DATETIME, PT_GENERIC_TYPE_DISCRETE_NUMBER, PT_GENERIC_TYPE_LOB, PT_GENERIC_TYPE_NCHAR, PT_GENERIC_TYPE_NUMBER, PT_GENERIC_TYPE_PRIMITIVE, PT_GENERIC_TYPE_QUERY, PT_GENERIC_TYPE_SEQUENCE, PT_GENERIC_TYPE_STRING, PT_GENERIC_TYPE_STRING_VARYING, PT_GREATEST, PT_GT, PT_GT_ALL, PT_GT_INF, PT_GT_SOME, PT_HEX, PT_HOURF, PT_IFNULL, PT_INCR, PT_INDEX_CARDINALITY, PT_INDEX_PREFIX, PT_INET_ATON, PT_INET_NTOA, PT_INST_NUM, PT_INSTR, PT_IS, PT_IS_IN, PT_IS_NOT, PT_IS_NOT_IN, PT_IS_NOT_NULL, PT_IS_NULL, PT_ISNULL, PT_LAST_DAY, PT_LAST_INSERT_ID, PT_LE, PT_LE_ALL, PT_LE_SOME, PT_LEAST, PT_LEFT, PT_LEVEL, PT_LIKE, PT_LIKE_LOWER_BOUND, PT_LIKE_UPPER_BOUND, PT_LIST_DBS, PT_LN, PT_LOCAL_TRANSACTION_ID, PT_LOCATE, PT_LOG, PT_LOG10, PT_LOG2, PT_LOWER, PT_LPAD, PT_LT, PT_LT_ALL, PT_LT_INF, PT_LT_SOME, PT_LTRIM, PT_MAKEDATE, PT_MAKETIME, PT_MD5, PT_MID, PT_MINUS, PT_MINUTEF, PT_MOD, PT_MODULUS, PT_MONTHF, PT_MONTHS_BETWEEN, PT_NE, PT_NE_ALL, PT_NE_SOME, PT_NEW_TIME, PT_NEXT_VALUE, PT_NOT, PT_NOT_BETWEEN, PT_NOT_LIKE, PT_NOT_RLIKE, PT_NOT_RLIKE_BINARY, PT_NULLIF, PT_NULLSAFE_EQ, PT_NVL, PT_NVL2, PT_OCTET_LENGTH, PT_OR, PT_ORDERBY_NUM, PT_PI, PT_PLUS, PT_POSITION, PT_POWER, PT_PRIOR, PT_QPRIOR, PT_QUARTERF, PT_RADIANS, PT_RAND, PT_RANDOM, PT_REPEAT, PT_REPLACE, PT_REVERSE, PT_RIGHT, PT_RLIKE, PT_RLIKE_BINARY, PT_ROUND, PT_ROW_COUNT, PT_ROWNUM, PT_RPAD, PT_RTRIM, PT_SCHEMA, PT_SCHEMA_DEF, PT_SECONDF, PT_SECTOTIME, PT_SESSIONTIMEZONE, PT_SETEQ, PT_SETNEQ, PT_SHA_ONE, PT_SHA_TWO, PT_SIGN, PT_SIN, PT_SLEEP, PT_SPACE, PT_SQRT, PT_STRCAT, PT_STRCMP, PT_SUBDATE, PT_SUBSET, PT_SUBSETEQ, PT_SUBSTRING, PT_SUBSTRING_INDEX, PT_SUPERSET, PT_SUPERSETEQ, PT_SYS_CONNECT_BY_PATH, PT_SYS_DATE, PT_SYS_DATETIME, PT_SYS_GUID, PT_SYS_TIME, PT_SYS_TIMESTAMP, PT_TAN, PT_TIME_FORMAT, PT_TIMEDIFF, PT_TIMEF, PT_TIMES, PT_TIMESTAMP, PT_TIMETOSEC, PT_TO_BASE64, PT_TO_CHAR, PT_TO_DATE, PT_TO_DATETIME, PT_TO_DATETIME_TZ, PT_TO_ENUMERATION_VALUE, PT_TO_NUMBER, PT_TO_TIME, PT_TO_TIMESTAMP, PT_TO_TIMESTAMP_TZ, PT_TODAYS, PT_TRACE_STATS, PT_TRANSLATE, PT_TRIM, PT_TRUNC, PT_TYPE_BIGINT, PT_TYPE_BLOB, PT_TYPE_CHAR, PT_TYPE_CLOB, PT_TYPE_DATE, PT_TYPE_DATETIME, PT_TYPE_DATETIMELTZ, PT_TYPE_DATETIMETZ, PT_TYPE_DOUBLE, PT_TYPE_ENUMERATION, PT_TYPE_INTEGER, PT_TYPE_LOGICAL, PT_TYPE_MAYBE, PT_TYPE_MULTISET, PT_TYPE_NONE, PT_TYPE_NUMERIC, PT_TYPE_OBJECT, PT_TYPE_SET, PT_TYPE_SMALLINT, PT_TYPE_TIME, PT_TYPE_TIMESTAMP, PT_TYPE_TIMESTAMPLTZ, PT_TYPE_TIMESTAMPTZ, PT_TYPE_VARBIT, PT_TYPE_VARCHAR, PT_TYPE_VARNCHAR, PT_TYPEOF, PT_TZ_OFFSET, PT_UNARY_MINUS, PT_UNIX_TIMESTAMP, PT_UPPER, PT_USER, PT_UTC_DATE, PT_UTC_TIME, PT_UTC_TIMESTAMP, PT_VERSION, PT_WEEKDAY, PT_WEEKF, PT_WIDTH_BUCKET, PT_XOR, PT_YEARF, expression_signature::return_type, pt_arg_type::type, pt_arg_type::pt_arg_type_val::type, and pt_arg_type::val.

Referenced by pt_apply_expressions_definition(), and pt_fix_arguments_collation_flag().

Here is the caller graph for this function:

static void pt_hv_consistent_data_type_with_domain ( PARSER_CONTEXT parser,
PT_NODE node 
)
static

Definition at line 24834 of file type_checking.c.

References assert, parser_node::expected_domain, parser_node::node_type, NULL, parser_node::or_next, p, PT_HOST_VAR, and pt_update_host_var_data_type().

Referenced by pt_preset_hostvar().

Here is the caller graph for this function:

static PT_TYPE_ENUM pt_infer_common_type ( const PT_OP_TYPE  op,
PT_TYPE_ENUM arg1,
PT_TYPE_ENUM arg2,
PT_TYPE_ENUM arg3,
const TP_DOMAIN expected_domain 
)
static

Definition at line 5035 of file type_checking.c.

References assert, NULL, PT_COALESCE, pt_common_type_op(), pt_db_to_type_enum(), pt_is_op_hv_late_bind(), pt_is_symmetric_op(), PT_TYPE_MAYBE, PT_TYPE_NONE, and TP_DOMAIN_TYPE.

Referenced by pt_coerce_expr_arguments().

Here is the caller graph for this function:

static bool pt_is_able_to_determine_return_type ( const PT_OP_TYPE  op)
static

Definition at line 8524 of file type_checking.c.

References PT_ACOS, PT_ADD_MONTHS, PT_ADDDATE, PT_AES_DECRYPT, PT_AES_ENCRYPT, PT_ASCII, PT_ASIN, PT_ATAN, PT_ATAN2, PT_BIN, PT_BIT_AND, PT_BIT_COUNT, PT_BIT_LENGTH, PT_BIT_NOT, PT_BIT_OR, PT_BIT_TO_BLOB, PT_BIT_XOR, PT_BITSHIFT_LEFT, PT_BITSHIFT_RIGHT, PT_BLOB_FROM_FILE, PT_BLOB_LENGTH, PT_BLOB_TO_BIT, PT_CASE, PT_CAST, PT_CHAR_LENGTH, PT_CHAR_TO_BLOB, PT_CHAR_TO_CLOB, PT_CHARSET, PT_CHR, PT_CLOB_FROM_FILE, PT_CLOB_LENGTH, PT_CLOB_TO_CHAR, PT_COERCIBILITY, PT_COLLATION, PT_CONV, PT_COS, PT_COT, PT_CRC32, PT_DATE_ADD, PT_DATE_FORMAT, PT_DATE_SUB, PT_DATEDIFF, PT_DATEF, PT_DAYF, PT_DAYOFMONTH, PT_DAYOFWEEK, PT_DAYOFYEAR, PT_DECODE, PT_DEFINE_VARIABLE, PT_DEGREES, PT_DISK_SIZE, PT_DRAND, PT_DRANDOM, PT_EVALUATE_VARIABLE, PT_EXP, PT_FIELD, PT_FINDINSET, PT_FORMAT, PT_FROMDAYS, PT_HEX, PT_HOURF, PT_INET_ATON, PT_INET_NTOA, PT_ISNULL, PT_LAST_DAY, PT_LIKE, PT_LN, PT_LOCATE, PT_LOG, PT_LOG10, PT_LOG2, PT_MAKEDATE, PT_MAKETIME, PT_MINUTEF, PT_MONTHF, PT_MONTHS_BETWEEN, PT_NOT_LIKE, PT_NOT_RLIKE, PT_NOT_RLIKE_BINARY, PT_OCTET_LENGTH, PT_POSITION, PT_POWER, PT_QUARTERF, PT_RADIANS, PT_RAND, PT_RANDOM, PT_RLIKE, PT_RLIKE_BINARY, PT_SCHEMA_DEF, PT_SECONDF, PT_SECTOTIME, PT_SHA_ONE, PT_SHA_TWO, PT_SIGN, PT_SIN, PT_SLEEP, PT_SQRT, PT_STR_TO_DATE, PT_STRCMP, PT_SUBDATE, PT_TAN, PT_TIME_FORMAT, PT_TIMEDIFF, PT_TIMEF, PT_TIMESTAMP, PT_TIMETOSEC, PT_TO_CHAR, PT_TO_DATE, PT_TO_DATETIME, PT_TO_DATETIME_TZ, PT_TO_ENUMERATION_VALUE, PT_TO_NUMBER, PT_TO_TIME, PT_TO_TIMESTAMP, PT_TO_TIMESTAMP_TZ, PT_TODAYS, PT_TYPEOF, PT_UNIX_TIMESTAMP, PT_WEEKDAY, PT_WEEKF, PT_WIDTH_BUCKET, and PT_YEARF.

Referenced by pt_eval_expr_type().

Here is the caller graph for this function:

static bool pt_is_collection_of_type ( const PT_NODE collection,
const PT_TYPE_ENUM  collection_type,
const PT_TYPE_ENUM  element_type 
)
static
static bool pt_is_const_foldable_width_bucket ( PARSER_CONTEXT parser,
PT_NODE expr 
)
static
static bool pt_is_explicit_coerce_allowed_for_default_value ( PARSER_CONTEXT parser,
PT_TYPE_ENUM  data_type,
PT_TYPE_ENUM  desired_type 
)
static

Definition at line 20292 of file type_checking.c.

References PT_IS_NUMERIC_TYPE, and PT_IS_STRING_TYPE.

Referenced by pt_coerce_value_for_default_value().

Here is the caller graph for this function:

bool pt_is_op_with_forced_common_type ( PT_OP_TYPE  op)
static

Definition at line 21429 of file type_checking.c.

References PT_BETWEEN, PT_COALESCE, PT_GREATEST, PT_IFNULL, PT_LEAST, PT_NULLIF, PT_NVL, and PT_NVL2.

Referenced by pt_expr_get_return_type(), and pt_upd_domain_info().

Here is the caller graph for this function:

static bool pt_is_range_expression ( const PT_OP_TYPE  op)
static

Definition at line 5866 of file type_checking.c.

References PT_EQ_ALL, PT_EQ_SOME, PT_GE_ALL, PT_GE_SOME, PT_GT_ALL, PT_GT_SOME, PT_IS_IN, PT_IS_NOT_IN, PT_LE_ALL, PT_LE_SOME, PT_LT_ALL, PT_LT_SOME, PT_NE_ALL, and PT_NE_SOME.

Referenced by pt_apply_expressions_definition().

Here is the caller graph for this function:

static bool pt_is_range_or_comp ( PT_OP_TYPE  op)
static
bool pt_is_symmetric_op ( const PT_OP_TYPE  op)

Definition at line 6348 of file type_checking.c.

References PT_ABS, PT_ADD_MONTHS, PT_ADDDATE, PT_ADDTIME, PT_AES_DECRYPT, PT_AES_ENCRYPT, PT_ASSIGN, PT_ATAN2, PT_BETWEEN_EQ_NA, PT_BETWEEN_GE_INF, PT_BETWEEN_GT_INF, PT_BETWEEN_INF_LE, PT_BETWEEN_INF_LT, PT_BIN, PT_BIT_LENGTH, PT_BIT_TO_BLOB, PT_BLOB_FROM_FILE, PT_BLOB_LENGTH, PT_BLOB_TO_BIT, PT_CASE, PT_CAST, PT_CHAR_LENGTH, PT_CHAR_TO_BLOB, PT_CHAR_TO_CLOB, PT_CHARSET, PT_CHR, PT_CLOB_FROM_FILE, PT_CLOB_LENGTH, PT_CLOB_TO_CHAR, PT_COALESCE, PT_COERCIBILITY, PT_COLLATION, PT_CONCAT, PT_CONCAT_WS, PT_CONNECT_BY_ISCYCLE, PT_CONNECT_BY_ISLEAF, PT_CONNECT_BY_ROOT, PT_CONV, PT_CONV_TZ, PT_CRC32, PT_CURRENT_DATE, PT_CURRENT_DATETIME, PT_CURRENT_TIME, PT_CURRENT_TIMESTAMP, PT_CURRENT_USER, PT_CURRENT_VALUE, PT_DATABASE, PT_DATE_ADD, PT_DATE_FORMAT, PT_DATE_SUB, PT_DAYF, PT_DAYOFMONTH, PT_DAYOFWEEK, PT_DAYOFYEAR, PT_DBTIMEZONE, PT_DECODE, PT_DECR, PT_DEFINE_VARIABLE, PT_DISK_SIZE, PT_DRAND, PT_DRANDOM, PT_EQ_ALL, PT_EQ_SOME, PT_EVALUATE_VARIABLE, PT_EXEC_STATS, PT_EXTRACT, PT_FIELD, PT_FINDINSET, PT_FORMAT, PT_FROM_TZ, PT_FROM_UNIXTIME, PT_FROMDAYS, PT_FUNCTION_HOLDER, PT_GE_ALL, PT_GE_SOME, PT_GT_ALL, PT_GT_INF, PT_GT_SOME, PT_HOURF, PT_IF, PT_IFNULL, PT_INCR, PT_INDEX_CARDINALITY, PT_INDEX_PREFIX, PT_INST_NUM, PT_INSTR, PT_IS, PT_IS_IN, PT_IS_NOT, PT_IS_NOT_IN, PT_IS_NOT_NULL, PT_IS_NULL, PT_LAST_DAY, PT_LAST_INSERT_ID, PT_LE_ALL, PT_LE_SOME, PT_LEFT, PT_LEVEL, PT_LIKE_ESCAPE, PT_LIKE_LOWER_BOUND, PT_LIKE_UPPER_BOUND, PT_LIST_DBS, PT_LOCAL_TRANSACTION_ID, PT_LOCATE, PT_LPAD, PT_LT_ALL, PT_LT_INF, PT_LT_SOME, PT_LTRIM, PT_MAKEDATE, PT_MAKETIME, PT_MID, PT_MINUTEF, PT_MONTHF, PT_MONTHS_BETWEEN, PT_NE_ALL, PT_NE_SOME, PT_NEW_TIME, PT_NEXT_VALUE, PT_NOT_RLIKE, PT_NOT_RLIKE_BINARY, PT_NVL, PT_NVL2, PT_OCTET_LENGTH, PT_ORDERBY_NUM, PT_PI, PT_POSITION, PT_POWER, PT_QPRIOR, PT_QUARTERF, PT_RAND, PT_RANDOM, PT_REPEAT, PT_REPLACE, PT_REVERSE, PT_RIGHT, PT_RLIKE, PT_RLIKE_BINARY, PT_ROUND, PT_ROW_COUNT, PT_ROWNUM, PT_RPAD, PT_RTRIM, PT_SCHEMA, PT_SCHEMA_DEF, PT_SECONDF, PT_SECTOTIME, PT_SESSIONTIMEZONE, PT_SHA_ONE, PT_SHA_TWO, PT_SLEEP, PT_STR_TO_DATE, PT_SUBDATE, PT_SUBSTRING, PT_SUBSTRING_INDEX, PT_SYS_CONNECT_BY_PATH, PT_SYS_DATE, PT_SYS_DATETIME, PT_SYS_GUID, PT_SYS_TIME, PT_SYS_TIMESTAMP, PT_TIME_FORMAT, PT_TIMEF, PT_TIMESTAMP, PT_TIMETOSEC, PT_TO_CHAR, PT_TO_DATE, PT_TO_DATETIME, PT_TO_DATETIME_TZ, PT_TO_ENUMERATION_VALUE, PT_TO_NUMBER, PT_TO_TIME, PT_TO_TIMESTAMP, PT_TO_TIMESTAMP_TZ, PT_TODAYS, PT_TRACE_STATS, PT_TRANSLATE, PT_TRIM, PT_TRUNC, PT_TYPEOF, PT_TZ_OFFSET, PT_UNIX_TIMESTAMP, PT_USER, PT_UTC_DATE, PT_UTC_TIME, PT_UTC_TIMESTAMP, PT_VERSION, PT_WEEKDAY, PT_WEEKF, PT_WIDTH_BUCKET, and PT_YEARF.

Referenced by pt_coerce_expr_arguments(), pt_coerce_expression_argument(), pt_eval_expr_type(), pt_expr_get_return_type(), pt_infer_common_type(), and qo_reduce_equality_terms().

Here is the caller graph for this function:

static int pt_product_sets ( PARSER_CONTEXT parser,
TP_DOMAIN domain,
DB_VALUE set1,
DB_VALUE set2,
DB_VALUE result,
PT_NODE o2 
)
static

Definition at line 6665 of file type_checking.c.

References assert, db_error_string(), db_get_set(), error(), NULL, PT_ERRORc, pt_has_error, set_intersection(), and set_make_collection().

Referenced by pt_evaluate_db_value_expr().

Here is the caller graph for this function:

static PT_NODE * pt_propagate_types ( PARSER_CONTEXT parser,
PT_NODE expr,
PT_NODE otype1,
PT_NODE otype2 
)
static

Definition at line 6560 of file type_checking.c.

References assert, parser_node::data_type, NULL, parser_append_node(), parser_copy_tree_list(), and parser_free_tree().

Referenced by pt_coerce_expr_arguments(), and pt_eval_expr_type().

Here is the caller graph for this function:

void pt_set_expected_domain ( PT_NODE node,
TP_DOMAIN domain 
)

Definition at line 8502 of file type_checking.c.

References parser_node::expected_domain, NULL, parser_node::or_next, PT_TYPE_MAYBE, and parser_node::type_enum.

Referenced by pt_assignment_compatible().

Here is the caller graph for this function:

static PT_NODE * pt_to_false_subquery ( PARSER_CONTEXT parser,
PT_NODE node 
)
static
PT_TYPE_ENUM pt_to_variable_size_type ( PT_TYPE_ENUM  type_enum)

Definition at line 24915 of file type_checking.c.

References PT_TYPE_BIT, PT_TYPE_CHAR, PT_TYPE_NCHAR, PT_TYPE_VARBIT, PT_TYPE_VARCHAR, and PT_TYPE_VARNCHAR.

Referenced by pt_eval_expr_type(), and func_type::Node::set_return_type().

Here is the caller graph for this function:

static int pt_union_sets ( PARSER_CONTEXT parser,
TP_DOMAIN domain,
DB_VALUE set1,
DB_VALUE set2,
DB_VALUE result,
PT_NODE o2 
)
static

Definition at line 6598 of file type_checking.c.

References assert, db_error_string(), db_get_set(), error(), NULL, PT_ERRORc, pt_has_error, set_make_collection(), and set_union().

Referenced by pt_evaluate_db_value_expr().

Here is the caller graph for this function:

static int pt_upd_domain_info ( PARSER_CONTEXT parser,
PT_NODE arg1,
PT_NODE arg2,
PT_OP_TYPE  op,
PT_TYPE_ENUM  common_type,
PT_NODE node 
)
static

Definition at line 11274 of file type_checking.c.

References assert, pt_data_value::b, pt_data_value::bigint, pt_data_type_info::collation_flag, pt_data_type_info::collation_id, pt_statement_info::data_type, parser_node::data_type, pt_value_info::data_value, DB_DEFAULT_NUMERIC_DIVISION_SCALE, DB_DEFAULT_NUMERIC_PRECISION, DB_DEFAULT_NUMERIC_SCALE, DB_MAX_BIT_PRECISION, DB_MAX_CHAR_PRECISION, DB_MAX_NCHAR_PRECISION, DB_MAX_NUMERIC_PRECISION, DB_MAX_VARBIT_PRECISION, DB_MAX_VARCHAR_PRECISION, DB_MAX_VARNCHAR_PRECISION, pt_data_type_info::dec_precision, ER_OUT_OF_VIRTUAL_MEMORY, F_ELT, F_INSERT_SUBSTRING, F_JSON_ARRAY, F_JSON_ARRAY_APPEND, F_JSON_ARRAY_INSERT, F_JSON_CONTAINS_PATH, F_JSON_EXTRACT, F_JSON_GET_ALL_PATHS, F_JSON_INSERT, F_JSON_KEYS, F_JSON_MERGE, F_JSON_MERGE_PATCH, F_JSON_OBJECT, F_JSON_REMOVE, F_JSON_REPLACE, F_JSON_SEARCH, F_JSON_SET, pt_statement_info::function, pt_function_info::function_type, pt_data_value::i, parser_node::info, LANG_GET_BINARY_COLLATION, LANG_SYS_CODESET, LANG_SYS_COLLATION, NO_ERROR, parser_node::node_type, NULL, parser_copy_tree_list(), parser_new_node(), pt_data_type_info::precision, prm_get_bool_value(), PRM_ID_COMPAT_NUMERIC_DIVISION_SCALE, PT_ABS, PT_ADDDATE, PT_ADDTIME, PT_AES_DECRYPT, PT_AES_ENCRYPT, PT_BIN, PT_BIT_AND, PT_BIT_COUNT, PT_BIT_NOT, PT_BIT_OR, PT_BIT_TO_BLOB, PT_BIT_XOR, PT_BITSHIFT_LEFT, PT_BITSHIFT_RIGHT, PT_BLOB_FROM_FILE, PT_BLOB_LENGTH, PT_BLOB_TO_BIT, PT_CASE, PT_CEIL, PT_CHAR_TO_BLOB, PT_CHAR_TO_CLOB, PT_CHARSET, PT_CHR, PT_CLOB_FROM_FILE, PT_CLOB_LENGTH, PT_CLOB_TO_CHAR, PT_COALESCE, PT_COERCIBILITY, PT_COLLATION, PT_CONCAT, PT_CONCAT_WS, PT_CONNECT_BY_ROOT, PT_CONV, PT_CRC32, PT_CURRENT_USER, PT_DATA_TYPE, PT_DATABASE, PT_DATE_ADD, PT_DATE_FORMAT, PT_DATE_SUB, PT_DATEF, PT_DECODE, PT_DEFAULTF, PT_DISK_SIZE, PT_DIV, PT_DIVIDE, PT_EXEC_STATS, PT_FIELD, PT_FLOOR, PT_FORMAT, PT_FROM_BASE64, PT_FROM_UNIXTIME, PT_FUNCTION_HOLDER, PT_GREATEST, PT_HAS_COLLATION, PT_HEX, PT_IF, PT_IFNULL, PT_INDEX_PREFIX, PT_INET_NTOA, PT_IS_HOSTVAR, pt_is_op_with_forced_common_type(), PT_IS_STRING_TYPE, PT_LAST_INSERT_ID, PT_LEAST, PT_LEFT, PT_LIST_DBS, PT_LOWER, PT_LPAD, PT_LTRIM, pt_make_prim_data_type(), pt_make_prim_data_type_fortonum(), PT_MD5, PT_MID, PT_MINUS, PT_MOD, PT_MODULUS, PT_NODE_IS_SESSION_VARIABLE, PT_NULLIF, PT_NVL, PT_NVL2, PT_PLUS, PT_POWER, PT_PRIOR, PT_QPRIOR, PT_REPEAT, PT_REPLACE, PT_REVERSE, PT_RIGHT, PT_ROUND, PT_RPAD, PT_RTRIM, PT_SCHEMA, PT_SCHEMA_DEF, PT_SHA_ONE, PT_SHA_TWO, PT_SPACE, PT_STRCAT, PT_SUBDATE, PT_SUBSTRING, PT_SUBSTRING_INDEX, PT_SYS_CONNECT_BY_PATH, PT_SYS_GUID, PT_TIME_FORMAT, PT_TIMEF, PT_TIMES, PT_TO_BASE64, PT_TO_CHAR, PT_TO_NUMBER, pt_to_regu_resolve_domain(), PT_TRACE_STATS, PT_TRANSLATE, PT_TRIM, PT_TRUNC, PT_TYPE_BIGINT, PT_TYPE_BIT, PT_TYPE_BLOB, PT_TYPE_CHAR, PT_TYPE_CLOB, PT_TYPE_ENUMERATION, PT_TYPE_INTEGER, PT_TYPE_MAYBE, PT_TYPE_NCHAR, PT_TYPE_NULL, PT_TYPE_NUMERIC, PT_TYPE_SMALLINT, PT_TYPE_VARBIT, PT_TYPE_VARCHAR, PT_TYPE_VARNCHAR, PT_TYPEOF, PT_TZ_OFFSET, PT_UNARY_MINUS, PT_UNIX_TIMESTAMP, PT_UPPER, PT_USER, PT_VALUE, PT_VERSION, TP_BIGINT_PRECISION, TP_DOMAIN_COLL_LEAVE, TP_DOMAIN_COLL_NORMAL, TP_FLOATING_PRECISION_VALUE, TP_INTEGER_PRECISION, TP_SMALLINT_PRECISION, parser_node::type_enum, pt_data_type_info::units, and pt_statement_info::value.

Referenced by pt_apply_expressions_definition(), and pt_eval_expr_type().

Here is the caller graph for this function:

PT_NODE* pt_where_type_keep_true ( PARSER_CONTEXT parser,
PT_NODE where 
)

Variable Documentation