CUBRID Engine  latest
view_transform.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * view_transform.h - view (virtual class) transformation
22  */
23 
24 #ifndef _VIEW_TRANSFORM_H_
25 #define _VIEW_TRANSFORM_H_
26 
27 #ident "$Id$"
28 
29 #include "parser.h"
30 #include "schema_manager.h"
31 
32 typedef enum PT_FETCH_AS
35 
37 {
38  PT_NOT_UPDATABLE = 0x0, /* non-updatable query */
39  PT_PARTIALLY_UPDATABLE = 0x1, /* partially updatable query (i.e. vclass whose definition contains joins, but is
40  * otherwise updatable) */
41  PT_UPDATABLE = 0x3 /* fully updatable query */
42 };
44 
45 extern PT_NODE *mq_bump_correlation_level (PARSER_CONTEXT * parser, PT_NODE * node, int increment, int match);
46 
48 
49 extern PT_NODE *mq_translate (PARSER_CONTEXT * parser, PT_NODE * volatile node);
50 
51 extern PT_NODE *mq_make_derived_spec (PARSER_CONTEXT * parser, PT_NODE * node, PT_NODE * subquery, int *idx,
52  PT_NODE ** spec_ptr, PT_NODE ** attr_list_ptr);
53 extern PT_NODE *mq_oid (PARSER_CONTEXT * parser, PT_NODE * spec);
54 
55 extern PT_NODE *mq_get_references (PARSER_CONTEXT * parser, PT_NODE * statement, PT_NODE * spec);
57  bool get_spec_referenced_attr);
58 extern PT_NODE *mq_reset_paths (PARSER_CONTEXT * parser, PT_NODE * statement, PT_NODE * root_spec);
59 extern PT_NODE *mq_reset_ids (PARSER_CONTEXT * parser, PT_NODE * statement, PT_NODE * spec);
60 extern PT_NODE *mq_clear_ids (PARSER_CONTEXT * parser, PT_NODE * node, PT_NODE * spec);
61 
62 extern PT_NODE *mq_set_references (PARSER_CONTEXT * parser, PT_NODE * statement, PT_NODE * spec);
63 
64 extern bool mq_is_outer_join_spec (PARSER_CONTEXT * parser, PT_NODE * spec);
65 
66 extern bool mq_is_updatable (DB_OBJECT * vclass_object);
67 extern bool mq_is_updatable_strict (DB_OBJECT * vclass_object);
68 
69 extern bool mq_is_updatable_attribute (DB_OBJECT * vclass, const char *attr_name, DB_OBJECT * base_class);
70 
71 extern bool mq_is_updatable_att (PARSER_CONTEXT * parser, DB_OBJECT * vmop, const char *attr_name, DB_OBJECT * rmop);
72 
73 extern int mq_get_attribute (DB_OBJECT * vclass, const char *attr_name, DB_OBJECT * base_class,
74  DB_VALUE * virtual_value, DB_OBJECT * base_instance);
75 
76 extern int mq_update_attribute (DB_OBJECT * vclass, const char *attr_name, DB_OBJECT * base_class,
77  DB_VALUE * virtual_value, DB_VALUE * base_value, const char **base_name, int db_auth);
78 
80 
81 
82 extern int mq_evaluate_expression (PARSER_CONTEXT * parser, PT_NODE * expr, DB_VALUE * value, DB_OBJECT * object,
83  UINTPTR spec_id);
84 
86  int values_count, DB_OBJECT * object, UINTPTR spec_id);
87 
88 extern int mq_evaluate_check_option (PARSER_CONTEXT * parser, PT_NODE * expr, DB_OBJECT * object, PT_NODE * view_class);
89 
90 extern int mq_get_expression (DB_OBJECT * object, const char *expr, DB_VALUE * value);
91 
93 
95 
97 
99 #endif /* _VIEW_TRANSFORM_H_ */
PT_NODE * mq_make_derived_spec(PARSER_CONTEXT *parser, PT_NODE *node, PT_NODE *subquery, int *idx, PT_NODE **spec_ptr, PT_NODE **attr_list_ptr)
bool mq_is_outer_join_spec(PARSER_CONTEXT *parser, PT_NODE *spec)
int mq_update_attribute(DB_OBJECT *vclass, const char *attr_name, DB_OBJECT *base_class, DB_VALUE *virtual_value, DB_VALUE *base_value, const char **base_name, int db_auth)
PT_NODE * mq_get_references(PARSER_CONTEXT *parser, PT_NODE *statement, PT_NODE *spec)
PT_NODE * mq_set_references(PARSER_CONTEXT *parser, PT_NODE *statement, PT_NODE *spec)
int mq_evaluate_expression(PARSER_CONTEXT *parser, PT_NODE *expr, DB_VALUE *value, DB_OBJECT *object, UINTPTR spec_id)
bool mq_is_updatable(DB_OBJECT *vclass_object)
PT_NODE * mq_oid(PARSER_CONTEXT *parser, PT_NODE *spec)
PT_NODE * mq_reset_ids(PARSER_CONTEXT *parser, PT_NODE *statement, PT_NODE *spec)
int mq_get_attribute(DB_OBJECT *vclass, const char *attr_name, DB_OBJECT *base_class, DB_VALUE *virtual_value, DB_OBJECT *base_instance)
PT_UPDATABILITY mq_updatable(PARSER_CONTEXT *parser, PT_NODE *statement)
bool mq_is_updatable_strict(DB_OBJECT *vclass_object)
PT_NODE * mq_rewrite_aggregate_as_derived(PARSER_CONTEXT *parser, PT_NODE *agg_sel)
bool mq_is_updatable_attribute(DB_OBJECT *vclass, const char *attr_name, DB_OBJECT *base_class)
int mq_evaluate_check_option(PARSER_CONTEXT *parser, PT_NODE *expr, DB_OBJECT *object, PT_NODE *view_class)
int mq_get_expression(DB_OBJECT *object, const char *expr, DB_VALUE *value)
SP_PARSER_CTX * parser
PT_NODE * mq_reset_paths(PARSER_CONTEXT *parser, PT_NODE *statement, PT_NODE *root_spec)
DB_OBJECT * mq_fetch_one_real_class(DB_OBJECT *vclass)
PT_NODE * mq_rewrite_query_as_derived(PARSER_CONTEXT *parser, PT_NODE *query)
PT_NODE * mq_get_references_helper(PARSER_CONTEXT *parser, PT_NODE *statement, PT_NODE *spec, bool get_spec_referenced_attr)
enum pt_updatability PT_UPDATABILITY
PT_NODE * mq_reset_ids_in_methods(PARSER_CONTEXT *parser, PT_NODE *statement)
PT_NODE * mq_reset_ids_in_statement(PARSER_CONTEXT *parser, PT_NODE *statement)
PT_NODE * mq_clear_ids(PARSER_CONTEXT *parser, PT_NODE *node, PT_NODE *spec)
PT_NODE * mq_bump_correlation_level(PARSER_CONTEXT *parser, PT_NODE *node, int increment, int match)
int mq_evaluate_expression_having_serial(PARSER_CONTEXT *parser, PT_NODE *expr, DB_VALUE *values, int values_count, DB_OBJECT *object, UINTPTR spec_id)
pt_updatability
PT_NODE * mq_translate(PARSER_CONTEXT *parser, PT_NODE *volatile node)
bool mq_is_updatable_att(PARSER_CONTEXT *parser, DB_OBJECT *vmop, const char *attr_name, DB_OBJECT *rmop)
PT_FETCH_AS