CUBRID Engine  latest
query_rewrite.c File Reference
#include <assert.h>
#include "parser.h"
#include "parser_message.h"
#include "parse_tree.h"
#include "optimizer.h"
#include "xasl_generation.h"
#include "virtual_object.h"
#include "system_parameter.h"
#include "semantic_check.h"
#include "execute_schema.h"
#include "view_transform.h"
#include "object_primitive.h"
#include "object_representation.h"
#include "dbtype.h"
Include dependency graph for query_rewrite.c:

Go to the source code of this file.

Classes

struct  spec_id_info
 
struct  to_dot_info
 
struct  pt_name_spec_info
 
struct  qo_reset_location_info
 

Macros

#define DB_MAX_LITERAL_PRECISION   255
 

Typedefs

typedef struct spec_id_info SPEC_ID_INFO
 
typedef struct to_dot_info TO_DOT_INFO
 
typedef struct pt_name_spec_info PT_NAME_SPEC_INFO
 
typedef enum COMP_DBVALUE_WITH_OPTYPE_RESULT COMP_DBVALUE_WITH_OPTYPE_RESULT
 
typedef struct qo_reset_location_info RESET_LOCATION_INFO
 

Enumerations

enum  COMP_DBVALUE_WITH_OPTYPE_RESULT {
  CompResultLess = -2, CompResultLessAdj = -1, CompResultEqual = 0, CompResultGreaterAdj = 1,
  CompResultGreater = 2, CompResultError = 3
}
 
enum  DNF_MERGE_RANGE_RESULT { DNF_RANGE_VALID = 0, DNF_RANGE_ALWAYS_FALSE = 1, DNF_RANGE_ALWAYS_TRUE = 2 }
 

Functions

static PT_NODEqo_reset_location (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static void qo_move_on_clause_of_explicit_join_to_where_clause (PARSER_CONTEXT *parser, PT_NODE **fromp, PT_NODE **wherep)
 
static PT_NODEqo_optimize_queries (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static void qo_do_auto_parameterize_limit_clause (PARSER_CONTEXT *parser, PT_NODE *node)
 
static void qo_do_auto_parameterize_keylimit_clause (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEqo_optimize_queries_post (PARSER_CONTEXT *parser, PT_NODE *tree, void *arg, int *continue_walk)
 
static PT_MISC_TYPE qo_find_best_path_type (PT_NODE *spec)
 
static PT_NODEqo_get_name_by_spec_id (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
PT_NODEqo_check_nullable_expr (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
PT_NODEqo_check_nullable_expr_with_spec (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEqo_replace_spec_name_with_null (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static bool qo_check_condition_yields_null (PARSER_CONTEXT *parser, PT_NODE *path_spec, PT_NODE *query_where)
 
static PT_NODEqo_analyze_path_join_pre (PARSER_CONTEXT *parser, PT_NODE *spec, void *arg, int *continue_walk)
 
static PT_NODEqo_analyze_path_join (PARSER_CONTEXT *parser, PT_NODE *path_spec, void *arg, int *continue_walk)
 
static PT_NODEqo_convert_attref_to_dotexpr_pre (PARSER_CONTEXT *parser, PT_NODE *spec, void *arg, int *continue_walk)
 
static PT_NODEqo_convert_attref_to_dotexpr (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEqo_get_next_oid_pred (PT_NODE *pred)
 
static int qo_is_oid_const (PT_NODE *node)
 
static PT_NODEqo_construct_new_set (PARSER_CONTEXT *parser, PT_NODE *node)
 
static PT_NODEqo_make_new_derived_tblspec (PARSER_CONTEXT *parser, PT_NODE *node, PT_NODE *pred, int *seqno)
 
static PT_NODEqo_rewrite_oid_equality (PARSER_CONTEXT *parser, PT_NODE *node, PT_NODE *pred, int *seqno)
 
static PT_NODEqo_collect_name_spec (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEqo_collect_name_spec_post (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static int qo_is_cast_attr (PT_NODE *expr)
 
static int qo_is_reduceable_const (PT_NODE *expr)
 
static void qo_reduce_equality_terms (PARSER_CONTEXT *parser, PT_NODE *node, PT_NODE **wherep)
 
static int qo_reduce_order_by_for (PARSER_CONTEXT *parser, PT_NODE *node)
 
static int qo_reduce_order_by (PARSER_CONTEXT *parser, PT_NODE *node)
 
static void qo_converse_sarg_terms (PARSER_CONTEXT *parser, PT_NODE *where)
 
static void qo_fold_is_and_not_null (PARSER_CONTEXT *parser, PT_NODE **wherep)
 
static PT_NODEqo_search_comp_pair_term (PARSER_CONTEXT *parser, PT_NODE *start)
 
static void qo_reduce_comp_pair_terms (PARSER_CONTEXT *parser, PT_NODE **wherep)
 
static bool pt_is_ascii_string_value_node (const PT_NODE *const node)
 
static void pt_free_escape_char (PARSER_CONTEXT *const parser, PT_NODE *const like, PT_NODE *const pattern, PT_NODE *const escape)
 
static PT_NODEqo_find_like_rewrite_bound (PARSER_CONTEXT *const parser, PT_NODE *const pattern, DB_VALUE *const pattern_str, const bool has_escape_char, const char *escape_str, const bool compute_lower_bound, const int last_safe_logical_pos)
 
static void qo_rewrite_one_like_term (PARSER_CONTEXT *const parser, PT_NODE *const like, PT_NODE *const pattern, PT_NODE *const escape, bool *const perform_generic_rewrite)
 
static PT_NODEqo_allocate_like_bound_for_index_scan (PARSER_CONTEXT *const parser, PT_NODE *const like, PT_NODE *const pattern, PT_NODE *const escape, const bool allocate_lower_bound)
 
static PT_NODEqo_rewrite_like_for_index_scan (PARSER_CONTEXT *const parser, PT_NODE *like, PT_NODE *const pattern, PT_NODE *const escape)
 
static PT_NODEqo_check_like_expression_pre (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static void qo_rewrite_like_terms (PARSER_CONTEXT *parser, PT_NODE **cnf_list)
 
static PT_NODEqo_set_value_to_range_list (PARSER_CONTEXT *parser, PT_NODE *node)
 
static void qo_convert_to_range_helper (PARSER_CONTEXT *parser, PT_NODE *node)
 
static COMP_DBVALUE_WITH_OPTYPE_RESULT qo_compare_dbvalue_with_optype (DB_VALUE *val1, PT_OP_TYPE op1, DB_VALUE *val2, PT_OP_TYPE op2)
 
static int qo_range_optype_rank (PT_OP_TYPE op)
 
static DNF_MERGE_RANGE_RESULT qo_merge_range_helper (PARSER_CONTEXT *parser, PT_NODE *node)
 
static void qo_convert_to_range (PARSER_CONTEXT *parser, PT_NODE **wherep)
 
static void qo_apply_range_intersection_helper (PARSER_CONTEXT *parser, PT_NODE *node1, PT_NODE *node2)
 
static void qo_apply_range_intersection (PARSER_CONTEXT *parser, PT_NODE **wherep)
 
static PT_NODEqo_rewrite_outerjoin (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEqo_rewrite_innerjoin (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static PT_NODEqo_rewrite_hidden_col_as_derived (PARSER_CONTEXT *parser, PT_NODE *node, PT_NODE *parent_node)
 
static void qo_rewrite_index_hints (PARSER_CONTEXT *parser, PT_NODE *statement)
 
static PT_NODEqo_rewrite_subqueries (PARSER_CONTEXT *parser, PT_NODE *node, void *arg, int *continue_walk)
 
static int qo_is_partition_attr (PT_NODE *node)
 
void qo_do_auto_parameterize (PARSER_CONTEXT *parser, PT_NODE *where)
 
static bool qo_can_generate_single_table_connect_by (PARSER_CONTEXT *parser, PT_NODE *node)
 
PT_NODEmq_optimize (PARSER_CONTEXT *parser, PT_NODE *statement)
 

Macro Definition Documentation

#define DB_MAX_LITERAL_PRECISION   255

Definition at line 43 of file query_rewrite.c.

Referenced by qo_reduce_equality_terms().

Typedef Documentation

Definition at line 60 of file query_rewrite.c.

Definition at line 87 of file query_rewrite.c.

typedef struct spec_id_info SPEC_ID_INFO

Definition at line 45 of file query_rewrite.c.

typedef struct to_dot_info TO_DOT_INFO

Definition at line 53 of file query_rewrite.c.

Enumeration Type Documentation

Enumerator
CompResultLess 
CompResultLessAdj 
CompResultEqual 
CompResultGreaterAdj 
CompResultGreater 
CompResultError 

Definition at line 70 of file query_rewrite.c.

Enumerator
DNF_RANGE_VALID 
DNF_RANGE_ALWAYS_FALSE 
DNF_RANGE_ALWAYS_TRUE 

Definition at line 80 of file query_rewrite.c.

Function Documentation

PT_NODE* mq_optimize ( PARSER_CONTEXT parser,
PT_NODE statement 
)

Definition at line 7850 of file query_rewrite.c.

References NULL, parser_walk_tree(), qo_optimize_queries(), and qo_optimize_queries_post().

Referenced by mq_translate_helper().

Here is the caller graph for this function:

static void pt_free_escape_char ( PARSER_CONTEXT *const  parser,
PT_NODE *const  like,
PT_NODE *const  pattern,
PT_NODE *const  escape 
)
static
static bool pt_is_ascii_string_value_node ( const PT_NODE *const  node)
static

Definition at line 3044 of file query_rewrite.c.

References PT_IS_CHAR_STRING_TYPE, PT_IS_NATIONAL_CHAR_STRING_TYPE, PT_IS_VALUE_NODE, and parser_node::type_enum.

Referenced by qo_rewrite_like_terms(), and qo_rewrite_one_like_term().

Here is the caller graph for this function:

static PT_NODE* qo_analyze_path_join ( PARSER_CONTEXT parser,
PT_NODE path_spec,
void *  arg,
int *  continue_walk 
)
static
static PT_NODE* qo_analyze_path_join_pre ( PARSER_CONTEXT parser,
PT_NODE spec,
void *  arg,
int *  continue_walk 
)
static

Definition at line 332 of file query_rewrite.c.

References parser_node::node_type, PT_CONTINUE_WALK, PT_SPEC, and PT_STOP_WALK.

Referenced by qo_optimize_queries().

Here is the caller graph for this function:

static bool qo_check_condition_yields_null ( PARSER_CONTEXT parser,
PT_NODE path_spec,
PT_NODE query_where 
)
static
static PT_NODE* qo_check_like_expression_pre ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static

Definition at line 3624 of file query_rewrite.c.

References NULL, PT_IS_DOT_NODE, PT_IS_NAME_NODE, PT_IS_QUERY, and PT_STOP_WALK.

Referenced by qo_rewrite_like_terms().

Here is the caller graph for this function:

PT_NODE* qo_check_nullable_expr ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
PT_NODE* qo_check_nullable_expr_with_spec ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static PT_NODE* qo_collect_name_spec_post ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static

Definition at line 1226 of file query_rewrite.c.

References PT_CONTINUE_WALK, PT_STOP_WALK, and pt_name_spec_info::query_serial_num.

Referenced by qo_reduce_equality_terms().

Here is the caller graph for this function:

static COMP_DBVALUE_WITH_OPTYPE_RESULT qo_compare_dbvalue_with_optype ( DB_VALUE val1,
PT_OP_TYPE  op1,
DB_VALUE val2,
PT_OP_TYPE  op2 
)
static
static PT_NODE* qo_convert_attref_to_dotexpr_pre ( PARSER_CONTEXT parser,
PT_NODE spec,
void *  arg,
int *  continue_walk 
)
static

Definition at line 580 of file query_rewrite.c.

References pt_spec_info::id, parser_node::info, parser_node::node_type, to_dot_info::old_spec, PT_CONTINUE_WALK, PT_LIST_WALK, PT_SPEC, and pt_statement_info::spec.

Referenced by qo_rewrite_oid_equality().

Here is the caller graph for this function:

static PT_MISC_TYPE qo_find_best_path_type ( PT_NODE spec)
static
static PT_NODE* qo_get_name_by_spec_id ( PARSER_CONTEXT parser,
PT_NODE node,
void *  arg,
int *  continue_walk 
)
static
static int qo_is_cast_attr ( PT_NODE expr)
static

Definition at line 1246 of file query_rewrite.c.

References pt_expr_info::arg1, pt_statement_info::expr, parser_node::info, parser_node::node_type, pt_expr_info::op, PT_CAST, PT_EXPR, and pt_is_attr().

Referenced by qo_reduce_equality_terms().

Here is the caller graph for this function:

static int qo_is_reduceable_const ( PT_NODE expr)
static
static void qo_move_on_clause_of_explicit_join_to_where_clause ( PARSER_CONTEXT parser,
PT_NODE **  fromp,
PT_NODE **  wherep 
)
static

Definition at line 6673 of file query_rewrite.c.

References parser_node::info, parser_node::next, parser_node::node_type, NULL, pt_spec_info::on_cond, PT_SPEC, and pt_statement_info::spec.

Referenced by qo_optimize_queries().

Here is the caller graph for this function:

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

Definition at line 6715 of file query_rewrite.c.

References pt_select_info::after_cb_filter, pt_expr_info::arg1, pt_union_info::arg1, pt_expr_info::arg2, pt_union_info::arg2, pt_function_info::arg_list, assert, assert_release, pt_update_info::assignment, pt_agg_find_info::base_count, parser_node::cannot_prepare, pt_select_info::connect_by, pt_merge_info::del_search_cond, pt_statement_info::delete_, pt_spec_info::derived_table, pt_spec_info::derived_table_type, pt_statement_info::expr, F_TABLE_MULTISET, F_TABLE_SEQUENCE, F_TABLE_SET, pt_query_info::flag, parser_node::flag, pt_select_info::from, pt_statement_info::function, pt_function_info::function_type, pt_select_info::group_by, pt_non_groupby_col_info::groupby, pt_non_groupby_col_info::has_non_groupby_col, pt_select_info::having, parser_node::info, pt_merge_info::insert, pt_query_info::is_subquery, pt_query_info::limit, pt_statement_info::merge, mq_rewrite_query_as_derived(), parser_node::next, NO_ERROR, parser_node::node_type, NULL, pt_expr_info::op, OPTIMIZATION_ENABLED, pt_query_info::order_by, pt_query_info::orderby_for, pt_update_info::orderby_for, pt_agg_find_info::out_of_context_count, p, parser_append_node(), parser_walk_tree(), prm_get_bool_value(), prm_get_integer_value(), PRM_ID_HOSTVAR_LATE_BINDING, PRM_ID_XASL_CACHE_MAX_ENTRIES, PT_ASSIGN, pt_cnf(), PT_DELETE, PT_DIFFERENCE, PT_EQ, PT_EQ_ALL, PT_EQ_SOME, PT_EXPR, pt_find_aggregate_functions_post(), pt_find_aggregate_functions_pre(), PT_FUNCTION, PT_GE_ALL, PT_GE_SOME, pt_get_subquery_of_insert_select(), PT_GT_ALL, PT_GT_SOME, pt_has_non_groupby_column_node(), PT_INSERT, PT_INST_NUM, PT_INTERSECTION, pt_is_const_not_hostvar, PT_IS_IN, PT_IS_NOT_IN, pt_is_pseudocolumn_node(), PT_IS_QUERY_NODE_TYPE, PT_IS_SELECT, PT_IS_SHOWSTMT, PT_IS_SUBQUERY, PT_LE_ALL, PT_LE_SOME, pt_limit_to_numbering_expr(), PT_LT_ALL, PT_LT_SOME, PT_MERGE, PT_NE, PT_NE_ALL, PT_NE_SOME, PT_NODE_MOVE_NUMBER_OUTERLINK, PT_NULLSAFE_EQ, pt_pointer_stack_pop(), pt_pointer_stack_push(), pt_rewrite_to_auto_param(), PT_SELECT, PT_SHOWSTMT, pt_split_join_preds(), PT_UNION, PT_UPDATE, pt_query_info::q, qo_analyze_path_join(), qo_analyze_path_join_pre(), qo_apply_range_intersection(), qo_can_generate_single_table_connect_by(), qo_converse_sarg_terms(), qo_convert_to_range(), qo_do_auto_parameterize(), qo_do_auto_parameterize_keylimit_clause(), qo_do_auto_parameterize_limit_clause(), qo_fold_is_and_not_null(), qo_get_next_oid_pred(), qo_get_optimization_param(), qo_move_on_clause_of_explicit_join_to_where_clause(), QO_PARAM_LEVEL, qo_reduce_comp_pair_terms(), qo_reduce_equality_terms(), qo_reduce_order_by(), qo_rewrite_hidden_col_as_derived(), qo_rewrite_index_hints(), qo_rewrite_innerjoin(), qo_rewrite_like_terms(), qo_rewrite_oid_equality(), qo_rewrite_outerjoin(), qo_rewrite_subqueries(), pt_statement_info::query, pt_query_info::rewrite_limit, pt_delete_info::search_cond, pt_update_info::search_cond, pt_merge_info::search_cond, pt_query_info::select, pt_agg_find_info::select_stack, pt_showstmt_info::show_args, pt_statement_info::showstmt, pt_select_info::single_table_opt, pt_query_info::single_tuple, pt_delete_info::spec, pt_update_info::spec, pt_statement_info::spec, pt_select_info::start_with, pt_agg_find_info::stop_on_subquery, pt_query_info::union_, pt_merge_info::update, pt_statement_info::update, pt_select_info::where, and parser_node::with_rollup.

Referenced by mq_optimize().

Here is the caller graph for this function:

static int qo_range_optype_rank ( PT_OP_TYPE  op)
static

Definition at line 4251 of file query_rewrite.c.

References assert, PT_EQ, PT_GE, PT_GT, PT_GT_INF, PT_LE, PT_LT, and PT_LT_INF.

Referenced by qo_merge_range_helper().

Here is the caller graph for this function:

static void qo_reduce_equality_terms ( PARSER_CONTEXT parser,
PT_NODE node,
PT_NODE **  wherep 
)
static

Definition at line 1295 of file query_rewrite.c.

References pt_expr_info::arg1, pt_expr_info::arg2, pt_spec_info::as_attr_list, pt_name_spec_info::c_name, pt_name_spec_info::c_name_num, CAST_POINTER_TO_NODE, pt_statement_info::data_type, parser_node::data_type, db_make_null(), DB_MAX_LITERAL_PRECISION, pt_data_type_info::dec_precision, pt_statement_info::delete_, pt_spec_info::derived_table, pt_spec_info::derived_table_type, DOMAIN_COMPATIBLE, parser_node::etc, pt_statement_info::expr, pt_select_info::from, i, pt_spec_info::id, parser_node::info, pt_select_info::list, pt_name_info::location, MSGCAT_SEMANTIC_CANT_COERCE_TO, MSGCAT_SEMANTIC_OUT_OF_MEMORY, MSGCAT_SET_PARSER_SEMANTIC, pt_statement_info::name, parser_node::next, parser_node::node_type, NULL, pt_expr_info::op, parser_node::or_next, parser_append_node(), parser_copy_tree(), parser_copy_tree_list(), parser_free_tree(), parser_walk_tree(), pr_clear_value(), tp_domain::precision, pt_data_type_info::precision, PT_BETWEEN_EQ_NA, pt_dbval_to_value(), PT_DELETE, PT_EQ, PT_ERRORm, PT_ERRORmf2, PT_EXPR, PT_EXPR_INFO_DO_NOT_AUTOPARAM, PT_EXPR_INFO_SET_FLAG, PT_EXPR_INFO_TRANSITIVE, pt_get_end_path_node(), pt_get_select_list(), pt_is_attr(), PT_IS_CONST, PT_IS_CONST_NOT_HOSTVAR, pt_is_function_index_expression(), PT_IS_PARAMETERIZED_TYPE, PT_IS_SUBQUERY, pt_is_symmetric_op(), PT_IS_VALUE_QUERY, pt_lambda_with_arg(), pt_length_of_list(), pt_name_equal(), pt_node_to_db_domain(), PT_PRIOR, PT_RANGE, PT_SELECT, pt_short_print(), pt_show_type_enum(), PT_TYPE_ENUMERATION, PT_UPDATE, pt_value_to_db(), pt_wrap_with_cast_op(), pt_query_info::q, qo_collect_name_spec(), qo_collect_name_spec_post(), qo_is_cast_attr(), qo_is_reduceable_const(), pt_statement_info::query, pt_name_spec_info::query_serial_num, pt_name_spec_info::s_point_list, pt_query_info::select, pt_delete_info::spec, pt_update_info::spec, pt_statement_info::spec, pt_name_info::spec_id, tp_domain_cache(), TP_FLOATING_PRECISION_VALUE, tp_value_cast_force(), parser_node::type_enum, and pt_statement_info::update.

Referenced by qo_optimize_queries().

Here is the caller graph for this function:

static int qo_reduce_order_by ( PARSER_CONTEXT parser,
PT_NODE node 
)
static

Definition at line 1882 of file query_rewrite.c.

References pt_query_info::all_distinct, pt_function_info::all_or_distinct, ARG_FILE_LINE, pt_function_info::arg_list, pt_sort_spec_info::asc_or_desc, pt_select_info::connect_by, pt_value_info::data_value, ER_ERROR_SEVERITY, ER_GENERIC_ERROR, er_set(), error(), pt_sort_spec_info::expr, pt_statement_info::expr, pt_statement_info::function, pt_function_info::function_type, pt_select_info::group_by, pt_select_info::having, i, pt_data_value::i, parser_node::info, pt_select_info::list, MSGCAT_SEMANTIC_OUT_OF_MEMORY, MSGCAT_SEMANTIC_SORT_DIR_CONFLICT, MSGCAT_SET_PARSER_SEMANTIC, parser_node::next, NO_ERROR, parser_node::node_type, NULL, pt_expr_info::op, pt_query_info::order_by, pt_query_info::orderby_for, parser_append_node(), parser_free_tree(), parser_new_node(), parser_walk_tree(), pt_sort_spec_info::pos_descr, qfile_tuple_value_position::pos_no, PT_ALL, pt_check_orderbynum_post(), pt_check_orderbynum_pre(), PT_DISTINCT, PT_ERRORm, PT_ERRORmf, PT_EXPR, PT_EXPR_INFO_INSTNUM_C, PT_EXPR_INFO_ORDERBYNUM_C, PT_EXPR_INFO_SET_FLAG, pt_find_order_value_in_list(), PT_FUNCTION, pt_get_end_path_node(), PT_GROUPBY_NUM, PT_INST_NUM, pt_lambda_with_arg(), PT_NAME, pt_name_equal(), PT_NAME_INFO_CONSTANT, PT_NAME_INFO_IS_FLAGED, PT_ORDERBY_NUM, pt_remove_from_list(), PT_SELECT, pt_short_print(), pt_sort_spec_cover(), pt_to_null_ordering(), PT_TYPE_BIGINT, PT_TYPE_INTEGER, PT_VALUE, pt_value_to_db(), pt_query_info::q, qo_reduce_order_by_for(), pt_statement_info::query, pt_query_info::select, pt_statement_info::sort_spec, parser_node::type_enum, pt_statement_info::value, and pt_select_info::where.

Referenced by qo_optimize_queries().

Here is the caller graph for this function:

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

Definition at line 6176 of file query_rewrite.c.

References pt_function_info::all_or_distinct, pt_expr_info::arg1, pt_expr_info::arg2, pt_function_info::arg_list, assert, pt_query_info::correlation_level, parser_node::data_type, pt_value_info::data_value, pt_spec_info::derived_table, EXCLUDE_HIDDEN_COLUMNS, pt_statement_info::expr, pt_select_info::flavor, pt_statement_info::function, pt_function_info::function_type, parser_node::info, pt_query_info::is_subquery, pt_select_info::list, mq_make_derived_spec(), mq_rewrite_query_as_derived(), parser_node::next, parser_node::node_type, NULL, pt_expr_info::op, parser_node::or_next, pt_query_info::orderby_for, parser_append_node(), parser_copy_tree(), parser_free_tree(), parser_new_node(), parser_walk_tree(), PT_ALL, PT_DIFFERENCE, PT_EQ, PT_EQ_SOME, PT_EXPR, PT_FUNCTION, PT_GE, PT_GE_SOME, pt_get_select_list(), PT_GT, PT_GT_SOME, pt_has_aggregate(), pt_has_analytic(), PT_INTERNAL_ERROR, PT_INTERSECTION, pt_is_attr(), PT_IS_COLLECTION_TYPE, PT_IS_CONST, PT_IS_FUNCTION, pt_is_function_index_expression(), PT_IS_IN, PT_IS_SUBQUERY, PT_LE, PT_LE_SOME, pt_length_of_select_list(), PT_LIST_WALK, PT_LT, PT_LT_SOME, PT_MAX, PT_MIN, PT_NODE_MOVE_NUMBER_OUTERLINK, PT_SELECT, PT_SELECT_INFO_HAS_AGG, PT_SELECT_INFO_SET_FLAG, pt_select_list_to_one_col(), pt_type_enum_to_db(), PT_UNION, PT_USER_SELECT, pt_query_info::q, pt_statement_info::query, pt_query_info::select, pt_data_value::set, pt_statement_info::spec, tp_valid_indextype(), parser_node::type_enum, pt_statement_info::value, and pt_select_info::where.

Referenced by qo_optimize_queries().

Here is the caller graph for this function: