Common Lisp Package: COM.HACKINGHAT.CL-MYSQL-SYSTEM

README:

FUNCTION

Public

CFFI-UTF8-LENGTH (CFFI-STRING)

We need this function because mysql_real_escape_string requires the length of the from string in bytes (not characters)

CLIENT-VERSION

Returns a three part list containing the decoded client version information

CONNECT (&KEY HOST USER PASSWORD DATABASE PORT SOCKET (CLIENT-FLAG (LIST +CLIENT-COMPRESS+ +CLIENT-MULTI-STATEMENTS+ +CLIENT-MULTI-RESULTS+)) (MIN-CONNECTIONS 1) (MAX-CONNECTIONS 1))

Connect will present to MySQL sensible defaults for all the connection items. The following code will attach you to a MySQL instance running on localhost, as the current user with no password. It will automatically turn on compression between client-and-server and also enable multiple-result sets if possible. <pre><code>CL-USER> (connect)</code></pre> If unsuccesful connect will raise a <strong>CL-MYSQL-ERROR</strong>, otherwise it will place the connection into a pool, note that all connections are pool-able, a single connection is simply the special case of a pool with only one connection. The pool has two slots, <strong>min-connections</strong> and <srong>max-connections</strong>. There will always be min-connections available in the pool. If you are using all min-connections and max-connections is greater than min-connections, the pool will continue to allocate connections until max-connections are used. After this an attempt to aquire more connections from the pool should block (if your implementation supports it). When a connection is released (this is done automatically unless you explicity disable it) the connection to the server is closed if we have allocated more connections than min-connections. The last allocated pool object is placed into a special variable <strong>*last-database*</strong> which is defaulted from the higher level API functions.

DISCONNECT (&OPTIONAL (DATABASE *LAST-DATABASE*))

This method will disconnect all the connections in the pool. Note that if you attempt to use the pool again after calling this method it will re-allocate upto min-connections before servicing your request.

ESCAPE-STRING (STRING &KEY DATABASE)

Given a string, encode it appropriately. This function relies on the fact that the character set encoding was set to UTF-8 when the connection is made.

EXTRACT-FIELD (ROW FIELD-INDEX FIELD-LENGTH TYPE-MAP FIELD-DETAIL)

Returns either a string or an unsigned byte array for known binary types. The designation of binary types per the C API seems a bit weird. Basically, BIT, BINARY and VARBINARY are binary and so are BLOBs with the binary flag set. It seems that other fields also have the binary flag set that are not binary and the BIT type, whilst binary doesn't have the flag set. Bizarre-o.

MYSQL-ERROR (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-error.html

NTH-ROW (RESULT-SET-LIST N &OPTIONAL NTH-RESULT-SET)

Return the nth-row of the nth-result set.

OPTION (OPTION VALUE &KEY DATABASE)

Use this to set a client specific connection option. CL-USER> (option :opt-reconnect 1)

PING (&KEY DATABASE)

Check whether a connection is established or not. If :opt-reconnect is set and there is no connection then MySQL's C API attempts a reconnection.

QUERY (QUERY &KEY (TYPE-MAP *TYPE-MAP*) DATABASE (STORE T))

For a SELECT query or stored procedure that returns data, query will return a list of result sets. Each result set will have 1 or more sublists where the first sublist contains the column names and the remaining lists represent the rows of the result set. If the query does not return a result set (for example if the query is an INSERT, UPDATE) the return value is the number of rows affected. Because cl-mysql supports multiple-statements you can execute code like the following: <pre><code>CL-MYSQL-SYSTEM> (query "CREATE TABLE a(a INT); INSERT INTO a (a) VALUES (1); DELETE FROM a; DROP TABLE a") ((0) (1) (1) (0))</code></pre> The type-map, if set will alter the decoding into CL types. If you set this to nil it will have the effect of disabling all CL type conversions and return either character or binary data only. This might be useful for performance reasons, (cl-mysql is much faster when it doesn't need to translate types) but it also might be all you need. Consider for instance if you're displaying a lot of numerics on a web-page. If you do not need to convert the data into floats/integers before displaying them on a page then raw could be useful here too. cl-mysql attempts to convert all numeric types to their closest CL representation. For very large numerics, or numerics that have very high precision this might not be what you want. In this case you could attempt to write your own conversion routine and inject it into cl-mysql through the type-map. The currented supported conversions are as follows (MySQL type -> CL type): <ul><li><strong>DECIMAL/NUMERIC</strong> -> RATIO</li> <li><strong>INT/TINYINT/SMALLINT/MEDIUMINT/BIGINT/YEAR</strong> -> INTEGER</li> <li><strong>FLOAT/REAL/DOUBLE PRECISION</strong> -> DOUBLE-FLOAT</li> <li><strong>DATE/DATETIME/TIMESTAMP</strong> -> INTEGER (Universal time)</li> <li><strong>TIME</strong> -> INTEGER (Seconds)</li> <li><strong>CHAR/VARCHAR/TEXT/TINYTEXT/MEDIUMTEXT/LONGTEXT</strong> -> STRING</li> <li><strong>BIT/BLOB/MEDIUMBLOB/LONGBLOB/TINYBLOB/GEOMETRY</strong> -> SIMPLE-ARRAY '(UNSIGNED-BYTE 8 )</li> </ul> If :store is T query returns a list of result sets. Each result set is a list with the first element set to the data and the second elements set to the column data. Since this structure can be a little awkward to handle you can use nth-row to manipulate the structure more sanely. If :store is NIL query returns the allocated connection object. You should use next-result-set and next-row to step through the results.

SERVER-VERSION (&KEY DATABASE)

Returns a three part list containing the decoded server version information

STRING-TO-FLOAT (STRING LEN)

Convert a MySQL float representation into a double. Note that we could do better on DECIMAL/NUMERICs that have 0 places after the decimal.

STRING-TO-SECONDS (STRING &OPTIONAL LEN)

Fairly ugly function to turn MySQL TIME duration into an integer representation. It's complicated because of ... well, read this: http://dev.mysql.com/doc/refman/5.0/en/time.html

USE (NAME &KEY DATABASE)

Equivalent to running: CL-USER> (query "USE <name>")

Undocumented

LIST-DBS (&KEY DATABASE)

LIST-FIELDS (TABLE &KEY DATABASE)

LIST-PROCESSES (&KEY DATABASE)

LIST-TABLES (&KEY DATABASE)

MAKE-LOCK (NAME)

START-THREAD-IN-NSECS (FN N)

STRING-TO-DATE (STRING &OPTIONAL LEN)

STRING-TO-INTEGER (STRING &OPTIONAL LEN)

STRING-TO-RATIO (STRING LEN)

STRING-TO-UNIVERSAL-TIME (STRING &OPTIONAL LEN)

WAIT-ON-THREADS (THREADS)

Private

DECODE-VERSION (INT-VERSION)

Return a list of version details <major> <release> <version>

FORCE-KILL

Internal convenience function to clean up connections

GET-CHARACTER-SET-INFO (&KEY DATABASE)

Returns the character set information for the connection as a sequence: (collation name number state)

GET-FIELD (COLUMN-NAME FIELD-NAMES-AND-TYPES ROW)

Returns the correct element in the sequence from the row that matches the column-name

MYSQL-AFFECTED-ROWS (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-affected-rows.html

MYSQL-CHARACTER-SET-NAME (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-character-set-name.html

MYSQL-CLOSE (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-close.html

MYSQL-ERRNO (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-errno.html

MYSQL-ESCAPE-STRING (TO FROM LENGTH)

http://dev.mysql.com/doc/refman/5.0/en/mysql-escape-string.html

MYSQL-FETCH-FIELD (MYSQL-RES)

http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-field.html

MYSQL-FETCH-FIELDS (MYSQL-RES)

http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-fields.html

MYSQL-FETCH-LENGTHS (MYSQL-RES)

http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-lengths.html

MYSQL-FETCH-ROW (MYSQL-RES)

http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html

MYSQL-FIELD-COUNT (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-field-count.html

MYSQL-FREE-RESULT (MYSQL-RES)

http://dev.mysql.com/doc/refman/5.0/en/mysql-free-result.html

MYSQL-GET-CHARACTER-SET-INFO (MYSQL CS)

http://dev.mysql.com/doc/refman/5.0/en/mysql-get-character-set-info.html

MYSQL-GET-CLIENT-VERSION

http://dev.mysql.com/doc/refman/5.0/en/mysql-get-client-version.html

MYSQL-GET-SERVER-VERSION (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-get-server-version.html

MYSQL-INIT (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-init.html

MYSQL-LIST-DBS (MYSQL WILD)

http://dev.mysql.com/doc/refman/5.0/en/mysql-list-dbs.html

MYSQL-LIST-FIELDS (MYSQL TABLE WILD)

http://dev.mysql.com/doc/refman/5.0/en/mysql-list-fields.html

MYSQL-LIST-PROCESSES (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-list-processes.html

MYSQL-LIST-TABLES (MYSQL WILD)

http://dev.mysql.com/doc/refman/5.0/en/mysql-list-tables.html

MYSQL-NEXT-RESULT (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-next-result.html

MYSQL-NUM-FIELDS (MYSQL-RES)

http://dev.mysql.com/doc/refman/5.0/en/mysql-num-fields.html

MYSQL-NUM-ROWS (MYSQL-RES)

http://dev.mysql.com/doc/refman/5.0/en/mysql-num-rows.html

MYSQL-OPTIONS (MYSQL OPTION ARG)

http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html

MYSQL-PING (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-ping.html

MYSQL-QUERY (MYSQL STATEMENT)

http://dev.mysql.com/doc/refman/5.0/en/mysql-query.html

MYSQL-REAL-CONNECT (MYSQL HOST USER PASSWORD DATABASE PORT UNIX-SOCKET CLIENT-FLAG)

http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html

MYSQL-REAL-ESCAPE-STRING (MYSQL TO FROM LENGTH)

http://dev.mysql.com/doc/refman/5.0/en/mysql-real-escape-string.html

MYSQL-SELECT-DB (MYSQL DB)

http://dev.mysql.com/doc/refman/5.0/en/mysql-select-db.html

MYSQL-SET-CHARACTER-SET (MYSQL CSNAME)

http://dev.mysql.com/doc/refman/5.0/en/mysql-set-character-set.html

MYSQL-STMT-AFFECTED-ROWS (STMT)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-affected-rows.html

MYSQL-STMT-BIND-PARAM (STMT BIND)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-bind-param.html

MYSQL-STMT-CLOSE (STMT)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-close.html

MYSQL-STMT-ERRNO (STMT)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-errno.html

MYSQL-STMT-ERROR (STMT)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-error.html

MYSQL-STMT-EXECUTE (STMT)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-execute.html

MYSQL-STMT-INIT (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-init.html

MYSQL-STMT-PARAM-COUNT (STMT)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-param-count.html

MYSQL-STMT-PREPARE (STMT STMT_STR LENGTH)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-prepare.html

MYSQL-STMT-SQLSTATE (STMT)

http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-sqlstate.html

MYSQL-STORE-RESULT (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-store-result.html

MYSQL-USE-RESULT (MYSQL)

http://dev.mysql.com/doc/refman/5.0/en/mysql-use-result.html

PREPARE (QUERY &KEY (DATABASE *LAST-DATABASE*))

Prepare a query and return a statement object. Use execute to access it

SINGLE-RESULT-SET (CONN FN &REST ARGS)

MySQL provides a class of functions that just process a single result set. Note that we won't explicity free the result set because return-or-close will do the cleanup for us.

Undocumented

%SET-INT-OPTION (OPTION VALUE &KEY DATABASE)

%SET-STRING-OPTION (OPTION VALUE &KEY DATABASE)

ERROR-IF-NON-ZERO (DATABASE RETURN-VALUE)

ERROR-IF-NULL (DATABASE RETURN-VALUE)

ERROR-IF-NULL-WITH-FIELDS (DATABASE RETURN-VALUE)

ERROR-IF-SET (DATABASE)

MAKE-WAIT-RESOURCE

POOL-NOTIFY (POOL)

POOL-WAIT (POOL)

PROCESS-ROW (MYSQL-RES ROW NUM-FIELDS FIELD-NAMES-AND-TYPES TYPE-MAP)

REPEAT-CHAR (S N)

SET-CHARACTER-SET (CSNAME &KEY DATABASE)

THREAD-ALIVE-P (THREAD)

MACRO

Public

WITH-ROWS ((VAR-ROW QUERY-STRING &KEY (VAR-RESULT (GENSYM)) (DATABASE '*LAST-DATABASE*) (TYPE-MAP '*TYPE-MAP*)) &BODY BODY)

Takes a query-string and iterates over the result sets assigning var-row to each individual row. If you supply var-result it will hold the result set sequence number. This macro generates code that does not store the complete result so should be suitable for working with very large data sets.

Undocumented

WITH-LOCK (LOCK &BODY BODY)

Private

DEFMYSQLFUN ((NAME INTERNAL-NAME) RETURN-TYPE &BODY ARGS)

Takes a mysql function name as a string and registers the appropriate CFFI function as internal-name. If *generate-alt-fns* is T internal-name that denotes T a wrapper function that sits around the function lib<internal-name>. This function will call the lib<internal-name>, unless there is an 'alt-fn property set on the function's symbol. If such a function exists it is called instead. e.g. CL-USER> (connect) CL-USER> (setf (get 'mysql-close 'alt-fn) (lambda (db) (print "Closing! ") (libmysql-close db))) CL-USER> (disconnect) Closing!

Undocumented

WITH-CONNECTION ((VAR &OPTIONAL DATABASE (RELEASE T)) &BODY BODY)

GENERIC-FUNCTION

Public

CLOSE (STREAM &KEY ABORT)

Close the given STREAM. No more I/O may be performed, but inquiries may still be made. If :ABORT is true, an attempt is made to clean up the side effects of having created the stream.

RELEASE (CONNECTABLE &OPTIONAL OTHER-ARGS)

Calling release will place the connection back into the pool. If the pool has more connections than max-connections then releasing the connection will close it and deallocate it.

Undocumented

AQUIRE (SELF BLOCK)

AVAILABLE (SELF)

BIND (SELF SQL-TYPE &OPTIONAL SUPPLIED-INDEX (MAX-LEN))

BIND-ARG (SELF INDEX)

CAN-AQUIRE (SELF)

CONFIGURE-BINDINGS (SELF NARGS)

CONNECTED (SELF)

CONNECTION-EQUAL (SELF OTHER)

CONTAINS (SELF ARRAY CONN)

COUNT-CONNECTIONS (SELF)

SETFMAX-CONNECTIONS (MAX-CONNECT POOL)

SETFMIN-CONNECTIONS (MIN-CONNECT POOL)

NEXT-INDEX (SELF)

NEXT-RESULT-SET (SELF &KEY DONT-RELEASE STORE)

NEXT-ROW (SELF &KEY (TYPE-MAP *TYPE-MAP*))

PROCESS-RESULT-SET (SELF TYPE-MAP)

SETFRESULT-SET (NEW-VALUE OBJECT)

Private

ACQUIRE (CONNECTABLE &OPTIONAL KEYWORD)

Calling aquire on a single connection returns itself, on a connection-pool it will return the first available connection. Note that the pool implementation of this method could block

Undocumented

ADD-CONNECTION (SELF CONN)

ASSIGN-BOUND-ARGUMENT (SELF INDEX VALUE)

BOUND-PARAMETER-P (SELF INDEX)

BOUND-UNBOUND-TO-STRING (SELF)

CAN-AQUIRE-LOCK (SELF)

CL-MYSQL-ERROR-MESSAGE (CONDITION)

CLEAN-CONNECTIONS (SELF ARRAY)

CLOSE-STATEMENT (SELF)

CONNECT-TO-SERVER (SELF)

CONNECT-UPTO-MINIMUM (SELF N MIN)

CONSUME-UNUSED-RESULTS (SELF)

DISCONNECT-ALL (SELF)

DISCONNECT-FROM-SERVER (SELF CONN)

EXECUTE (SELF &REST ARGS)

MYSQL-ERROR-ERRNO (CONDITION)

MYSQL-ERROR-MESSAGE (CONDITION)

PARAM-COUNT (SELF)

RELEASE-BINDING (SELF INDEX)

REMOVE-CONNECTION-FROM-ARRAY (SELF ARRAY CONN)

RESULT-DATA (SELF TYPE-MAP)

RETURN-OR-CLOSE (SELF CONN)

RETURN-TO-AVAILABLE (SELF &OPTIONAL CONN)

SET-FIELD-NAMES-AND-TYPES (SELF)

SQLSTATE (SELF)

TAKE-FIRST (SELF)

TOGGLE (SELF)

SLOT-ACCESSOR

Public

Undocumented

AVAILABLE-CONNECTIONS (OBJECT)

SETFAVAILABLE-CONNECTIONS (NEW-VALUE OBJECT)

BOUND-MAP (OBJECT)

SETFBOUND-MAP (NEW-VALUE OBJECT)

CONNECTIONS (OBJECT)

SETFCONNECTIONS (NEW-VALUE OBJECT)

IN-USE (OBJECT)

SETFIN-USE (NEW-VALUE OBJECT)

MAX-CONNECTIONS (OBJECT)

MIN-CONNECTIONS (OBJECT)

POINTER (OBJECT)

SETFPOINTER (NEW-VALUE OBJECT)

POOL-LOCK (OBJECT)

SETFPOOL-LOCK (NEW-VALUE OBJECT)

RESULT-SET (OBJECT)

RESULT-SET-FIELDS (OBJECT)

SETFRESULT-SET-FIELDS (NEW-VALUE OBJECT)

Private

Undocumented

ARGS (OBJECT)

SETFARGS (NEW-VALUE OBJECT)

DATABASE (OBJECT)

FLAGS (OBJECT)

FULLY-BOUND (OBJECT)

SETFFULLY-BOUND (NEW-VALUE OBJECT)

HOSTNAME (OBJECT)

NARGS (OBJECT)

SETFNARGS (NEW-VALUE OBJECT)

OWNER-POOL (OBJECT)

PASSWORD (OBJECT)

PORT (OBJECT)

SOCKET (OBJECT)

USE-QUERY-ACTIVE (OBJECT)

SETFUSE-QUERY-ACTIVE (NEW-VALUE OBJECT)

USERNAME (OBJECT)

WAIT-QUEUE (OBJECT)

SETFWAIT-QUEUE (NEW-VALUE OBJECT)

WAIT-QUEUE-LOCK (OBJECT)

SETFWAIT-QUEUE-LOCK (NEW-VALUE OBJECT)

VARIABLE

Public

*LAST-DATABASE*

The last allocated connection-pool. Note that this special is a default argument to a lot of the higher level API functions.

Undocumented

*TYPE-MAP*

Private

*DEFAULT-SEQUENCE-LENGTH*

This is the maximum length that a sequence sent as a bound parameter can be It's a bit lame really. How it should really work is that 'bind' gives you a binding and re-binds (if that's possible) when the buffer is too small. In practice, though, I doubt it matters very much.

Undocumented

*BINARY-TYPES*

*DEBUG*

*STMT-CTYPE-MAP*

CLASS

Public

CONNECTION

The slots necessary to manage a MySQL database connection.

CONNECTION-POOL

All connections are initiated through a pool.

STATEMENT

A holder for a MYSQL_STMT structure

Private

CONNECTABLE

The base class of connectability. CL-MYSQL functions operate on a connectable which is then subclassed into a single connection and a connection pool. Note that the connectable itself has no state.

Undocumented

CHARACTER-SET-TCLASS

MYSQL-BIND-TCLASS

MYSQL-FIELD-TCLASS

CONDITION

Public

Undocumented

CL-MYSQL-ERROR

MYSQL-ERROR (MYSQL)

CONSTANT

Public

Undocumented

+CLIENT-COMPRESS+

+CLIENT-FOUND-ROWS+

+CLIENT-IGNORE-SIGPIPE+

+CLIENT-IGNORE-SPACE+

+CLIENT-INTERACTIVE+

+CLIENT-LOCAL-FILES+

+CLIENT-MULTI-RESULTS+

+CLIENT-MULTI-STATEMENTS+

+CLIENT-NO-SCHEMA+

+CLIENT-REMEMBER-OPTIONS+

+CLIENT-SSL+

Private

+FIELD-AUTO-INCREMENT+

Field is auto increment

+FIELD-BINARY+

Field is binary

+FIELD-BLOB+

Field is a blob

+FIELD-ENUM+

Field is an enum

+FIELD-MULTIPLE-KEY+

Field is part of a key

+FIELD-NO-DEFAULT+

Field doesn't have a default value

+FIELD-NOT-NULL+

Field can't be null

+FIELD-NUM+

Field is num

+FIELD-PRIMARY-KEY+

Field is part of a primary key

+FIELD-SET+

Field is a set

+FIELD-TIMESTAMP+

Field is a timestamp

+FIELD-UNIQUE-KEY+

Field is part of a unique key

+FIELD-UNSIGNED+

Field is unsigned

+FIELD-ZEROFILL+

Field is zerofill

Undocumented

*SLEEP-PERIOD*

+CANT-READ-CHARSET+

+COMMANDS-OUT-OF-SYNC+

+CONN-HOST-ERROR+

+CONN-UNKNOW-PROTOCOL+

+CONNECTION-ERROR+

+DATA-TRUNCATED+

+EMBEDDED-CONNECTION+

+ERROR-FIRST+

+FETCH-CANCELED+

+INVALID-BUFFER-USE+

+INVALID-CONN-HANDLE+

+INVALID-PARAMETER-NO+

+IPSOCK-ERROR+

+LOCALHOST-CONNECTION+

+MALFORMED-PACKET+

+NAMEDPIPE-CONNECTION+

+NAMEDPIPEOPEN-ERROR+

+NAMEDPIPESETSTATE-ERROR+

+NAMEDPIPEWAIT-ERROR+

+NET-PACKET-TOO-LARGE+

+NO-DATA+

+NO-PARAMETERS-EXISTS+

+NO-PREPARE-STMT+

+NO-RESULT-SET+

+NO-STMT-METADATA+

+NOT-IMPLEMENTED+

+NULL-POINTER+

+OUT-OF-MEMORY+

+PARAMS-NOT-BOUND+

+PROBE-MASTER-CONNECT+

+PROBE-SLAVE-CONNECT+

+PROBE-SLAVE-HOSTS+

+PROBE-SLAVE-STATUS+

+SECURE-AUTH+

+SERVER-GONE-ERROR+

+SERVER-HANDSHAKE-ERR+

+SERVER-LOST+

+SERVER-LOST-EXTENDED+

+SHARED-MEMORY-CONNECT-ABANDONED-ERROR+

+SHARED-MEMORY-CONNECT-ANSWER-ERROR+

+SHARED-MEMORY-CONNECT-FILE-MAP-ERROR+

+SHARED-MEMORY-CONNECT-MAP-ERROR+

+SHARED-MEMORY-CONNECT-REQUEST-ERROR+

+SHARED-MEMORY-CONNECT-SET-ERROR+

+SHARED-MEMORY-CONNECTION+

+SHARED-MEMORY-EVENT-ERROR+

+SHARED-MEMORY-FILE-MAP-ERROR+

+SHARED-MEMORY-MAP-ERROR+

+SOCKET-CREATE-ERROR+

+SSL-CONNECTION-ERROR+

+TCP-CONNECTION+

+UNKNOWN-ERROR+

+UNKNOWN-HOST+

+UNSUPPORTED-PARAM-TYPE+

+VERSION-ERROR+

+WRONG-HOST-INFO+

+WRONG-LICENSE+