summaryrefslogtreecommitdiff
path: root/innobase/include/usr0sess.h
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/include/usr0sess.h')
-rw-r--r--innobase/include/usr0sess.h318
1 files changed, 318 insertions, 0 deletions
diff --git a/innobase/include/usr0sess.h b/innobase/include/usr0sess.h
new file mode 100644
index 00000000000..365f828ecfc
--- /dev/null
+++ b/innobase/include/usr0sess.h
@@ -0,0 +1,318 @@
+/******************************************************
+Sessions
+
+(c) 1996 Innobase Oy
+
+Created 6/25/1996 Heikki Tuuri
+*******************************************************/
+
+#ifndef usr0sess_h
+#define usr0sess_h
+
+#include "univ.i"
+#include "ut0byte.h"
+#include "hash0hash.h"
+#include "trx0types.h"
+#include "srv0srv.h"
+#include "trx0types.h"
+#include "usr0types.h"
+#include "que0types.h"
+#include "data0data.h"
+#include "rem0rec.h"
+#include "com0com.h"
+
+/* The session system global data structure */
+extern sess_sys_t* sess_sys;
+
+/*************************************************************************
+Sets the session id in a client message. */
+
+void
+sess_cli_msg_set_sess(
+/*==================*/
+ byte* str, /* in/out: message string */
+ dulint sess_id);/* in: session id */
+/***************************************************************************
+Sets the message type of a message from the client. */
+UNIV_INLINE
+void
+sess_cli_msg_set_type(
+/*==================*/
+ byte* str, /* in: message string */
+ ulint type); /* in: message type */
+/***************************************************************************
+Gets the message type of a message from the server. */
+UNIV_INLINE
+ulint
+sess_srv_msg_get_type(
+/*==================*/
+ /* out: message type */
+ byte* str); /* in: message string */
+/***************************************************************************
+Creates a session sytem at database start. */
+
+void
+sess_sys_init_at_db_start(void);
+/*===========================*/
+/*************************************************************************
+Opens a session. */
+
+sess_t*
+sess_open(
+/*======*/
+ /* out, own: session object */
+ com_endpoint_t* endpoint, /* in: communication endpoint used
+ for communicating with the client */
+ byte* addr_buf, /* in: client address */
+ ulint addr_len); /* in: client address length */
+/*************************************************************************
+Closes a session, freeing the memory occupied by it. */
+
+void
+sess_close(
+/*=======*/
+ sess_t* sess); /* in, own: session object */
+/*************************************************************************
+Raises an SQL error. */
+
+void
+sess_raise_error_low(
+/*=================*/
+ trx_t* trx, /* in: transaction */
+ ulint err_no, /* in: error number */
+ ulint type, /* in: more info of the error, or 0 */
+ dict_table_t* table, /* in: dictionary table or NULL */
+ dict_index_t* index, /* in: table index or NULL */
+ dtuple_t* tuple, /* in: tuple to insert or NULL */
+ rec_t* rec, /* in: record or NULL */
+ char* err_str);/* in: arbitrary null-terminated error string,
+ or NULL */
+/*************************************************************************
+Closes a session, freeing the memory occupied by it, if it is in a state
+where it should be closed. */
+
+ibool
+sess_try_close(
+/*===========*/
+ /* out: TRUE if closed */
+ sess_t* sess); /* in, own: session object */
+/*************************************************************************
+Initializes the first fields of a message to client. */
+
+void
+sess_srv_msg_init(
+/*==============*/
+ sess_t* sess, /* in: session object */
+ byte* buf, /* in: message buffer, must be at least of size
+ SESS_SRV_MSG_DATA */
+ ulint type); /* in: message type */
+/*************************************************************************
+Sends a simple message to client. */
+
+void
+sess_srv_msg_send_simple(
+/*=====================*/
+ sess_t* sess, /* in: session object */
+ ulint type, /* in: message type */
+ ulint rel_kernel); /* in: SESS_RELEASE_KERNEL or
+ SESS_NOT_RELEASE_KERNEL */
+/***************************************************************************
+Processes a message from a client. NOTE: May release the kernel mutex
+temporarily. */
+
+void
+sess_receive_msg_rel_kernel(
+/*========================*/
+ sess_t* sess, /* in: session */
+ byte* str, /* in: message string */
+ ulint len); /* in: message length */
+/***************************************************************************
+When a command has been completed, this function sends the message about it
+to the client. */
+
+void
+sess_command_completed_message(
+/*===========================*/
+ sess_t* sess, /* in: session */
+ byte* msg, /* in: message buffer */
+ ulint len); /* in: message data length */
+/***********************************************************************
+Starts a new connection and a session, or starts a query based on a client
+message. This is called by a SRV_COM thread. */
+
+void
+sess_process_cli_msg(
+/*=================*/
+ byte* str, /* in: message string */
+ ulint len, /* in: string length */
+ byte* addr, /* in: address string */
+ ulint alen); /* in: address length */
+
+
+/* The session handle. All fields are protected by the kernel mutex */
+struct sess_struct{
+ dulint id; /* session id */
+ dulint usr_id; /* user id */
+ hash_node_t hash; /* hash chain node */
+ ulint refer_count; /* reference count to the session
+ object: when this drops to zero
+ and the session has no query graphs
+ left, discarding the session object
+ is allowed */
+ dulint error_count; /* if this counter has increased while
+ a thread is parsing an SQL command,
+ its graph should be discarded */
+ ibool disconnecting; /* TRUE if the session is to be
+ disconnected when its reference
+ count drops to 0 */
+ ulint state; /* state of the session */
+ dulint msgs_sent; /* count of messages sent to the
+ client */
+ dulint msgs_recv; /* count of messages received from the
+ client */
+ ibool client_waits; /* when the session receives a message
+ from the client, this set to TRUE, and
+ when the session sends a message to
+ the client this is set to FALSE */
+ trx_t* trx; /* transaction object permanently
+ assigned for the session: the
+ transaction instance designated by the
+ trx id changes, but the memory
+ structure is preserved */
+ ulint next_graph_id; /* next query graph id to assign */
+ UT_LIST_BASE_NODE_T(que_t)
+ graphs; /* query graphs belonging to this
+ session */
+ /*------------------------------*/
+ ulint err_no; /* latest error number, 0 if none */
+ char* err_str; /* latest error string */
+ ulint err_len; /* error string length */
+ /*------------------------------*/
+ com_endpoint_t* endpoint; /* server communications endpoint used
+ to communicate with the client */
+ char* addr_buf; /* client address string */
+ ulint addr_len; /* client address string length */
+ /*------------------------------*/
+ byte* big_msg; /* if the client sends a message which
+ does not fit in a single packet,
+ it is assembled in this buffer; if
+ this field is not NULL, it is assumed
+ that the message should be catenated
+ here */
+ ulint big_msg_size; /* size of the big message buffer */
+ ulint big_msg_len; /* length of data in the big message
+ buffer */
+};
+
+/* The session system; this is protected by the kernel mutex */
+struct sess_sys_struct{
+ ulint state; /* state of the system:
+ SESS_SYS_RUNNING or
+ SESS_SYS_SHUTTING_DOWN */
+ sess_t* shutdown_req; /* if shutdown was requested by some
+ session, confirmation of shutdown
+ completion should be sent to this
+ session */
+ dulint free_sess_id; /* first unused session id */
+ hash_table_t* hash; /* hash table of the sessions */
+};
+
+
+/*---------------------------------------------------*/
+/* The format of an incoming message from a client */
+#define SESS_CLI_MSG_CHECKSUM 0 /* the checksum should be the first
+ field in the message */
+#define SESS_CLI_MSG_SESS_ID 4 /* this is set to 0 if the client
+ wants to connect and establish
+ a new session */
+#define SESS_CLI_MSG_SESS_ID_CHECK 12 /* checksum of the sess id field */
+#define SESS_CLI_MSG_TYPE 16
+#define SESS_CLI_MSG_NO 20
+#define SESS_CLI_MSG_CONTINUE 28 /* 0, or SESS_MSG_FIRST_PART
+ SESS_MSG_MIDDLE_PART, or
+ SESS_MSG_LAST_PART */
+#define SESS_CLI_MSG_CONT_SIZE 32 /* size of a multipart message in
+ kilobytes (rounded upwards) */
+#define SESS_CLI_MSG_DATA 36
+/*---------------------------------------------------*/
+
+/* Client-to-session message types */
+#define SESS_CLI_CONNECT 1
+#define SESS_CLI_PREPARE 2
+#define SESS_CLI_EXECUTE 3
+#define SESS_CLI_BREAK_EXECUTION 4
+
+/* Client-to-session statement command types */
+#define SESS_COMM_FETCH_NEXT 1
+#define SESS_COMM_FETCH_PREV 2
+#define SESS_COMM_FETCH_FIRST 3
+#define SESS_COMM_FETCH_LAST 4
+#define SESS_COMM_FETCH_NTH 5
+#define SESS_COMM_FETCH_NTH_LAST 6
+#define SESS_COMM_EXECUTE 7
+#define SESS_COMM_NO_COMMAND 8
+
+/*---------------------------------------------------*/
+/* The format of an outgoing message from a session to the client */
+#define SESS_SRV_MSG_CHECKSUM 0 /* the checksum should be the first
+ field in the message */
+#define SESS_SRV_MSG_SESS_ID 4
+#define SESS_SRV_MSG_TYPE 12
+#define SESS_SRV_MSG_NO 16
+#define SESS_SRV_MSG_CONTINUE 24 /* 0, or SESS_MSG_FIRST_PART
+ SESS_MSG_MIDDLE_PART, or
+ SESS_MSG_LAST_PART */
+#define SESS_SRV_MSG_CONT_SIZE 28 /* size of a multipart message
+ in kilobytes (rounded upward) */
+#define SESS_SRV_MSG_DATA 32
+/*---------------------------------------------------*/
+
+/* Session-to-client message types */
+#define SESS_SRV_ACCEPT_CONNECT 1
+#define SESS_SRV_SUCCESS 2
+#define SESS_SRV_ERROR 3
+
+/* Multipart messages */
+#define SESS_MSG_SINGLE_PART 0
+#define SESS_MSG_FIRST_PART 1
+#define SESS_MSG_MIDDLE_PART 2
+#define SESS_MSG_LAST_PART 3
+
+/* Error numbers */
+#define SESS_ERR_NONE 0
+#define SESS_ERR_TRX_COMMITTED 1
+#define SESS_ERR_TRX_ROLLED_BACK 2
+#define SESS_ERR_SESSION_DISCONNECTED 3
+#define SESS_ERR_REPLY_FAILED 4
+#define SESS_ERR_CANNOT_BREAK_OP 5
+#define SESS_ERR_MSG_LOST 6
+#define SESS_ERR_MSG_CORRUPTED 7
+#define SESS_ERR_EXTRANEOUS_MSG 8
+#define SESS_ERR_OUT_OF_MEMORY 9
+#define SESS_ERR_SQL_ERROR 10
+#define SESS_ERR_STMT_NOT_FOUND 11
+#define SESS_ERR_STMT_NOT_READY 12
+#define SESS_ERR_EXTRANEOUS_SRV_MSG 13
+#define SESS_ERR_BREAK_BY_CLIENT 14
+
+/* Session states */
+#define SESS_ACTIVE 1
+#define SESS_ERROR 2 /* session contains an error message
+ which has not yet been communicated
+ to the client */
+/* Session system states */
+#define SESS_SYS_RUNNING 1
+#define SESS_SYS_SHUTTING_DOWN 2
+
+/* Session hash table size */
+#define SESS_HASH_SIZE 1024
+
+/* Flags used in sess_srv_msg_send */
+#define SESS_RELEASE_KERNEL 1
+#define SESS_NOT_RELEASE_KERNEL 2
+
+#ifndef UNIV_NONINL
+#include "usr0sess.ic"
+#endif
+
+#endif