1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
|
/*
* eqlcomp.h
*
* $Id$
*
* This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
* project.
*
* Copyright (C) 1998-2012 OpenLink Software
*
* This project is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; only version 2 of the License, dated June 1991.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#ifndef _EQLCOMP_H
#define _EQLCOMP_H
#include "sqlcomp.h"
#include "sqlnode.h"
void eql_stmt_comp (comp_context_t * cc, caddr_t stmt, data_source_t ** head,
data_source_t ** tail);
query_t *eql_compile_2 (const char *string, client_connection_t * cli, caddr_t * err,
int mode);
/* mode for sql_compile - other values are SQL_CURSOR_<xx> */
#define SQLC_DEFAULT _SQL_CURSOR_FORWARD_ONLY
#define SQLC_DO_NOT_STORE_PROC -1
#define SQLC_PARSE_ONLY -2
#define SQLC_NO_REMOTE -3
#define SQLC_TRY_SQLO -4
#define SQLC_SQLO_VERBOSE -5
#define SQLC_UNIQUE_ROWS -6
#define SQLC_SQLO_SCORE -7
#define SQLC_QR_TEXT_IS_CONSTANT -8
#define SQLC_IS_RECOMPILE 0x100
#define SQLC_PARSE_ONLY_REC -9
#define SQLC_STATIC_PRESERVES_TREE -10
query_t *eql_compile (const char *string, client_connection_t * cli);
caddr_t box_keyword_get (caddr_t * box, char *kwd, int *);
stmt_compilation_t *qr_describe (query_t * qr, caddr_t *err_ret);
stmt_compilation_t *qr_describe_1 (query_t * qr, caddr_t *err_ret, client_connection_t * cli);
caddr_t str_to_sym (const char *str);
void ts_free (table_source_t * ts);
void sel_free (select_node_t * sel);
state_slot_t * ssl_copy (comp_context_t * cc, state_slot_t * org);
state_slot_t *ssl_new_variable (comp_context_t * cc, const char *name, dtp_t dtp);
state_slot_t *ssl_new_parameter (comp_context_t * cc, const char *name);
state_slot_t *ssl_new_column (comp_context_t * cc, const char *cr_name,
dbe_column_t * col);
state_slot_t *ssl_new_inst_variable (comp_context_t * cc, const char *name,
dtp_t dtp);
state_slot_t * ssl_new_tree (comp_context_t * cc, const char *name);
extern state_slot_t *ssl_new_constant (comp_context_t * cc, caddr_t val);
extern state_slot_t *ssl_new_big_constant (comp_context_t * cc, caddr_t val);
state_slot_t *ssl_new_placeholder (comp_context_t * cc, const char *name);
state_slot_t *ssl_new_itc (comp_context_t * cc);
int cc_new_instance_slot (comp_context_t * cc);
void ins_free (insert_node_t * ins);
void upd_free (update_node_t * upd);
void ddl_free (ddl_node_t * ddl);
void sqlc_error (comp_context_t * cc, const char *st, const char *str,...);
void sqlc_new_error (comp_context_t * cc, const char *st, const char *virt_code, const char *str,...);
void sqlc_resignal_1 (comp_context_t * cc, caddr_t err);
extern query_t *DBG_NAME (sql_compile) (DBG_PARAMS const char *string2, client_connection_t * cli, caddr_t * err,
volatile int store_procs);
extern query_t *DBG_NAME (sql_proc_to_recompile) (DBG_PARAMS const char *string2, client_connection_t * cli, caddr_t proc_name,
int text_is_constant);
#ifdef MALLOC_DEBUG
#define sql_compile(s,c,e,sp) dbg_sql_compile(__FILE__,__LINE__,(s),(c),(e),(sp))
#define sql_proc_to_recompile(s,c,pn,tic) dbg_sql_proc_to_recompile(__FILE__,__LINE__,(s),(c),(pn),(tic))
#endif
#if defined (MALLOC_DEBUG) || defined (VALGRIND)
extern query_t *static_qr_dllist; /*!< Double-linked list of queries that should be freed only at server shutdown. */
extern query_t *dbg_sql_compile_static (const char *file, int line,
const char *string2, client_connection_t * cli, caddr_t * err,
volatile int store_procs);
#define sql_compile_static(s,c,e,sp) dbg_sql_compile_static(__FILE__,__LINE__,(s),(c),(e),(sp))
extern void static_qr_dllist_append (query_t *qr, int gpf_on_dupe);
extern void static_qr_dllist_remove (query_t *qr);
#else
extern query_t *sql_compile_static (const char *string2, client_connection_t * cli, caddr_t * err,
volatile int store_procs);
#define static_qr_dllist_append(qr,g)
#define static_qr_dllist_remove(qr)
#endif
extern void sql_compile_many (int count, int compile_static, ...);
void sqlc_set_client (client_connection_t * cli);
#define TA_SQLC_ERROR 111
#define TA_SQLC_CURRENT_CLIENT 113
#define TA_SQL_WARNING_SET 115
#define TA_TARGET_RDS 116
void ks_spec_add (search_spec_t ** place, search_spec_t * sp);
void data_source_init (data_source_t * src, comp_context_t * cc, int type);
void ks_add_key_cols (comp_context_t * cc, key_source_t * ks, dbe_key_t * key,
char *cr_name);
void ks_make_main_spec (comp_context_t * cc, key_source_t * ks, char *cr_name);
void query_free (query_t * query);
#define IS_TS_NODE(ts) \
((qn_input_fn) table_source_input == ts->src_gen.src_input || \
(qn_input_fn) table_source_input_unique == ts->src_gen.src_input)
void sqlc_ts_set_no_blobs (table_source_t * ts);
void ts_alias_current_of (table_source_t * ts);
void qr_add_current_of_output (query_t * qr);
void qr_resolve_aliases (query_t * qr);
int ssl_is_settable (state_slot_t * ssl);
typedef struct dependence_def_s
{
id_hash_t *ddef_name_to_qr;
dk_mutex_t *ddef_mtx;
} dependence_def_t;
typedef dk_set_t dependent_t;
dependence_def_t *dependence_def_new (int sz);
void qr_uses_object (query_t *qr, const char *object, dependent_t *dep, dependence_def_t *dependence);
void object_mark_affected (const char *object, dependence_def_t *dependence, int force_text_reparsing);
void qr_drop_obj_dependencies (query_t *qr, dependent_t *dep, dependence_def_t *ddef);
void qr_uses_table (query_t * qr, const char *tb);
void tb_mark_affected (const char *tb);
void udt_mark_affected (const char *tb);
extern void jso_mark_affected (const char *jso_inst);
int udt_is_qr_used (char *name);
void qr_uses_type (query_t * qr, const char *udt);
void qr_uses_jso (query_t * qr, const char *jso_iri);
void qc_free (struct query_cursor_s * qc);
search_spec_t ** ks_col_specs (key_source_t * ks, dbe_column_t * col,
int rm_from_row_specs);
void qr_garbage (query_t * qr, caddr_t garbage);
void sqlc_ins_keys (comp_context_t * cc, insert_node_t * ins);
void table_source_om (comp_context_t * cc, table_source_t * ts);
void qr_set_freeable (comp_context_t * cc, query_t * qr);
query_t *sqlc_make_policy_trig (comp_context_t *cc, dbe_table_t *tb, int op);
state_slot_t * ssl_with_info (comp_context_t * cc, state_slot_t * ssl);
state_slot_t * ssl_use_stock (comp_context_t * cc, state_slot_t * ssl);
void stssl_ins (comp_context_t * cc, instruction_t * ins);
void stssl_query (comp_context_t * cc, query_t * qr);
void stssl_cv (comp_context_t * cc, instruction_t * cv);
void il_init (comp_context_t * cc, inx_locality_t * il);
void key_source_om (comp_context_t * cc, key_source_t * ks);
void clb_free (cl_buffer_t * clb);
void dsr_free (data_source_t * x);
void qn_free (data_source_t * qn);
void cl_order_free (clo_comp_t ** ord);
#endif /* __EQLCOMP_H_010520 */
|