CUBRID Engine  latest
name_resolution.c File Reference
#include "config.h"
#include <assert.h>
#include <unordered_map>
#include "authenticate.h"
#include "porting.h"
#include "error_manager.h"
#include "parser.h"
#include "parser_message.h"
#include "semantic_check.h"
#include "dbtype.h"
#include "object_domain.h"
#include "object_primitive.h"
#include "memory_alloc.h"
#include "intl_support.h"
#include "memory_hash.h"
#include "system_parameter.h"
#include "object_print.h"
#include "jsp_cl.h"
#include "execute_schema.h"
#include "schema_manager.h"
#include "transform.h"
#include "execute_statement.h"
#include "show_meta.h"
#include "network_interface_cl.h"
#include "locator_cl.h"
#include "db_json.hpp"

Go to the source code of this file.

Classes

struct  extra_specs_frame
 
struct  scopes
 
struct  pt_bind_names_arg
 
struct  natural_join_attr_info
 
struct  pt_bind_names_data_type
 

Macros

#define PT_NAMES_HASH_SIZE   50
 

Typedefs

typedef struct extra_specs_frame PT_EXTRA_SPECS_FRAME
 
typedef struct scopes SCOPES
 
typedef struct pt_bind_names_arg PT_BIND_NAMES_ARG
 
typedef struct natural_join_attr_info NATURAL_JOIN_ATTR_INFO
 
typedef struct pt_bind_names_data_type PT_BIND_NAMES_DATA_TYPE
 

Enumerations

enum  { REQUIRE_ALL_MATCH = false, DISCARD_NO_MATCH = true }
 

Functions

static PT_NODEpt_bind_parameter (PARSER_CONTEXT *parser, PT_NODE *parameter)
 
static PT_NODEpt_bind_parameter_path (PARSER_CONTEXT *parser, PT_NODE *path)
 
static PT_NODEpt_bind_name_or_path_in_scope (PARSER_CONTEXT *parser, PT_BIND_NAMES_ARG *bind_arg, PT_NODE *in_node)
 
static void pt_bind_type_of_host_var (PARSER_CONTEXT *parser, PT_NODE *hv)
 
static void pt_bind_spec_attrs (PARSER_CONTEXT *parser, PT_NODE *spec)
 
static void pt_bind_scope (PARSER_CONTEXT *parser, PT_BIND_NAMES_ARG *bind_arg)
 
static FUNC_TYPE pt_find_function_type (const char *name)
 
static PT_NODEpt_mark_location (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_bind_names_post (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_check_Oracle_outerjoin (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_clear_Oracle_outerjoin_spec_id (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_bind_names (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_bind_value_to_hostvar_local (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static int pt_find_attr_in_class_list (PARSER_CONTEXT *parser, PT_NODE *flat, PT_NODE *attr)
 
static int pt_find_class_attribute (PARSER_CONTEXT *parser, PT_NODE *cls, PT_NODE *attr)
 
static int pt_find_name_in_spec (PARSER_CONTEXT *parser, PT_NODE *spec, PT_NODE *name)
 
static int pt_check_unique_exposed (PARSER_CONTEXT *parser, const PT_NODE *p)
 
static PT_NODEpt_common_attribute (PARSER_CONTEXT *parser, PT_NODE *p, PT_NODE *q)
 
static PT_NODEpt_get_all_attributes_and_types (PARSER_CONTEXT *parser, PT_NODE *cls, PT_NODE *from)
 
static PT_NODEpt_get_all_json_table_attributes_and_types (PARSER_CONTEXT *parser, PT_NODE *json_table_node, const char *json_table_alias)
 
static PT_NODEpt_json_table_gather_attribs (PARSER_CONTEXT *parser, PT_NODE *json_table_node, void *args, int *continue_walk)
 
static PT_NODEpt_get_all_showstmt_attributes_and_types (PARSER_CONTEXT *parser, PT_NODE *derived_table)
 
static void pt_get_attr_data_type (PARSER_CONTEXT *parser, DB_ATTRIBUTE *att, PT_NODE *attr)
 
static PT_NODEpt_unwhacked_spec (PARSER_CONTEXT *parser, PT_NODE *scope, PT_NODE *spec)
 
static PT_NODEpt_resolve_correlation (PARSER_CONTEXT *parser, PT_NODE *in_node, PT_NODE *scope, PT_NODE *exposed_spec, int col_name, PT_NODE **p_entity)
 
static PT_NODEpt_resolve_partition_spec (PARSER_CONTEXT *parser, PT_NODE *partition_spec, PT_NODE *spec_parent, bool fo_update)
 
static int pt_spec_in_domain (PT_NODE *cls, PT_NODE *lst)
 
static PT_NODEpt_get_resolution (PARSER_CONTEXT *parser, PT_BIND_NAMES_ARG *bind_arg, PT_NODE *scope, PT_NODE *in_node, PT_NODE **p_entity, int col_name)
 
static PT_NODEpt_expand_external_path (PARSER_CONTEXT *parser, PT_NODE *in_node, PT_NODE **p_entity)
 
static PT_NODEpt_is_correlation_name (PARSER_CONTEXT *parser, PT_NODE *scope, PT_NODE *nam)
 
static PT_NODEpt_find_path_entity (PARSER_CONTEXT *parser, PT_NODE *scope, PT_NODE *match)
 
static PT_NODEpt_is_on_list (PARSER_CONTEXT *parser, const PT_NODE *p, const PT_NODE *list)
 
static PT_NODEpt_name_list_union (PARSER_CONTEXT *parser, PT_NODE *list, PT_NODE *additions)
 
static PT_NODEpt_name_list_diff (PARSER_CONTEXT *parser, PT_NODE *list, PT_NODE *deletions)
 
static PT_NODEpt_make_subclass_list (PARSER_CONTEXT *parser, DB_OBJECT *db, int line_num, int col_num, UINTPTR id, PT_MISC_TYPE meta_class, MHT_TABLE *names_mht)
 
static PT_NODEpt_make_flat_name_list (PARSER_CONTEXT *parser, PT_NODE *spec, PT_NODE *spec_parent, bool for_update)
 
static int pt_must_have_exposed_name (PARSER_CONTEXT *parser, PT_NODE *p)
 
static PT_NODEpt_object_to_data_type (PARSER_CONTEXT *parser, PT_NODE *class_list)
 
static int pt_resolve_hint_args (PARSER_CONTEXT *parser, PT_NODE **arg_list, PT_NODE *spec_list, bool discard_no_match)
 
static int pt_resolve_hint (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEpt_copy_data_type_entity (PARSER_CONTEXT *parser, PT_NODE *data_type)
 
static PT_NODEpt_insert_conjunct (PARSER_CONTEXT *parser, PT_NODE *path_dot, PT_NODE *prev_entity)
 
static PT_NODEpt_lookup_entity (PARSER_CONTEXT *parser, PT_NODE *path_entities, PT_NODE *expr)
 
static bool pt_resolve_method_type (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEpt_make_method_call (PARSER_CONTEXT *parser, PT_NODE *node, PT_BIND_NAMES_ARG *bind_arg)
 
static PT_NODEpt_find_entity_in_scopes (PARSER_CONTEXT *parser, SCOPES *scopes, UINTPTR spec_id)
 
static PT_NODEpt_find_outer_entity_in_scopes (PARSER_CONTEXT *parser, SCOPES *scopes, UINTPTR spec_id, short *scope_location)
 
static PT_NODEpt_make_flat_list_from_data_types (PARSER_CONTEXT *parser, PT_NODE *res_list, PT_NODE *entity)
 
static PT_NODEpt_undef_names_pre (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_undef_names_post (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static void fill_in_insert_default_function_arguments (PARSER_CONTEXT *parser, PT_NODE *const node)
 
static PT_NODEpt_resolve_vclass_args (PARSER_CONTEXT *parser, PT_NODE *statement)
 
static int pt_function_name_is_spec_attr (PARSER_CONTEXT *parser, PT_NODE *name, PT_BIND_NAMES_ARG *bind_arg, int *is_spec_attr)
 
static void pt_mark_function_index_expression (PARSER_CONTEXT *parser, PT_NODE *expr, PT_BIND_NAMES_ARG *bind_arg)
 
static void pt_bind_names_merge_insert (PARSER_CONTEXT *parser, PT_NODE *node, PT_BIND_NAMES_ARG *bind_arg, SCOPES *scopestack, PT_EXTRA_SPECS_FRAME *specs_frame)
 
static void pt_bind_names_merge_update (PARSER_CONTEXT *parser, PT_NODE *node, PT_BIND_NAMES_ARG *bind_arg, SCOPES *scopestack, PT_EXTRA_SPECS_FRAME *specs_frame)
 
static const char * pt_get_unique_exposed_name (PARSER_CONTEXT *parser, PT_NODE *first_spec)
 
static PT_NODEpt_bind_name_to_spec (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_resolve_natural_join (PARSER_CONTEXT *parser, PT_NODE *node, void *chk_parent, int *continue_walk)
 
static void pt_resolve_natural_join_internal (PARSER_CONTEXT *parser, PT_NODE *join_lhs, PT_NODE *join_rhs)
 
static PT_NODEpt_create_pt_expr_and_node (PARSER_CONTEXT *parser, PT_NODE *arg1, PT_NODE *arg2)
 
static PT_NODEpt_create_pt_name (PARSER_CONTEXT *parser, PT_NODE *spec, NATURAL_JOIN_ATTR_INFO *attr)
 
static PT_NODEpt_create_pt_expr_equal_node (PARSER_CONTEXT *parser, PT_NODE *arg1, PT_NODE *arg2)
 
static NATURAL_JOIN_ATTR_INFOget_natural_join_attrs_from_pt_spec (PARSER_CONTEXT *parser, PT_NODE *node)
 
static bool natural_join_equal_attr (NATURAL_JOIN_ATTR_INFO *lhs, NATURAL_JOIN_ATTR_INFO *rhs)
 
static void free_natural_join_attrs (NATURAL_JOIN_ATTR_INFO *attrs)
 
static int generate_natural_join_attrs_from_subquery (PT_NODE *subquery_attrs_list, NATURAL_JOIN_ATTR_INFO **attrs_p)
 
static int generate_natural_join_attrs_from_db_attrs (DB_ATTRIBUTE *db_attrs, NATURAL_JOIN_ATTR_INFO **attrs_p)
 
static bool is_pt_name_in_group_having (PT_NODE *node)
 
static PT_NODEpt_mark_pt_name (PARSER_CONTEXT *parser, PT_NODE *node, void *chk_parent, int *continue_walk)
 
static PT_NODEpt_mark_group_having_pt_name (PARSER_CONTEXT *parser, PT_NODE *node, void *chk_parent, int *continue_walk)
 
static void pt_resolve_group_having_alias_pt_sort_spec (PARSER_CONTEXT *parser, PT_NODE *node, PT_NODE *select_list)
 
static void pt_resolve_group_having_alias_pt_name (PARSER_CONTEXT *parser, PT_NODE **node_p, PT_NODE *select_list)
 
static void pt_resolve_group_having_alias_pt_expr (PARSER_CONTEXT *parser, PT_NODE *node, PT_NODE *select_list)
 
static void pt_resolve_group_having_alias_internal (PARSER_CONTEXT *parser, PT_NODE **node_p, PT_NODE *select_list)
 
static PT_NODEpt_resolve_group_having_alias (PARSER_CONTEXT *parser, PT_NODE *node, void *chk_parent, int *continue_walk)
 
static PT_NODEpt_resolve_spec_to_cte (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_count_ctes_post (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_resolve_star_reserved_names (PARSER_CONTEXT *parser, PT_NODE *from)
 
static PT_NODEpt_bind_reserved_name (PARSER_CONTEXT *parser, PT_NODE *in_node, PT_NODE *spec)
 
static PT_NODEpt_set_reserved_name_key_type (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static void pt_bind_names_in_with_clause (PARSER_CONTEXT *parser, PT_NODE *node, PT_BIND_NAMES_ARG *bind_arg)
 
static void pt_bind_names_in_cte (PARSER_CONTEXT *parser, PT_NODE *node, PT_BIND_NAMES_ARG *bind_arg)
 
static PT_NODEpt_bind_cte_self_references_types (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEpt_get_attr_list_of_derived_table (PARSER_CONTEXT *parser, PT_MISC_TYPE derived_table_type, PT_NODE *derived_table, PT_NODE *derived_name)
 
static void pt_set_attr_list_types (PARSER_CONTEXT *parser, PT_NODE *as_attr_list, PT_MISC_TYPE derived_table_type, PT_NODE *derived_table, PT_NODE *parent_spec)
 
static PT_NODEpt_count_with_clauses (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
int pt_resolved (const PT_NODE *expr)
 
PT_NODEpt_eval_value_path (PARSER_CONTEXT *parser, PT_NODE *path)
 
PT_NODEpt_bind_param_node (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
PT_NODEpt_set_is_view_spec (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
void pt_set_fill_default_in_path_expression (PT_NODE *node)
 
PT_NODEpt_bind_values_to_hostvars (PARSER_CONTEXT *parser, PT_NODE *node)
 
int pt_resolve_default_value (PARSER_CONTEXT *parser, PT_NODE *name)
 
int pt_check_same_datatype (const PARSER_CONTEXT *parser, const PT_NODE *p, const PT_NODE *q)
 
int pt_check_unique_names (PARSER_CONTEXT *parser, const PT_NODE *p)
 
PT_NODEpt_add_class_to_entity_list (PARSER_CONTEXT *parser, DB_OBJECT *class_, PT_NODE *entity, const PT_NODE *parent, UINTPTR id, PT_MISC_TYPE meta_class)
 
PT_NODEpt_domain_to_data_type (PARSER_CONTEXT *parser, DB_DOMAIN *domain)
 
PT_NODEpt_flat_spec_pre (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
PT_NODEpt_find_entity (PARSER_CONTEXT *parser, const PT_NODE *scope, UINTPTR id)
 
PT_NODEpt_resolve_star (PARSER_CONTEXT *parser, PT_NODE *from, PT_NODE *attr)
 
PT_NODEpt_resolve_using_index (PARSER_CONTEXT *parser, PT_NODE *index, PT_NODE *from)
 
int pt_str_compare (const char *p, const char *q, CASE_SENSITIVENESS case_flag)
 
int pt_quick_resolve_names (PARSER_CONTEXT *parser, PT_NODE **spec_p, PT_NODE **node_p, SEMANTIC_CHK_INFO *sc_info)
 
PT_NODEpt_resolve_names (PARSER_CONTEXT *parser, PT_NODE *statement, SEMANTIC_CHK_INFO *sc_info)
 
static PT_NODEpt_resolve_spec_to_cte_and_count (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
PT_NODEpt_resolve_cte_specs (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
PT_NODEpt_insert_entity (PARSER_CONTEXT *parser, PT_NODE *path, PT_NODE *prev_entity, PT_NODE *correlation_entity)
 
void pt_resolve_object (PARSER_CONTEXT *parser, PT_NODE *node)
 
PT_OP_TYPE pt_op_type_from_default_expr_type (DB_DEFAULT_EXPR_TYPE expr_type)
 
DB_OBJECTpt_resolve_serial (PARSER_CONTEXT *parser, PT_NODE *serial_name_node)
 

Variables

int parser_function_code
 
size_t json_table_column_count
 
static const char * CPTR_PT_NAME_IN_GROUP_HAVING = "name_in_group_having"
 

Macro Definition Documentation

#define PT_NAMES_HASH_SIZE   50

Definition at line 62 of file name_resolution.c.

Referenced by pt_make_subclass_list().

Typedef Documentation

Definition at line 89 of file name_resolution.c.

Definition at line 81 of file name_resolution.c.

Definition at line 106 of file name_resolution.c.

Definition at line 64 of file name_resolution.c.

typedef struct scopes SCOPES

Definition at line 71 of file name_resolution.c.

Enumeration Type Documentation

anonymous enum
Enumerator
REQUIRE_ALL_MATCH 
DISCARD_NO_MATCH 

Definition at line 98 of file name_resolution.c.

Function Documentation

static void free_natural_join_attrs ( NATURAL_JOIN_ATTR_INFO attrs)
static

Definition at line 7230 of file name_resolution.c.

References natural_join_attr_info::next, and NULL.

Referenced by generate_natural_join_attrs_from_db_attrs(), generate_natural_join_attrs_from_subquery(), and pt_resolve_natural_join_internal().

Here is the caller graph for this function:

static bool is_pt_name_in_group_having ( PT_NODE node)
static

Definition at line 7719 of file name_resolution.c.

References CPTR_PT_NAME_IN_GROUP_HAVING, parser_node::etc, intl_identifier_casecmp(), parser_node::node_type, NULL, and PT_NAME.

Referenced by pt_bind_name_or_path_in_scope().

Here is the caller graph for this function:

static bool natural_join_equal_attr ( NATURAL_JOIN_ATTR_INFO lhs,
NATURAL_JOIN_ATTR_INFO rhs 
)
static

Definition at line 7201 of file name_resolution.c.

References assert, intl_identifier_casecmp(), natural_join_attr_info::name, and NULL.

Referenced by pt_resolve_natural_join_internal().

Here is the caller graph for this function:

PT_NODE* pt_add_class_to_entity_list ( PARSER_CONTEXT parser,
DB_OBJECT class_,
PT_NODE entity,
const PT_NODE parent,
UINTPTR  id,
PT_MISC_TYPE  meta_class 
)

Definition at line 3954 of file name_resolution.c.

References parser_node::column_number, parser_node::line_number, NULL, pt_make_subclass_list(), and pt_name_list_union().

Referenced by pt_add_type_to_set(), and pt_domain_to_data_type().

Here is the caller graph for this function:

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

Definition at line 9857 of file name_resolution.c.

References parser_node::node_type, NULL, pt_bind_spec_attrs(), PT_LIST_WALK, PT_SPEC, and PT_SPEC_IS_CTE.

Referenced by pt_bind_names_in_cte().

Here is the caller graph for this function:

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

Definition at line 1638 of file name_resolution.c.

References pt_statement_info::alter, pt_dot_info::arg1, pt_expr_info::arg1, pt_union_info::arg1, pt_dot_info::arg2, pt_expr_info::arg2, pt_union_info::arg2, pt_function_info::arg_list, pt_method_call_info::arg_list, assert, pt_merge_info::assignment, pt_insert_info::attr_list, pt_merge_info::attr_list, pt_method_call_info::call_or_expr, CASE_INSENSITIVE, pt_delete_info::class_specs, pt_insert_info::class_specs, pt_update_info::class_specs, scopes::correlation_level, pt_query_info::correlation_level, pt_alter_info::create_index, pt_name_info::custom_print, parser_context::custom_print, parser_node::data_type, pt_value_info::data_value, db_is_system_class(), pt_name_info::db_object, pt_statement_info::delete_, pt_statement_info::dot, pt_spec_info::entity_name, parser_node::etc, EXCLUDE_HIDDEN_COLUMNS, pt_statement_info::expr, extra_specs_frame::extra_specs, F_TOP_TABLE_FUNC, fill_in_insert_default_function_arguments(), pt_spec_info::flag, pt_spec_info::flat_entity_list, pt_scope_info::from, pt_select_info::from, pt_statement_info::function, pt_function_info::function_type, pt_function_info::generic_name, pt_select_info::hint, i, pt_spec_info::id, pt_statement_info::index, pt_index_info::indexed_class, parser_node::info, pt_merge_info::insert, pt_statement_info::insert, pt_merge_info::into, pt_spec_info::join_type, jsp_is_exist_stored_procedure(), pt_node_list_info::list, pt_select_info::list, scopes::location, pt_spec_info::location, pt_name_info::location, pt_statement_info::merge, pt_name_info::meta_class, pt_statement_info::method_call, pt_method_call_info::method_name, MSGCAT_SEMANTIC_INVALID_INTERNAL_FUNCTION, MSGCAT_SEMANTIC_IS_NOT_DEFINED, MSGCAT_SEMANTIC_METH_DOESNT_EXIST, MSGCAT_SEMANTIC_NO_ATTRIBUTES_IN_CLS, MSGCAT_SEMANTIC_NOT_ATTRIBUTE_OF, MSGCAT_SEMANTIC_OUTERJOIN_JOIN_COND_SUBQ, MSGCAT_SEMANTIC_OUTERJOIN_PATH_EXPR, MSGCAT_SEMANTIC_PREFIX_IN_FUNC_INDX_NOT_ALLOWED, MSGCAT_SEMANTIC_UNKNOWN_FUNCTION, MSGCAT_SEMANTIC_WANT_SINGLE_TABLE_IN, MSGCAT_SET_PARSER_SEMANTIC, pt_statement_info::name, extra_specs_frame::next, scopes::next, parser_node::next, NO_ERROR, pt_statement_info::node_list, parser_node::node_type, NULL, pt_insert_info::odku_assignments, pt_method_call_info::on_call_target, pt_spec_info::on_cond, pt_expr_info::op, semantic_chk_info::Oracle_outerjoin_attr_num, semantic_chk_info::Oracle_outerjoin_path_num, semantic_chk_info::Oracle_outerjoin_spec, semantic_chk_info::Oracle_outerjoin_subq_num, pt_query_info::order_by, pt_name_info::original, parser_append_node(), parser_copy_tree_list(), parser_free_node(), parser_free_tree(), parser_function_code, parser_walk_leaves(), parser_walk_tree(), prm_get_bool_value(), PRM_ID_ORACLE_STYLE_OUTERJOIN, PT_ALTER, PT_ALTER_INDEX, pt_bind_name_or_path_in_scope(), pt_bind_names_in_cte(), pt_bind_names_in_with_clause(), pt_bind_names_merge_insert(), pt_bind_names_merge_update(), pt_bind_names_post(), pt_bind_scope(), pt_bind_type_of_host_var(), pt_check_Oracle_outerjoin(), pt_clear_Oracle_outerjoin_spec_id(), pt_cnf(), PT_CONTINUE_WALK, pt_continue_walk(), PT_CREATE_INDEX, PT_CTE, PT_CURRENT_VALUE, PT_DATA_TYPE, PT_DELETE, PT_DIFFERENCE, PT_DOT_, PT_DROP_INDEX, PT_EMPTY, PT_ERROR, PT_ERRORf, PT_ERRORm, PT_ERRORmf, PT_ERRORmf2, PT_EXPR, PT_EXPR_INFO_IS_FLAGED, PT_EXPR_INFO_LEFT_OUTER, PT_EXPR_INFO_RIGHT_OUTER, pt_find_entity_in_scopes(), pt_find_function_type(), PT_FUNCTION, pt_function_name_is_spec_attr(), PT_GENERIC, pt_has_error, PT_HINT_SELECT_BTREE_NODE_INFO, PT_HINT_SELECT_KEY_INFO, PT_HINT_SELECT_PAGE_INFO, PT_HINT_SELECT_RECORD_INFO, PT_HOST_VAR, PT_IDX_HINT_FORCE, PT_INDEX_NAME, PT_INSERT, PT_INTERNAL_ERROR, PT_INTERSECTION, pt_is_attr(), PT_IS_CALL_STMT, pt_is_const, PT_IS_NAME_NODE, PT_IS_SELECT, PT_JOIN_INNER, PT_JOIN_LEFT_OUTER, PT_JOIN_NONE, PT_JOIN_RIGHT_OUTER, pt_length_of_select_list(), PT_LIST_WALK, pt_make_method_call(), pt_mark_location(), PT_MERGE, PT_METHOD, PT_METHOD_CALL, PT_NAME, PT_NEXT_VALUE, pt_no_double_insert_assignments(), PT_NODE_INIT_OUTERLINK, PT_PARAMETER, pt_resolve_hint(), pt_resolve_method_type(), pt_resolve_star(), pt_resolve_vclass_args(), PT_SCOPE, PT_SELECT, PT_SELECT_INFO_ANSI_JOIN, PT_SELECT_INFO_IS_FLAGED, PT_SELECT_INFO_ORACLE_OUTER, pt_short_print(), PT_SPEC, PT_SPEC_FLAG_BTREE_NODE_INFO_SCAN, PT_SPEC_FLAG_KEY_INFO_SCAN, PT_SPEC_FLAG_PAGE_INFO_SCAN, PT_SPEC_FLAG_RECORD_INFO_SCAN, PT_SPEC_IS_CTE, PT_SPEC_IS_DERIVED, PT_SPEC_IS_ENTITY, PT_STOP_WALK, pt_str_compare(), PT_SUPPRESS_RESOLVED, pt_type_generic_func(), PT_TYPE_MAYBE, PT_TYPE_OBJECT, PT_TYPE_SEQUENCE, PT_TYPE_STAR, pt_undef_names_post(), pt_undef_names_pre(), PT_UNION, PT_UPDATE, PT_VALUE, PT_WITH_CLAUSE, pt_query_info::q, pt_statement_info::query, pt_name_info::resolved, pt_bind_names_arg::sc_info, pt_statement_info::scope, pt_bind_names_arg::scopes, pt_query_info::select, pt_data_value::set, pt_delete_info::spec, pt_insert_info::spec, pt_update_info::spec, pt_statement_info::spec, pt_bind_names_arg::spec_frames, pt_name_info::spec_id, scopes::specs, semantic_chk_info::system_class, semantic_chk_info::top_node, parser_node::type_enum, pt_query_info::union_, pt_merge_info::update, pt_statement_info::update, pt_merge_info::using_clause, pt_select_info::using_index, pt_statement_info::value, pt_insert_info::value_clauses, pt_merge_info::value_clauses, and pt_select_info::where.

Referenced by pt_bind_names_in_cte(), pt_bind_names_merge_insert(), pt_bind_names_merge_update(), pt_bind_scope(), pt_get_resolution(), pt_make_method_call(), pt_quick_resolve_names(), and pt_resolve_names().

Here is the caller graph for this function:

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

Definition at line 1131 of file name_resolution.c.

References pt_expr_info::arg1, pt_function_info::arg_list, assert, pt_update_info::assignment, pt_merge_info::assignment, au_fetch_class_force(), AU_FETCH_READ, btree_get_index_key_type(), classobj_find_class_index(), pt_bind_names_data_type::data_type, pt_value_info::data_value, pt_name_info::db_object, pt_spec_info::entity_name, error(), pt_statement_info::expr, F_MULTISET, F_SEQUENCE, F_SET, pt_select_info::from, pt_statement_info::function, pt_function_info::function_type, sm_class_constraint::index_btid, parser_node::info, pt_merge_info::into, pt_statement_info::merge, pt_name_info::meta_class, MSGCAT_SEMANTIC_IS_NOT_DEFINED, MSGCAT_SEMANTIC_OUT_OF_MEMORY, MSGCAT_SET_PARSER_SEMANTIC, pt_statement_info::name, parser_node::next, NO_ERROR, parser_node::node_type, NULL, pt_name_info::original, parser_free_tree(), parser_walk_tree(), PT_CONTINUE_WALK, pt_db_to_type_enum(), pt_domain_to_data_type(), PT_ERRORm, PT_ERRORmf, PT_EXPR, pt_find_name_in_spec(), PT_FUNCTION, pt_instnum_compatibility(), PT_INTERNAL_ERROR, PT_IS_N_COLUMN_UPDATE_EXPR, pt_is_set_type, pt_mark_function_index_expression(), PT_MERGE, PT_NAME, PT_OID_ATTR, PT_SELECT, pt_semantic_type(), pt_set_reserved_name_key_type(), pt_short_print(), PT_SPEC_SPECIAL_INDEX_SCAN, PT_TYPE_MULTISET, PT_TYPE_NONE, PT_TYPE_SEQUENCE, PT_TYPE_SET, PT_TYPE_STAR, PT_UPDATE, PT_VALUE, pt_value_to_db(), pt_query_info::q, pt_statement_info::query, pt_name_info::resolved, pt_bind_names_arg::sc_info, pt_query_info::select, pt_data_value::set, pt_update_info::spec, pt_statement_info::spec, pt_name_info::spec_id, TP_DOMAIN_TYPE, pt_bind_names_data_type::type_enum, parser_node::type_enum, pt_merge_info::update, pt_statement_info::update, pt_merge_info::using_clause, pt_select_info::using_index, and pt_statement_info::value.

Referenced by pt_bind_names(), pt_bind_names_in_cte(), pt_bind_names_merge_insert(), pt_bind_names_merge_update(), pt_bind_scope(), pt_get_resolution(), pt_make_method_call(), pt_quick_resolve_names(), and pt_resolve_names().

Here is the caller graph for this function:

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

Definition at line 419 of file name_resolution.c.

References parser_node::info, pt_name_info::meta_class, pt_statement_info::name, parser_node::node_type, NULL, pt_bind_parameter(), PT_NAME, and PT_PARAMETER.

Referenced by do_check_internal_statements().

Here is the caller graph for this function:

static void pt_bind_type_of_host_var ( PARSER_CONTEXT parser,
PT_NODE hv 
)
static

Definition at line 842 of file name_resolution.c.

References NULL, pt_bind_type_from_dbval(), and pt_host_var_db_value().

Referenced by pt_bind_names().

Here is the caller graph for this function:

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

Definition at line 3238 of file name_resolution.c.

References NULL, parser_walk_tree(), pt_bind_value_to_hostvar_local(), and pt_has_error.

Referenced by db_execute_and_keep_statement_local().

Here is the caller graph for this function:

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

Definition at line 1420 of file name_resolution.c.

References parser_node::info, pt_statement_info::name, parser_node::node_type, PT_NAME, PT_STOP_WALK, pt_bind_names_arg::sc_info, and pt_name_info::spec_id.

Referenced by pt_bind_names().

Here is the caller graph for this function:

static PT_NODE * pt_common_attribute ( PARSER_CONTEXT parser,
PT_NODE p,
PT_NODE q 
)
static

Definition at line 3913 of file name_resolution.c.

References parser_node::next, NULL, parser_append_node(), pt_check_same_datatype(), and pt_is_on_list().

Referenced by pt_resolve_star().

Here is the caller graph for this function:

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

Definition at line 8227 of file name_resolution.c.

References assert, parser_node::node_type, NULL, pt_node_etc(), pt_null_etc(), PT_SPEC, and PT_SPEC_IS_CTE.

Referenced by pt_resolve_cte_specs().

Here is the caller graph for this function:

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

Definition at line 10136 of file name_resolution.c.

References parser_node::info, parser_node::node_type, NULL, PT_IS_QUERY_NODE_TYPE, pt_statement_info::query, and pt_query_info::with.

Referenced by pt_resolve_cte_specs().

Here is the caller graph for this function:

static PT_NODE * pt_create_pt_expr_and_node ( PARSER_CONTEXT parser,
PT_NODE arg1,
PT_NODE arg2 
)
static
static PT_NODE * pt_create_pt_expr_equal_node ( PARSER_CONTEXT parser,
PT_NODE arg1,
PT_NODE arg2 
)
static
PT_NODE* pt_domain_to_data_type ( PARSER_CONTEXT parser,
DB_DOMAIN domain 
)

Definition at line 3978 of file name_resolution.c.

References assert, tp_domain::collation_flag, pt_data_type_info::collation_flag, pt_data_type_info::collation_id, pt_statement_info::data_type, db_domain_class(), db_domain_codeset(), db_domain_collation_id(), db_domain_next(), db_domain_precision(), db_domain_scale(), db_domain_set(), DB_GET_ENUM_ELEM_CODESET, DB_GET_ENUM_ELEM_STRING, DB_GET_ENUMERATION, db_json_get_schema_raw_from_validator(), DB_SET_ENUM_ELEM_CODESET, pt_data_type_info::dec_precision, DOM_GET_ENUM_ELEM, DOM_GET_ENUM_ELEMS_COUNT, pt_data_type_info::entity, pt_data_type_info::enumeration, parser_node::info, pt_data_type_info::json_schema, tp_domain::json_validator, parser_node::next, NULL, parser_append_node(), parser_new_node(), pt_data_type_info::precision, pt_add_class_to_entity_list(), pt_append_bytes(), PT_CLASS, PT_DATA_TYPE, pt_db_to_type_enum(), pt_domain_to_data_type(), PT_IS_CHAR_STRING_TYPE, pt_make_string_value(), pt_name_list_union(), PT_TYPE_BIT, PT_TYPE_CHAR, PT_TYPE_ENUMERATION, PT_TYPE_JSON, PT_TYPE_MIDXKEY, PT_TYPE_MULTISET, PT_TYPE_NCHAR, PT_TYPE_NUMERIC, PT_TYPE_OBJECT, PT_TYPE_SEQUENCE, PT_TYPE_SET, PT_TYPE_VARBIT, PT_TYPE_VARCHAR, PT_TYPE_VARNCHAR, strlen, TP_DOMAIN_CODESET, TP_DOMAIN_COLLATION, TP_DOMAIN_TYPE, parser_node::type_enum, pt_data_type_info::units, and pt_data_type_info::virt_type_enum.

Referenced by do_alter_one_clause_with_template(), pt_add_type_to_set(), pt_bind_names_post(), pt_bind_reserved_name(), pt_check_alter_partition(), pt_check_partitions(), pt_domain_to_data_type(), pt_eval_expr_type(), pt_find_attr_in_class_list(), pt_fix_first_term_expr_for_iss(), pt_get_attr_data_type(), pt_get_attributes(), pt_make_method_call(), pt_resolve_default_value(), pt_resolve_method_type(), pt_resolve_star_reserved_names(), pt_string_to_db_domain(), pt_update_host_var_data_type(), and pt_value_to_db().

Here is the caller graph for this function:

PT_NODE* pt_eval_value_path ( PARSER_CONTEXT parser,
PT_NODE path 
)
static int pt_find_attr_in_class_list ( PARSER_CONTEXT parser,
PT_NODE flat,
PT_NODE attr 
)
static
static PT_NODE * pt_find_entity_in_scopes ( PARSER_CONTEXT parser,
SCOPES scopes,
UINTPTR  spec_id 
)
static

Definition at line 9076 of file name_resolution.c.

References scopes::next, NULL, pt_find_entity(), and scopes::specs.

Referenced by pt_bind_names(), and pt_make_method_call().

Here is the caller graph for this function:

static FUNC_TYPE pt_find_function_type ( const char *  name)
static

Definition at line 1044 of file name_resolution.c.

References F_TABLE_MULTISET, F_TABLE_SEQUENCE, F_TABLE_SET, intl_mbs_casecmp(), and PT_GENERIC.

Referenced by pt_bind_names().

Here is the caller graph for this function:

static PT_NODE * pt_find_outer_entity_in_scopes ( PARSER_CONTEXT parser,
SCOPES scopes,
UINTPTR  spec_id,
short *  scope_location 
)
static
static PT_NODE * pt_find_path_entity ( PARSER_CONTEXT parser,
PT_NODE scope,
PT_NODE match 
)
static
static PT_NODE * pt_get_all_json_table_attributes_and_types ( PARSER_CONTEXT parser,
PT_NODE json_table_node,
const char *  json_table_alias 
)
static
static PT_NODE * pt_get_all_showstmt_attributes_and_types ( PARSER_CONTEXT parser,
PT_NODE derived_table 
)
static
static PT_NODE * pt_get_resolution ( PARSER_CONTEXT parser,
PT_BIND_NAMES_ARG bind_arg,
PT_NODE scope,
PT_NODE in_node,
PT_NODE **  p_entity,
int  col_name 
)
static

Definition at line 4747 of file name_resolution.c.

References parser_node::alias_print, pt_dot_info::arg1, pt_expr_info::arg1, pt_dot_info::arg2, pt_statement_info::data_type, parser_node::data_type, pt_name_info::db_object, pt_spec_info::derived_table, pt_spec_info::derived_table_type, pt_statement_info::dot, pt_data_type_info::entity, pt_spec_info::entity_name, pt_statement_info::expr, extra_specs_frame::extra_specs, pt_spec_info::flat_entity_list, pt_flat_spec_info::for_update, pt_spec_info::id, parser_node::info, pt_spec_info::meta_class, pt_name_info::meta_class, pt_statement_info::method_call, pt_method_call_info::method_name, MSGCAT_SEMANTIC_AMBIGUOUS_REF_TO, MSGCAT_SEMANTIC_CLASS_DOES_NOT_HAVE, MSGCAT_SEMANTIC_CLASS_HAS_NO_ATTR, MSGCAT_SEMANTIC_CLASSES_HAVE_NO_ATTR, MSGCAT_SEMANTIC_CYCLIC_SELECTOR, MSGCAT_SEMANTIC_DOM_OBJ_HASNO_ATT_X, MSGCAT_SEMANTIC_IS_NOT_OBJECT_TYPE, MSGCAT_SEMANTIC_PATH_CORR_OUTSIDE, MSGCAT_SEMANTIC_SELECTOR_DEFINE_SELF, MSGCAT_SEMANTIC_SELECTOR_NOT_SUBCLASS, MSGCAT_SEMANTIC_SELECTOR_REDEFINED, MSGCAT_SEMANTIC_SELECTOR_TO_NON_CLS, MSGCAT_SEMANTIC_SELECTOR_UNRESOLVED, MSGCAT_SET_PARSER_SEMANTIC, pt_statement_info::name, parser_node::next, parser_node::node_type, NULL, pt_spec_info::only_all, pt_name_info::original, parser_append_node(), parser_copy_tree(), parser_copy_tree_list(), parser_free_tree(), parser_new_node(), parser_walk_tree(), pt_name_info::partition, pt_spec_info::path_conjuncts, pt_name_info::path_correlation, pt_spec_info::path_entities, pt_bind_names(), pt_bind_names_post(), pt_bind_parameter(), pt_bind_parameter_path(), pt_bind_reserved_name(), pt_continue_walk(), PT_DATA_TYPE, PT_DOT_, PT_ERRORmf, PT_ERRORmf2, PT_ERRORmf3, pt_eval_value_path(), pt_find_attr_in_class_list(), pt_find_class_attribute(), pt_find_entity(), pt_find_name_in_spec(), pt_find_users_class(), pt_flat_spec_pre(), PT_FUNCTION, pt_has_error, pt_insert_entity(), PT_INTERNAL_ERROR, pt_is_correlation_name(), PT_IS_SPEC_FLAG_SET, PT_IS_SPEC_REAL_TABLE, PT_IS_WHACKED_SPEC, PT_META_CLASS, PT_METHOD_CALL, pt_name(), PT_NAME, PT_NAME_DEFAULTF_ACCEPTS, pt_name_equal(), PT_NAME_INFO_DOT_NAME, PT_NAME_INFO_IS_FLAGED, PT_NAME_INFO_SET_FLAG, pt_object_to_data_type(), PT_OID_ATTR, PT_ONLY, PT_PARAMETER, pt_resolve_correlation(), pt_short_print(), pt_short_print_l(), PT_SHOULD_BIND_RESERVED_NAME, pt_show_type_enum(), PT_SPEC, PT_SPEC_FLAG_RECORD_INFO_SCAN, pt_spec_in_domain(), PT_TYPE_OBJECT, pt_unwhacked_spec(), PT_VALUE, pt_spec_info::range_var, pt_name_info::resolved, pt_statement_info::spec, pt_bind_names_arg::spec_frames, pt_name_info::spec_id, pt_flat_spec_info::spec_parent, parser_node::type_enum, and pt_data_type_info::virt_type_enum.

Referenced by pt_bind_name_or_path_in_scope(), and pt_resolve_star().

Here is the caller graph for this function:

static const char * pt_get_unique_exposed_name ( PARSER_CONTEXT parser,
PT_NODE first_spec 
)
static

Definition at line 7101 of file name_resolution.c.

References assert, i, parser_node::node_type, NULL, pt_append_string(), pt_name_occurs_in_from_list(), and PT_SPEC.

Referenced by pt_must_have_exposed_name().

Here is the caller graph for this function:

PT_NODE* pt_insert_entity ( PARSER_CONTEXT parser,
PT_NODE path,
PT_NODE prev_entity,
PT_NODE correlation_entity 
)
static PT_NODE * pt_mark_group_having_pt_name ( PARSER_CONTEXT parser,
PT_NODE node,
void *  chk_parent,
int *  continue_walk 
)
static
static PT_NODE * pt_mark_location ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static
static PT_NODE * pt_mark_pt_name ( PARSER_CONTEXT parser,
PT_NODE node,
void *  chk_parent,
int *  continue_walk 
)
static

Definition at line 7743 of file name_resolution.c.

References CPTR_PT_NAME_IN_GROUP_HAVING, parser_node::etc, parser_node::node_type, NULL, pt_append_string(), PT_CONTINUE_WALK, and PT_NAME.

Referenced by pt_mark_group_having_pt_name().

Here is the caller graph for this function:

static PT_NODE * pt_name_list_diff ( PARSER_CONTEXT parser,
PT_NODE list,
PT_NODE deletions 
)
static

Definition at line 5660 of file name_resolution.c.

References parser_node::next, NULL, parser_append_node(), parser_free_node(), parser_free_tree(), and pt_is_on_list().

Referenced by pt_make_flat_name_list().

Here is the caller graph for this function:

static PT_NODE * pt_name_list_union ( PARSER_CONTEXT parser,
PT_NODE list,
PT_NODE additions 
)
static
static void pt_resolve_group_having_alias_internal ( PARSER_CONTEXT parser,
PT_NODE **  node_p,
PT_NODE select_list 
)
static
static void pt_resolve_group_having_alias_pt_expr ( PARSER_CONTEXT parser,
PT_NODE node,
PT_NODE select_list 
)
static
static void pt_resolve_group_having_alias_pt_sort_spec ( PARSER_CONTEXT parser,
PT_NODE node,
PT_NODE select_list 
)
static
PT_NODE* pt_resolve_names ( PARSER_CONTEXT parser,
PT_NODE statement,
SEMANTIC_CHK_INFO sc_info 
)
static PT_NODE * pt_resolve_natural_join ( PARSER_CONTEXT parser,
PT_NODE node,
void *  chk_parent,
int *  continue_walk 
)
static
static PT_NODE* pt_resolve_spec_to_cte_and_count ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static

Definition at line 8188 of file name_resolution.c.

References assert, parser_node::etc, parser_node::node_type, NULL, pt_resolve_spec_to_cte(), PT_SPEC, PT_SPEC_IS_CTE, and PT_SPEC_IS_ENTITY.

Referenced by pt_resolve_cte_specs().

Here is the caller graph for this function:

PT_NODE* pt_set_is_view_spec ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static int pt_spec_in_domain ( PT_NODE cls,
PT_NODE lst 
)
static
static PT_NODE * pt_undef_names_post ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static

Definition at line 319 of file name_resolution.c.

References parser_node::etc, if(), parser_node::node_type, NULL, PT_DIFFERENCE, PT_INSERT, PT_INTERSECTION, PT_SELECT, and PT_UNION.

Referenced by pt_bind_names().

Here is the caller graph for this function:

static PT_NODE * pt_unwhacked_spec ( PARSER_CONTEXT parser,
PT_NODE scope,
PT_NODE spec 
)
static

Variable Documentation

const char* CPTR_PT_NAME_IN_GROUP_HAVING = "name_in_group_having"
static

Definition at line 104 of file name_resolution.c.

Referenced by is_pt_name_in_group_having(), and pt_mark_pt_name().

size_t json_table_column_count
int parser_function_code

Referenced by pt_bind_names().