29 #include <sys/socket.h> 56 #if defined (SUPPRESS_STRLEN_WARNING) 57 #define strlen(s1) ((int) strlen(s1)) 60 #if !defined(INADDR_NONE) 61 #define INADDR_NONE 0xffffffff 64 #define PT_NODE_SP_NAME(node) \ 65 ((node)->info.sp.name->info.name.original) 67 #define PT_NODE_SP_TYPE(node) \ 68 ((node)->info.sp.type) 70 #define PT_NODE_SP_RETURN_TYPE(node) \ 71 ((node)->info.sp.ret_type->info.name.original) 73 #define PT_NODE_SP_JAVA_METHOD(node) \ 74 ((node)->info.sp.java_method->info.value.data_value.str->bytes) 76 #define PT_NODE_SP_COMMENT(node) \ 77 (((node)->info.sp.comment == NULL) ? NULL : \ 78 (node)->info.sp.comment->info.value.data_value.str->bytes) 80 #define PT_NODE_SP_ARG_COMMENT(node) \ 81 (((node)->info.sp_param.comment == NULL) ? NULL : \ 82 (node)->info.sp_param.comment->info.value.data_value.str->bytes) 84 #define MAX_ARG_COUNT 64 85 #define MAX_CALL_COUNT 16 86 #define SAVEPOINT_ADD_STORED_PROC "ADDSTOREDPROC" 87 #define SAVEPOINT_CREATE_STORED_PROC "CREATESTOREDPROC" 114 static FARPROC jsp_old_hook =
NULL;
124 PT_NODE * param_list,
const char *java_method,
const char *comment);
197 windows_socket_startup (jsp_old_hook);
328 const char *into_label, *proc;
331 DB_ARG_LIST *value_list = 0, *vl, **next_value_list;
344 next_value_list = &value_list;
349 bool to_break =
false;
352 if (*next_value_list ==
NULL)
372 if (db_value ==
NULL)
387 (*next_value_list)->val = db_value;
389 next_value_list = &(*next_value_list)->next;
410 while (value_list && vc)
412 vl = value_list->
next;
470 for (p = name_list, i = 0; p !=
NULL; p = p->
next)
473 if (name ==
NULL || name[0] ==
'\0')
502 const char *name, *java_method, *comment =
NULL;
509 bool has_savepoint =
false;
520 if (name ==
NULL || name[0] ==
'\0')
545 has_savepoint =
true;
560 for (p = param_list, param_count = 0; p !=
NULL; p = p->
next, param_count++)
602 const char *name_str =
NULL, *owner_str =
NULL, *comment_str =
NULL;
632 if (sp_owner !=
NULL)
634 owner_str = sp_owner->info.name.original;
660 if (sp_owner !=
NULL)
663 if (new_owner ==
NULL)
688 if (sp_owner !=
NULL)
700 if (sp_comment !=
NULL)
814 if (classobj_p ==
NULL)
942 PT_NODE * param_list,
const char *java_method,
const char *comment)
952 bool has_savepoint =
false;
954 const char *arg_comment;
956 if (java_method ==
NULL)
968 if (classobj_p ==
NULL)
980 has_savepoint =
true;
1021 for (node_p = param_list, i = 0; node_p !=
NULL; node_p = node_p->
next)
1154 MOP sp_mop, arg_mop, owner;
1155 DB_VALUE sp_type_val, arg_cnt_val, args_val, owner_val, temp;
1158 int save,
i, arg_cnt;
1220 for (i = 0; i < arg_cnt; i++)
1262 size =
sizeof (int);
1270 size =
sizeof (float);
1275 size =
sizeof (double);
1296 size =
sizeof (int) * 3;
1300 size =
sizeof (int) * 6;
1304 size =
sizeof (int) * 7;
1319 for (i = 0; i < ncol; i++)
1355 for (p = args; p !=
NULL; p = p->
next)
1512 char *ptr, *decomposed =
NULL;
1515 bool was_decomposed =
false;
1525 int alloc_size = decomp_size + 1;
1528 if (decomposed !=
NULL)
1532 decomposed[decomp_size] =
'\0';
1533 assert (decomp_size < alloc_size);
1536 v_size = decomp_size;
1537 was_decomposed =
true;
1567 int year, month, day;
1626 int year, mon, day, hour,
min, sec;
1659 int year, mon, day, hour,
min, sec, msec;
1702 for (i = 0; i < ncol; i++)
1904 int req_code, arg_count,
i,
strlen;
1905 int req_size, nbytes;
1912 buffer = (
char *) malloc (req_size);
1928 for (p = sp_args->
args, i = 0; p !=
NULL; p = p->
next, i++)
1938 nbytes =
jsp_writen (sockfd, buffer, req_size);
1939 if (nbytes != req_size)
1967 int idx = (MAX_CALL_COUNT - 1) -
i;
1985 int nbytes =
jsp_writen (sockfd, request, (
int)
sizeof (
int));
1986 if (nbytes != (
int)
sizeof (
int))
1994 nbytes =
jsp_readn (sockfd, (
char *) &code, (
int)
sizeof (
int));
1995 if (nbytes != (
int)
sizeof (
int))
2000 code =
ntohl (code);
2002 if (code == SP_CODE_DESTROY)
2166 char *invalid_pos =
NULL;
2185 bool is_composed =
false;
2188 if (composed ==
NULL)
2194 composed[composed_size] =
'\0';
2196 assert (composed_size <= size_in);
2361 for (i = 0; i < ncol; i++)
2582 int start_code = -1, end_code = -1;
2588 nbytes =
jsp_readn (sockfd, (
char *) &start_code, (
int)
sizeof (
int));
2589 if (nbytes != (
int)
sizeof (
int))
2594 start_code =
ntohl (start_code);
2633 if (start_code != end_code)
2659 int nbytes, res_size;
2660 nbytes =
jsp_readn (sockfd, (
char *) &res_size, (
int)
sizeof (
int));
2661 if (nbytes != (
int)
sizeof (
int))
2666 res_size =
ntohl (res_size);
2668 buffer = (
char *) malloc (res_size);
2675 nbytes =
jsp_readn (sockfd, buffer, res_size);
2676 if (nbytes != res_size)
2700 for (arg_list_p = sp_args->
args, i = 0; arg_list_p !=
NULL; arg_list_p = arg_list_p->
next, i++)
2766 int retry_count = 0;
2865 DB_VALUE method, param, param_cnt_val, return_type, temp,
mode, arg_type;
2866 int arg_cnt, param_cnt,
i;
2875 memset (&sp_args, 0,
sizeof (
SP_ARGS));
2899 sp_args.
args = args;
2909 if (param_cnt != arg_cnt)
2925 for (i = 0; i < arg_cnt; i++)
3005 next_val_list = &val_list;
3006 for (i = 0; i < arg_cnt; i++)
3010 if (*next_val_list ==
NULL)
3017 if (argarray[i] ==
NULL)
3021 db_val = argarray[
i];
3022 (*next_val_list)->label =
"";
3023 (*next_val_list)->val = db_val;
3025 next_val_list = &(*next_val_list)->next;
3032 vl = val_list->
next;
#define SP_ATTR_RETURN_TYPE
DB_OBJECT * db_find_class(const char *name)
static int jsp_send_call_request(const SOCKET sockfd, const SP_ARGS *sp_args)
DB_C_FLOAT db_get_float(const DB_VALUE *value)
#define ER_SP_ALREADY_EXIST
DB_COLLECTION * set_create(DB_TYPE type, int initial_size)
int tran_system_savepoint(const char *savept_name)
int db_make_datetime(DB_VALUE *value, const DB_DATETIME *datetime)
#define CHECK_MODIFICATION_ERROR()
int jsp_call_from_server(DB_VALUE *returnval, DB_VALUE **argarray, const char *name, const int arg_cnt)
static int jsp_execute_stored_procedure(const SP_ARGS *args)
#define ER_SP_CANNOT_RETURN_RESULTSET
DB_COLLECTION * db_get_set(const DB_VALUE *value)
PT_METHOD_CALL_INFO method_call
bool unicode_string_need_compose(const char *str_in, const int size_in, int *size_out, const UNICODE_NORMALIZATION *norm)
#define SP_ATTR_ARG_COUNT
int db_string_to_timestamp(const char *str, DB_TIMESTAMP *utime)
char * or_unpack_string(char *ptr, char **string)
void tran_end_libcas_function(void)
#define AU_SAVE_AND_ENABLE(save)
MOP ws_mop(const OID *oid, MOP class_mop)
void set_free(DB_COLLECTION *set)
void jsp_set_prepare_call(void)
int db_make_bigint(DB_VALUE *value, const DB_BIGINT num)
int db_get_int(const DB_VALUE *value)
void * jsp_get_db_result_set(int h_id)
DB_C_DOUBLE db_get_double(const DB_VALUE *value)
static int jsp_get_value_size(DB_VALUE *value)
int db_datetime_decode(const DB_DATETIME *datetime, int *month, int *day, int *year, int *hour, int *minute, int *second, int *millisecond)
static char * jsp_unpack_timestamp_value(char *buffer, DB_VALUE *retval)
static char * jsp_pack_bigint_argument(char *buffer, DB_VALUE *value)
static char * jsp_unpack_numeric_value(char *buffer, DB_VALUE *retval)
int libcas_main(SOCKET fd)
static int jsp_add_stored_procedure_argument(MOP *mop_p, const char *sp_name, const char *arg_name, int index, PT_TYPE_ENUM data_type, PT_MISC_TYPE mode, const char *arg_comment)
void jsp_unset_prepare_call(void)
int db_value_clone(DB_VALUE *src, DB_VALUE *dest)
static char * jsp_pack_datetime_argument(char *buffer, DB_VALUE *value)
char * or_pack_string(char *ptr, const char *string)
static char * jsp_pack_set_argument(char *buffer, DB_VALUE *value)
#define PT_NODE_SP_NAME(node)
enum pt_type_enum PT_TYPE_ENUM
int db_string_to_datetime(const char *str, DB_DATETIME *datetime)
struct db_arg_list * next
void OR_PUT_DOUBLE(char *ptr, double val)
int db_make_object(DB_VALUE *value, DB_C_OBJECT *obj)
#define SM_MAX_IDENTIFIER_LENGTH
static SP_TYPE_ENUM jsp_map_pt_misc_to_sp_type(PT_MISC_TYPE pt_enum)
DB_COLLECTION * set_create_sequence(int size)
PT_STORED_PROC_PARAM_INFO sp_param
static int jsp_add_stored_procedure(const char *name, const PT_MISC_TYPE type, const PT_TYPE_ENUM ret_type, PT_NODE *param_list, const char *java_method, const char *comment)
#define ER_SP_INVALID_PARAM_COUNT
bool au_is_dba_group_member(MOP user)
static int jsp_alloc_response(const SOCKET sockfd, char *&buffer)
static char * jsp_pack_numeric_argument(char *buffer, DB_VALUE *value)
#define OR_ALIGNED_BUF(size)
DB_OBJECT * db_find_user(const char *name)
void unicode_compose_string(const char *str_in, const int size_in, char *str_out, int *size_out, bool *is_composed, const UNICODE_NORMALIZATION *norm)
void sm_downcase_name(const char *name, char *buf, int maxlen)
int db_make_sequence(DB_VALUE *value, DB_C_SET *set)
DB_OBJECT * dbt_finish_object(DB_OTMPL *def)
#define ER_SP_EXECUTE_ERROR
static char * jsp_unpack_short_value(char *buffer, DB_VALUE *retval)
char * or_unpack_string_nocopy(char *ptr, char **string)
#define SP_ARG_CLASS_NAME
void dbt_abort_object(DB_OTMPL *def)
#define ER_SP_INVALID_NAME
int set_size(DB_COLLECTION *set)
static char * jsp_pack_timestamp_argument(char *buffer, DB_VALUE *value)
static char * jsp_unpack_object_value(char *buffer, DB_VALUE *retval)
static int jsp_map_pt_misc_to_sp_mode(PT_MISC_TYPE pt_enum)
static char * jsp_check_stored_procedure_name(const char *str)
#define ER_SP_INVAILD_JAVA_METHOD
bool ws_is_same_object(MOP mop1, MOP mop2)
static int jsp_get_argument_count(const SP_ARGS *sp_args)
char * or_pack_short(char *ptr, short number)
int pt_associate_label_with_value_check_reference(const char *label, DB_VALUE *val)
#define ER_SP_INVALID_TYPE
static char * jsp_unpack_set_value(char *buffer, int type, DB_VALUE *retval)
#define ER_SP_NETWORK_ERROR
int dbt_put_internal(DB_OTMPL *def, const char *name, DB_VALUE *value)
int jsp_is_exist_stored_procedure(const char *name)
int db_make_short(DB_VALUE *value, const DB_C_SHORT num)
static char * jsp_unpack_time_value(char *buffer, DB_VALUE *retval)
#define OR_ALIGNED_BUF_START(abuf)
static char * jsp_unpack_datetime_value(char *buffer, DB_VALUE *retval)
void pt_report_to_ersys(const PARSER_CONTEXT *parser, const PT_ERROR_TYPE error_type)
DB_TYPE pt_type_enum_to_db(const PT_TYPE_ENUM t)
int db_make_string(DB_VALUE *value, DB_CONST_C_CHAR str)
static char * jsp_unpack_string_value(char *buffer, DB_VALUE *retval)
DB_MONETARY * db_get_monetary(const DB_VALUE *value)
int db_string_to_time(const char *str, DB_TIME *time)
#define PT_NODE_SP_ARG_COMMENT(node)
#define SP_ATTR_DATA_TYPE
unsigned int DB_TIMESTAMP
char * or_pack_float(char *ptr, float number)
static int jsp_receive_response(const SOCKET sockfd, const SP_ARGS *sp_args)
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
void unicode_decompose_string(const char *str_in, const int size_in, char *str_out, int *size_out, const UNICODE_NORMALIZATION *norm)
int db_value_put_encoded_time(DB_VALUE *value, const DB_TIME *time)
static char * jsp_pack_string_argument(char *buffer, DB_VALUE *value)
int tran_abort_upto_system_savepoint(const char *savepoint_name)
int db_make_monetary(DB_VALUE *value, const DB_CURRENCY type, const double amount)
int set_add_element(DB_COLLECTION *set, DB_VALUE *value)
MOP jsp_find_stored_procedure(const char *name)
int or_packed_string_length(const char *string, int *strlen)
static char * jsp_pack_date_argument(char *buffer, DB_VALUE *value)
#define ER_SP_CANNOT_INPUT_RESULTSET
void tran_begin_libcas_function(void)
static int drop_stored_procedure(const char *name, PT_MISC_TYPE expected_type)
int db_make_set(DB_VALUE *value, DB_C_SET *set)
void pt_evaluate_tree(PARSER_CONTEXT *parser, PT_NODE *tree, DB_VALUE *db_values, int values_count)
static bool is_prepare_call[MAX_CALL_COUNT]
int db_make_multiset(DB_VALUE *value, DB_C_SET *set)
static char * jsp_pack_short_argument(char *buffer, DB_VALUE *value)
#define PT_NODE_SP_COMMENT(node)
static char * jsp_pack_int_argument(char *buffer, DB_VALUE *value)
static char * jsp_unpack_float_value(char *buffer, DB_VALUE *retval)
#define ER_OUT_OF_VIRTUAL_MEMORY
int jsp_call_stored_procedure(PARSER_CONTEXT *parser, PT_NODE *statement)
static int jsp_get_argument_size(DB_ARG_LIST *args)
void jsp_close_connection(void)
void libcas_srv_handle_free(int h_id)
#define PT_NODE_SP_JAVA_METHOD(node)
#define IS_INVALID_SOCKET(socket)
static enum scanner_mode mode
#define ER_BLOCK_DDL_STMT
DB_OBJECT * db_get_object(const DB_VALUE *value)
static char * jsp_unpack_value(char *buffer, DB_VALUE *retval)
int db_string_put_cs_and_collation(DB_VALUE *value, const int codeset, const int collation_id)
DB_VALUE * db_value_copy(DB_VALUE *value)
UNICODE_NORMALIZATION * lang_get_generic_unicode_norm(void)
static char * jsp_pack_argument(char *buffer, DB_VALUE *value)
static char * jsp_pack_null_argument(char *buffer)
#define NUMERIC_MAX_STRING_SIZE
char * or_unpack_float(char *ptr, float *number)
#define ER_OBJ_OBJECT_NOT_FOUND
static SOCKET sock_fds[MAX_CALL_COUNT]
#define OR_GET_BIGINT(ptr, val)
int db_value_put_encoded_date(DB_VALUE *value, const DB_DATE *date)
struct db_arg_list DB_ARG_LIST
void jsp_disconnect_server(const SOCKET sockfd)
char * or_unpack_int(char *ptr, int *number)
#define db_private_free(thrd, ptr)
#define db_private_alloc(thrd, size)
#define PT_NODE_SP_TYPE(node)
int set_get_element(DB_COLLECTION *set, int index, DB_VALUE *value)
need_clear_type need_clear
static char * jsp_pack_object_argument(char *buffer, DB_VALUE *value)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
int pr_clear_value(DB_VALUE *value)
int db_timestamp_decode_ses(const DB_TIMESTAMP *utime, DB_DATE *date, DB_TIME *timeval)
DB_BIGINT db_get_bigint(const DB_VALUE *value)
int jsp_create_stored_procedure(PARSER_CONTEXT *parser, PT_NODE *statement)
int locator_flush_instance(MOP mop)
int arg_type[MAX_ARG_COUNT]
int jsp_writen(SOCKET fd, const void *vptr, int n)
int set_put_element(DB_COLLECTION *set, int index, DB_VALUE *value)
static void error(const char *msg)
int db_make_float(DB_VALUE *value, const DB_C_FLOAT num)
char * or_pack_int(char *ptr, int number)
#define ER_SP_TOO_MANY_NESTED_CALL
char * numeric_db_value_print(const DB_VALUE *val, char *buf)
DB_OTMPL * dbt_create_object_internal(DB_OBJECT *classobj)
int obj_set(MOP op, const char *name, DB_VALUE *value)
static char * jsp_pack_monetary_argument(char *buffer, DB_VALUE *value)
static int jsp_receive_error(char *&buffer, char *&ptr, const SP_ARGS *sp_args)
#define SP_ATTR_ARG_COMMENT
void * libcas_get_db_result_set(int h_id)
#define SAVEPOINT_CREATE_STORED_PROC
static char * jsp_pack_time_argument(char *buffer, DB_VALUE *value)
#define free_and_init(ptr)
static char * jsp_pack_float_argument(char *buffer, DB_VALUE *value)
DB_DATE * db_get_date(const DB_VALUE *value)
static char * jsp_unpack_resultset(char *buffer, DB_VALUE *retval)
char * or_pack_string_with_length(char *ptr, const char *string, int length)
#define ER_OBJ_INVALID_ARGUMENTS
#define SP_ATTR_INDEX_OF_NAME
int jsp_send_destroy_request_all()
int db_get(DB_OBJECT *object, const char *attpath, DB_VALUE *value)
bool prm_get_bool_value(PARAM_ID prm_id)
int jsp_get_return_type(const char *name)
SOCKET jsp_connect_server(int server_port)
DB_TIMESTAMP * db_get_timestamp(const DB_VALUE *value)
DB_C_SHORT db_get_short(const DB_VALUE *value)
#define SAVEPOINT_ADD_STORED_PROC
#define OR_GET_DOUBLE(ptr, value)
bool unicode_string_need_decompose(const char *str_in, const int size_in, int *decomp_size, const UNICODE_NORMALIZATION *norm)
#define DB_VALUE_TYPE(value)
#define DB_CURRENCY_DEFAULT
static char * jsp_unpack_date_value(char *buffer, DB_VALUE *retval)
int db_make_resultset(DB_VALUE *value, const DB_RESULTSET handle)
int db_make_null(DB_VALUE *value)
int arg_mode[MAX_ARG_COUNT]
int jsp_readn(SOCKET fd, void *vptr, int n)
static int jsp_receive_result(char *&buffer, char *&ptr, const SP_ARGS *sp_args)
int db_make_double(DB_VALUE *value, const DB_C_DOUBLE num)
INTL_CODESET lang_get_client_charset(void)
char * strdup(const char *str)
#define ER_SP_DROP_NOT_ALLOWED
void db_date_decode(const DB_DATE *date, int *monthp, int *dayp, int *yearp)
DB_DATETIME * db_get_datetime(const DB_VALUE *value)
int db_value_clear(DB_VALUE *value)
int db_make_timestamp(DB_VALUE *value, const DB_C_TIMESTAMP timeval)
int db_make_int(DB_VALUE *value, const int num)
unsigned int ntohl(unsigned int from)
int jsp_alter_stored_procedure(PARSER_CONTEXT *parser, PT_NODE *statement)
#define pt_has_error(parser)
static char * jsp_pack_double_argument(char *buffer, DB_VALUE *value)
#define OR_PUT_BIGINT(ptr, val)
DB_OBJECT * db_find_unique(MOP classmop, const char *attname, DB_VALUE *value)
static char * jsp_unpack_bigint_value(char *buffer, DB_VALUE *retval)
char * or_unpack_short(char *ptr, short *number)
DB_TIME * db_get_time(const DB_VALUE *value)
INTL_UTF8_VALIDITY intl_check_string(const char *buf, int size, char **pos, const INTL_CODESET codeset)
int numeric_coerce_string_to_num(const char *astring, int astring_length, INTL_CODESET codeset, DB_VALUE *result)
static char * jsp_unpack_double_value(char *buffer, DB_VALUE *retval)
void db_time_decode(DB_TIME *timeval, int *hourp, int *minutep, int *secondp)
int jsp_send_destroy_request(const SOCKET sockfd)
static char * jsp_unpack_monetary_value(char *buffer, DB_VALUE *retval)
DB_VALUE * pt_value_to_db(PARSER_CONTEXT *parser, PT_NODE *value)
static int jsp_do_call_stored_procedure(DB_VALUE *returnval, DB_ARG_LIST *args, const char *name)
void jsp_srv_handle_free(int h_id)
#define ER_SP_NOT_RUNNING_JVM
int db_get_string_codeset(const DB_VALUE *value)
int db_string_to_date(const char *str, DB_DATE *date)
DB_CONST_C_CHAR db_get_string(const DB_VALUE *value)
int lang_get_client_collation(void)
int jsp_get_server_port(void)
static char * jsp_unpack_int_value(char *buffer, DB_VALUE *retval)
int jsp_drop_stored_procedure(PARSER_CONTEXT *parser, PT_NODE *statement)
#define ER_SP_TOO_MANY_ARG_COUNT