57 #define UCI_OPT_UNSAFE_NULL 0x0001 60 #define REPETITIVE_EXPANSION_UNIT 100 61 #define DYNAMIC_EXPANSION_UNIT 20 62 #define POINTER_EXPANSION_UNIT 10 63 #define CS_STMT_ID_EXPANSION_UNIT 5 64 #define UCI_ENV_STACK_EXPANSION_UNIT 4 65 #define DB_VALS_STCK_EXPANSION_UNIT 4 67 #define IS_NULL_INDICATED(ind) ((ind) < 0) 77 #define CHK_SQLCODE() \ 88 #define CHK_DBI_WARN() \ 90 if (sql_warn.is_warning) \ 92 if (sql_warn.null_in_agg) \ 94 SET_WARN_NULL_IN_AGG (); \ 95 sql_warn.null_in_agg = false; \ 97 else if (sql_warn.no_where) \ 99 SET_WARN_NO_WHERE (); \ 100 sql_warn.no_where = false; \ 102 sql_warn.is_warning = false; \ 112 #define CHECK_DBI(predicate, err_action) \ 118 if(SQLCODE == ER_LK_UNILATERALLY_ABORTED || \ 119 SQLCODE == ER_TM_SERVER_DOWN_UNILATERALLY_ABORTED) \ 131 #define IS_USER_DB_TYPE(t) ((t) >= DB_TYPE_FIRST && (t) <= DB_TYPE_LAST) 134 #define STRING_C_TYPE(s) (((s)==DB_TYPE_C_CHAR) || \ 135 ((s)==DB_TYPE_C_VARCHAR) || \ 136 ((s)==DB_TYPE_C_NCHAR) || \ 137 ((s)==DB_TYPE_C_VARNCHAR) || \ 138 ((s)==DB_TYPE_C_BIT) || \ 139 ((s)==DB_TYPE_C_VARBIT)) 142 #define AFFECT_OBJECTS(stmt_type) (stmt_type == CUBRID_STMT_SELECT || \ 143 stmt_type == CUBRID_STMT_UPDATE || \ 144 stmt_type == CUBRID_STMT_DELETE || \ 145 stmt_type == CUBRID_STMT_INSERT) 148 #define HAS_RESULT(stmt_type) (stmt_type == CUBRID_STMT_SELECT || \ 149 stmt_type == CUBRID_STMT_CALL || \ 150 stmt_type == CUBRID_STMT_INSERT || \ 151 stmt_type == CUBRID_STMT_GET_ISO_LVL || \ 152 stmt_type == CUBRID_STMT_GET_TIMEOUT || \ 153 stmt_type == CUBRID_STMT_GET_OPT_LVL || \ 154 stmt_type == CUBRID_STMT_GET_STATS) 157 #define SQLCA_NUM_AFFECTED_OBJECTS sqlca.sqlerrd[2] 158 #define SQLCA_IS_WARNING SQLWARN0 159 #define SQLCA_OUTPUT_TRUNC SQLWARN1 160 #define SQLCA_NULL_IN_AGG SQLWARN2 161 #define SQLCA_VARS_MISMATCH SQLWARN3 162 #define SQLCA_NO_WHERE SQLWARN4 167 #define SET_WARN_OUTPUT_TRUNC() SQLCA_OUTPUT_TRUNC = \ 168 SQLCA_IS_WARNING = SQL_WARNING_CHAR 171 #define SET_WARN_NULL_IN_AGG() SQLCA_NULL_IN_AGG = \ 172 SQLCA_IS_WARNING = SQL_WARNING_CHAR 175 #define SET_WARN_VARS_MISMATCH() \ 176 SQLCA_VARS_MISMATCH = \ 177 SQLCA_IS_WARNING = SQL_WARNING_CHAR 180 #define SET_WARN_NO_WHERE() SQLCA_NO_WHERE = \ 181 SQLCA_IS_WARNING = SQL_WARNING_CHAR 186 #define PUT_UCI_ERR_NOMOREMEMORY(size) \ 187 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 188 ER_OUT_OF_VIRTUAL_MEMORY, 1, (size_t) (size)) 191 #define PUT_UCI_ERR_TOOFEWHOSTVARS(num_markers) \ 192 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 193 ER_UCI_TOO_FEW_HOST_VARS, 0) 196 #define PUT_UCI_ERR_TOOMANYHOSTVARS(num_cols) \ 197 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 198 ER_UCI_TOO_MANY_HOST_VARS, 0) 201 #define PUT_UCI_ERR_NULLINDNEEDED() \ 202 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 203 ER_UCI_NULL_IND_NEEDED, 0) 206 #define PUT_UCI_ERR_NOTPREPAREDSTMT() \ 207 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 208 ER_UCI_NOT_PREPARED_STMT, 0) 211 #define PUT_UCI_ERR_NOTSELECTSTMT() \ 212 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 213 ER_UCI_NOT_SELECT_STMT, 0) 216 #define PUT_UCI_ERR_CURSORNOTOPENED() \ 217 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 218 ER_UCI_CURSOR_NOT_OPENED, 0) 221 #define PUT_UCI_ERR_CURSORSTILLOPEN() \ 222 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 223 ER_UCI_CURSOR_STILL_OPEN, 0) 226 #define PUT_UCI_ERR_MULTIPLEOBJECTS() \ 227 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 228 ER_UCI_MULTIPLE_OBJECTS, 0) 231 #define PUT_UCI_ERR_NOMARKALLOWED() \ 232 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 233 ER_UCI_NO_MARK_ALLOWED, 0) 236 #define PUT_UCI_ERR_INVALIDDATATYPE() \ 237 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 238 ER_UCI_INVALID_DATA_TYPE, 0) 241 #define PUT_UCI_ERR_INVALIDCSPOS() \ 242 er_set(ER_ERROR_SEVERITY, __FILE__, __LINE__, \ 243 ER_QPROC_INVALID_CRSPOS, 0) 245 #if defined(UCI_TEMPORARY) 246 typedef struct sql_warn_type
248 unsigned int is_warning:1;
249 unsigned int null_in_agg:1;
250 unsigned int no_where:1;
312 #if defined(UCI_TEMPORARY) 332 char saved_sqlca_sqlwarn[
sizeof (((
CUBRIDCA *) 0)->sqlwarn)];
341 #if defined(UCI_TEMPORARY) 342 SQL_WARN_TYPE sql_warn;
421 #if defined(UCI_TEMPORARY) 455 strcpy (sqlca.
sqlcaid,
"SQLCA ");
460 for (i = 0; i < DIM (sqlca.
sqlerrd); i++)
472 for (i = 0; i <
sizeof (sqlca.
sqlext); i++)
491 uci_start (
void *file_id,
const char *filename,
int lineno,
unsigned int opt)
546 if (curr_result !=
NULL)
791 attrs = (
char **) malloc ((attrlist_len + 1) *
sizeof (
char *));
807 if (val_list !=
NULL)
809 val = val_list->info.node_list.list;
811 if (val_list ==
NULL || val_list->next ==
NULL)
829 for (
i = 0; val !=
NULL;
i++, val = val->next, insert_value =
NULL)
849 insert_value = &tmp_val;
854 if (insert_value ==
NULL 1098 #if defined(UCI_TEMPORARY) 1164 if (num_out_vars >= 0 && num_out_vars < cs->num_columns)
1287 if (session ==
NULL)
1306 dt =
alloc_dynamic (stmt_no, stmt_type, session, stmt_id, markers, col_spec, (
char *) stmt, length);
1309 if (col_spec !=
NULL)
1520 if (dummy_result !=
NULL)
1563 if (object_col_spec !=
NULL)
1720 int tmp_len = (int)
strlen ((
char *) buf);
1729 if (bufsize > precision)
1731 bufsize = precision;
1801 if (current_column >= num_cols)
1833 int outlen, tmp_xferlen;
1843 if (xferlen ==
NULL)
1845 xferlen = &tmp_xferlen;
1848 (void) memset (buf, 0, size);
1849 error =
db_value_get (&val, type, buf, size, xferlen, &outlen);
1883 else if (outlen == -1)
2026 if (*curr_col >= num_cols)
2059 for (i = 0, var = desc->
sqlvar; i < num_values; i++, var++)
2077 for (i = 0, var = desc->
sqlvar; i < desc->sqldesc; i++, var++)
2118 if (t_repetitive ==
NULL)
2126 repetitive_stmts = t_repetitive;
2169 while (rt[i].no != no || rt[i].file_id !=
curr_file)
2213 num_repetitive_stmts = 0;
2263 if (t_dynamic ==
NULL)
2271 dynamic_stmts = t_dynamic;
2277 (void) memset (dt, 0,
sizeof (
DYNAMIC));
2318 while (dt[i].stmt_no != stmt_no || dt[i].file_id !=
curr_file)
2365 num_dynamic_stmts = 0;
2375 #if defined(UCI_TEMPORARY) 2395 #if defined(UCI_TEMPORARY) 2396 cs->static_session = static_session;
2397 cs->static_stmt_id = static_stmt_id;
2423 for (cs = cursor_list; cs !=
NULL; cs = cs->
next)
2449 for (p_cs = &cursor_list; *p_cs !=
NULL;)
2452 if ((no < 0) || ((*p_cs)->no == no && (*p_cs)->file_id ==
curr_file))
2478 #if defined(UCI_TEMPORARY) 2479 if (cs->static_session && cs->static_stmt_id >= 0)
2489 *p_cs = (*p_cs)->
next;
2500 p_cs = &(*p_cs)->
next;
2546 t_pointer = (
POINTER *) realloc (*p_p,
sizeof (
POINTER) * new_num);
2548 if (t_pointer ==
NULL)
2599 for (i = 0; i < *pn; i++)
2693 realloc (uci_env_stack, new_size));
2762 uci_env_stack_top--;
2821 #if !defined(UCI_TEMPORARY) 2822 #error "We should move READONLY_SELECT flag to db_execute() \ 2823 for reduce overhead of cursor on dynamic stmts." 2826 #if !defined(UCI_TEMPORARY) 2827 #error "We should provide another function/language to get \ void uci_close_cs(int cs_no)
#define pt_is_expr_node(n)
#define ER_LK_UNILATERALLY_ABORTED
struct cubridca::@69 sqlwarn
static void copy_column_spec_to_sqlda(DB_QUERY_TYPE *col_spec, CUBRIDDA *desc)
#define PUT_UCI_ERR_CURSORSTILLOPEN()
DB_OBJECT * db_gadget_exec(DB_GADGET *gadget, int num_dbvals, DB_VALUE dbvals[])
#define HAS_RESULT(stmt_type)
struct uci_env_stack_entry UCI_ENV_STACK_ENTRY
int db_gadget_bind(DB_GADGET *gadget, const char *attribute_name, DB_VALUE *dbval)
void uci_startup(const char *pgm_name)
static void set_sqlca_err(void)
void uci_execute(int stmt_no, int num_out_vars)
int db_domain_scale(const DB_DOMAIN *domain)
int db_login(const char *name, const char *password)
#define SET_WARN_VARS_MISMATCH()
static int num_curr_result_columns
int db_domain_precision(const DB_DOMAIN *domain)
#define POINTER_EXPANSION_UNIT
static REPETITIVE * alloc_repetitive(int no, DB_SESSION *session, STATEMENT_ID stmt_id, CUBRID_STMT_TYPE stmt_type, DB_GADGET *gadget)
void uci_describe(int stmt_no, CUBRIDDA *desc)
void uci_disconnect(void)
#define PUT_UCI_ERR_NOMARKALLOWED()
DB_QUERY_RESULT * db_get_db_value_query_result(DB_VALUE *val)
void uci_fetch_cs(int cs_no, int num_out_vars)
struct repetitive REPETITIVE
int db_value_clone(DB_VALUE *src, DB_VALUE *dest)
void uci_put_value(DB_INDICATOR *indicator, DB_TYPE type, int precision, int scale, DB_TYPE_C ctype, void *buf, int bufsize)
static REPETITIVE * repetitive_stmts
static REPETITIVE * get_repetitive(int no)
int db_query_end(DB_QUERY_RESULT *result)
static int uci_env_stack_top
int db_make_object(DB_VALUE *value, DB_C_OBJECT *obj)
#define SQLCA_NULL_IN_AGG
#define PUT_UCI_ERR_INVALIDDATATYPE()
#define PUT_UCI_ERR_NOMOREMEMORY(size)
static CURSOR * cursor_list
static int curr_result_column
static void pop_uci_environment(void)
static void free_repetitive(void)
void uci_object_describe(DB_OBJECT *obj, int num_attrs, const char **attr_names, CUBRIDDA *desc)
PARSER_CONTEXT * db_get_parser(DB_SESSION *session)
static int push_uci_environment(void)
void uci_execute_immediate(const char *stmt, int length)
#define AFFECT_OBJECTS(stmt_type)
void db_query_format_free(DB_QUERY_TYPE *query_type)
static CURSOR * alloc_cursor(int no, DB_QUERY_RESULT *result)
static DYNAMIC * get_dynamic(int stmt_no)
#define PUT_UCI_ERR_CURSORNOTOPENED()
#define PUT_UCI_ERR_NOTPREPAREDSTMT()
void uci_get_value(int cs_no, DB_INDICATOR *ind, void *buf, DB_TYPE_C type, int size, int *xferlen)
void uci_get_db_value(int cs_no, DB_VALUE *db_value_ptr)
static bool is_uci_start_state
int db_query_get_tuple_oid(DB_QUERY_RESULT *result, DB_VALUE *db_value)
const char * saved_curr_filename
SM_DOMAIN * db_query_format_domain(DB_QUERY_TYPE *query_type)
const char * pt_get_name(PT_NODE *nam)
#define PUT_UCI_ERR_TOOMANYHOSTVARS(num_cols)
static int num_repetitive_stmts
#define PUT_UCI_ERR_NOTSELECTSTMT()
#define SQLCA_OUTPUT_TRUNC
DB_QUERY_TYPE * db_query_format_next(DB_QUERY_TYPE *query_type)
static void free_db_values(void)
char * db_query_format_name(DB_QUERY_TYPE *query_type)
DB_NODE * db_get_statement(DB_SESSION *session, int id)
void db_gadget_destroy(DB_GADGET *gadget)
#define DYNAMIC_EXPANSION_UNIT
int db_restart(const char *program, int print_version, const char *volume)
DB_QUERY_TYPE * column_spec
int db_object_fetch(DB_OBJECT *obj, int num_attrs, const char **attrs, DB_QUERY_RESULT **result)
static void check_stack_size(void)
#define CHECK_DBI(predicate, err_action)
static CURSOR * get_cursor(int no)
struct cs_stmt_id CS_STMT_ID
static int last_repetitive
int db_query_first_tuple(DB_QUERY_RESULT *result)
PT_NODE * pt_class_part(const PT_NODE *statement)
PT_NODE * pt_attrs_part(const PT_NODE *insert_statement)
#define ER_OUT_OF_VIRTUAL_MEMORY
#define UCI_OPT_UNSAFE_NULL
int db_execute_and_keep_statement(DB_SESSION *session, int stmt_ndx, DB_QUERY_RESULT **result)
void uci_put_descriptor(CUBRIDDA *desc)
void uci_get_descriptor(int cs_no, CUBRIDDA *desc)
static const char * curr_filename
void pt_evaluate_tree_having_serial(PARSER_CONTEXT *parser, PT_NODE *tree, DB_VALUE *db_value, int vals_cnt)
static void uci_get_value_indirect(int cs_no, DB_INDICATOR *ind, void **bufp, int *sizep)
void uci_start(void *file_id, const char *filename, int lineno, unsigned int opt)
DB_GADGET * db_gadget_create(const char *class_name, const char *attribute_names[])
CUBRID_STMT_TYPE stmt_type
static int num_dynamic_stmts
#define DB_VALS_STCK_EXPANSION_UNIT
void uci_prepare(int stmt_no, const char *stmt, int length)
DB_OBJECT * db_get_object(const DB_VALUE *value)
int db_abort_transaction(void)
#define TP_DOMAIN_TYPE(dom)
int db_execute_statement(DB_SESSION *session, int stmt_ndx, DB_QUERY_RESULT **result)
#define IS_NULL_INDICATED(ind)
const char * er_msg(void)
#define SET_WARN_OUTPUT_TRUNC()
int db_drop(DB_OBJECT *obj)
DB_SESSION * db_open_buffer(const char *buffer)
bool prm_get_commit_on_shutdown(void)
void db_include_oid(DB_SESSION *session, int include_oid)
int db_compile_statement(DB_SESSION *session)
void db_close_session(DB_SESSION *session)
#define SQLCA_NUM_AFFECTED_OBJECTS
#define SQLCA_VARS_MISMATCH
void uci_psh_curr_csr_oid(int cs_no)
#define CONST_CAST(dest_type, expr)
#define PUT_UCI_ERR_NULLINDNEEDED()
PT_NODE * pt_from_entity_part(const PT_NODE *node)
void uci_static(int stmt_no, const char *stmt, int length, int num_out_vars)
int db_query_column_count(DB_QUERY_RESULT *result)
#define pt_is_value_node(n)
static void error(const char *msg)
int db_get_statement_type(DB_SESSION *session, int stmt)
#define DB_DEFAULT_PRECISION
int db_query_next_tuple(DB_QUERY_RESULT *result)
static void clean_up(void)
void uci_delete_cs(int cs_no)
int db_query_format_size(DB_QUERY_TYPE *query_type)
const char * au_get_public_user_name(void)
static void free_dynamic(void)
#define PUT_UCI_ERR_MULTIPLEOBJECTS()
#define free_and_init(ptr)
CUBRID_STMT_TYPE stmt_type
int db_push_values(DB_SESSION *session, int count, DB_VALUE *in_values)
static void free_pointers(CURSOR *cs)
long uci_get_sqlcode(void)
int db_value_put(DB_VALUE *value, const DB_TYPE_C c_type, void *input, const int input_length)
PT_NODE * pt_values_part(const PT_NODE *insert_statement)
void uci_connect(const char *db_name, const char *user_name, const char *passwd)
int db_object_describe(DB_OBJECT *obj, int num_attrs, const char **attrs, DB_QUERY_TYPE **col_spec)
int db_get_string_size(const DB_VALUE *value)
int db_value_get(DB_VALUE *value, const DB_TYPE_C c_type, void *buf, const int buflen, int *xflen, int *outlen)
DB_QUERY_TYPE * db_get_query_type_list(DB_SESSION *session, int stmt_ndx)
static POINTER * put_pointer(CURSOR *cs, DB_VALUE *addr)
#define ER_TM_SERVER_DOWN_UNILATERALLY_ABORTED
static UCI_ENV_STACK_ENTRY * uci_env_stack
#define DB_VALUE_TYPE(value)
int db_make_null(DB_VALUE *value)
#define DB_IS_NULL(value)
char * strdup(const char *str)
static DYNAMIC * alloc_dynamic(int stmt_no, CUBRID_STMT_TYPE stmt_type, DB_SESSION *session, STATEMENT_ID stmt_id, int num_markers, DB_QUERY_TYPE *col_spec, char *stmt, int length)
int db_value_clear(DB_VALUE *value)
int db_query_get_tuple_value(DB_QUERY_RESULT *result, int index, DB_VALUE *value)
char saved_sqlca_sqlwarn[sizeof(((CUBRIDCA *) 0) ->sqlwarn)]
static char program_name[PATH_MAX]
static DB_QUERY_RESULT * curr_result
static int num_uci_env_stack_entries
DB_INDICATOR uci_null_ind
struct cubridca::@68 sqlerrm
static struct @70 db_Value_table
static POINTER * pointers
void uci_object_fetch(DB_OBJECT *obj, int num_attrs, const char **attr_names, int num_out_vars)
int pt_length_of_list(const PT_NODE *list)
#define UCI_ENV_STACK_EXPANSION_UNIT
static void free_cursor(int no)
DB_VALUE * pt_value_to_db(PARSER_CONTEXT *parser, PT_NODE *value)
int db_number_of_input_markers(DB_SESSION *session, int stmt)
static void drop_uci_env_stack(void)
char uci_get_sqlwarn_0(void)
void uci_open_cs(int cs_no, const char *stmt, int length, int stmt_no, int readonly)
#define REPETITIVE_EXPANSION_UNIT
DB_CONST_C_CHAR db_get_string(const DB_VALUE *value)
#define PUT_UCI_ERR_TOOFEWHOSTVARS(num_markers)
static DYNAMIC * dynamic_stmts
int db_query_tuple_count(DB_QUERY_RESULT *result)
int db_commit_transaction(void)
int db_value_domain_init(DB_VALUE *value, const DB_TYPE type, const int precision, const int scale)
static int uci_get_next_column(int cs_no, DB_VALUE *dbval)