diff --git a/connector/php/README b/connector/php/README deleted file mode 100644 index 1072ae495bf2b6155a1e730c17207d46784e3857..0000000000000000000000000000000000000000 --- a/connector/php/README +++ /dev/null @@ -1,36 +0,0 @@ -ATTENTION! -This module is experimental and may have bugs. - -The PHP module for key/value database Tarantool/Box, -http://tarantool.org/ - -This module implements the binary protocol. -The protocol description is located at -https://github.com/mailru/tarantool/blob/master/doc/box-protocol.txt - -The following Tarantool/Box configuration file was used for -testing: - -space[0].enabled = 1 -space[0].index[0].type = "HASH" -space[0].index[0].unique = 1 -space[0].index[0].key_field[0].fieldno = 0 -space[0].index[0].key_field[0].type = "NUM" - -space[0].index[1].type = "TREE" -space[0].index[1].unique = 0 -space[0].index[1].key_field[0].fieldno = 1 -space[0].index[1].key_field[0].type = "STR" - -space[0].index[2].type = "TREE" -space[0].index[2].unique = 0 -space[0].index[2].key_field[0].fieldno = 1 -space[0].index[2].key_field[0].type = "STR" -space[0].index[2].key_field[1].fieldno = 2 -space[0].index[2].key_field[1].type = "STR" - - -space[0].index[3].type = "TREE" -space[0].index[3].unique = 0 -space[0].index[3].key_field[0].fieldno = 3 -space[0].index[3].key_field[0].type = "NUM" diff --git a/connector/php/config.m4 b/connector/php/config.m4 deleted file mode 100644 index 0f8bd2b11539659614a604cf0d7efeb48b2b223a..0000000000000000000000000000000000000000 --- a/connector/php/config.m4 +++ /dev/null @@ -1,59 +0,0 @@ -dnl $Id$ -dnl config.m4 for extension tarantool - - - - - PHP_ARG_WITH(tarantool, for tarantool support, - [ --with-tarantool Include tarantool support]) - -dnl Otherwise use enable: - -dnl PHP_ARG_ENABLE(tarantool, whether to enable tarantool support, -dnl Make sure that the comment is aligned: -dnl [ --enable-tarantool Enable tarantool support]) - -if test "$PHP_TARANTOOL" != "no"; then - dnl Write more examples of tests here... - - dnl # --with-tarantool -> check with-path - dnl SEARCH_PATH="/usr/local /usr" # you might want to change this - dnl SEARCH_FOR="/include/tarantool.h" # you most likely want to change this - dnl if test -r $PHP_TARANTOOL/$SEARCH_FOR; then # path given as parameter - dnl TARANTOOL_DIR=$PHP_TARANTOOL - dnl else # search default path list - dnl AC_MSG_CHECKING([for tarantool files in default path]) - dnl for i in $SEARCH_PATH ; do - dnl if test -r $i/$SEARCH_FOR; then - dnl TARANTOOL_DIR=$i - dnl AC_MSG_RESULT(found in $i) - dnl fi - dnl done - dnl fi - dnl - dnl if test -z "$TARANTOOL_DIR"; then - dnl AC_MSG_RESULT([not found]) - dnl AC_MSG_ERROR([Please reinstall the tarantool distribution]) - dnl fi - - dnl # --with-tarantool -> add include path - dnl PHP_ADD_INCLUDE($TARANTOOL_DIR/include) - - dnl # --with-tarantool -> check for lib and symbol presence - dnl LIBNAME=tarantool # you may want to change this - dnl LIBSYMBOL=tarantool # you most likely want to change this - - dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL, - dnl [ - dnl PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $TARANTOOL_DIR/lib, TARANTOOL_SHARED_LIBADD) - dnl AC_DEFINE(HAVE_TARANTOOLLIB,1,[ ]) - dnl ],[ - dnl AC_MSG_ERROR([wrong tarantool lib version or lib not found]) - dnl ],[ - dnl -L$TARANTOOL_DIR/lib -lm - dnl ]) - dnl - dnl PHP_SUBST(TARANTOOL_SHARED_LIBADD) - - PHP_NEW_EXTENSION(tarantool, tarantool.c, $ext_shared) -fi diff --git a/connector/php/tarantool.c b/connector/php/tarantool.c deleted file mode 100644 index b7e24ef3025daee524e8f4e694a5ffbb229e2777..0000000000000000000000000000000000000000 --- a/connector/php/tarantool.c +++ /dev/null @@ -1,2095 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2008 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Alexandre Kalendarev akalend@mail.ru | - | Copyright (c) 2011 | - +----------------------------------------------------------------------+ -*/ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdint.h> -#include <stdbool.h> -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <netdb.h> -#include <inttypes.h> - -#include <php.h> -#include <php_ini.h> -#include <php_network.h> -#include <ext/standard/info.h> -#include <zend_exceptions.h> - -#include "tarantool.h" - - -/*============================================================================* - * Tarantool extension structures defintion - *============================================================================*/ - -/* I/O buffer */ -struct io_buf { - /* buffer's size */ - size_t size; - /* buffer's capacity */ - size_t capacity; - /* read position in the I/O buffer */ - size_t readed; - /* buffer value */ - uint8_t *value; -}; - -/* tarantool object */ -typedef struct tarantool_object { - zend_object zo; - /* host name */ - char *host; - /* tarantool primary port */ - int port; - /* tarantool admin port */ - int admin_port; - /* tarantool primary connection */ - php_stream *stream; - /* tarantool admin connecion */ - php_stream *admin_stream; - /* I/O buffer */ - struct io_buf *io_buf; - /* additional buffer for splice args */ - struct io_buf *splice_field; -} tarantool_object; - -/* iproto header */ -struct iproto_header { - /* command code */ - uint32_t type; - /* command length */ - uint32_t length; - /* request id */ - uint32_t request_id; -} __attribute__((packed)); - -/* tarantool select command request */ -struct tnt_select_request { - /* space number */ - int32_t space_no; - /* index number */ - int32_t index_no; - /* select offset from begining */ - int32_t offset; - /* maximail number tuples in responce */ - int32_t limit; -} __attribute__((packed)); - -/* tarantool insert command request */ -struct tnt_insert_request { - /* space number */ - int32_t space_no; - /* flags */ - int32_t flags; -} __attribute__((packed)); - -/* tarantool update fields command request */ -struct tnt_update_fields_request { - /* space number */ - int32_t space_no; - /* flags */ - int32_t flags; -} __attribute__((packed)); - -/* tarantool delete command request */ -struct tnt_delete_request { - /* space number */ - int32_t space_no; - /* flags */ - int32_t flags; -} __attribute__((packed)); - -/* tarantool call command request */ -struct tnt_call_request { - /* flags */ - int32_t flags; -} __attribute__((packed)); - -/* tarantool command response */ -struct tnt_response { - /* return code */ - int32_t return_code; - union { - /* count */ - int32_t count; - /* error message */ - char return_msg[0]; - }; -} __attribute__((packed)); - - -/*============================================================================* - * Global variables definition - *============================================================================*/ - - -/*----------------------------------------------------------------------------* - * Tarantool module variables - *----------------------------------------------------------------------------*/ - -/* module functions list */ -zend_function_entry tarantool_module_functions[] = { - PHP_ME(tarantool_class, __construct, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* tarantool module struct */ -zend_module_entry tarantool_module_entry = { -#if ZEND_MODULE_API_NO >= 20010901 - STANDARD_MODULE_HEADER, -#endif - "tarantool", - tarantool_module_functions, - PHP_MINIT(tarantool), - PHP_MSHUTDOWN(tarantool), - NULL, - NULL, - PHP_MINFO(tarantool), -#if ZEND_MODULE_API_NO >= 20010901 - "1.0", -#endif - STANDARD_MODULE_PROPERTIES -}; - - -#ifdef COMPILE_DL_TARANTOOL -ZEND_GET_MODULE(tarantool) -#endif - - -/*----------------------------------------------------------------------------* - * Tarantool class variables - *----------------------------------------------------------------------------*/ - -/* tarantool class methods */ -const zend_function_entry tarantool_class_methods[] = { - PHP_ME(tarantool_class, __construct, NULL, ZEND_ACC_PUBLIC) - PHP_ME(tarantool_class, select, NULL, ZEND_ACC_PUBLIC) - PHP_ME(tarantool_class, insert, NULL, ZEND_ACC_PUBLIC) - PHP_ME(tarantool_class, update_fields, NULL, ZEND_ACC_PUBLIC) - PHP_ME(tarantool_class, delete, NULL, ZEND_ACC_PUBLIC) - PHP_ME(tarantool_class, call, NULL, ZEND_ACC_PUBLIC) - PHP_ME(tarantool_class, admin, NULL, ZEND_ACC_PUBLIC) - {NULL, NULL, NULL} -}; - -/* tarantool class */ -zend_class_entry *tarantool_class_ptr; - - -/*============================================================================* - * local functions declaration - *============================================================================*/ - - -/*----------------------------------------------------------------------------* - * I/O buffer interface - *----------------------------------------------------------------------------*/ - -/* create I/O buffer instance */ -static struct io_buf * -io_buf_create(); - -/* destroy I/O buffer */ -static void -io_buf_destroy(struct io_buf *buf); - -/* reserv I/O buffer space */ -inline static bool -io_buf_reserve(struct io_buf *buf, size_t n); - -/* resize I/O buffer */ -inline static bool -io_buf_resize(struct io_buf *buf, size_t n); - -/* calculate next capacity for I/O buffer */ -inline static size_t -io_buf_next_capacity(size_t n); - -/* clean I/O buffer */ -static void -io_buf_clean(struct io_buf *buf); - -/* read struct from buffer */ -static bool -io_buf_read_struct(struct io_buf *buf, void **ptr, size_t n); - -/* read 32-bit integer from buffer */ -static bool -io_buf_read_int32(struct io_buf *buf, int32_t *val); - -/* read 64-bit integer from buffer */ -static bool -io_buf_read_int64(struct io_buf *buf, int64_t *val); - -/* read var integer from buffer */ -static bool -io_buf_read_varint(struct io_buf *buf, int32_t *val); - -/* read string from buffer */ -static bool -io_buf_read_str(struct io_buf *buf, char **str, size_t len); - -/* read fied from buffer */ -static bool -io_buf_read_field(struct io_buf *buf, zval *tuple); - -/* read tuple from buffer */ -static bool -io_buf_read_tuple(struct io_buf *buf, zval **tuple); - -/* - * Write to I/O buffer functions - */ - -/* write struct to I/O buffer */ -static void * -io_buf_write_struct(struct io_buf *buf, size_t n); - -/* write byte to I/O buffer */ -static bool -io_buf_write_byte(struct io_buf *buf, int8_t value); - -/* write 32-bit integer to I/O buffer */ -static bool -io_buf_write_int32(struct io_buf *buf, int32_t value); - -/* write 64-bit integer to I/O buffer */ -static bool -io_buf_write_int64(struct io_buf *buf, int64_t value); - -/* write varint to I/O buffer */ -static bool -io_buf_write_varint(struct io_buf *buf, int32_t value); - -/* write string to I/O buffer */ -static bool -io_buf_write_str(struct io_buf *buf, uint8_t *str, size_t len); - -/* write 32-bit integer as tuple's field to I/O buffer */ -static bool -io_buf_write_field_int32(struct io_buf *buf, uint32_t value); - -/* write 64-bit integer as tuple's field to I/O buffer */ -static bool -io_buf_write_field_int64(struct io_buf *buf, uint64_t value); - -/* write string tuple's field to I/O buffer */ -static bool -io_buf_write_field_str(struct io_buf *buf, uint8_t *val, size_t len); - -/* write tuple to I/O buffer */ -static bool -io_buf_write_tuple_int(struct io_buf *buf, zval *tuple); - -/* write tuple (string) to I/O buffer */ -static bool -io_buf_write_tuple_str(struct io_buf *buf, zval *tuple); - -/* write tuple (array) to I/O buffer */ -static bool -io_buf_write_tuple_array(struct io_buf *buf, zval *tuple); - -/* write tuple to I/O buffer */ -static bool -io_buf_write_tuple(struct io_buf *buf, zval *tuple); - -/* write array of tuples to I/O buffer */ -static bool -io_buf_write_tuples_list_array(struct io_buf *buf, zval *tuples_list); - -/* write tuples list to I/O buffer */ -static bool -io_buf_write_tuples_list(struct io_buf *buf, zval *tuples_list); - -/* - * I/O buffer send/recv - */ - -/* send administation command request */ -static bool -io_buf_send_yaml(php_stream *stream, struct io_buf *buf); - -/* receive administration command response */ -static bool -io_buf_recv_yaml(php_stream *stream, struct io_buf *buf); - -/* send request by iproto */ -static bool -io_buf_send_iproto(php_stream *stream, int32_t type, int32_t request_id, struct io_buf *buf); - -/* receive response by iproto */ -static bool -io_buf_recv_iproto(php_stream *stream, struct io_buf *buf); - - -/*----------------------------------------------------------------------------* - * support local functions - *----------------------------------------------------------------------------*/ - -/* tarantool class instance allocator */ -static zend_object_value -alloc_tarantool_object(zend_class_entry *entry TSRMLS_DC); - -/* free tarantool class instance */ -static void -free_tarantool_object(tarantool_object *tnt TSRMLS_DC); - -/* establic connection */ -static php_stream * -establish_connection(char *host, int port); - -/* find long by key in the hash table */ -static bool -hash_fing_long(HashTable *hash, char *key, long *value); - -/* find string by key in the hash table */ -static bool -hash_fing_str(HashTable *hash, char *key, char **value, int *value_length); - -/* find scalar by key in the hash table */ -static bool -hash_fing_scalar(HashTable *hash, char *key, zval ***value); - - -/*============================================================================* - * Interface definition - *============================================================================*/ - - -/*----------------------------------------------------------------------------* - * Tarantool main module interface - *----------------------------------------------------------------------------*/ - -/* initialize module function */ -PHP_MINIT_FUNCTION(tarantool) -{ - /* register constants */ - - /* register tarantool flags */ - REGISTER_LONG_CONSTANT("TARANTOOL_FLAGS_RETURN_TUPLE", - TARANTOOL_FLAGS_RETURN_TUPLE, - CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("TARANTOOL_FLAGS_ADD", - TARANTOOL_FLAGS_ADD, - CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("TARANTOOL_FLAGS_REPLACE", - TARANTOOL_FLAGS_REPLACE, - CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("TARANTOOL_FLAGS_NOT_STORE", - TARANTOOL_FLAGS_NOT_STORE, - CONST_CS | CONST_PERSISTENT); - - /* register tarantool update fields operations */ - REGISTER_LONG_CONSTANT("TARANTOOL_OP_ASSIGN", - TARANTOOL_OP_ASSIGN, - CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("TARANTOOL_OP_ADD", - TARANTOOL_OP_ADD, - CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("TARANTOOL_OP_AND", - TARANTOOL_OP_AND, - CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("TARANTOOL_OP_XOR", - TARANTOOL_OP_XOR, - CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("TARANTOOL_OP_OR", - TARANTOOL_OP_OR, - CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("TARANTOOL_OP_SPLICE", - TARANTOOL_OP_SPLICE, - CONST_CS | CONST_PERSISTENT); - - /* register classes */ - - /* register tarantool class */ - zend_class_entry tarantool_class; - INIT_CLASS_ENTRY(tarantool_class, "Tarantool", tarantool_class_methods); - tarantool_class.create_object = alloc_tarantool_object; - tarantool_class_ptr = zend_register_internal_class(&tarantool_class TSRMLS_CC); - - return SUCCESS; -} - -/* shutdown module function */ -PHP_MSHUTDOWN_FUNCTION(tarantool) -{ - return SUCCESS; -} - -/* show information about this module */ -PHP_MINFO_FUNCTION(tarantool) -{ - php_info_print_table_start(); - php_info_print_table_header(2, "Tarantool/Box support", "enabled"); - php_info_print_table_row(2, "Extension version", TARANTOOL_EXTENSION_VERSION); - php_info_print_table_end(); -} - - -/*----------------------------------------------------------------------------* - * Tarantool class interface - *----------------------------------------------------------------------------*/ - -PHP_METHOD(tarantool_class, __construct) -{ - /* - * parse method's parameters - */ - zval *id; - char *host = NULL; - int host_len = 0; - long port = 0; - long admin_port = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - getThis(), - "Osl|l", - &id, - tarantool_class_ptr, - &host, - &host_len, - &port, - &admin_port) == FAILURE) { - return; - } - - /* - * validate parameters - */ - - /* check host name */ - if (host == NULL || host_len == 0) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "invalid tarantool's hostname"); - return; - } - - /* validate port value */ - if (port <= 0 || port >= 65536) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "invalid primary port value: %li", port); - return; - } - - /* check admin port */ - if (admin_port) { - /* validate port value */ - if (admin_port < 0 || admin_port >= 65536) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "invalid admin port value: %li", admin_port); - return; - } - } - - /* initialzie object structure */ - tarantool_object *object = (tarantool_object *) zend_object_store_get_object( - id TSRMLS_CC); - object->host = estrdup(host); - object->port = port; - object->admin_port = admin_port; - object->stream = NULL; - object->admin_stream = NULL; - object->io_buf = io_buf_create(); - if (!object->io_buf) { - return; - } - object->splice_field = io_buf_create(); - if (!object->splice_field) { - return; - } - - return; -} - -PHP_METHOD(tarantool_class, select) -{ - /* - * parse methods parameters - */ - zval *id; - long space_no = 0; - long index_no = 0; - zval *keys_list = NULL; - long limit = -1; - long offset = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - getThis(), - "Ollz|ll", - &id, - tarantool_class_ptr, - &space_no, - &index_no, - &keys_list, - &limit, - &offset) == FAILURE) { - return; - } - - tarantool_object *tnt = (tarantool_object *) zend_object_store_get_object( - id TSRMLS_CC); - - /* check connection */ - if (!tnt->stream) { - /* establis connection */ - tnt->stream = establish_connection(tnt->host, tnt->port); - if (!tnt->stream) - return; - } - - /* - * send request - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* fill select command */ - /* fill command header */ - struct tnt_select_request *request = (struct tnt_select_request *) io_buf_write_struct( - tnt->io_buf, sizeof(struct tnt_select_request)); - if (request == NULL) - return; - request->space_no = space_no; - request->index_no = index_no; - request->offset = offset; - request->limit = limit; - /* fill keys */ - if (!io_buf_write_tuples_list(tnt->io_buf, keys_list)) - return; - - /* send iproto request */ - if (!io_buf_send_iproto(tnt->stream, TARANTOOL_COMMAND_SELECT, 0, tnt->io_buf)) - return; - - /* - * receive response - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* receive */ - if (!io_buf_recv_iproto(tnt->stream, tnt->io_buf)) - return; - - /* read response */ - struct tnt_response *response; - if (!io_buf_read_struct(tnt->io_buf, - (void **) &response, - sizeof(struct tnt_response))) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "select failed: invalid response was received"); - return; - } - - /* check return code */ - if (response->return_code) { - /* error happen, throw exceprion */ - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "select failed: %"PRIi32"(0x%08"PRIx32"): %s", - response->return_code, - response->return_code, - response->return_msg); - return; - } - - if (array_init(return_value) != SUCCESS) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "select failed: create array failed"); - return; - } - - /* put count to result array */ - add_assoc_long(return_value, "count", response->count); - - /* put tuple list to result array */ - zval *tuples_list; - MAKE_STD_ZVAL(tuples_list); - if (array_init(tuples_list) == FAILURE) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "select failed: create array failed"); - return; - } - - /* read tuples for responce */ - int i; - for (i = 0; i < response->count; ++i) { - zval *tuple; - if (!io_buf_read_tuple(tnt->io_buf, &tuple)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "select failed: invalid response was received"); - return; - } - add_next_index_zval(tuples_list, tuple); - } - - add_assoc_zval(return_value, "tuples_list", tuples_list); -} - -PHP_METHOD(tarantool_class, insert) -{ - /* - * parse methods parameters - */ - zval *id; - long space_no = 0; - long flags = 0; - zval *tuple = NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - getThis(), - "Ola|l", - &id, - tarantool_class_ptr, - &space_no, - &tuple, - &flags) == FAILURE) { - return; - } - - tarantool_object *tnt = (tarantool_object *) zend_object_store_get_object( - id TSRMLS_CC); - - /* check connection */ - if (!tnt->stream) { - /* establis connection */ - tnt->stream = establish_connection(tnt->host, tnt->port); - if (!tnt->stream) - return; - } - - /* - * send request - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* fill insert command */ - struct tnt_insert_request *request = (struct tnt_insert_request *) io_buf_write_struct( - tnt->io_buf, sizeof(struct tnt_insert_request)); - if (request == NULL) - return; - - /* space number */ - request->space_no = space_no; - /* flags */ - request->flags = flags; - /* tuple */ - if (!io_buf_write_tuple(tnt->io_buf, tuple)) - return; - - /* send iproto request */ - if (!io_buf_send_iproto(tnt->stream, TARANTOOL_COMMAND_INSERT, 0, tnt->io_buf)) - return; - - /* - * receive response - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* receive */ - if (!io_buf_recv_iproto(tnt->stream, tnt->io_buf)) - return; - - /* read response */ - struct tnt_response *response; - if (!io_buf_read_struct(tnt->io_buf, - (void **) &response, - sizeof(struct tnt_response))) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "insert failed: invalid response was received"); - return; - } - - /* check return code */ - if (response->return_code) { - /* error happen, throw exceprion */ - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "insert failed: %"PRIi32"(0x%08"PRIx32"): %s", - response->return_code, - response->return_code, - response->return_msg); - return; - } - - /* - * fill return value - */ - - if (array_init(return_value) != SUCCESS) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "insert failed: create array failed"); - return; - } - - /* put count to result array */ - add_assoc_long(return_value, "count", response->count); - - /* check "return tuple" flag */ - if (flags & TARANTOOL_FLAGS_RETURN_TUPLE) { - /* ok, the responce should contain inserted tuple */ - if (!io_buf_read_tuple(tnt->io_buf, &tuple)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "insert failed: invalid response was received"); - return; - } - - /* put returned tuple to result array */ - add_assoc_zval(return_value, "tuple", tuple); - } -} - -PHP_METHOD(tarantool_class, update_fields) -{ - /* - * parse methods parameters - */ - zval *id; - long space_no = 0; - long flags = 0; - zval *tuple = NULL; - zval *op_list = NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - getThis(), - "Olza|l", - &id, - tarantool_class_ptr, - &space_no, - &tuple, - &op_list, - &flags) == FAILURE) { - return; - } - - tarantool_object *tnt = (tarantool_object *) zend_object_store_get_object( - id TSRMLS_CC); - - /* check connection */ - if (!tnt->stream) { - /* establis connection */ - tnt->stream = establish_connection(tnt->host, tnt->port); - if (!tnt->stream) - return; - } - - /* - * send request - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* fill insert command */ - struct tnt_update_fields_request *request = (struct tnt_update_fields_request *) io_buf_write_struct( - tnt->io_buf, sizeof(struct tnt_update_fields_request)); - if (request == NULL) - return; - - /* space number */ - request->space_no = space_no; - /* flags */ - request->flags = flags; - /* tuple */ - if (!io_buf_write_tuple(tnt->io_buf, tuple)) - return; - - HashTable *op_list_array = Z_ARRVAL_P(op_list); - int op_count = zend_hash_num_elements(op_list_array); - - /* write number of update fields operaion */ - if (!io_buf_write_int32(tnt->io_buf, op_count)) - return; - - HashPosition itr; - zval **op; - for (zend_hash_internal_pointer_reset_ex(op_list_array, &itr); - zend_hash_get_current_data_ex(op_list_array, (void **) &op, &itr) == SUCCESS; - zend_hash_move_forward_ex(op_list_array, &itr)) { - /* check operation type */ - if (Z_TYPE_PP(op) != IS_ARRAY) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "invalid operations list"); - return; - } - - HashTable *op_array = Z_ARRVAL_PP(op); - long field_no; - long opcode; - - if (!hash_fing_long(op_array, "field", &field_no)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "can't find 'field' in the update field operation"); - return; - } - - if (!hash_fing_long(op_array, "op", &opcode)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "can't find 'op' in the update field operation"); - return; - } - - /* write field number */ - if (!io_buf_write_int32(tnt->io_buf, field_no)) - return; - - /* write operation code */ - if (!io_buf_write_byte(tnt->io_buf, opcode)) - return; - - zval **assing_arg = NULL; - long arith_arg; - long splice_offset; - long splice_length; - char *splice_list; - int splice_list_len; - switch (opcode) { - case TARANTOOL_OP_ASSIGN: - if (!hash_fing_scalar(op_array, "arg", &assing_arg)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "can't find 'arg' in the update field operation"); - return; - } - if (Z_TYPE_PP(assing_arg) == IS_LONG) { - /* write as interger */ - if (!io_buf_write_field_str(tnt->io_buf, (uint8_t *) &Z_LVAL_PP(assing_arg), sizeof(int32_t))) - return; - } else { - /* write as string */ - if (!io_buf_write_field_str(tnt->io_buf, (uint8_t *) Z_STRVAL_PP(assing_arg), Z_STRLEN_PP(assing_arg))) - return; - } - break; - case TARANTOOL_OP_ADD: - case TARANTOOL_OP_AND: - case TARANTOOL_OP_XOR: - case TARANTOOL_OP_OR: - if (!hash_fing_long(op_array, "arg", &arith_arg)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "can't find 'arg' in the update field operation"); - return; - } - /* write arith arg */ - if (!io_buf_write_field_str(tnt->io_buf, (uint8_t *) &arith_arg, sizeof(int32_t))) - return; - break; - case TARANTOOL_OP_SPLICE: - /* - * read splice args - */ - - /* read offset */ - if (!hash_fing_long(op_array, "offset", &splice_offset)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "can't find 'offset' in the update field operation"); - return; - } - /* read length */ - if (!hash_fing_long(op_array, "length", &splice_length)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "can't find 'length' in the update field operation"); - return; - } - /* read list */ - if (!hash_fing_str(op_array, "list", &splice_list, &splice_list_len)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "can't find 'list' in the update field operation"); - return; - } - - /* - * write splice args - */ - io_buf_clean(tnt->splice_field); - - /* write offset to separate buffer */ - if (!io_buf_write_field_str(tnt->splice_field, (uint8_t *) &splice_offset, sizeof(int32_t))) - return; - /* write length to separate buffer */ - if (!io_buf_write_field_str(tnt->splice_field, (uint8_t *) &splice_length, sizeof(int32_t))) - return; - /* write list to separate buffer */ - if (!io_buf_write_field_str(tnt->splice_field, (uint8_t *) splice_list, splice_list_len)) - return; - - /* write splice args as alone field */ - if (!io_buf_write_field_str(tnt->io_buf, tnt->splice_field->value, tnt->splice_field->size)) - return; - - break; - default: - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "invalid operaion code %i", opcode); - return; - } - } - - /* send iproto request */ - if (!io_buf_send_iproto(tnt->stream, TARANTOOL_COMMAND_UPDATE, 0, tnt->io_buf)) - return; - - /* - * receive response - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* receive */ - if (!io_buf_recv_iproto(tnt->stream, tnt->io_buf)) - return; - - /* read response */ - struct tnt_response *response; - if (!io_buf_read_struct(tnt->io_buf, - (void **) &response, - sizeof(struct tnt_response))) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "update fields failed: invalid response was received"); - return; - } - - /* check return code */ - if (response->return_code) { - /* error happen, throw exceprion */ - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "update fields failed: %"PRIi32"(0x%08"PRIx32"): %s", - response->return_code, - response->return_code, - response->return_msg); - return; - } - - /* - * fill return value - */ - - if (array_init(return_value) != SUCCESS) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "update fields failed: create array failed"); - return; - } - - /* put count to result array */ - add_assoc_long(return_value, "count", response->count); - - /* check "return tuple" flag */ - if ((response->count > 0) && (flags & TARANTOOL_FLAGS_RETURN_TUPLE)) { - /* ok, the responce should contain inserted tuple */ - if (!io_buf_read_tuple(tnt->io_buf, &tuple)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "update fields failed: invalid response was received"); - return; - } - - /* put returned tuple to result array */ - add_assoc_zval(return_value, "tuple", tuple); - } -} - -PHP_METHOD(tarantool_class, delete) -{ - /* - * parse methods parameters - */ - zval *id; - long space_no = 0; - long flags = 0; - zval *tuple = NULL; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - getThis(), - "Olz|l", - &id, - tarantool_class_ptr, - &space_no, - &tuple, - &flags) == FAILURE) { - return; - } - - tarantool_object *tnt = (tarantool_object *) zend_object_store_get_object( - id TSRMLS_CC); - - /* check connection */ - if (!tnt->stream) { - /* establis connection */ - tnt->stream = establish_connection(tnt->host, tnt->port); - if (!tnt->stream) - return; - } - - /* - * send request - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* fill delete command */ - struct tnt_delete_request *request = (struct tnt_delete_request *) io_buf_write_struct( - tnt->io_buf, sizeof(struct tnt_delete_request)); - if (request == NULL) - return; - - /* space number */ - request->space_no = space_no; - /* flags */ - request->flags = flags; - /* tuple */ - if (!io_buf_write_tuple(tnt->io_buf, tuple)) - return; - - /* send iproto request */ - if (!io_buf_send_iproto(tnt->stream, TARANTOOL_COMMAND_DELETE, 0, tnt->io_buf)) - return; - - /* - * receive response - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* receive */ - if (!io_buf_recv_iproto(tnt->stream, tnt->io_buf)) - return; - - /* read response */ - struct tnt_response *response; - if (!io_buf_read_struct(tnt->io_buf, - (void **) &response, - sizeof(struct tnt_response))) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "delete failed: invalid response was received"); - return; - } - - /* check return code */ - if (response->return_code) { - /* error happen, throw exceprion */ - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "delete failed: %"PRIi32"(0x%08"PRIx32"): %s", - response->return_code, - response->return_code, - response->return_msg); - return; - } - - /* - * fill return value - */ - - if (array_init(return_value) != SUCCESS) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "delete failed: create array failed"); - return; - } - - /* put count to result array */ - add_assoc_long(return_value, "count", response->count); - - /* check "return tuple" flag */ - if ((response->count) > 0 && (flags & TARANTOOL_FLAGS_RETURN_TUPLE)) { - /* ok, the responce should contain inserted tuple */ - if (!io_buf_read_tuple(tnt->io_buf, &tuple)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "delete failed: invalid response was received"); - return; - } - - /* put returned tuple to result array */ - add_assoc_zval(return_value, "tuple", tuple); - } -} - -PHP_METHOD(tarantool_class, call) -{ - /* - * parse methods parameters - */ - zval *id; - char *proc_name = NULL; - int proc_name_len = 0; - zval *tuple = NULL; - long flags = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - getThis(), - "Osz|l", - &id, - tarantool_class_ptr, - &proc_name, &proc_name_len, - &tuple, - &flags) == FAILURE) { - return; - } - - tarantool_object *tnt = (tarantool_object *) zend_object_store_get_object( - id TSRMLS_CC); - - /* check connection */ - if (!tnt->stream) { - /* establis connection */ - tnt->stream = establish_connection(tnt->host, tnt->port); - if (!tnt->stream) - return; - } - - /* - * send request - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* fill insert command */ - struct tnt_call_request *request = (struct tnt_call_request *) io_buf_write_struct( - tnt->io_buf, sizeof(struct tnt_call_request)); - if (request == NULL) - return; - - /* flags */ - request->flags = flags; - /* proc name */ - if (!io_buf_write_field_str(tnt->io_buf, proc_name, proc_name_len)) - return; - /* tuple */ - if (!io_buf_write_tuple(tnt->io_buf, tuple)) - return; - - /* send iproto request */ - if (!io_buf_send_iproto(tnt->stream, TARANTOOL_COMMAND_CALL, 0, tnt->io_buf)) - return; - - - /* - * receive response - */ - - /* clean-up buffer */ - io_buf_clean(tnt->io_buf); - - /* receive */ - if (!io_buf_recv_iproto(tnt->stream, tnt->io_buf)) - return; - - /* read response */ - struct tnt_response *response; - if (!io_buf_read_struct(tnt->io_buf, - (void **) &response, - sizeof(struct tnt_response))) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "call failed: invalid response was received"); - return; - } - - /* check return code */ - if (response->return_code) { - /* error happen, throw exceprion */ - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "call failed: %"PRIi32"(0x%08"PRIx32"): %s", - response->return_code, - response->return_code, - response->return_msg); - return; - } - - if (array_init(return_value) != SUCCESS) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "call failed: create array failed"); - return; - } - - /* put count to result array */ - add_assoc_long(return_value, "count", response->count); - - /* put tuple list to result array */ - zval *tuples_list; - MAKE_STD_ZVAL(tuples_list); - if (array_init(tuples_list) == FAILURE) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "call failed: create array failed"); - return; - } - - /* read tuples for responce */ - int i; - for (i = 0; i < response->count; ++i) { - zval *tuple; - if (!io_buf_read_tuple(tnt->io_buf, &tuple)) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "call failed: invalid response was received"); - return; - } - add_next_index_zval(tuples_list, tuple); - } - - add_assoc_zval(return_value, "tuples_list", tuples_list); -} - -PHP_METHOD(tarantool_class, admin) -{ - /* parse methods parameters */ - zval *id; - char *cmd = NULL; - int cmd_len = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, - getThis(), - "Os", - &id, - tarantool_class_ptr, - &cmd, &cmd_len) == FAILURE) { - return; - } - - tarantool_object *tnt = (tarantool_object *) zend_object_store_get_object( - id TSRMLS_CC); - - /* check admin port */ - if (!tnt->admin_port) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "admin command not allowed for this commection"); - return; - } - - /* check connection */ - if (!tnt->admin_stream) { - /* establis connection */ - tnt->admin_stream = establish_connection(tnt->host, tnt->admin_port); - if (!tnt->admin_stream) - return; - - /* set string eol */ - php_stream_locate_eol(tnt->admin_stream, - ADMIN_SEPARATOR, - strlen(ADMIN_SEPARATOR) TSRMLS_DC); - } - - /* send request */ - io_buf_clean(tnt->io_buf); - if (!io_buf_write_str(tnt->io_buf, cmd, cmd_len)) - return; - if (!io_buf_write_str(tnt->io_buf, ADMIN_SEPARATOR, strlen(ADMIN_SEPARATOR))) - return; - if (!io_buf_send_yaml(tnt->admin_stream, tnt->io_buf)) - return; - - /* recv response */ - io_buf_clean(tnt->io_buf); - if (!io_buf_recv_yaml(tnt->admin_stream, tnt->io_buf)) - return; - - char *response = estrndup(tnt->io_buf->value, tnt->io_buf->size); - RETURN_STRING(response, 0); -} - - -/*============================================================================* - * local functions definition - *============================================================================*/ - - -/*----------------------------------------------------------------------------* - * Buffer interface - *----------------------------------------------------------------------------*/ - -static struct io_buf * -io_buf_create() -{ - struct io_buf *buf = (struct io_buf *) emalloc(sizeof(struct io_buf)); - if (!buf) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "allocation memory fail: %s (%i)", strerror(errno), errno); - goto failure; - } - - buf->size = 0; - buf->capacity = io_buf_next_capacity(buf->size); - buf->readed = 0; - buf->value = (uint8_t *) emalloc(buf->capacity); - if (!buf->value) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "allocation memory fail: %s (%i)", strerror(errno), errno); - goto failure; - } - - return buf; - -failure: - if (buf) { - if (buf->value) - efree(buf->value); - - efree(buf); - } - - return NULL; -} - -static void -io_buf_destroy(struct io_buf *buf) -{ - if (!buf) - return; - - if (buf->value) - efree(buf->value); - - efree(buf); -} - -inline static bool -io_buf_reserve(struct io_buf *buf, size_t n) -{ - if (buf->capacity > n) - return true; - - size_t new_capacity = io_buf_next_capacity(n); - uint8_t *new_value = (uint8_t *) erealloc(buf->value, new_capacity); - if (!new_value) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "allocation memory fail: %s (%i)", strerror(errno), errno); - return false; - } - - buf->capacity = new_capacity; - buf->value = new_value; - return true; -} - -inline static bool -io_buf_resize(struct io_buf *buf, size_t n) -{ - io_buf_reserve(buf, n); - buf->size = n; - return true; -} - -inline static size_t -io_buf_next_capacity(size_t n) -{ - size_t capacity = IO_BUF_CAPACITY_MIN; - while (capacity < n) - capacity *= IO_BUF_CAPACITY_FACTOR; - return capacity; -} - -static void -io_buf_clean(struct io_buf *buf) -{ - buf->size = 0; - buf->readed = 0; -} - -static bool -io_buf_read_struct(struct io_buf *buf, void **ptr, size_t n) -{ - size_t last = buf->size - buf->readed; - if (last < n) - return false; - *ptr = buf->value + buf->readed; - buf->readed += n; - return true; -} - -static bool -io_buf_read_int32(struct io_buf *buf, int32_t *val) -{ - size_t last = buf->size - buf->readed; - if (last < sizeof(int32_t)) - return false; - *val = *(int32_t *)(buf->value + buf->readed); - buf->readed += sizeof(int32_t); - return true; -} - -static bool -io_buf_read_int64(struct io_buf *buf, int64_t *val) -{ - size_t last = buf->size - buf->readed; - if (last < sizeof(int64_t)) - return false; - *val = *(int64_t *)(buf->value + buf->readed); - buf->readed += sizeof(int64_t); - return true; -} - -static bool -io_buf_read_varint(struct io_buf *buf, int32_t *val) -{ - uint8_t *b = buf->value + buf->readed; - size_t size = buf->size - buf->readed; - - if (size < 1) - return false; - - if (!(b[0] & 0x80)) { - buf->readed += 1; - *val = (b[0] & 0x7f); - return true; - } - - if (size < 2) - return false; - - if (!(b[1] & 0x80)) { - buf->readed += 2; - *val = (b[0] & 0x7f) << 7 | (b[1] & 0x7f); - return true; - } - - if (size < 3) - return false; - - if (!(b[2] & 0x80)) { - buf->readed += 3; - *val = (b[0] & 0x7f) << 14 | (b[1] & 0x7f) << 7 | (b[2] & 0x7f); - return true; - } - - if (size < 4) - return false; - - if (!(b[3] & 0x80)) { - buf->readed += 4; - *val = (b[0] & 0x7f) << 21 | (b[1] & 0x7f) << 14 | - (b[2] & 0x7f) << 7 | (b[3] & 0x7f); - return true; - } - - if (size < 5) - return false; - - if (!(b[4] & 0x80)) { - buf->readed += 5; - *val = (b[0] & 0x7f) << 28 | (b[1] & 0x7f) << 21 | - (b[2] & 0x7f) << 14 | (b[3] & 0x7f) << 7 | (b[4] & 0x7f); - return true; - } - - return false; -} - -static bool -io_buf_read_str(struct io_buf *buf, char **str, size_t len) -{ - size_t last = buf->size - buf->readed; - if (last < len) - return false; - *str = (char *)(buf->value + buf->readed); - buf->readed += len; - return true; -} - -static bool -io_buf_read_field(struct io_buf *buf, zval *tuple) -{ - int32_t field_length; - - if (!io_buf_read_varint(buf, &field_length)) - return false; - - int32_t i32_val; - int64_t i64_val; - char *str_val; - switch (field_length) { - case sizeof(int32_t): - if (!io_buf_read_int32(buf, &i32_val)) - return false; - add_next_index_long(tuple, i32_val); - break; - case sizeof(int64_t): - if (!io_buf_read_int64(buf, &i64_val)) - return false; - add_next_index_long(tuple, (long) i64_val); - break; - default: - if (!io_buf_read_str(buf, &str_val, field_length)) - return false; - add_next_index_stringl(tuple, str_val, field_length, true); - } - - return true; -} - -static bool -io_buf_read_tuple(struct io_buf *buf, zval **tuple) -{ - MAKE_STD_ZVAL(*tuple); - if (array_init(*tuple) == FAILURE) { - return false; - } - - int32_t size; - if (!io_buf_read_int32(buf, &size)) - return false; - - int32_t cardinality; - if (!io_buf_read_int32(buf, &cardinality)) - return false; - - while (cardinality > 0) { - if (!io_buf_read_field(buf, *tuple)) - return false; - cardinality -= 1; - } - - return true; -} - -static void * -io_buf_write_struct(struct io_buf *buf, size_t n) -{ - if (!io_buf_reserve(buf, buf->size + n)) - return NULL; - void *ptr = buf->value + buf->size; - buf->size += n; - return ptr; -} - -static bool -io_buf_write_byte(struct io_buf *buf, int8_t value) -{ - if (!io_buf_reserve(buf, buf->size + sizeof(int8_t))) - return false; - *(int8_t *)(buf->value + buf->size) = value; - buf->size += sizeof(uint8_t); - return true; -} - -static bool -io_buf_write_int32(struct io_buf *buf, int32_t value) -{ - if (!io_buf_reserve(buf, buf->size + sizeof(int32_t))) - return false; - *(int32_t *)(buf->value + buf->size) = value; - buf->size += sizeof(int32_t); - return true; -} - -static bool -io_buf_write_int64(struct io_buf *buf, int64_t value) -{ - if (!io_buf_reserve(buf, buf->size + sizeof(int64_t))) - return false; - *(int64_t *)(buf->value + buf->size) = value; - buf->size += sizeof(int64_t); - return true; -} - -static bool -io_buf_write_varint(struct io_buf *buf, int32_t value) -{ - if (!io_buf_reserve(buf, buf->size + 5)) - /* reseve maximal varint size (5 bytes) */ - return false; - - if (value >= (1 << 7)) { - if (value >= (1 << 14)) { - if (value >= (1 << 21)) { - if (value >= (1 << 28)) - io_buf_write_byte(buf, (int8_t)(value >> 28) | 0x80); - io_buf_write_byte(buf, (int8_t)(value >> 21) | 0x80); - } - io_buf_write_byte(buf, (int8_t)((value >> 14) | 0x80)); - } - io_buf_write_byte(buf, (int8_t)((value >> 7) | 0x80)); - } - io_buf_write_byte(buf, (int8_t)((value) & 0x7F)); - - return true; -} - -static bool -io_buf_write_str(struct io_buf *buf, uint8_t *str, size_t len) -{ - if (!io_buf_reserve(buf, buf->size + len)) - return false; - - memcpy(buf->value + buf->size, str, len); - buf->size += len; - return true; -} - -static bool -io_buf_write_field_int32(struct io_buf *buf, uint32_t value) -{ - /* write field length (4 bytes) */ - if (!io_buf_write_varint(buf, sizeof(int32_t))) - return false; - /* write field value */ - if (!io_buf_write_int32(buf, value)) - return false; - return true; -} - -static bool -io_buf_write_field_int64(struct io_buf *buf, uint64_t value) -{ - /* write field length (8 bytes) */ - if (!io_buf_write_varint(buf, sizeof(int64_t))) - return false; - /* write field value */ - if (!io_buf_write_int64(buf, value)) - return false; - return true; -} - -static bool -io_buf_write_field_str(struct io_buf *buf, uint8_t *field_value, size_t field_length) -{ - /* write field length (string length) */ - if (!io_buf_write_varint(buf, (int32_t)field_length)) - return false; - /* write field value (string) */ - if (!io_buf_write_str(buf, field_value, field_length)) - return false; - return true; -} - -static bool -io_buf_write_tuple_int(struct io_buf *buf, zval *tuple) -{ - /* single field tuple: (int) */ - long long_value = Z_LVAL_P(tuple); - /* write tuple cardinality */ - if (!io_buf_write_int32(buf, 1)) - return false; - /* write field */ - if ((unsigned long)long_value <= 0xffffffffllu) { - if (!io_buf_write_field_int32(buf, (uint32_t)long_value)) - return false; - } else { - if (!io_buf_write_field_int64(buf, (uint64_t)long_value)) - return false; - } - - return true; -} - -static bool -io_buf_write_tuple_str(struct io_buf *buf, zval *tuple) -{ - /* single field tuple: (string) */ - char *str_value = Z_STRVAL_P(tuple); - size_t str_length = Z_STRLEN_P(tuple); - /* write tuple cardinality */ - if (!io_buf_write_int32(buf, 1)) - return false; - /* write field */ - if (!io_buf_write_field_str(buf, str_value, str_length)) - return false; - - return true; -} - -static bool -io_buf_write_tuple_array(struct io_buf *buf, zval *tuple) -{ - /* multyply tuple array */ - HashTable *hash = Z_ARRVAL_P(tuple); - HashPosition itr; - zval **field; - /* put tuple cardinality */ - io_buf_write_int32(buf, zend_hash_num_elements(hash)); - for (zend_hash_internal_pointer_reset_ex(hash, &itr); - zend_hash_get_current_data_ex(hash, (void **) &field, &itr) == SUCCESS; - zend_hash_move_forward_ex(hash, &itr)) { - char *str_value; - size_t str_length; - long long_value; - - switch (Z_TYPE_PP(field)) { - case IS_STRING: - /* string field */ - str_value = Z_STRVAL_PP(field); - str_length = Z_STRLEN_PP(field); - io_buf_write_field_str(buf, str_value, str_length); - break; - case IS_LONG: - /* integer field */ - long_value = Z_LVAL_PP(field); - io_buf_write_field_str(buf, (uint8_t *)&long_value, sizeof(int32_t)); - break; - default: - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "unsupported field type"); - return false; - } - } - - return true; -} - -static bool -io_buf_write_tuple(struct io_buf *buf, zval *tuple) -{ - /* write tuple by type */ - switch (Z_TYPE_P(tuple)) { - case IS_LONG: - /* write integer as tuple */ - return io_buf_write_tuple_int(buf, tuple); - case IS_STRING: - /* write string as tuple */ - return io_buf_write_tuple_str(buf, tuple); - case IS_ARRAY: - /* write array as tuple */ - return io_buf_write_tuple_array(buf, tuple); - default: - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "unsupported tuple type"); - return false; - } - - return true; -} - -static bool -io_buf_write_tuples_list_array(struct io_buf *buf, zval *tuples_list) -{ - HashTable *hash = Z_ARRVAL_P(tuples_list); - HashPosition itr; - zval **tuple; - - /* write number of tuples */ - if (!io_buf_write_int32(buf, zend_hash_num_elements(hash))) - return false; - - /* write tuples */ - for (zend_hash_internal_pointer_reset_ex(hash, &itr); - zend_hash_get_current_data_ex(hash, (void **) &tuple, &itr) == SUCCESS; - zend_hash_move_forward_ex(hash, &itr)) { - if (Z_TYPE_PP(tuple) != IS_ARRAY) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "invalid tuples list: expected array of array"); - return false; - } - - if (!io_buf_write_tuple_array(buf, *tuple)) - return false; - } - - return true; -} - - -static bool -io_buf_write_tuples_list(struct io_buf *buf, zval *tuples_list) -{ - HashTable *hash; - HashPosition itr; - zval **tuple; - - switch (Z_TYPE_P(tuples_list)) { - case IS_LONG: - /* single tuple: long */ - /* write number of tuples */ - if (!io_buf_write_int32(buf, 1)) - return false; - /* write tuple */ - if (!io_buf_write_tuple_int(buf, tuples_list)) - return false; - break; - case IS_STRING: - /* single tuple: string */ - /* write number of tuples */ - if (!io_buf_write_int32(buf, 1)) - return false; - /* write tuple */ - if (!io_buf_write_tuple_str(buf, tuples_list)) - return false; - break; - case IS_ARRAY: - /* array: migth be single or multi tuples array */ - hash = Z_ARRVAL_P(tuples_list); - zend_hash_internal_pointer_reset_ex(hash, &itr); - if (zend_hash_get_current_data_ex(hash, (void **) &tuple, &itr) != SUCCESS) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "invalid tuples list: empty array"); - return false; - } - - /* check type of the first element */ - switch (Z_TYPE_PP(tuple)) { - case IS_STRING: - case IS_LONG: - /* single tuple: array */ - /* write tuples count */ - if (!io_buf_write_int32(buf, 1)) - return false; - /* write tuple */ - if (!io_buf_write_tuple_array(buf, tuples_list)) - return false; - break; - case IS_ARRAY: - /* multi tuples list */ - if (!io_buf_write_tuples_list_array(buf, tuples_list)) - return false; - break; - default: - /* invalid element type */ - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "unsupported tuple type"); - return false; - } - - break; - default: - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "unsupported tuple type"); - return false; - } - - return true; -} - -/* - * I/O buffer send/recv - */ - -static bool -io_buf_send_yaml(php_stream *stream, struct io_buf *buf) -{ - if (php_stream_write(stream, - buf->value, - buf->size) != buf->size) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "send message fail"); - return false; - } - - /* flush request */ - php_stream_flush(stream); - - return true; -} - -static bool -io_buf_recv_yaml(php_stream *stream, struct io_buf *buf) -{ - char *line = php_stream_get_line(stream, NULL, 0, NULL); - while (strcmp(line, ADMIN_TOKEN_BEGIN) != 0) { - line = php_stream_get_line(stream, NULL, 0, NULL); - } - - line = php_stream_get_line(stream, NULL, 0, NULL); - while (strcmp(line, ADMIN_TOKEN_END) != 0) { - io_buf_write_str(buf, line, strlen(line)); - line = php_stream_get_line(stream, NULL, 0, NULL); - } - - return true; -} - -static bool -io_buf_send_iproto(php_stream *stream, int32_t type, int32_t request_id, struct io_buf *buf) -{ - /* send iproto header */ - struct iproto_header header; - header.type = type; - header.length = buf->size; - header.request_id = request_id; - - size_t length = sizeof(struct iproto_header); - if (php_stream_write(stream, (char *) &header, length) != length) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "send requset failed"); - return false; - } - - /* send requets */ - if (php_stream_write(stream, buf->value, buf->size) != buf->size) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "send requset failed"); - return false; - } - - /* flush request */ - php_stream_flush(stream); - - return true; -} - -static bool -io_buf_recv_iproto(php_stream *stream, struct io_buf *buf) -{ - /* receiving header */ - struct iproto_header header; - size_t length = sizeof(struct iproto_header); - if (php_stream_read(stream, (char *) &header, length) != length) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "receive response failed"); - return false; - } - - /* receiving body */ - if (!io_buf_resize(buf, header.length)) - return false; - if (php_stream_read(stream, buf->value, buf->size) != buf->size) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "receive response failed"); - return false; - } - - return true; -} - - -/*----------------------------------------------------------------------------* - * support local functions - *----------------------------------------------------------------------------*/ - -static zend_object_value -alloc_tarantool_object(zend_class_entry *entry TSRMLS_DC) -{ - zend_object_value new_value; - - /* allocate and clean-up instance */ - tarantool_object *tnt = (tarantool_object *) emalloc(sizeof(tarantool_object)); - /* TODO: emalloc result must be checked */ - memset(tnt, 0, sizeof(tarantool_object)); - - /* initialize class instance */ - zend_object_std_init(&tnt->zo, entry TSRMLS_CC); - new_value.handle = zend_objects_store_put( - tnt, - (zend_objects_store_dtor_t) zend_objects_destroy_object, - (zend_objects_free_object_storage_t) free_tarantool_object, - NULL TSRMLS_CC); - new_value.handlers = zend_get_std_object_handlers(); - return new_value; -} - -static void -free_tarantool_object(tarantool_object *tnt TSRMLS_DC) -{ - if (tnt == NULL) - return; - - if (tnt->stream) - php_stream_close(tnt->stream); - - if (tnt->admin_stream) - php_stream_close(tnt->admin_stream); - - io_buf_destroy(tnt->io_buf); - io_buf_destroy(tnt->splice_field); - efree(tnt); -} - -static php_stream * -establish_connection(char *host, int port) -{ - char *msg = NULL; - /* initialize connection parameters */ - char *dest_addr = NULL; - size_t dest_addr_len = spprintf(&dest_addr, 0, "tcp://%s:%d", host, port); - int options = ENFORCE_SAFE_MODE | REPORT_ERRORS; - int flags = STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT; - struct timeval timeout = { - .tv_sec = TARANTOOL_TIMEOUT_SEC, - .tv_usec = TARANTOOL_TIMEOUT_USEC, - }; - char *error_msg = NULL; - int error_code = 0; - - /* establish connection */ - php_stream *stream = php_stream_xport_create(dest_addr, dest_addr_len, - options, flags, - NULL, &timeout, NULL, - &error_msg, &error_code); - efree(dest_addr); - - /* check result */ - if (error_code && error_msg) { - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "establist connection fail: %s", error_msg); - goto process_error; - } - - /* set socket flag 'TCP_NODELAY' */ - int socketd = ((php_netstream_data_t*)stream->abstract)->socket; - flags = 1; - int result = setsockopt(socketd, IPPROTO_TCP, TCP_NODELAY, (char *) &flags, sizeof(int)); - if (result != 0) { - char error_buf[64]; - zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_DC, - "establist connection fail: setsockopt %s", strerror_r(errno, error_buf, sizeof(error_buf))); - goto process_error; - } - - return stream; - -process_error: - - if (error_msg) - efree(error_msg); - - if (stream) - php_stream_close(stream); - - return NULL; -} - -static bool -hash_fing_long(HashTable *hash, char *key, long *value) -{ - zval **zvalue = NULL; - if (zend_hash_find(hash, key, strlen(key) + 1, (void **)&zvalue) != SUCCESS) - return false; - if (Z_TYPE_PP(zvalue) != IS_LONG) - return false; - *value = Z_LVAL_PP(zvalue); - return true; -} - -static bool -hash_fing_str(HashTable *hash, char *key, char **value, int *value_length) -{ - zval **zvalue = NULL; - if (zend_hash_find(hash, key, strlen(key) + 1, (void **)&zvalue) != SUCCESS) - return false; - if (Z_TYPE_PP(zvalue) != IS_STRING) - return false; - *value = Z_STRVAL_PP(zvalue); - *value_length = Z_STRLEN_PP(zvalue); - return true; -} - -static bool -hash_fing_scalar(HashTable *hash, char *key, zval ***value) -{ - if (zend_hash_find(hash, key, strlen(key) + 1, (void **)value) != SUCCESS) - return false; - if (Z_TYPE_PP(*value) != IS_STRING && Z_TYPE_PP(*value) != IS_LONG) - return false; - return true; -} - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/connector/php/tarantool.h b/connector/php/tarantool.h deleted file mode 100644 index 74a5635185dd2db3dbf7abe6098f799cd31d74e1..0000000000000000000000000000000000000000 --- a/connector/php/tarantool.h +++ /dev/null @@ -1,194 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2008 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Alexandre Kalendarev akalend@mail.ru | - | Copyright (c) 2011 | - +----------------------------------------------------------------------+ -*/ -#ifndef PHP_TARANTOOL_H -#define PHP_TARANTOOL_H - -#ifdef ZTS -#include "TSRM.h" -#endif - - -/*============================================================================* - * Constants - *============================================================================*/ - -#define TARANTOOL_EXTENSION_VERSION "1.0" - - -/*----------------------------------------------------------------------------* - * tbuf constants - *----------------------------------------------------------------------------*/ - -enum { - /* tbuf minimal capacity */ - IO_BUF_CAPACITY_MIN = 128, - /* tbuf factor */ - IO_BUF_CAPACITY_FACTOR = 2, -}; - - -/*----------------------------------------------------------------------------* - * Connections constants - *----------------------------------------------------------------------------*/ - -enum { - /* timeout: seconds */ - TARANTOOL_TIMEOUT_SEC = 5, - /* timeout: microseconds */ - TARANTOOL_TIMEOUT_USEC = 0, - /* tarantool default primary port */ - TARANTOOL_DEFAULT_PORT = 33013, - /* tarantool default readonly port */ - TARANTOOL_DEFAULT_RO_PORT = 33014, - /* tarantool default adnim port */ - TARANTOOL_DEFAULT_ADMIN_PORT = 33015, -}; - -#define TARANTOOL_DEFAULT_HOST "localhost" - - -/*----------------------------------------------------------------------------* - * Commands constants - *----------------------------------------------------------------------------*/ - -/* tarantool/box flags */ -enum { - /* return resulting tuples */ - TARANTOOL_FLAGS_RETURN_TUPLE = 0x01, - /* insert is add operation: errro will be raised if tuple exists */ - TARANTOOL_FLAGS_ADD = 0x02, - /* insert is replace operation: errro will be raised if tuple doesn't exist */ - TARANTOOL_FLAGS_REPLACE = 0x04, - /* doesn't write command to WAL */ - TARANTOOL_FLAGS_NOT_STORE = 0x10, -}; - -/* tarantool command codes */ -enum { - /* insert/replace command code */ - TARANTOOL_COMMAND_INSERT = 13, - /* select command code */ - TARANTOOL_COMMAND_SELECT = 17, - /* update fields command code */ - TARANTOOL_COMMAND_UPDATE = 19, - /* delete command code */ - TARANTOOL_COMMAND_DELETE = 21, - /* call lua function command code */ - TARANTOOL_COMMAND_CALL = 22, - /* pid command code */ - TARANTOOL_COMMAND_PING = 65280, -}; - -/* update fields operation codes */ -enum { - /* update fields: assing field value operation code */ - TARANTOOL_OP_ASSIGN = 0, - /* update fields: add operation code */ - TARANTOOL_OP_ADD = 1, - /* update fields: and operation code */ - TARANTOOL_OP_AND = 2, - /* update fields: xor operation code */ - TARANTOOL_OP_XOR = 3, - /* update fields: or operation code */ - TARANTOOL_OP_OR = 4, - /* update fields: splice operation code */ - TARANTOOL_OP_SPLICE = 5, -}; - - -/*----------------------------------------------------------------------------* - * Amdin commands - *----------------------------------------------------------------------------*/ - -/* admin protocol separator */ -#define ADMIN_SEPARATOR "\r\n" -/* admin command begin token */ -#define ADMIN_TOKEN_BEGIN "---"ADMIN_SEPARATOR -/* admin command end token */ -#define ADMIN_TOKEN_END "..."ADMIN_SEPARATOR - -/* show information admin command */ -#define ADMIN_COMMAND_SHOW_INFO "show info" -/* show statistic admin command */ -#define ADMIN_COMMAND_SHOW_STAT "show stat" -/* show configuration admin command */ -#define ADMIN_COMMAND_SHOW_CONF "show configuration" - - -/*============================================================================* - * Interaface decalaration - *============================================================================*/ - - -/*----------------------------------------------------------------------------* - * Tarantool module interface - *----------------------------------------------------------------------------*/ - -/* initialize module function */ -PHP_MINIT_FUNCTION(tarantool); - -/* shutdown module function */ -PHP_MSHUTDOWN_FUNCTION(tarantool); - -/* show information about this module */ -PHP_MINFO_FUNCTION(tarantool); - - -/*----------------------------------------------------------------------------* - * Tarantool class interface - *----------------------------------------------------------------------------*/ - -/* class constructor */ -PHP_METHOD(tarantool_class, __construct); - -/* do select operation */ -PHP_METHOD(tarantool_class, select); - -/* do insert operation */ -PHP_METHOD(tarantool_class, insert); - -/* do update fields operation */ -PHP_METHOD(tarantool_class, update_fields); - -/* do delete operation */ -PHP_METHOD(tarantool_class, delete); - -/* call lua funtion operation */ -PHP_METHOD(tarantool_class, call); - -/* do admin command */ -PHP_METHOD(tarantool_class, admin); - - -#ifdef ZTS -#define TARANTOOL_G(v) TSRMG(tarantool_globals_id, zend_tarantool_globals *, v) -#else -#define TARANTOOL_G(v) (tarantool_globals.v) -#endif - -#endif /* PHP_TARANTOOL_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/connector/php/test/admin.phpt b/connector/php/test/admin.phpt deleted file mode 100644 index 3880b11722b7b5733d216f001fd6a6955830893c..0000000000000000000000000000000000000000 --- a/connector/php/test/admin.phpt +++ /dev/null @@ -1,92 +0,0 @@ ---TEST-- -Tarantool/box administation commands test ---FILE-- -<?php -include "lib/php/tarantool_utest.php"; - -$tarantool = new Tarantool("localhost", 33013, 33015); - -echo "---------- test begin ----------\n"; -echo "help\n"; -echo $tarantool->admin("help"); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "insert\n"; -for ($i = 0; $i < 10; ++$i) - echo $tarantool->admin("lua box.insert(0, $i, 'test_id1', 'test field #$i')"); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "select\n"; -echo $tarantool->admin("lua box.select(0, 1, 'test_id1')"); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "delete\n"; -for ($i = 0; $i < 10; ++$i) - echo $tarantool->admin("lua box.delete(0, $i)"); -echo "----------- test end -----------\n\n"; -?> -===DONE=== ---EXPECT-- ----------- test begin ---------- -help -available commands: - - help - - exit - - show info - - show fiber - - show configuration - - show slab - - show palloc - - show stat - - save coredump - - save snapshot - - lua command - - reload configuration ------------ test end ----------- - ----------- test begin ---------- -insert - - 0: {'test_id1', 'test field #0'} - - 1: {'test_id1', 'test field #1'} - - 2: {'test_id1', 'test field #2'} - - 3: {'test_id1', 'test field #3'} - - 4: {'test_id1', 'test field #4'} - - 5: {'test_id1', 'test field #5'} - - 6: {'test_id1', 'test field #6'} - - 7: {'test_id1', 'test field #7'} - - 8: {'test_id1', 'test field #8'} - - 9: {'test_id1', 'test field #9'} ------------ test end ----------- - ----------- test begin ---------- -select - - 0: {'test_id1', 'test field #0'} - - 1: {'test_id1', 'test field #1'} - - 2: {'test_id1', 'test field #2'} - - 3: {'test_id1', 'test field #3'} - - 4: {'test_id1', 'test field #4'} - - 5: {'test_id1', 'test field #5'} - - 6: {'test_id1', 'test field #6'} - - 7: {'test_id1', 'test field #7'} - - 8: {'test_id1', 'test field #8'} - - 9: {'test_id1', 'test field #9'} ------------ test end ----------- - ----------- test begin ---------- -delete - - 0: {'test_id1', 'test field #0'} - - 1: {'test_id1', 'test field #1'} - - 2: {'test_id1', 'test field #2'} - - 3: {'test_id1', 'test field #3'} - - 4: {'test_id1', 'test field #4'} - - 5: {'test_id1', 'test field #5'} - - 6: {'test_id1', 'test field #6'} - - 7: {'test_id1', 'test field #7'} - - 8: {'test_id1', 'test field #8'} - - 9: {'test_id1', 'test field #9'} ------------ test end ----------- - -===DONE=== \ No newline at end of file diff --git a/connector/php/test/bin/run-test.bash b/connector/php/test/bin/run-test.bash deleted file mode 100755 index 59b262d82b1c1da7f376fd9e0d16083e50e4e83a..0000000000000000000000000000000000000000 --- a/connector/php/test/bin/run-test.bash +++ /dev/null @@ -1,206 +0,0 @@ -#!/bin/bash -#==============================================================================# -# PHP tarantool test suite runner -#==============================================================================# - -#------------------------------------------------------------------------------# -# Constants -#------------------------------------------------------------------------------# - -# Success constant -SUCCESS=0 -# Failure constant -FAILURE=1 - -# test runner etc directory -TEST_RUNNER_ETC_DIR="etc" -# test runner var directory -TEST_RUNNER_VAR_DIR="var" -# test runner var directory -TEST_RUNNER_LIB_DIR="lib" - -# php.ini file -PHP_INI="$TEST_RUNNER_ETC_DIR/php.ini" - -# Tarantool/box binary file name -TARANTOOL_BOX_BIN="tarantool_box" -# Tarantool/box configuration file -TARANTOOL_BOX_CFG="$TEST_RUNNER_ETC_DIR/tarantool_box.cfg" -# Tarantool/box pid file -TARANTOOL_BOX_PID="$TEST_RUNNER_VAR_DIR/tarantool_box.pid" - - -#------------------------------------------------------------------------------# -# Suite runner functions -#------------------------------------------------------------------------------# - -# initialize suite -function init_suite() -{ - mkdir -p $TEST_RUNNER_VAR_DIR - - # check TARANTOOL_HOME variable - if [ ! -z $TARANTOOL_HOME ]; then - # Use user-defined path - tarantool_bin="$TARANTOOL_HOME/$TARANTOOL_BOX_BIN" - else - # try to find by standard paths - tarantool_bin="$TARANTOOL_BOX_BIN" - fi - - # check binary - if ! which $tarantool_bin > /dev/null 2>&1; then - echo "can't found Tarantool/Box binary file" - exit $FAILURE - fi - - # check pear - if ! which pear > /dev/null 2>&1; then - echo "can't found pear" - exit $FAILURE - fi - - # check tarantool module library - if [ ! -f ../modules/tarantool.so ]; then - echo "can't found tarantool module library" - exit $FAILURE - fi - if [ -f $TEST_RUNNER_LIB_DIR/tarantool.so ]; then - rm $TEST_RUNNER_LIB_DIR/tarantool.so - fi - ln -s ../../modules/tarantool.so $TEST_RUNNER_LIB_DIR - - if [ -f $TEST_RUNNER_VAR_DIR/init.lua ]; then - rm $TEST_RUNNER_VAR_DIR/init.lua - fi - ln -s ../$TEST_RUNNER_LIB_DIR/lua/sorted_array.lua $TEST_RUNNER_VAR_DIR/init.lua - - return $SUCCESS -} - -# initialize tarantool's storage -function tarantool_init_storage() -{ - $tarantool_bin --init-storage -c $TARANTOOL_BOX_CFG 1> /dev/null 2>&1 - return $SUCCESS -} - -# start tarantool -function tarantool_start() -{ - if [ -f $TARANTOOL_BOX_PID ]; then - tarantool_stop - tarantool_cleanup - fi - - # run tarantool to background - $tarantool_bin -c $TARANTOOL_BOX_CFG & - # wait pid file - for i in {1..500}; do - if [ -f $TARANTOOL_BOX_PID ]; then - break - fi - sleep 0.01 - done - - if [ ! -f $TARANTOOL_BOX_PID ]; then - echo "error: can't start tarantool" - tarantool_cleanup - exit $FAILURE - fi - - return $SUCCESS -} - -# stop tarantool -function tarantool_stop() -{ - if [ ! -f $TARANTOOL_BOX_PID ]; then - return $SUCCESS - fi - - # get tarantool pid form pid file - pid=`cat $TARANTOOL_BOX_PID` - # kill process via SIGTERM - kill -TERM $pid 1> /dev/null 2>&1 - - for i in {1..500}; do - if [ ! -f $TARANTOOL_BOX_PID ]; then - # tarantool successfully stopped - return $SUCCESS - fi - sleep 0.01 - done - - if [ -f $TARANTOOL_BOX_PID ]; then - kill -KILL $pid 1> /dev/null 2>&1 - fi - - return $SUCCESS -} - -# clean-up tarantool -function tarantool_cleanup() -{ - # delete pid - rm -f $TEST_RUNNER_VAR_DIR/*.pid - # delete xlogs - rm -f $TEST_RUNNER_VAR_DIR/*.xlog - # delete snaps - rm -f $TEST_RUNNER_VAR_DIR/*.snap -} - - -#------------------------------------------------------------------------------# -# run test scrip body -#------------------------------------------------------------------------------# - -# -# initialize -# - -printf "initialize tarantool ... " -# initializing suite -init_suite -# initializing storage -tarantool_init_storage -printf "done\n" - -printf "starting tarantool ... " -# start tarantool -tarantool_start -printf "done\n" - - -# -# run -# - -printf "\n" -printf "================================= PHP test ===============================\n" - -# running pear's regression test scrips -PHPRC=$PHP_INI pear run-tests $1 - -printf "==========================================================================\n" -printf "\n" - -# -# stop & clean-up -# - -printf "stopping tarantool ... " -# stop tarantool -tarantool_stop -# clean-up tarantool -tarantool_cleanup -printf "done\n" - -# -# Local variables: -# tab-width: 4 -# c-basic-offset: 4 -# End: -# vim600: noet sw=4 ts=4 fdm=marker -# vim<600: noet sw=4 ts=4 -# diff --git a/connector/php/test/call.phpt b/connector/php/test/call.phpt deleted file mode 100644 index 08640f9e1fe500ad97f13d2a14bfb9ff800128f7..0000000000000000000000000000000000000000 --- a/connector/php/test/call.phpt +++ /dev/null @@ -1,857 +0,0 @@ ---TEST-- -Tarantool/box call commands test ---FILE-- -<?php -include "lib/php/tarantool_utest.php"; - -$tarantool = new Tarantool("localhost", 33013, 33015); -test_init($tarantool, 0); - -echo "---------- test begin ----------\n"; -echo "test call: myselect by primary index\n"; -test_call($tarantool, "box.select", array(0, 0, 2), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: call undefined function (expected error exception)\n"; -test_call($tarantool, "fafagaga", array("fafa-gaga", "foo", "bar"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: sa_insert to key_1\n"; -echo "sa_insert('1', 'key_1', '10')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_1", "10"), 0); -echo "sa_insert('1', 'key_1', '11')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_1", "11"), 0); -echo "sa_insert('1', 'key_1', '15')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_1", "15"), 0); -echo "sa_insert('1', 'key_1', '101')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_1", "101"), 0); -echo "sa_insert('1', 'key_1', '511')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_1", "511"), 0); -echo "sa_insert('1', 'key_1', '16')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_1", "16"), 0); -echo "sa_insert('1', 'key_1', '42')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_1", "42"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: sa_select from key_1\n"; -echo "sa_select('1', 'key_1', '101', '3')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_1", "101", "3"), 0); -echo "sa_select('1', 'key_1', '101', '2')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_1", "101", "2"), 0); -echo "sa_select('1', 'key_1', '511', '4')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_1", "511", "4"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: sa_delete from key_1\n"; -echo "sa_delete('1', 'key_1', '11', '101', '511')\n"; -test_call($tarantool, "box.sa_delete", array("1", "key_1", "11", "101", "511"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: sa_select from key_1\n"; -echo "sa_select('1', 'key_1', '101', '3')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_1", "101", "3"), 0); -echo "sa_select('1', 'key_1', '101', '2')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_1", "101", "2"), 0); -echo "sa_select('1', 'key_1', '511', '4')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_1", "511", "4"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: sa_insert to key_2\n"; -echo "sa_insert('1', 'key_2', '10')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_2", "10"), 0); -echo "sa_insert('1', 'key_2', '8')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_2", "8"), 0); -echo "sa_insert('1', 'key_2', '500')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_2", "500"), 0); -echo "sa_insert('1', 'key_2', '166')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_2", "166"), 0); -echo "sa_insert('1', 'key_2', '233')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_2", "233"), 0); -echo "sa_insert('1', 'key_2', '357')\n"; -test_call($tarantool, "box.sa_insert", array("1", "key_2", "357"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: sa_select from key_2\n"; -echo "sa_select('1', 'key_2', '500', '100')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_2", "500", "100"), 0); -echo "sa_select('1', 'key_2', '18', '15')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_2", "18", "15"), 0); -echo "sa_select('1', 'key_2', '18', '1')\n"; -test_call($tarantool, "box.sa_select", array("1", "key_2", "18", "1"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: sa_merge key_1 and key_2\n"; -echo "sa_merge('1', 'key_1', 'key_2')\n"; -test_call($tarantool, "box.sa_merge", array("1", "key_1", "key_2"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test call: sa_delete from key_1\n"; -echo "sa_delete('1', 'key_1', '42')\n"; -test_call($tarantool, "box.sa_delete", array("1", "key_1", "42"), 0); -echo "sa_delete('1', 'key_1', '16')\n"; -test_call($tarantool, "box.sa_delete", array("1", "key_1", "16"), 0); -echo "sa_delete('1', 'key_1', '10')\n"; -test_call($tarantool, "box.sa_delete", array("1", "key_1", "10"), 0); -echo "sa_delete('1', 'key_1', '15')\n"; -test_call($tarantool, "box.sa_delete", array("1", "key_1", "15"), 0); -echo "----------- test end -----------\n\n"; - - -test_clean($tarantool, 0); -?> -===DONE=== ---EXPECT-- ----------- test begin ---------- -test call: myselect by primary index -result: -array(2) { - ["count"]=> - int(1) - ["tuples_list"]=> - array(1) { - [0]=> - array(6) { - [0]=> - int(2) - [1]=> - string(9) "Star Wars" - [2]=> - int(1983) - [3]=> - string(18) "Return of the Jedi" - [4]=> - string(460) "Luke Skywalker has returned -to his home planet of -Tatooine in an attempt -to rescue his friend -Han Solo from the -clutches of the vile -gangster Jabba the Hutt. - -Little does Luke know -that the GALACTIC EMPIRE -has secretly begun construction -on a new armored space station -even more powerful than the -first dreaded Death Star. - -When completed, this ultimate -weapon will spell certain -doom for the small band of -rebels struggling to restore -freedom to the galaxy..." - [5]=> - int(-1091633149) - } - } -} ------------ test end ----------- - ----------- test begin ---------- -test call: call undefined function (expected error exception) -catched exception: call failed: 12802(0x00003202): Procedure 'fafagaga' is not defined ------------ test end ----------- - ----------- test begin ---------- -test call: sa_insert to key_1 -sa_insert('1', 'key_1', '10') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(1) { - [0]=> - string(2) "10" - } - } -} -sa_insert('1', 'key_1', '11') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(2) { - [0]=> - string(2) "11" - [1]=> - string(2) "10" - } - } -} -sa_insert('1', 'key_1', '15') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(3) { - [0]=> - string(2) "15" - [1]=> - string(2) "11" - [2]=> - string(2) "10" - } - } -} -sa_insert('1', 'key_1', '101') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(4) { - [0]=> - string(3) "101" - [1]=> - string(2) "15" - [2]=> - string(2) "11" - [3]=> - string(2) "10" - } - } -} -sa_insert('1', 'key_1', '511') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(5) { - [0]=> - string(3) "511" - [1]=> - string(3) "101" - [2]=> - string(2) "15" - [3]=> - string(2) "11" - [4]=> - string(2) "10" - } - } -} -sa_insert('1', 'key_1', '16') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(6) { - [0]=> - string(3) "511" - [1]=> - string(3) "101" - [2]=> - string(2) "16" - [3]=> - string(2) "15" - [4]=> - string(2) "11" - [5]=> - string(2) "10" - } - } -} -sa_insert('1', 'key_1', '42') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(7) { - [0]=> - string(3) "511" - [1]=> - string(3) "101" - [2]=> - string(2) "42" - [3]=> - string(2) "16" - [4]=> - string(2) "15" - [5]=> - string(2) "11" - [6]=> - string(2) "10" - } - } -} ------------ test end ----------- - ----------- test begin ---------- -test call: sa_select from key_1 -sa_select('1', 'key_1', '101', '3') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(3) { - [0]=> - string(2) "42" - [1]=> - string(2) "16" - [2]=> - string(2) "15" - } - } -} -sa_select('1', 'key_1', '101', '2') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(2) { - [0]=> - string(2) "42" - [1]=> - string(2) "16" - } - } -} -sa_select('1', 'key_1', '511', '4') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(4) { - [0]=> - string(3) "101" - [1]=> - string(2) "42" - [2]=> - string(2) "16" - [3]=> - string(2) "15" - } - } -} ------------ test end ----------- - ----------- test begin ---------- -test call: sa_delete from key_1 -sa_delete('1', 'key_1', '11', '101', '511') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(4) { - [0]=> - string(2) "42" - [1]=> - string(2) "16" - [2]=> - string(2) "15" - [3]=> - string(2) "10" - } - } -} ------------ test end ----------- - ----------- test begin ---------- -test call: sa_select from key_1 -sa_select('1', 'key_1', '101', '3') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(3) { - [0]=> - string(2) "42" - [1]=> - string(2) "16" - [2]=> - string(2) "15" - } - } -} -sa_select('1', 'key_1', '101', '2') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(2) { - [0]=> - string(2) "42" - [1]=> - string(2) "16" - } - } -} -sa_select('1', 'key_1', '511', '4') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(4) { - [0]=> - string(2) "42" - [1]=> - string(2) "16" - [2]=> - string(2) "15" - [3]=> - string(2) "10" - } - } -} ------------ test end ----------- - ----------- test begin ---------- -test call: sa_insert to key_2 -sa_insert('1', 'key_2', '10') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(1) { - [0]=> - string(2) "10" - } - } -} -sa_insert('1', 'key_2', '8') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(2) { - [0]=> - string(2) "10" - [1]=> - string(1) "8" - } - } -} -sa_insert('1', 'key_2', '500') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(3) { - [0]=> - string(3) "500" - [1]=> - string(2) "10" - [2]=> - string(1) "8" - } - } -} -sa_insert('1', 'key_2', '166') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(4) { - [0]=> - string(3) "500" - [1]=> - string(3) "166" - [2]=> - string(2) "10" - [3]=> - string(1) "8" - } - } -} -sa_insert('1', 'key_2', '233') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(5) { - [0]=> - string(3) "500" - [1]=> - string(3) "233" - [2]=> - string(3) "166" - [3]=> - string(2) "10" - [4]=> - string(1) "8" - } - } -} -sa_insert('1', 'key_2', '357') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(6) { - [0]=> - string(3) "500" - [1]=> - string(3) "357" - [2]=> - string(3) "233" - [3]=> - string(3) "166" - [4]=> - string(2) "10" - [5]=> - string(1) "8" - } - } -} ------------ test end ----------- - ----------- test begin ---------- -test call: sa_select from key_2 -sa_select('1', 'key_2', '500', '100') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(5) { - [0]=> - string(3) "357" - [1]=> - string(3) "233" - [2]=> - string(3) "166" - [3]=> - string(2) "10" - [4]=> - string(1) "8" - } - } -} -sa_select('1', 'key_2', '18', '15') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(2) { - [0]=> - string(2) "10" - [1]=> - string(1) "8" - } - } -} -sa_select('1', 'key_2', '18', '1') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_2" - } - [1]=> - array(1) { - [0]=> - string(2) "10" - } - } -} ------------ test end ----------- - ----------- test begin ---------- -test call: sa_merge key_1 and key_2 -sa_merge('1', 'key_1', 'key_2') -result: -array(2) { - ["count"]=> - int(1) - ["tuples_list"]=> - array(1) { - [0]=> - array(10) { - [0]=> - string(3) "500" - [1]=> - string(3) "357" - [2]=> - string(3) "233" - [3]=> - string(3) "166" - [4]=> - string(2) "42" - [5]=> - string(2) "16" - [6]=> - string(2) "15" - [7]=> - string(2) "10" - [8]=> - string(2) "10" - [9]=> - string(1) "8" - } - } -} ------------ test end ----------- - ----------- test begin ---------- -test call: sa_delete from key_1 -sa_delete('1', 'key_1', '42') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(3) { - [0]=> - string(2) "16" - [1]=> - string(2) "15" - [2]=> - string(2) "10" - } - } -} -sa_delete('1', 'key_1', '16') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(2) { - [0]=> - string(2) "15" - [1]=> - string(2) "10" - } - } -} -sa_delete('1', 'key_1', '10') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(1) { - [0]=> - string(2) "15" - } - } -} -sa_delete('1', 'key_1', '15') -result: -array(2) { - ["count"]=> - int(2) - ["tuples_list"]=> - array(2) { - [0]=> - array(1) { - [0]=> - string(5) "key_1" - } - [1]=> - array(0) { - } - } -} ------------ test end ----------- - -===DONE=== \ No newline at end of file diff --git a/connector/php/test/delete.phpt b/connector/php/test/delete.phpt deleted file mode 100644 index e9b68a235a6bf839e45b5b874fd9d04c98e0f4a6..0000000000000000000000000000000000000000 --- a/connector/php/test/delete.phpt +++ /dev/null @@ -1,138 +0,0 @@ ---TEST-- -Tarantool/box delete commands test ---FILE-- -<?php -include "lib/php/tarantool_utest.php"; - -$tarantool = new Tarantool("localhost", 33013, 33015); - -test_init($tarantool, 0); - -echo "---------- test begin ----------\n"; -echo "test delete: invalid key (expected error exception)\n"; -test_delete($tarantool, 0, $tarantool, 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test delete: invalid key (expected error exception)\n"; -test_delete($tarantool, 0, array($tarantool), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test delete: invalid key (expected error exception)\n"; -test_delete($tarantool, 0, array(1, 2), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test delete: delete key as interger\n"; -test_delete($tarantool, 0, 0, TARANTOOL_FLAGS_RETURN_TUPLE); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test delete: delete key as array\n"; -test_delete($tarantool, 0, array(1), TARANTOOL_FLAGS_RETURN_TUPLE); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test delete: delete key (tuple doesn't return)\n"; -test_delete($tarantool, 0, 2, 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test delete: delete not existing tuple w/ return tuple flag\n"; -test_delete($tarantool, 0, 5, TARANTOOL_FLAGS_RETURN_TUPLE); -echo "----------- test end -----------\n\n"; - -test_clean($tarantool, 0); -?> -===DONE=== ---EXPECT-- ----------- test begin ---------- -test delete: invalid key (expected error exception) -catched exception: unsupported tuple type ------------ test end ----------- - ----------- test begin ---------- -test delete: invalid key (expected error exception) -catched exception: unsupported field type ------------ test end ----------- - ----------- test begin ---------- -test delete: invalid key (expected error exception) -catched exception: delete failed: 514(0x00000202): Illegal parameters, key must be single valued ------------ test end ----------- - ----------- test begin ---------- -test delete: delete key as interger -result: -count = 1 -tuple: - id = 0 - series = Star Wars - year = 1977 - name = A New Hope - crawl = A long time ago, in a galaxy far, far away... -It is a period of civil war. Rebel -spaceships, striking from a hidden -base, have won their first victory -against the evil Galactic Empire. - -During the battle, Rebel spies managed -to steal secret plans to the Empire's -ultimate weapon, the Death Star, an -armored space station with enough -power to destroy an entire planet. - -Pursued by the Empire's sinister agents, -Princess Leia races home aboard her -starship, custodian of the stolen plans -that can save her people and restore -freedom to the galaxy.... - uuid = -1091633151 ------------ test end ----------- - ----------- test begin ---------- -test delete: delete key as array -result: -count = 1 -tuple: - id = 1 - series = Star Wars - year = 1980 - name = The Empire Strikes Back - crawl = It is a dark time for the -Rebellion. Although the Death -Star has been destroyed. -Imperial troops have driven the -Rebel forces from their hidden -base and pursued them across -the galaxy. - -Evading the dreaded Imperial -Starfleet, a group of freedom -fighters led by Luke Skywalker -have established a new secret base -on the remote ice world -of Hoth. - -The evil lord Darth Vader, -obsessed with finding young -Skywalker, has dispatched -thousands of remote probes -into the far reaches of space.... - uuid = -1091633150 ------------ test end ----------- - ----------- test begin ---------- -test delete: delete key (tuple doesn't return) -result: -count = 1 ------------ test end ----------- - ----------- test begin ---------- -test delete: delete not existing tuple w/ return tuple flag -result: -count = 0 ------------ test end ----------- - -===DONE=== \ No newline at end of file diff --git a/connector/php/test/errors.phpt b/connector/php/test/errors.phpt deleted file mode 100644 index 2450b3efb6e53af297665d252a057e04888ab89d..0000000000000000000000000000000000000000 --- a/connector/php/test/errors.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Tarantool/box error commands test ---FILE-- -<?php - -try -{ - $tarantool = new Tarantool("localhost", -33013, 0); - echo "error: the exception didn't raise\n"; -} catch (Exception $e) { - echo "catched exception: ", $e->getMessage(), "\n"; -} - -try { - $tarantool = new Tarantool("localhost", 33013, 65537); - echo "error: the exception didn't raise\n"; -} catch (Exception $e) { - echo "catched exception: ", $e->getMessage(), "\n"; -} - -?> -===DONE=== ---EXPECT-- -catched exception: invalid primary port value: -33013 -catched exception: invalid admin port value: 65537 -===DONE=== diff --git a/connector/php/test/etc/php.ini b/connector/php/test/etc/php.ini deleted file mode 100644 index ae7b2ee849ad7c3d954530eedf871c5192769f1b..0000000000000000000000000000000000000000 --- a/connector/php/test/etc/php.ini +++ /dev/null @@ -1,1851 +0,0 @@ -[PHP] - -;;;;;;;;;;;;;;;;;;; -; About php.ini ; -;;;;;;;;;;;;;;;;;;; -; PHP's initialization file, generally called php.ini, is responsible for -; configuring many of the aspects of PHP's behavior. - -; PHP attempts to find and load this configuration from a number of locations. -; The following is a summary of its search order: -; 1. SAPI module specific location. -; 2. The PHPRC environment variable. (As of PHP 5.2.0) -; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) -; 4. Current working directory (except CLI) -; 5. The web server's directory (for SAPI modules), or directory of PHP -; (otherwise in Windows) -; 6. The directory from the --with-config-file-path compile time option, or the -; Windows directory (C:\windows or C:\winnt) -; See the PHP docs for more specific information. -; http://php.net/configuration.file - -; The syntax of the file is extremely simple. Whitespace and Lines -; beginning with a semicolon are silently ignored (as you probably guessed). -; Section headers (e.g. [Foo]) are also silently ignored, even though -; they might mean something in the future. - -; Directives following the section heading [PATH=/www/mysite] only -; apply to PHP files in the /www/mysite directory. Directives -; following the section heading [HOST=www.example.com] only apply to -; PHP files served from www.example.com. Directives set in these -; special sections cannot be overridden by user-defined INI files or -; at runtime. Currently, [PATH=] and [HOST=] sections only work under -; CGI/FastCGI. -; http://php.net/ini.sections - -; Directives are specified using the following syntax: -; directive = value -; Directive names are *case sensitive* - foo=bar is different from FOO=bar. -; Directives are variables used to configure PHP or PHP extensions. -; There is no name validation. If PHP can't find an expected -; directive because it is not set or is mistyped, a default value will be used. - -; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one -; of the INI constants (On, Off, True, False, Yes, No and None) or an expression -; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a -; previously set variable or directive (e.g. ${foo}) - -; Expressions in the INI file are limited to bitwise operators and parentheses: -; | bitwise OR -; ^ bitwise XOR -; & bitwise AND -; ~ bitwise NOT -; ! boolean NOT - -; Boolean flags can be turned on using the values 1, On, True or Yes. -; They can be turned off using the values 0, Off, False or No. - -; An empty string can be denoted by simply not writing anything after the equal -; sign, or by using the None keyword: - -; foo = ; sets foo to an empty string -; foo = None ; sets foo to an empty string -; foo = "None" ; sets foo to the string 'None' - -; If you use constants in your value, and these constants belong to a -; dynamically loaded extension (either a PHP extension or a Zend extension), -; you may only use these constants *after* the line that loads the extension. - -;;;;;;;;;;;;;;;;;;; -; About this file ; -;;;;;;;;;;;;;;;;;;; -; PHP comes packaged with two INI files. One that is recommended to be used -; in production environments and one that is recommended to be used in -; development environments. - -; php.ini-production contains settings which hold security, performance and -; best practices at its core. But please be aware, these settings may break -; compatibility with older or less security conscience applications. We -; recommending using the production ini in production and testing environments. - -; php.ini-development is very similar to its production variant, except it's -; much more verbose when it comes to errors. We recommending using the -; development version only in development environments as errors shown to -; application users can inadvertently leak otherwise secure information. - -;;;;;;;;;;;;;;;;;;; -; Quick Reference ; -;;;;;;;;;;;;;;;;;;; -; The following are all the settings which are different in either the production -; or development versions of the INIs with respect to PHP's default behavior. -; Please see the actual settings later in the document for more details as to why -; we recommend these changes in PHP's behavior. - -; allow_call_time_pass_reference -; Default Value: On -; Development Value: Off -; Production Value: Off - -; display_errors -; Default Value: On -; Development Value: On -; Production Value: Off - -; display_startup_errors -; Default Value: Off -; Development Value: On -; Production Value: Off - -; error_reporting -; Default Value: E_ALL & ~E_NOTICE -; Development Value: E_ALL | E_STRICT -; Production Value: E_ALL & ~E_DEPRECATED - -; html_errors -; Default Value: On -; Development Value: On -; Production value: Off - -; log_errors -; Default Value: Off -; Development Value: On -; Production Value: On - -; magic_quotes_gpc -; Default Value: On -; Development Value: Off -; Production Value: Off - -; max_input_time -; Default Value: -1 (Unlimited) -; Development Value: 60 (60 seconds) -; Production Value: 60 (60 seconds) - -; output_buffering -; Default Value: Off -; Development Value: 4096 -; Production Value: 4096 - -; register_argc_argv -; Default Value: On -; Development Value: Off -; Production Value: Off - -; register_long_arrays -; Default Value: On -; Development Value: Off -; Production Value: Off - -; request_order -; Default Value: None -; Development Value: "GP" -; Production Value: "GP" - -; session.bug_compat_42 -; Default Value: On -; Development Value: On -; Production Value: Off - -; session.bug_compat_warn -; Default Value: On -; Development Value: On -; Production Value: Off - -; session.gc_divisor -; Default Value: 100 -; Development Value: 1000 -; Production Value: 1000 - -; session.hash_bits_per_character -; Default Value: 4 -; Development Value: 5 -; Production Value: 5 - -; short_open_tag -; Default Value: On -; Development Value: Off -; Production Value: Off - -; track_errors -; Default Value: Off -; Development Value: On -; Production Value: Off - -; url_rewriter.tags -; Default Value: "a=href,area=href,frame=src,form=,fieldset=" -; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" -; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" - -; variables_order -; Default Value: "EGPCS" -; Development Value: "GPCS" -; Production Value: "GPCS" - -;;;;;;;;;;;;;;;;;;;; -; php.ini Options ; -;;;;;;;;;;;;;;;;;;;; -; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" -;user_ini.filename = ".user.ini" - -; To disable this feature set this option to empty value -;user_ini.filename = - -; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) -;user_ini.cache_ttl = 300 - -;;;;;;;;;;;;;;;;;;;; -; Language Options ; -;;;;;;;;;;;;;;;;;;;; - -; Enable the PHP scripting language engine under Apache. -; http://php.net/engine -engine = On - -; This directive determines whether or not PHP will recognize code between -; <? and ?> tags as PHP source which should be processed as such. It's been -; recommended for several years that you not use the short tag "short cut" and -; instead to use the full <?php and ?> tag combination. With the wide spread use -; of XML and use of these tags by other languages, the server can become easily -; confused and end up parsing the wrong code in the wrong context. But because -; this short cut has been a feature for such a long time, it's currently still -; supported for backwards compatibility, but we recommend you don't use them. -; Default Value: On -; Development Value: Off -; Production Value: Off -; http://php.net/short-open-tag -short_open_tag = On - -; Allow ASP-style <% %> tags. -; http://php.net/asp-tags -asp_tags = Off - -; The number of significant digits displayed in floating point numbers. -; http://php.net/precision -precision = 14 - -; Enforce year 2000 compliance (will cause problems with non-compliant browsers) -; http://php.net/y2k-compliance -y2k_compliance = On - -; Output buffering is a mechanism for controlling how much output data -; (excluding headers and cookies) PHP should keep internally before pushing that -; data to the client. If your application's output exceeds this setting, PHP -; will send that data in chunks of roughly the size you specify. -; Turning on this setting and managing its maximum buffer size can yield some -; interesting side-effects depending on your application and web server. -; You may be able to send headers and cookies after you've already sent output -; through print or echo. You also may see performance benefits if your server is -; emitting less packets due to buffered output versus PHP streaming the output -; as it gets it. On production servers, 4096 bytes is a good setting for performance -; reasons. -; Note: Output buffering can also be controlled via Output Buffering Control -; functions. -; Possible Values: -; On = Enabled and buffer is unlimited. (Use with caution) -; Off = Disabled -; Integer = Enables the buffer and sets its maximum size in bytes. -; Note: This directive is hardcoded to Off for the CLI SAPI -; Default Value: Off -; Development Value: 4096 -; Production Value: 4096 -; http://php.net/output-buffering -output_buffering = 4096 - -; You can redirect all of the output of your scripts to a function. For -; example, if you set output_handler to "mb_output_handler", character -; encoding will be transparently converted to the specified encoding. -; Setting any output handler automatically turns on output buffering. -; Note: People who wrote portable scripts should not depend on this ini -; directive. Instead, explicitly set the output handler using ob_start(). -; Using this ini directive may cause problems unless you know what script -; is doing. -; Note: You cannot use both "mb_output_handler" with "ob_iconv_handler" -; and you cannot use both "ob_gzhandler" and "zlib.output_compression". -; Note: output_handler must be empty if this is set 'On' !!!! -; Instead you must use zlib.output_handler. -; http://php.net/output-handler -;output_handler = - -; Transparent output compression using the zlib library -; Valid values for this option are 'off', 'on', or a specific buffer size -; to be used for compression (default is 4KB) -; Note: Resulting chunk size may vary due to nature of compression. PHP -; outputs chunks that are few hundreds bytes each as a result of -; compression. If you prefer a larger chunk size for better -; performance, enable output_buffering in addition. -; Note: You need to use zlib.output_handler instead of the standard -; output_handler, or otherwise the output will be corrupted. -; http://php.net/zlib.output-compression -zlib.output_compression = Off - -; http://php.net/zlib.output-compression-level -;zlib.output_compression_level = -1 - -; You cannot specify additional output handlers if zlib.output_compression -; is activated here. This setting does the same as output_handler but in -; a different order. -; http://php.net/zlib.output-handler -;zlib.output_handler = - -; Implicit flush tells PHP to tell the output layer to flush itself -; automatically after every output block. This is equivalent to calling the -; PHP function flush() after each and every call to print() or echo() and each -; and every HTML block. Turning this option on has serious performance -; implications and is generally recommended for debugging purposes only. -; http://php.net/implicit-flush -; Note: This directive is hardcoded to On for the CLI SAPI -implicit_flush = Off - -; The unserialize callback function will be called (with the undefined class' -; name as parameter), if the unserializer finds an undefined class -; which should be instantiated. A warning appears if the specified function is -; not defined, or if the function doesn't include/implement the missing class. -; So only set this entry, if you really want to implement such a -; callback-function. -unserialize_callback_func = - -; When floats & doubles are serialized store serialize_precision significant -; digits after the floating point. The default value ensures that when floats -; are decoded with unserialize, the data will remain the same. -serialize_precision = 17 - -; This directive allows you to enable and disable warnings which PHP will issue -; if you pass a value by reference at function call time. Passing values by -; reference at function call time is a deprecated feature which will be removed -; from PHP at some point in the near future. The acceptable method for passing a -; value by reference to a function is by declaring the reference in the functions -; definition, not at call time. This directive does not disable this feature, it -; only determines whether PHP will warn you about it or not. These warnings -; should enabled in development environments only. -; Default Value: On (Suppress warnings) -; Development Value: Off (Issue warnings) -; Production Value: Off (Issue warnings) -; http://php.net/allow-call-time-pass-reference -allow_call_time_pass_reference = Off - -; Safe Mode -; http://php.net/safe-mode -safe_mode = Off - -; By default, Safe Mode does a UID compare check when -; opening files. If you want to relax this to a GID compare, -; then turn on safe_mode_gid. -; http://php.net/safe-mode-gid -safe_mode_gid = Off - -; When safe_mode is on, UID/GID checks are bypassed when -; including files from this directory and its subdirectories. -; (directory must also be in include_path or full path must -; be used when including) -; http://php.net/safe-mode-include-dir -safe_mode_include_dir = - -; When safe_mode is on, only executables located in the safe_mode_exec_dir -; will be allowed to be executed via the exec family of functions. -; http://php.net/safe-mode-exec-dir -safe_mode_exec_dir = - -; Setting certain environment variables may be a potential security breach. -; This directive contains a comma-delimited list of prefixes. In Safe Mode, -; the user may only alter environment variables whose names begin with the -; prefixes supplied here. By default, users will only be able to set -; environment variables that begin with PHP_ (e.g. PHP_FOO=BAR). -; Note: If this directive is empty, PHP will let the user modify ANY -; environment variable! -; http://php.net/safe-mode-allowed-env-vars -safe_mode_allowed_env_vars = PHP_ - -; This directive contains a comma-delimited list of environment variables that -; the end user won't be able to change using putenv(). These variables will be -; protected even if safe_mode_allowed_env_vars is set to allow to change them. -; http://php.net/safe-mode-protected-env-vars -safe_mode_protected_env_vars = LD_LIBRARY_PATH - -; open_basedir, if set, limits all file operations to the defined directory -; and below. This directive makes most sense if used in a per-directory -; or per-virtualhost web server configuration file. This directive is -; *NOT* affected by whether Safe Mode is turned On or Off. -; http://php.net/open-basedir -;open_basedir = - -; This directive allows you to disable certain functions for security reasons. -; It receives a comma-delimited list of function names. This directive is -; *NOT* affected by whether Safe Mode is turned On or Off. -; http://php.net/disable-functions -disable_functions = - -; This directive allows you to disable certain classes for security reasons. -; It receives a comma-delimited list of class names. This directive is -; *NOT* affected by whether Safe Mode is turned On or Off. -; http://php.net/disable-classes -disable_classes = - -; Colors for Syntax Highlighting mode. Anything that's acceptable in -; <span style="color: ???????"> would work. -; http://php.net/syntax-highlighting -;highlight.string = #DD0000 -;highlight.comment = #FF9900 -;highlight.keyword = #007700 -;highlight.bg = #FFFFFF -;highlight.default = #0000BB -;highlight.html = #000000 - -; If enabled, the request will be allowed to complete even if the user aborts -; the request. Consider enabling it if executing long requests, which may end up -; being interrupted by the user or a browser timing out. PHP's default behavior -; is to disable this feature. -; http://php.net/ignore-user-abort -;ignore_user_abort = On - -; Determines the size of the realpath cache to be used by PHP. This value should -; be increased on systems where PHP opens many files to reflect the quantity of -; the file operations performed. -; http://php.net/realpath-cache-size -;realpath_cache_size = 16k - -; Duration of time, in seconds for which to cache realpath information for a given -; file or directory. For systems with rarely changing files, consider increasing this -; value. -; http://php.net/realpath-cache-ttl -;realpath_cache_ttl = 120 - -;;;;;;;;;;;;;;;;; -; Miscellaneous ; -;;;;;;;;;;;;;;;;; - -; Decides whether PHP may expose the fact that it is installed on the server -; (e.g. by adding its signature to the Web server header). It is no security -; threat in any way, but it makes it possible to determine whether you use PHP -; on your server or not. -; http://php.net/expose-php -expose_php = On - -;;;;;;;;;;;;;;;;;;; -; Resource Limits ; -;;;;;;;;;;;;;;;;;;; - -; Maximum execution time of each script, in seconds -; http://php.net/max-execution-time -; Note: This directive is hardcoded to 0 for the CLI SAPI -max_execution_time = 30 - -; Maximum amount of time each script may spend parsing request data. It's a good -; idea to limit this time on productions servers in order to eliminate unexpectedly -; long running scripts. -; Note: This directive is hardcoded to -1 for the CLI SAPI -; Default Value: -1 (Unlimited) -; Development Value: 60 (60 seconds) -; Production Value: 60 (60 seconds) -; http://php.net/max-input-time -max_input_time = 60 - -; Maximum input variable nesting level -; http://php.net/max-input-nesting-level -;max_input_nesting_level = 64 - -; Maximum amount of memory a script may consume (128MB) -; http://php.net/memory-limit -memory_limit = -1 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Error handling and logging ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -; This directive informs PHP of which errors, warnings and notices you would like -; it to take action for. The recommended way of setting values for this -; directive is through the use of the error level constants and bitwise -; operators. The error level constants are below here for convenience as well as -; some common settings and their meanings. -; By default, PHP is set to take action on all errors, notices and warnings EXCEPT -; those related to E_NOTICE and E_STRICT, which together cover best practices and -; recommended coding standards in PHP. For performance reasons, this is the -; recommend error reporting setting. Your production server shouldn't be wasting -; resources complaining about best practices and coding standards. That's what -; development servers and development settings are for. -; Note: The php.ini-development file has this setting as E_ALL | E_STRICT. This -; means it pretty much reports everything which is exactly what you want during -; development and early testing. -; -; Error Level Constants: -; E_ALL - All errors and warnings (includes E_STRICT as of PHP 6.0.0) -; E_ERROR - fatal run-time errors -; E_RECOVERABLE_ERROR - almost fatal run-time errors -; E_WARNING - run-time warnings (non-fatal errors) -; E_PARSE - compile-time parse errors -; E_NOTICE - run-time notices (these are warnings which often result -; from a bug in your code, but it's possible that it was -; intentional (e.g., using an uninitialized variable and -; relying on the fact it's automatically initialized to an -; empty string) -; E_STRICT - run-time notices, enable to have PHP suggest changes -; to your code which will ensure the best interoperability -; and forward compatibility of your code -; E_CORE_ERROR - fatal errors that occur during PHP's initial startup -; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's -; initial startup -; E_COMPILE_ERROR - fatal compile-time errors -; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) -; E_USER_ERROR - user-generated error message -; E_USER_WARNING - user-generated warning message -; E_USER_NOTICE - user-generated notice message -; E_DEPRECATED - warn about code that will not work in future versions -; of PHP -; E_USER_DEPRECATED - user-generated deprecation warnings -; -; Common Values: -; E_ALL & ~E_NOTICE (Show all errors, except for notices and coding standards warnings.) -; E_ALL & ~E_NOTICE | E_STRICT (Show all errors, except for notices) -; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) -; E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.) -; Default Value: E_ALL & ~E_NOTICE -; Development Value: E_ALL | E_STRICT -; Production Value: E_ALL & ~E_DEPRECATED -; http://php.net/error-reporting -error_reporting = E_ALL & ~E_DEPRECATED - -; This directive controls whether or not and where PHP will output errors, -; notices and warnings too. Error output is very useful during development, but -; it could be very dangerous in production environments. Depending on the code -; which is triggering the error, sensitive information could potentially leak -; out of your application such as database usernames and passwords or worse. -; It's recommended that errors be logged on production servers rather than -; having the errors sent to STDOUT. -; Possible Values: -; Off = Do not display any errors -; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) -; On or stdout = Display errors to STDOUT -; Default Value: On -; Development Value: On -; Production Value: Off -; http://php.net/display-errors -display_errors = Off - -; The display of errors which occur during PHP's startup sequence are handled -; separately from display_errors. PHP's default behavior is to suppress those -; errors from clients. Turning the display of startup errors on can be useful in -; debugging configuration problems. But, it's strongly recommended that you -; leave this setting off on production servers. -; Default Value: Off -; Development Value: On -; Production Value: Off -; http://php.net/display-startup-errors -display_startup_errors = Off - -; Besides displaying errors, PHP can also log errors to locations such as a -; server-specific log, STDERR, or a location specified by the error_log -; directive found below. While errors should not be displayed on productions -; servers they should still be monitored and logging is a great way to do that. -; Default Value: Off -; Development Value: On -; Production Value: On -; http://php.net/log-errors -log_errors = On - -; Set maximum length of log_errors. In error_log information about the source is -; added. The default is 1024 and 0 allows to not apply any maximum length at all. -; http://php.net/log-errors-max-len -log_errors_max_len = 1024 - -; Do not log repeated messages. Repeated errors must occur in same file on same -; line unless ignore_repeated_source is set true. -; http://php.net/ignore-repeated-errors -ignore_repeated_errors = Off - -; Ignore source of message when ignoring repeated messages. When this setting -; is On you will not log errors with repeated messages from different files or -; source lines. -; http://php.net/ignore-repeated-source -ignore_repeated_source = Off - -; If this parameter is set to Off, then memory leaks will not be shown (on -; stdout or in the log). This has only effect in a debug compile, and if -; error reporting includes E_WARNING in the allowed list -; http://php.net/report-memleaks -report_memleaks = On - -; This setting is on by default. -;report_zend_debug = 0 - -; Store the last error/warning message in $php_errormsg (boolean). Setting this value -; to On can assist in debugging and is appropriate for development servers. It should -; however be disabled on production servers. -; Default Value: Off -; Development Value: On -; Production Value: Off -; http://php.net/track-errors -track_errors = Off - -; Turn off normal error reporting and emit XML-RPC error XML -; http://php.net/xmlrpc-errors -;xmlrpc_errors = 0 - -; An XML-RPC faultCode -;xmlrpc_error_number = 0 - -; When PHP displays or logs an error, it has the capability of inserting html -; links to documentation related to that error. This directive controls whether -; those HTML links appear in error messages or not. For performance and security -; reasons, it's recommended you disable this on production servers. -; Note: This directive is hardcoded to Off for the CLI SAPI -; Default Value: On -; Development Value: On -; Production value: Off -; http://php.net/html-errors -html_errors = Off - -; If html_errors is set On PHP produces clickable error messages that direct -; to a page describing the error or function causing the error in detail. -; You can download a copy of the PHP manual from http://php.net/docs -; and change docref_root to the base URL of your local copy including the -; leading '/'. You must also specify the file extension being used including -; the dot. PHP's default behavior is to leave these settings empty. -; Note: Never use this feature for production boxes. -; http://php.net/docref-root -; Examples -;docref_root = "/phpmanual/" - -; http://php.net/docref-ext -;docref_ext = .html - -; String to output before an error message. PHP's default behavior is to leave -; this setting blank. -; http://php.net/error-prepend-string -; Example: -;error_prepend_string = "<span style='color: #ff0000'>" - -; String to output after an error message. PHP's default behavior is to leave -; this setting blank. -; http://php.net/error-append-string -; Example: -;error_append_string = "</span>" - -; Log errors to specified file. PHP's default behavior is to leave this value -; empty. -; http://php.net/error-log -; Example: -;error_log = php_errors.log -; Log errors to syslog (Event Log on NT, not valid in Windows 95). -;error_log = syslog - -;;;;;;;;;;;;;;;;; -; Data Handling ; -;;;;;;;;;;;;;;;;; - -; The separator used in PHP generated URLs to separate arguments. -; PHP's default setting is "&". -; http://php.net/arg-separator.output -; Example: -;arg_separator.output = "&" - -; List of separator(s) used by PHP to parse input URLs into variables. -; PHP's default setting is "&". -; NOTE: Every character in this directive is considered as separator! -; http://php.net/arg-separator.input -; Example: -;arg_separator.input = ";&" - -; This directive determines which super global arrays are registered when PHP -; starts up. If the register_globals directive is enabled, it also determines -; what order variables are populated into the global space. G,P,C,E & S are -; abbreviations for the following respective super globals: GET, POST, COOKIE, -; ENV and SERVER. There is a performance penalty paid for the registration of -; these arrays and because ENV is not as commonly used as the others, ENV is -; is not recommended on productions servers. You can still get access to -; the environment variables through getenv() should you need to. -; Default Value: "EGPCS" -; Development Value: "GPCS" -; Production Value: "GPCS"; -; http://php.net/variables-order -variables_order = "GPCS" - -; This directive determines which super global data (G,P,C,E & S) should -; be registered into the super global array REQUEST. If so, it also determines -; the order in which that data is registered. The values for this directive are -; specified in the same manner as the variables_order directive, EXCEPT one. -; Leaving this value empty will cause PHP to use the value set in the -; variables_order directive. It does not mean it will leave the super globals -; array REQUEST empty. -; Default Value: None -; Development Value: "GP" -; Production Value: "GP" -; http://php.net/request-order -request_order = "GP" - -; Whether or not to register the EGPCS variables as global variables. You may -; want to turn this off if you don't want to clutter your scripts' global scope -; with user data. -; You should do your best to write your scripts so that they do not require -; register_globals to be on; Using form variables as globals can easily lead -; to possible security problems, if the code is not very well thought of. -; http://php.net/register-globals -register_globals = Off - -; Determines whether the deprecated long $HTTP_*_VARS type predefined variables -; are registered by PHP or not. As they are deprecated, we obviously don't -; recommend you use them. They are on by default for compatibility reasons but -; they are not recommended on production servers. -; Default Value: On -; Development Value: Off -; Production Value: Off -; http://php.net/register-long-arrays -register_long_arrays = Off - -; This directive determines whether PHP registers $argv & $argc each time it -; runs. $argv contains an array of all the arguments passed to PHP when a script -; is invoked. $argc contains an integer representing the number of arguments -; that were passed when the script was invoked. These arrays are extremely -; useful when running scripts from the command line. When this directive is -; enabled, registering these variables consumes CPU cycles and memory each time -; a script is executed. For performance reasons, this feature should be disabled -; on production servers. -; Note: This directive is hardcoded to On for the CLI SAPI -; Default Value: On -; Development Value: Off -; Production Value: Off -; http://php.net/register-argc-argv -register_argc_argv = Off - -; When enabled, the SERVER and ENV variables are created when they're first -; used (Just In Time) instead of when the script starts. If these variables -; are not used within a script, having this directive on will result in a -; performance gain. The PHP directives register_globals, register_long_arrays, -; and register_argc_argv must be disabled for this directive to have any affect. -; http://php.net/auto-globals-jit -auto_globals_jit = On - -; Maximum size of POST data that PHP will accept. -; http://php.net/post-max-size -post_max_size = 8M - -; Magic quotes are a preprocessing feature of PHP where PHP will attempt to -; escape any character sequences in GET, POST, COOKIE and ENV data which might -; otherwise corrupt data being placed in resources such as databases before -; making that data available to you. Because of character encoding issues and -; non-standard SQL implementations across many databases, it's not currently -; possible for this feature to be 100% accurate. PHP's default behavior is to -; enable the feature. We strongly recommend you use the escaping mechanisms -; designed specifically for the database your using instead of relying on this -; feature. Also note, this feature has been deprecated as of PHP 5.3.0 and is -; scheduled for removal in PHP 6. -; Default Value: On -; Development Value: Off -; Production Value: Off -; http://php.net/magic-quotes-gpc -magic_quotes_gpc = Off - -; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. -; http://php.net/magic-quotes-runtime -magic_quotes_runtime = Off - -; Use Sybase-style magic quotes (escape ' with '' instead of \'). -; http://php.net/magic-quotes-sybase -magic_quotes_sybase = Off - -; Automatically add files before PHP document. -; http://php.net/auto-prepend-file -auto_prepend_file = - -; Automatically add files after PHP document. -; http://php.net/auto-append-file -auto_append_file = - -; By default, PHP will output a character encoding using -; the Content-type: header. To disable sending of the charset, simply -; set it to be empty. -; -; PHP's built-in default is text/html -; http://php.net/default-mimetype -default_mimetype = "text/html" - -; PHP's default character set is set to empty. -; http://php.net/default-charset -;default_charset = "iso-8859-1" - -; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is -; to disable this feature. -; http://php.net/always-populate-raw-post-data -;always_populate_raw_post_data = On - -;;;;;;;;;;;;;;;;;;;;;;;;; -; Paths and Directories ; -;;;;;;;;;;;;;;;;;;;;;;;;; - -; UNIX: "/path1:/path2" -;include_path = ".:/usr/share/php" -; -; Windows: "\path1;\path2" -;include_path = ".;c:\php\includes" -; -; PHP's default setting for include_path is ".;/path/to/php/pear" -; http://php.net/include-path - -; The root of the PHP pages, used only if nonempty. -; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root -; if you are running php as a CGI under any web server (other than IIS) -; see documentation for security issues. The alternate is to use the -; cgi.force_redirect configuration below -; http://php.net/doc-root -doc_root = - -; The directory under which PHP opens the script using /~username used only -; if nonempty. -; http://php.net/user-dir -user_dir = - -; Directory in which the loadable extensions (modules) reside. -; http://php.net/extension-dir -; extension_dir = "lib/" - -; Whether or not to enable the dl() function. The dl() function does NOT work -; properly in multithreaded servers, such as IIS or Zeus, and is automatically -; disabled on them. -; http://php.net/enable-dl -enable_dl = Off - -; cgi.force_redirect is necessary to provide security running PHP as a CGI under -; most web servers. Left undefined, PHP turns this on by default. You can -; turn it off here AT YOUR OWN RISK -; **You CAN safely turn this off for IIS, in fact, you MUST.** -; http://php.net/cgi.force-redirect -;cgi.force_redirect = 1 - -; if cgi.nph is enabled it will force cgi to always sent Status: 200 with -; every request. PHP's default behavior is to disable this feature. -;cgi.nph = 1 - -; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape -; (iPlanet) web servers, you MAY need to set an environment variable name that PHP -; will look for to know it is OK to continue execution. Setting this variable MAY -; cause security issues, KNOW WHAT YOU ARE DOING FIRST. -; http://php.net/cgi.redirect-status-env -;cgi.redirect_status_env = ; - -; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's -; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok -; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting -; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting -; of zero causes PHP to behave as before. Default is 1. You should fix your scripts -; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. -; http://php.net/cgi.fix-pathinfo -;cgi.fix_pathinfo=1 - -; FastCGI under IIS (on WINNT based OS) supports the ability to impersonate -; security tokens of the calling client. This allows IIS to define the -; security context that the request runs under. mod_fastcgi under Apache -; does not currently support this feature (03/17/2002) -; Set to 1 if running under IIS. Default is zero. -; http://php.net/fastcgi.impersonate -;fastcgi.impersonate = 1; - -; Disable logging through FastCGI connection. PHP's default behavior is to enable -; this feature. -;fastcgi.logging = 0 - -; cgi.rfc2616_headers configuration option tells PHP what type of headers to -; use when sending HTTP response code. If it's set 0 PHP sends Status: header that -; is supported by Apache. When this option is set to 1 PHP will send -; RFC2616 compliant header. -; Default is zero. -; http://php.net/cgi.rfc2616-headers -;cgi.rfc2616_headers = 0 - -;;;;;;;;;;;;;;;; -; File Uploads ; -;;;;;;;;;;;;;;;; - -; Whether to allow HTTP file uploads. -; http://php.net/file-uploads -file_uploads = On - -; Temporary directory for HTTP uploaded files (will use system default if not -; specified). -; http://php.net/upload-tmp-dir -;upload_tmp_dir = - -; Maximum allowed size for uploaded files. -; http://php.net/upload-max-filesize -upload_max_filesize = 2M - -; Maximum number of files that can be uploaded via a single request -max_file_uploads = 20 - -;;;;;;;;;;;;;;;;;; -; Fopen wrappers ; -;;;;;;;;;;;;;;;;;; - -; Whether to allow the treatment of URLs (like http:// or ftp://) as files. -; http://php.net/allow-url-fopen -allow_url_fopen = On - -; Whether to allow include/require to open URLs (like http:// or ftp://) as files. -; http://php.net/allow-url-include -allow_url_include = Off - -; Define the anonymous ftp password (your email address). PHP's default setting -; for this is empty. -; http://php.net/from -;from="john@doe.com" - -; Define the User-Agent string. PHP's default setting for this is empty. -; http://php.net/user-agent -;user_agent="PHP" - -; Default timeout for socket based streams (seconds) -; http://php.net/default-socket-timeout -default_socket_timeout = 60 - -; If your scripts have to deal with files from Macintosh systems, -; or you are running on a Mac and need to deal with files from -; unix or win32 systems, setting this flag will cause PHP to -; automatically detect the EOL character in those files so that -; fgets() and file() will work regardless of the source of the file. -; http://php.net/auto-detect-line-endings -;auto_detect_line_endings = Off - -;;;;;;;;;;;;;;;;;;;;;; -; Dynamic Extensions ; -;;;;;;;;;;;;;;;;;;;;;; - -extension=./lib/tarantool.so -; If you wish to have an extension loaded automatically, use the following -; syntax: -; -; extension=modulename.extension -; -; For example, on Windows: -; -; extension=msql.dll -; -; ... or under UNIX: -; -; extension=msql.so -; -; ... or with a path: -; -; extension=/path/to/extension/msql.so -; -; If you only provide the name of the extension, PHP will look for it in its -; default extension directory. - -;;;;;;;;;;;;;;;;;;; -; Module Settings ; -;;;;;;;;;;;;;;;;;;; - -[Date] -; Defines the default timezone used by the date functions -; http://php.net/date.timezone -;date.timezone = - -; http://php.net/date.default-latitude -;date.default_latitude = 31.7667 - -; http://php.net/date.default-longitude -;date.default_longitude = 35.2333 - -; http://php.net/date.sunrise-zenith -;date.sunrise_zenith = 90.583333 - -; http://php.net/date.sunset-zenith -;date.sunset_zenith = 90.583333 - -[filter] -; http://php.net/filter.default -;filter.default = unsafe_raw - -; http://php.net/filter.default-flags -;filter.default_flags = - -[iconv] -;iconv.input_encoding = ISO-8859-1 -;iconv.internal_encoding = ISO-8859-1 -;iconv.output_encoding = ISO-8859-1 - -[intl] -;intl.default_locale = -; This directive allows you to produce PHP errors when some error -; happens within intl functions. The value is the level of the error produced. -; Default is 0, which does not produce any errors. -;intl.error_level = E_WARNING - -[sqlite] -; http://php.net/sqlite.assoc-case -;sqlite.assoc_case = 0 - -[sqlite3] -;sqlite3.extension_dir = - -[Pcre] -;PCRE library backtracking limit. -; http://php.net/pcre.backtrack-limit -;pcre.backtrack_limit=100000 - -;PCRE library recursion limit. -;Please note that if you set this value to a high number you may consume all -;the available process stack and eventually crash PHP (due to reaching the -;stack size limit imposed by the Operating System). -; http://php.net/pcre.recursion-limit -;pcre.recursion_limit=100000 - -[Pdo] -; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" -; http://php.net/pdo-odbc.connection-pooling -;pdo_odbc.connection_pooling=strict - -;pdo_odbc.db2_instance_name - -[Pdo_mysql] -; If mysqlnd is used: Number of cache slots for the internal result set cache -; http://php.net/pdo_mysql.cache_size -pdo_mysql.cache_size = 2000 - -; Default socket name for local MySQL connects. If empty, uses the built-in -; MySQL defaults. -; http://php.net/pdo_mysql.default-socket -pdo_mysql.default_socket= - -[Phar] -; http://php.net/phar.readonly -;phar.readonly = On - -; http://php.net/phar.require-hash -;phar.require_hash = On - -;phar.cache_list = - -[Syslog] -; Whether or not to define the various syslog variables (e.g. $LOG_PID, -; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In -; runtime, you can define these variables by calling define_syslog_variables(). -; http://php.net/define-syslog-variables -define_syslog_variables = Off - -[mail function] -; For Win32 only. -; http://php.net/smtp -SMTP = localhost -; http://php.net/smtp-port -smtp_port = 25 - -; For Win32 only. -; http://php.net/sendmail-from -;sendmail_from = me@example.com - -; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). -; http://php.net/sendmail-path -;sendmail_path = - -; Force the addition of the specified parameters to be passed as extra parameters -; to the sendmail binary. These parameters will always replace the value of -; the 5th parameter to mail(), even in safe mode. -;mail.force_extra_parameters = - -; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename -mail.add_x_header = On - -; The path to a log file that will log all mail() calls. Log entries include -; the full path of the script, line number, To address and headers. -;mail.log = - -[SQL] -; http://php.net/sql.safe-mode -sql.safe_mode = Off - -[ODBC] -; http://php.net/odbc.default-db -;odbc.default_db = Not yet implemented - -; http://php.net/odbc.default-user -;odbc.default_user = Not yet implemented - -; http://php.net/odbc.default-pw -;odbc.default_pw = Not yet implemented - -; Controls the ODBC cursor model. -; Default: SQL_CURSOR_STATIC (default). -;odbc.default_cursortype - -; Allow or prevent persistent links. -; http://php.net/odbc.allow-persistent -odbc.allow_persistent = On - -; Check that a connection is still valid before reuse. -; http://php.net/odbc.check-persistent -odbc.check_persistent = On - -; Maximum number of persistent links. -1 means no limit. -; http://php.net/odbc.max-persistent -odbc.max_persistent = -1 - -; Maximum number of links (persistent + non-persistent). -1 means no limit. -; http://php.net/odbc.max-links -odbc.max_links = -1 - -; Handling of LONG fields. Returns number of bytes to variables. 0 means -; passthru. -; http://php.net/odbc.defaultlrl -odbc.defaultlrl = 4096 - -; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. -; See the documentation on odbc_binmode and odbc_longreadlen for an explanation -; of odbc.defaultlrl and odbc.defaultbinmode -; http://php.net/odbc.defaultbinmode -odbc.defaultbinmode = 1 - -;birdstep.max_links = -1 - -[Interbase] -; Allow or prevent persistent links. -ibase.allow_persistent = 1 - -; Maximum number of persistent links. -1 means no limit. -ibase.max_persistent = -1 - -; Maximum number of links (persistent + non-persistent). -1 means no limit. -ibase.max_links = -1 - -; Default database name for ibase_connect(). -;ibase.default_db = - -; Default username for ibase_connect(). -;ibase.default_user = - -; Default password for ibase_connect(). -;ibase.default_password = - -; Default charset for ibase_connect(). -;ibase.default_charset = - -; Default timestamp format. -ibase.timestampformat = "%Y-%m-%d %H:%M:%S" - -; Default date format. -ibase.dateformat = "%Y-%m-%d" - -; Default time format. -ibase.timeformat = "%H:%M:%S" - -[MySQL] -; Allow accessing, from PHP's perspective, local files with LOAD DATA statements -; http://php.net/mysql.allow_local_infile -mysql.allow_local_infile = On - -; Allow or prevent persistent links. -; http://php.net/mysql.allow-persistent -mysql.allow_persistent = On - -; If mysqlnd is used: Number of cache slots for the internal result set cache -; http://php.net/mysql.cache_size -mysql.cache_size = 2000 - -; Maximum number of persistent links. -1 means no limit. -; http://php.net/mysql.max-persistent -mysql.max_persistent = -1 - -; Maximum number of links (persistent + non-persistent). -1 means no limit. -; http://php.net/mysql.max-links -mysql.max_links = -1 - -; Default port number for mysql_connect(). If unset, mysql_connect() will use -; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the -; compile-time value defined MYSQL_PORT (in that order). Win32 will only look -; at MYSQL_PORT. -; http://php.net/mysql.default-port -mysql.default_port = - -; Default socket name for local MySQL connects. If empty, uses the built-in -; MySQL defaults. -; http://php.net/mysql.default-socket -mysql.default_socket = - -; Default host for mysql_connect() (doesn't apply in safe mode). -; http://php.net/mysql.default-host -mysql.default_host = - -; Default user for mysql_connect() (doesn't apply in safe mode). -; http://php.net/mysql.default-user -mysql.default_user = - -; Default password for mysql_connect() (doesn't apply in safe mode). -; Note that this is generally a *bad* idea to store passwords in this file. -; *Any* user with PHP access can run 'echo get_cfg_var("mysql.default_password") -; and reveal this password! And of course, any users with read access to this -; file will be able to reveal the password as well. -; http://php.net/mysql.default-password -mysql.default_password = - -; Maximum time (in seconds) for connect timeout. -1 means no limit -; http://php.net/mysql.connect-timeout -mysql.connect_timeout = 60 - -; Trace mode. When trace_mode is active (=On), warnings for table/index scans and -; SQL-Errors will be displayed. -; http://php.net/mysql.trace-mode -mysql.trace_mode = Off - -[MySQLi] - -; Maximum number of persistent links. -1 means no limit. -; http://php.net/mysqli.max-persistent -mysqli.max_persistent = -1 - -; Allow accessing, from PHP's perspective, local files with LOAD DATA statements -; http://php.net/mysqli.allow_local_infile -;mysqli.allow_local_infile = On - -; Allow or prevent persistent links. -; http://php.net/mysqli.allow-persistent -mysqli.allow_persistent = On - -; Maximum number of links. -1 means no limit. -; http://php.net/mysqli.max-links -mysqli.max_links = -1 - -; If mysqlnd is used: Number of cache slots for the internal result set cache -; http://php.net/mysqli.cache_size -mysqli.cache_size = 2000 - -; Default port number for mysqli_connect(). If unset, mysqli_connect() will use -; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the -; compile-time value defined MYSQL_PORT (in that order). Win32 will only look -; at MYSQL_PORT. -; http://php.net/mysqli.default-port -mysqli.default_port = 3306 - -; Default socket name for local MySQL connects. If empty, uses the built-in -; MySQL defaults. -; http://php.net/mysqli.default-socket -mysqli.default_socket = - -; Default host for mysql_connect() (doesn't apply in safe mode). -; http://php.net/mysqli.default-host -mysqli.default_host = - -; Default user for mysql_connect() (doesn't apply in safe mode). -; http://php.net/mysqli.default-user -mysqli.default_user = - -; Default password for mysqli_connect() (doesn't apply in safe mode). -; Note that this is generally a *bad* idea to store passwords in this file. -; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") -; and reveal this password! And of course, any users with read access to this -; file will be able to reveal the password as well. -; http://php.net/mysqli.default-pw -mysqli.default_pw = - -; Allow or prevent reconnect -mysqli.reconnect = Off - -[mysqlnd] -; Enable / Disable collection of general statstics by mysqlnd which can be -; used to tune and monitor MySQL operations. -; http://php.net/mysqlnd.collect_statistics -mysqlnd.collect_statistics = On - -; Enable / Disable collection of memory usage statstics by mysqlnd which can be -; used to tune and monitor MySQL operations. -; http://php.net/mysqlnd.collect_memory_statistics -mysqlnd.collect_memory_statistics = Off - -; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. -; http://php.net/mysqlnd.net_cmd_buffer_size -;mysqlnd.net_cmd_buffer_size = 2048 - -; Size of a pre-allocated buffer used for reading data sent by the server in -; bytes. -; http://php.net/mysqlnd.net_read_buffer_size -;mysqlnd.net_read_buffer_size = 32768 - -[OCI8] - -; Connection: Enables privileged connections using external -; credentials (OCI_SYSOPER, OCI_SYSDBA) -; http://php.net/oci8.privileged-connect -;oci8.privileged_connect = Off - -; Connection: The maximum number of persistent OCI8 connections per -; process. Using -1 means no limit. -; http://php.net/oci8.max-persistent -;oci8.max_persistent = -1 - -; Connection: The maximum number of seconds a process is allowed to -; maintain an idle persistent connection. Using -1 means idle -; persistent connections will be maintained forever. -; http://php.net/oci8.persistent-timeout -;oci8.persistent_timeout = -1 - -; Connection: The number of seconds that must pass before issuing a -; ping during oci_pconnect() to check the connection validity. When -; set to 0, each oci_pconnect() will cause a ping. Using -1 disables -; pings completely. -; http://php.net/oci8.ping-interval -;oci8.ping_interval = 60 - -; Connection: Set this to a user chosen connection class to be used -; for all pooled server requests with Oracle 11g Database Resident -; Connection Pooling (DRCP). To use DRCP, this value should be set to -; the same string for all web servers running the same application, -; the database pool must be configured, and the connection string must -; specify to use a pooled server. -;oci8.connection_class = - -; High Availability: Using On lets PHP receive Fast Application -; Notification (FAN) events generated when a database node fails. The -; database must also be configured to post FAN events. -;oci8.events = Off - -; Tuning: This option enables statement caching, and specifies how -; many statements to cache. Using 0 disables statement caching. -; http://php.net/oci8.statement-cache-size -;oci8.statement_cache_size = 20 - -; Tuning: Enables statement prefetching and sets the default number of -; rows that will be fetched automatically after statement execution. -; http://php.net/oci8.default-prefetch -;oci8.default_prefetch = 100 - -; Compatibility. Using On means oci_close() will not close -; oci_connect() and oci_new_connect() connections. -; http://php.net/oci8.old-oci-close-semantics -;oci8.old_oci_close_semantics = Off - -[PostgresSQL] -; Allow or prevent persistent links. -; http://php.net/pgsql.allow-persistent -pgsql.allow_persistent = On - -; Detect broken persistent links always with pg_pconnect(). -; Auto reset feature requires a little overheads. -; http://php.net/pgsql.auto-reset-persistent -pgsql.auto_reset_persistent = Off - -; Maximum number of persistent links. -1 means no limit. -; http://php.net/pgsql.max-persistent -pgsql.max_persistent = -1 - -; Maximum number of links (persistent+non persistent). -1 means no limit. -; http://php.net/pgsql.max-links -pgsql.max_links = -1 - -; Ignore PostgreSQL backends Notice message or not. -; Notice message logging require a little overheads. -; http://php.net/pgsql.ignore-notice -pgsql.ignore_notice = 0 - -; Log PostgreSQL backends Notice message or not. -; Unless pgsql.ignore_notice=0, module cannot log notice message. -; http://php.net/pgsql.log-notice -pgsql.log_notice = 0 - -[Sybase-CT] -; Allow or prevent persistent links. -; http://php.net/sybct.allow-persistent -sybct.allow_persistent = On - -; Maximum number of persistent links. -1 means no limit. -; http://php.net/sybct.max-persistent -sybct.max_persistent = -1 - -; Maximum number of links (persistent + non-persistent). -1 means no limit. -; http://php.net/sybct.max-links -sybct.max_links = -1 - -; Minimum server message severity to display. -; http://php.net/sybct.min-server-severity -sybct.min_server_severity = 10 - -; Minimum client message severity to display. -; http://php.net/sybct.min-client-severity -sybct.min_client_severity = 10 - -; Set per-context timeout -; http://php.net/sybct.timeout -;sybct.timeout= - -;sybct.packet_size - -; The maximum time in seconds to wait for a connection attempt to succeed before returning failure. -; Default: one minute -;sybct.login_timeout= - -; The name of the host you claim to be connecting from, for display by sp_who. -; Default: none -;sybct.hostname= - -; Allows you to define how often deadlocks are to be retried. -1 means "forever". -; Default: 0 -;sybct.deadlock_retry_count= - -[bcmath] -; Number of decimal digits for all bcmath functions. -; http://php.net/bcmath.scale -bcmath.scale = 0 - -[browscap] -; http://php.net/browscap -;browscap = extra/browscap.ini - -[Session] -; Handler used to store/retrieve data. -; http://php.net/session.save-handler -session.save_handler = files - -; Argument passed to save_handler. In the case of files, this is the path -; where data files are stored. Note: Windows users have to change this -; variable in order to use PHP's session functions. -; -; The path can be defined as: -; -; session.save_path = "N;/path" -; -; where N is an integer. Instead of storing all the session files in -; /path, what this will do is use subdirectories N-levels deep, and -; store the session data in those directories. This is useful if you -; or your OS have problems with lots of files in one directory, and is -; a more efficient layout for servers that handle lots of sessions. -; -; NOTE 1: PHP will not create this directory structure automatically. -; You can use the script in the ext/session dir for that purpose. -; NOTE 2: See the section on garbage collection below if you choose to -; use subdirectories for session storage -; -; The file storage module creates files using mode 600 by default. -; You can change that by using -; -; session.save_path = "N;MODE;/path" -; -; where MODE is the octal representation of the mode. Note that this -; does not overwrite the process's umask. -; http://php.net/session.save-path -;session.save_path = "/tmp" - -; Whether to use cookies. -; http://php.net/session.use-cookies -session.use_cookies = 1 - -; http://php.net/session.cookie-secure -;session.cookie_secure = - -; This option forces PHP to fetch and use a cookie for storing and maintaining -; the session id. We encourage this operation as it's very helpful in combatting -; session hijacking when not specifying and managing your own session id. It is -; not the end all be all of session hijacking defense, but it's a good start. -; http://php.net/session.use-only-cookies -session.use_only_cookies = 1 - -; Name of the session (used as cookie name). -; http://php.net/session.name -session.name = PHPSESSID - -; Initialize session on request startup. -; http://php.net/session.auto-start -session.auto_start = 0 - -; Lifetime in seconds of cookie or, if 0, until browser is restarted. -; http://php.net/session.cookie-lifetime -session.cookie_lifetime = 0 - -; The path for which the cookie is valid. -; http://php.net/session.cookie-path -session.cookie_path = / - -; The domain for which the cookie is valid. -; http://php.net/session.cookie-domain -session.cookie_domain = - -; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript. -; http://php.net/session.cookie-httponly -session.cookie_httponly = - -; Handler used to serialize data. php is the standard serializer of PHP. -; http://php.net/session.serialize-handler -session.serialize_handler = php - -; Defines the probability that the 'garbage collection' process is started -; on every session initialization. The probability is calculated by using -; gc_probability/gc_divisor. Where session.gc_probability is the numerator -; and gc_divisor is the denominator in the equation. Setting this value to 1 -; when the session.gc_divisor value is 100 will give you approximately a 1% chance -; the gc will run on any give request. -; Default Value: 1 -; Development Value: 1 -; Production Value: 1 -; http://php.net/session.gc-probability -session.gc_probability = 0 - -; Defines the probability that the 'garbage collection' process is started on every -; session initialization. The probability is calculated by using the following equation: -; gc_probability/gc_divisor. Where session.gc_probability is the numerator and -; session.gc_divisor is the denominator in the equation. Setting this value to 1 -; when the session.gc_divisor value is 100 will give you approximately a 1% chance -; the gc will run on any give request. Increasing this value to 1000 will give you -; a 0.1% chance the gc will run on any give request. For high volume production servers, -; this is a more efficient approach. -; Default Value: 100 -; Development Value: 1000 -; Production Value: 1000 -; http://php.net/session.gc-divisor -session.gc_divisor = 1000 - -; After this number of seconds, stored data will be seen as 'garbage' and -; cleaned up by the garbage collection process. -; http://php.net/session.gc-maxlifetime -session.gc_maxlifetime = 1440 - -; NOTE: If you are using the subdirectory option for storing session files -; (see session.save_path above), then garbage collection does *not* -; happen automatically. You will need to do your own garbage -; collection through a shell script, cron entry, or some other method. -; For example, the following script would is the equivalent of -; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): -; find /path/to/sessions -cmin +24 | xargs rm - -; PHP 4.2 and less have an undocumented feature/bug that allows you to -; to initialize a session variable in the global scope, even when register_globals -; is disabled. PHP 4.3 and later will warn you, if this feature is used. -; You can disable the feature and the warning separately. At this time, -; the warning is only displayed, if bug_compat_42 is enabled. This feature -; introduces some serious security problems if not handled correctly. It's -; recommended that you do not use this feature on production servers. But you -; should enable this on development servers and enable the warning as well. If you -; do not enable the feature on development servers, you won't be warned when it's -; used and debugging errors caused by this can be difficult to track down. -; Default Value: On -; Development Value: On -; Production Value: Off -; http://php.net/session.bug-compat-42 -session.bug_compat_42 = Off - -; This setting controls whether or not you are warned by PHP when initializing a -; session value into the global space. session.bug_compat_42 must be enabled before -; these warnings can be issued by PHP. See the directive above for more information. -; Default Value: On -; Development Value: On -; Production Value: Off -; http://php.net/session.bug-compat-warn -session.bug_compat_warn = Off - -; Check HTTP Referer to invalidate externally stored URLs containing ids. -; HTTP_REFERER has to contain this substring for the session to be -; considered as valid. -; http://php.net/session.referer-check -session.referer_check = - -; How many bytes to read from the file. -; http://php.net/session.entropy-length -session.entropy_length = 0 - -; Specified here to create the session id. -; http://php.net/session.entropy-file -; On systems that don't have /dev/urandom /dev/arandom can be used -; On windows, setting the entropy_length setting will activate the -; Windows random source (using the CryptoAPI) -;session.entropy_file = /dev/urandom - -; Set to {nocache,private,public,} to determine HTTP caching aspects -; or leave this empty to avoid sending anti-caching headers. -; http://php.net/session.cache-limiter -session.cache_limiter = nocache - -; Document expires after n minutes. -; http://php.net/session.cache-expire -session.cache_expire = 180 - -; trans sid support is disabled by default. -; Use of trans sid may risk your users security. -; Use this option with caution. -; - User may send URL contains active session ID -; to other person via. email/irc/etc. -; - URL that contains active session ID may be stored -; in publically accessible computer. -; - User may access your site with the same session ID -; always using URL stored in browser's history or bookmarks. -; http://php.net/session.use-trans-sid -session.use_trans_sid = 0 - -; Select a hash function for use in generating session ids. -; Possible Values -; 0 (MD5 128 bits) -; 1 (SHA-1 160 bits) -; This option may also be set to the name of any hash function supported by -; the hash extension. A list of available hashes is returned by the hash_algos() -; function. -; http://php.net/session.hash-function -session.hash_function = 0 - -; Define how many bits are stored in each character when converting -; the binary hash data to something readable. -; Possible values: -; 4 (4 bits: 0-9, a-f) -; 5 (5 bits: 0-9, a-v) -; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") -; Default Value: 4 -; Development Value: 5 -; Production Value: 5 -; http://php.net/session.hash-bits-per-character -session.hash_bits_per_character = 5 - -; The URL rewriter will look for URLs in a defined set of HTML tags. -; form/fieldset are special; if you include them here, the rewriter will -; add a hidden <input> field with the info which is otherwise appended -; to URLs. If you want XHTML conformity, remove the form entry. -; Note that all valid entries require a "=", even if no value follows. -; Default Value: "a=href,area=href,frame=src,form=,fieldset=" -; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry" -; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry" -; http://php.net/url-rewriter.tags -url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" - -[MSSQL] -; Allow or prevent persistent links. -mssql.allow_persistent = On - -; Maximum number of persistent links. -1 means no limit. -mssql.max_persistent = -1 - -; Maximum number of links (persistent+non persistent). -1 means no limit. -mssql.max_links = -1 - -; Minimum error severity to display. -mssql.min_error_severity = 10 - -; Minimum message severity to display. -mssql.min_message_severity = 10 - -; Compatibility mode with old versions of PHP 3.0. -mssql.compatability_mode = Off - -; Connect timeout -;mssql.connect_timeout = 5 - -; Query timeout -;mssql.timeout = 60 - -; Valid range 0 - 2147483647. Default = 4096. -;mssql.textlimit = 4096 - -; Valid range 0 - 2147483647. Default = 4096. -;mssql.textsize = 4096 - -; Limits the number of records in each batch. 0 = all records in one batch. -;mssql.batchsize = 0 - -; Specify how datetime and datetim4 columns are returned -; On => Returns data converted to SQL server settings -; Off => Returns values as YYYY-MM-DD hh:mm:ss -;mssql.datetimeconvert = On - -; Use NT authentication when connecting to the server -mssql.secure_connection = Off - -; Specify max number of processes. -1 = library default -; msdlib defaults to 25 -; FreeTDS defaults to 4096 -;mssql.max_procs = -1 - -; Specify client character set. -; If empty or not set the client charset from freetds.comf is used -; This is only used when compiled with FreeTDS -;mssql.charset = "ISO-8859-1" - -[Assertion] -; Assert(expr); active by default. -; http://php.net/assert.active -;assert.active = On - -; Issue a PHP warning for each failed assertion. -; http://php.net/assert.warning -;assert.warning = On - -; Don't bail out by default. -; http://php.net/assert.bail -;assert.bail = Off - -; User-function to be called if an assertion fails. -; http://php.net/assert.callback -;assert.callback = 0 - -; Eval the expression with current error_reporting(). Set to true if you want -; error_reporting(0) around the eval(). -; http://php.net/assert.quiet-eval -;assert.quiet_eval = 0 - -[COM] -; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs -; http://php.net/com.typelib-file -;com.typelib_file = - -; allow Distributed-COM calls -; http://php.net/com.allow-dcom -;com.allow_dcom = true - -; autoregister constants of a components typlib on com_load() -; http://php.net/com.autoregister-typelib -;com.autoregister_typelib = true - -; register constants casesensitive -; http://php.net/com.autoregister-casesensitive -;com.autoregister_casesensitive = false - -; show warnings on duplicate constant registrations -; http://php.net/com.autoregister-verbose -;com.autoregister_verbose = true - -; The default character set code-page to use when passing strings to and from COM objects. -; Default: system ANSI code page -;com.code_page= - -[mbstring] -; language for internal character representation. -; http://php.net/mbstring.language -;mbstring.language = Japanese - -; internal/script encoding. -; Some encoding cannot work as internal encoding. -; (e.g. SJIS, BIG5, ISO-2022-*) -; http://php.net/mbstring.internal-encoding -;mbstring.internal_encoding = EUC-JP - -; http input encoding. -; http://php.net/mbstring.http-input -;mbstring.http_input = auto - -; http output encoding. mb_output_handler must be -; registered as output buffer to function -; http://php.net/mbstring.http-output -;mbstring.http_output = SJIS - -; enable automatic encoding translation according to -; mbstring.internal_encoding setting. Input chars are -; converted to internal encoding by setting this to On. -; Note: Do _not_ use automatic encoding translation for -; portable libs/applications. -; http://php.net/mbstring.encoding-translation -;mbstring.encoding_translation = Off - -; automatic encoding detection order. -; auto means -; http://php.net/mbstring.detect-order -;mbstring.detect_order = auto - -; substitute_character used when character cannot be converted -; one from another -; http://php.net/mbstring.substitute-character -;mbstring.substitute_character = none; - -; overload(replace) single byte functions by mbstring functions. -; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(), -; etc. Possible values are 0,1,2,4 or combination of them. -; For example, 7 for overload everything. -; 0: No overload -; 1: Overload mail() function -; 2: Overload str*() functions -; 4: Overload ereg*() functions -; http://php.net/mbstring.func-overload -;mbstring.func_overload = 0 - -; enable strict encoding detection. -;mbstring.strict_detection = Off - -; This directive specifies the regex pattern of content types for which mb_output_handler() -; is activated. -; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) -;mbstring.http_output_conv_mimetype= - -; Allows to set script encoding. Only affects if PHP is compiled with --enable-zend-multibyte -; Default: "" -;mbstring.script_encoding= - -[gd] -; Tell the jpeg decode to ignore warnings and try to create -; a gd image. The warning will then be displayed as notices -; disabled by default -; http://php.net/gd.jpeg-ignore-warning -;gd.jpeg_ignore_warning = 0 - -[exif] -; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. -; With mbstring support this will automatically be converted into the encoding -; given by corresponding encode setting. When empty mbstring.internal_encoding -; is used. For the decode settings you can distinguish between motorola and -; intel byte order. A decode setting cannot be empty. -; http://php.net/exif.encode-unicode -;exif.encode_unicode = ISO-8859-15 - -; http://php.net/exif.decode-unicode-motorola -;exif.decode_unicode_motorola = UCS-2BE - -; http://php.net/exif.decode-unicode-intel -;exif.decode_unicode_intel = UCS-2LE - -; http://php.net/exif.encode-jis -;exif.encode_jis = - -; http://php.net/exif.decode-jis-motorola -;exif.decode_jis_motorola = JIS - -; http://php.net/exif.decode-jis-intel -;exif.decode_jis_intel = JIS - -[Tidy] -; The path to a default tidy configuration file to use when using tidy -; http://php.net/tidy.default-config -;tidy.default_config = /usr/local/lib/php/default.tcfg - -; Should tidy clean and repair output automatically? -; WARNING: Do not use this option if you are generating non-html content -; such as dynamic images -; http://php.net/tidy.clean-output -tidy.clean_output = Off - -[soap] -; Enables or disables WSDL caching feature. -; http://php.net/soap.wsdl-cache-enabled -soap.wsdl_cache_enabled=1 - -; Sets the directory name where SOAP extension will put cache files. -; http://php.net/soap.wsdl-cache-dir -soap.wsdl_cache_dir="/tmp" - -; (time to live) Sets the number of second while cached file will be used -; instead of original one. -; http://php.net/soap.wsdl-cache-ttl -soap.wsdl_cache_ttl=86400 - -; Sets the size of the cache limit. (Max. number of WSDL files to cache) -soap.wsdl_cache_limit = 5 - -[sysvshm] -; A default size of the shared memory segment -;sysvshm.init_mem = 10000 - -[ldap] -; Sets the maximum number of open links or -1 for unlimited. -ldap.max_links = -1 - -[mcrypt] -; For more information about mcrypt settings see http://php.net/mcrypt-module-open - -; Directory where to load mcrypt algorithms -; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) -;mcrypt.algorithms_dir= - -; Directory where to load mcrypt modes -; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) -;mcrypt.modes_dir= - -[dba] -;dba.default_handler= - -; Local Variables: -; tab-width: 4 -; End: diff --git a/connector/php/test/etc/tarantool_box.cfg b/connector/php/test/etc/tarantool_box.cfg deleted file mode 100644 index 39be5f4f3a58c00e1b25b548a66f5cd40cd39165..0000000000000000000000000000000000000000 --- a/connector/php/test/etc/tarantool_box.cfg +++ /dev/null @@ -1,61 +0,0 @@ -# Limit of memory used to store tuples to 100MB -# (0.1 GB) -# This effectively limits the memory, used by -# Tarantool. However, index and connection memory -# is stored outside the slab allocator, hence -# the effective memory usage can be higher (sometimes -# twice as high). -slab_alloc_arena = 0.1 - -# Tarantool executable directory -work_dir = "var" - -# Store the pid in this file. Relative to startup dir. -pid_file = "tarantool_box.pid" - -# Snapshot directory (where snapshots get saved/read) -snap_dir="." - -# WAL directory (where WALs get saved/read) -wal_dir="." - -# Pipe the logs into the following process. -logger="cat - >> tarantool_box.log" - -# Read only and read-write port. -primary_port = 33013 - -# Read-only port. -secondary_port = 33014 - -# The port for administrative commands. -admin_port = 33015 - -# Log level -log_level = 4 - -# Each write ahead log contains this many rows. -# When the limit is reached, Tarantool closes -# the WAL and starts a new one. -rows_per_wal = 5000000 - -wal_fsync_delay = 0.1 -wal_writer_inbox_size=1024 - -# Define a simple space with 1 HASH-based -# primary key. -space[0].enabled = 1 -space[0].index[0].type = "HASH" -space[0].index[0].unique = 1 -space[0].index[0].key_field[0].fieldno = 0 -space[0].index[0].key_field[0].type = "NUM" -space[0].index[1].type = "TREE" -space[0].index[1].unique = 0 -space[0].index[1].key_field[0].fieldno = 1 -space[0].index[1].key_field[0].type = "STR" - -space[1].enabled = 1 -space[1].index[0].type = "HASH" -space[1].index[0].unique = 1 -space[1].index[0].key_field[0].fieldno = 0 -space[1].index[0].key_field[0].type = "STR" diff --git a/connector/php/test/insert.phpt b/connector/php/test/insert.phpt deleted file mode 100644 index 6338ab1a10ce539f98e7d4a844810bee33ec58a7..0000000000000000000000000000000000000000 --- a/connector/php/test/insert.phpt +++ /dev/null @@ -1,176 +0,0 @@ ---TEST-- -Tarantool/box insert command test ---FILE-- -<?php -include "lib/php/tarantool_utest.php"; - -$tarantool = new Tarantool("localhost", 33013, 33015); - -echo "---------- test begin ----------\n"; -echo "test insert: invalid tuple (expected error exception)\n"; -test_insert($tarantool, 0, array(0, array(1, 2, 3), "str"), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test insert: invalid tuple (expected error exception)\n"; -test_insert($tarantool, 0, array(0, $tarantool), 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test insert: assign tuple"; -test_insert($tarantool, 0, $sw4, - TARANTOOL_FLAGS_RETURN_TUPLE); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test insert: assign tuple (tuple doesn't return)\n"; -test_insert($tarantool, 0, $sw6, 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test insert: add existed tuple (expected error exception)\n"; -test_insert($tarantool, 0, $sw4, - TARANTOOL_FLAGS_RETURN_TUPLE | TARANTOOL_FLAGS_ADD); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test insert: replace not existed tuple (expected error exception)\n"; -test_insert($tarantool, 0, $sw5, - TARANTOOL_FLAGS_RETURN_TUPLE | TARANTOOL_FLAGS_REPLACE); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test insert: add not existed tuple\n"; -test_insert($tarantool, 0, $sw5, - TARANTOOL_FLAGS_RETURN_TUPLE | TARANTOOL_FLAGS_ADD); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test insert: replace existed tuple\n"; -test_insert($tarantool, 0, $sw5, - TARANTOOL_FLAGS_RETURN_TUPLE | TARANTOOL_FLAGS_REPLACE); -echo "----------- test end -----------\n\n"; - -test_clean($tarantool, 0); -?> -===DONE=== ---EXPECT-- ----------- test begin ---------- -test insert: invalid tuple (expected error exception) -catched exception: unsupported field type ------------ test end ----------- - ----------- test begin ---------- -test insert: invalid tuple (expected error exception) -catched exception: unsupported field type ------------ test end ----------- - ----------- test begin ---------- -test insert: assign tupleresult: -count = 1 -tuple: - id = 0 - series = Star Wars - year = 1977 - name = A New Hope - crawl = A long time ago, in a galaxy far, far away... -It is a period of civil war. Rebel -spaceships, striking from a hidden -base, have won their first victory -against the evil Galactic Empire. - -During the battle, Rebel spies managed -to steal secret plans to the Empire's -ultimate weapon, the Death Star, an -armored space station with enough -power to destroy an entire planet. - -Pursued by the Empire's sinister agents, -Princess Leia races home aboard her -starship, custodian of the stolen plans -that can save her people and restore -freedom to the galaxy.... - uuid = -1091633151 ------------ test end ----------- - ----------- test begin ---------- -test insert: assign tuple (tuple doesn't return) -result: -count = 1 ------------ test end ----------- - ----------- test begin ---------- -test insert: add existed tuple (expected error exception) -catched exception: insert failed: 14082(0x00003702): Tuple already exists ------------ test end ----------- - ----------- test begin ---------- -test insert: replace not existed tuple (expected error exception) -catched exception: insert failed: 12546(0x00003102): Tuple doesn't exist ------------ test end ----------- - ----------- test begin ---------- -test insert: add not existed tuple -result: -count = 1 -tuple: - id = 1 - series = Star Wars - year = 1980 - name = The Empire Strikes Back - crawl = It is a dark time for the -Rebellion. Although the Death -Star has been destroyed. -Imperial troops have driven the -Rebel forces from their hidden -base and pursued them across -the galaxy. - -Evading the dreaded Imperial -Starfleet, a group of freedom -fighters led by Luke Skywalker -have established a new secret base -on the remote ice world -of Hoth. - -The evil lord Darth Vader, -obsessed with finding young -Skywalker, has dispatched -thousands of remote probes -into the far reaches of space.... - uuid = -1091633150 ------------ test end ----------- - ----------- test begin ---------- -test insert: replace existed tuple -result: -count = 1 -tuple: - id = 1 - series = Star Wars - year = 1980 - name = The Empire Strikes Back - crawl = It is a dark time for the -Rebellion. Although the Death -Star has been destroyed. -Imperial troops have driven the -Rebel forces from their hidden -base and pursued them across -the galaxy. - -Evading the dreaded Imperial -Starfleet, a group of freedom -fighters led by Luke Skywalker -have established a new secret base -on the remote ice world -of Hoth. - -The evil lord Darth Vader, -obsessed with finding young -Skywalker, has dispatched -thousands of remote probes -into the far reaches of space.... - uuid = -1091633150 ------------ test end ----------- - -===DONE=== \ No newline at end of file diff --git a/connector/php/test/lib/lua/sorted_array.lua b/connector/php/test/lib/lua/sorted_array.lua deleted file mode 100644 index 1d8c3fb597495727166ceebecc99df537fb48d9b..0000000000000000000000000000000000000000 --- a/connector/php/test/lib/lua/sorted_array.lua +++ /dev/null @@ -1,173 +0,0 @@ -local bit = require("bit") -local table = require("table") -local string = require("string") -local floor = require("math").floor - -local function s_to_a(data) - local a = {} - local bytes = {string.byte(data, i, #data)} - for i = 1, #data / 8 do - a[i] = 0 - for c = 0, 7 do - a[i] = bit.lshift(a[i], 8) - a[i] = a[i] + bytes[i * 8 - c] - end - end - return a -end - -local function a_to_s(a) - local bytes = {} - local shift = {} - for i = 1, #a do - val = a[i] - for c = 0, 7 do - table.insert(bytes, bit.band(val, 0xff)) - val = bit.rshift(val, 8) - end - end - return string.char(unpack(bytes)) -end - -local max_limit = 500 -local function amerge(a, b) - local r = {} - local n = max_limit - while #a > 0 and #b > 0 and n > 0 do - if a[1] > b[1] then - table.insert(r, table.remove(a, 1)) - else - table.insert(r, table.remove(b, 1)) - end - n = n - 1 - end - while #a > 0 and n > 0 do - table.insert(r, table.remove(a, 1)) - n = n - 1 - end - while #b > 0 and n > 0 do - table.insert(r, table.remove(b, 1)) - n = n - 1 - end - return r -end - -local function afind_ge(a, x) - if #a == 0 then - return 1 - elseif a[1] < x then - return 1 - elseif a[#a] > x then - return #a + 1 - end - - local first, last = 1, #a + 1 - local mid - while first < last do - mid = floor(first + (last - first) / 2) - if x >= a[mid] then - last = mid - else - first = mid + 1 - end - end - - return last -end - -local function ains(a, key) - key = tonumber(key) - - local i = afind_ge(a, key) - if a[i] and a[i] >= key then - table.insert(a, i + 1, key) -- next to equal or greater - else - table.insert(a, i, key) - end - - while #a > max_limit do - table.remove(a) - end -end - -local function adel(a, key) - key = tonumber(key) - local i = afind_ge(a, key) - print("key = ", key) - print("i = ", i) - if a[i] == key then - table.remove(a, i) - end -end - -local function get(space, key) - local tuple = box.select(space, 0, key) - if tuple then - return s_to_a(tuple[1]) - else - return {} - end -end - -local function store(space, key, a) - box.replace(space, key, a_to_s(a)) - return key, a -end - -function box.sa_insert(space, key, value) - local a = get(space, key) - ains(a, value) - print(unpack(a)) - return store(space, key, a) -end - -function box.sa_delete(space, key, ...) - local a = get(space, key) - for i = 1, #a do - print("a[", i, "] = ", a[i]) - end - for i, d in pairs({...}) do - adel(a, d) - end - return store(space, key, a) -end - -function box.sa_select(space, key, from, limit) - local a = get(space, key) - - if from ~= nil then - from = tonumber(from) - index = afind_ge(a, from) - if a[index] == from then - index = index + 1 - end - else - index = 1 - end - - if limit ~= nil then - limit = tonumber(limit) - else - limit = max_limit - end - - local r = {} - for i = index, #a do - if a[i] == nil then - break - end - table.insert(r, a[i]) - limit = limit - 1 - if limit == 0 then - break - end - end - return key, r -end - -function box.sa_merge(space, key_a, key_b) - local a = get(space, key_a) - local b = get(space, key_b) - local r = amerge(a, b) - return r -end diff --git a/connector/php/test/lib/php/tarantool_utest.php b/connector/php/test/lib/php/tarantool_utest.php deleted file mode 100644 index 011d375843af8c61d0902f4748bbd859cd3b5372..0000000000000000000000000000000000000000 --- a/connector/php/test/lib/php/tarantool_utest.php +++ /dev/null @@ -1,180 +0,0 @@ -<?php - -$sw4 = array(0, "Star Wars", 1977, "A New Hope", - "A long time ago, in a galaxy far, far away...\n" . - "It is a period of civil war. Rebel\n" . - "spaceships, striking from a hidden\n" . - "base, have won their first victory\n" . - "against the evil Galactic Empire.\n" . - "\n" . - "During the battle, Rebel spies managed\n" . - "to steal secret plans to the Empire's\n" . - "ultimate weapon, the Death Star, an\n" . - "armored space station with enough\n". - "power to destroy an entire planet.\n" . - "\n" . - "Pursued by the Empire's sinister agents,\n" . - "Princess Leia races home aboard her\n" . - "starship, custodian of the stolen plans\n" . - "that can save her people and restore\n" . - "freedom to the galaxy....", - 0xf10dbeef0001); - -$sw5 = array(1, "Star Wars", 1980, "The Empire Strikes Back", - "It is a dark time for the\n" . - "Rebellion. Although the Death\n" . - "Star has been destroyed.\n" . - "Imperial troops have driven the\n" . - "Rebel forces from their hidden\n" . - "base and pursued them across\n" . - "the galaxy.\n" . - "\n" . - "Evading the dreaded Imperial\n" . - "Starfleet, a group of freedom\n" . - "fighters led by Luke Skywalker\n" . - "have established a new secret base\n" . - "on the remote ice world\n" . - "of Hoth.\n" . - "\n" . - "The evil lord Darth Vader,\n" . - "obsessed with finding young\n" . - "Skywalker, has dispatched\n" . - "thousands of remote probes\n" . - "into the far reaches of space....", - 0xf10dbeef0002); - -$sw6 = array(2, "Star Wars", 1983, "Return of the Jedi", - "Luke Skywalker has returned\n" . - "to his home planet of\n" . - "Tatooine in an attempt\n" . - "to rescue his friend\n" . - "Han Solo from the\n" . - "clutches of the vile\n" . - "gangster Jabba the Hutt.\n" . - "\n" . - "Little does Luke know\n" . - "that the GALACTIC EMPIRE\n" . - "has secretly begun construction\n" . - "on a new armored space station\n" . - "even more powerful than the\n" . - "first dreaded Death Star.\n" . - "\n" . - "When completed, this ultimate\n" . - "weapon will spell certain\n" . - "doom for the small band of\n" . - "rebels struggling to restore\n" . - "freedom to the galaxy...", - 0xf10dbeef0003); - -function test_init($tarantool, $space_no) { - try { - global $sw4, $sw5, $sw6; - $tarantool->insert($space_no, $sw4); - $tarantool->insert($space_no, $sw5); - $tarantool->insert($space_no, $sw6); - } catch (Exception $e) { - echo "init failed: ", $e->getMessage(), "\n"; - throw $e; - } -} - -function test_clean($tarantool, $space_no) { - try { - $tarantool->delete($space_no, 0); - $tarantool->delete($space_no, 1); - $tarantool->delete($space_no, 2); - } catch (Exception $e) { - echo "clean-up failed: ", $e->getMessage(), "\n"; - throw $e; - } -} - -function test_select($tarantool, $space_no, $index_no, $key) { - try { - $result = $tarantool->select($space_no, $index_no, $key); - echo "result:\n"; - echo "count = ", $result["count"], "\n"; - $tuples_list = $result["tuples_list"]; - sort($tuples_list); - for ($i = 0; $i < $result["count"]; $i++) { - echo "tuple[", $i, "]:", "\n"; - echo " id = ", $tuples_list[$i][0], "\n"; - echo " series = ", $tuples_list[$i][1], "\n"; - echo " year = ", $tuples_list[$i][2], "\n"; - echo " name = ", $tuples_list[$i][3], "\n"; - echo " crawl = ", $tuples_list[$i][4], "\n"; - echo " uuid = ", $tuples_list[$i][5], "\n"; - } - } catch (Exception $e) { - echo "catched exception: ", $e->getMessage(), "\n"; - } -} - -function test_insert($tarantool, $space_no, $tuple, $flags) { - try { - $result = $tarantool->insert($space_no, $tuple, $flags); - echo "result:\n"; - echo "count = ", $result["count"], "\n"; - if (array_key_exists("tuple", $result)) { - echo "tuple:", "\n"; - echo " id = ", $result["tuple"][0], "\n"; - echo " series = ", $result["tuple"][1], "\n"; - echo " year = ", $result["tuple"][2], "\n"; - echo " name = ", $result["tuple"][3], "\n"; - echo " crawl = ", $result["tuple"][4], "\n"; - echo " uuid = ", $result["tuple"][5], "\n"; - } - } catch (Exception $e) { - echo "catched exception: ", $e->getMessage(), "\n"; - } -} - -function test_update_fields($tarantool, $space_no, $key, $ops, $flags) { - try { - $result = $tarantool->update_fields($space_no, $key, $ops, $flags); - echo "result:\n"; - echo "count = ", $result["count"], "\n"; - if (array_key_exists("tuple", $result)) { - echo "tuple:", "\n"; - echo " id = ", $result["tuple"][0], "\n"; - echo " series = ", $result["tuple"][1], "\n"; - echo " year = ", $result["tuple"][2], "\n"; - echo " name = ", $result["tuple"][3], "\n"; - echo " crawl = ", $result["tuple"][4], "\n"; - echo " uuid = ", $result["tuple"][5], "\n"; - } - } catch (Exception $e) { - echo "catched exception: ", $e->getMessage(), "\n"; - } -} - -function test_delete($tarantool, $space_no, $key, $flags) { - try { - $result = $tarantool->delete($space_no, $key, $flags); - echo "result:\n"; - echo "count = ", $result["count"], "\n"; - if (array_key_exists("tuple", $result)) { - echo "tuple:", "\n"; - echo " id = ", $result["tuple"][0], "\n"; - echo " series = ", $result["tuple"][1], "\n"; - echo " year = ", $result["tuple"][2], "\n"; - echo " name = ", $result["tuple"][3], "\n"; - echo " crawl = ", $result["tuple"][4], "\n"; - echo " uuid = ", $result["tuple"][5], "\n"; - } - } catch (Exception $e) { - echo "catched exception: ", $e->getMessage(), "\n"; - } -} - -function test_call($tarantool, $proc, $tuple_args, $flags) { - try { - $result = $tarantool->call($proc, $tuple_args, $flags); - echo "result:\n"; - var_dump($result); - } catch (Exception $e) { - echo "catched exception: ", $e->getMessage(), "\n"; - } -} - -?> diff --git a/connector/php/test/run-test b/connector/php/test/run-test deleted file mode 120000 index 1993bbd700ce69abe07bca7b482359f16c41bfbd..0000000000000000000000000000000000000000 --- a/connector/php/test/run-test +++ /dev/null @@ -1 +0,0 @@ -bin/run-test.bash \ No newline at end of file diff --git a/connector/php/test/select.phpt b/connector/php/test/select.phpt deleted file mode 100644 index 668306928079dcc2c4e8d74383310405ebdb15af..0000000000000000000000000000000000000000 --- a/connector/php/test/select.phpt +++ /dev/null @@ -1,356 +0,0 @@ ---TEST-- -Tarantool/box select commands test ---FILE-- -<?php -include "lib/php/tarantool_utest.php"; - -$tarantool = new Tarantool("localhost", 33013, 33015); -test_init($tarantool, 0); - -echo "---------- test begin ----------\n"; -echo "test select: key is integer\n"; -test_select($tarantool, 0, 0, 0); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test select: key is string \n"; -test_select($tarantool, 0, 1, "Star Wars"); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test select: key is object (expected error exception)\n"; -test_select($tarantool, 0, 0, $tarantool); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test select: key is array\n"; -test_select($tarantool, 0, 1, array("Star Wars")); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test select: key is empty array (expected error exception)\n"; -test_select($tarantool, 0, 0, array()); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test select: key is array of objects (expected error exception)\n"; -test_select($tarantool, 0, 0, array($tarantool, 1, 2)); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test select: multi keys select\n"; -test_select($tarantool, 0, 0, array(array(0), array(1), array(2))); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test select: key is array of array of objects (expected error exception)\n"; -test_select($tarantool, 0, 0, array(array(1, $tarantool))); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test select: key is array of diffirent elements (expected error exception)\n"; -test_select($tarantool, 0, 0, array(array(1, 2), 2)); -echo "----------- test end -----------\n\n"; - -test_clean($tarantool, 0); -?> -===DONE=== ---EXPECT-- ----------- test begin ---------- -test select: key is integer -result: -count = 1 -tuple[0]: - id = 0 - series = Star Wars - year = 1977 - name = A New Hope - crawl = A long time ago, in a galaxy far, far away... -It is a period of civil war. Rebel -spaceships, striking from a hidden -base, have won their first victory -against the evil Galactic Empire. - -During the battle, Rebel spies managed -to steal secret plans to the Empire's -ultimate weapon, the Death Star, an -armored space station with enough -power to destroy an entire planet. - -Pursued by the Empire's sinister agents, -Princess Leia races home aboard her -starship, custodian of the stolen plans -that can save her people and restore -freedom to the galaxy.... - uuid = -1091633151 ------------ test end ----------- - ----------- test begin ---------- -test select: key is string -result: -count = 3 -tuple[0]: - id = 0 - series = Star Wars - year = 1977 - name = A New Hope - crawl = A long time ago, in a galaxy far, far away... -It is a period of civil war. Rebel -spaceships, striking from a hidden -base, have won their first victory -against the evil Galactic Empire. - -During the battle, Rebel spies managed -to steal secret plans to the Empire's -ultimate weapon, the Death Star, an -armored space station with enough -power to destroy an entire planet. - -Pursued by the Empire's sinister agents, -Princess Leia races home aboard her -starship, custodian of the stolen plans -that can save her people and restore -freedom to the galaxy.... - uuid = -1091633151 -tuple[1]: - id = 1 - series = Star Wars - year = 1980 - name = The Empire Strikes Back - crawl = It is a dark time for the -Rebellion. Although the Death -Star has been destroyed. -Imperial troops have driven the -Rebel forces from their hidden -base and pursued them across -the galaxy. - -Evading the dreaded Imperial -Starfleet, a group of freedom -fighters led by Luke Skywalker -have established a new secret base -on the remote ice world -of Hoth. - -The evil lord Darth Vader, -obsessed with finding young -Skywalker, has dispatched -thousands of remote probes -into the far reaches of space.... - uuid = -1091633150 -tuple[2]: - id = 2 - series = Star Wars - year = 1983 - name = Return of the Jedi - crawl = Luke Skywalker has returned -to his home planet of -Tatooine in an attempt -to rescue his friend -Han Solo from the -clutches of the vile -gangster Jabba the Hutt. - -Little does Luke know -that the GALACTIC EMPIRE -has secretly begun construction -on a new armored space station -even more powerful than the -first dreaded Death Star. - -When completed, this ultimate -weapon will spell certain -doom for the small band of -rebels struggling to restore -freedom to the galaxy... - uuid = -1091633149 ------------ test end ----------- - ----------- test begin ---------- -test select: key is object (expected error exception) -catched exception: unsupported tuple type ------------ test end ----------- - ----------- test begin ---------- -test select: key is array -result: -count = 3 -tuple[0]: - id = 0 - series = Star Wars - year = 1977 - name = A New Hope - crawl = A long time ago, in a galaxy far, far away... -It is a period of civil war. Rebel -spaceships, striking from a hidden -base, have won their first victory -against the evil Galactic Empire. - -During the battle, Rebel spies managed -to steal secret plans to the Empire's -ultimate weapon, the Death Star, an -armored space station with enough -power to destroy an entire planet. - -Pursued by the Empire's sinister agents, -Princess Leia races home aboard her -starship, custodian of the stolen plans -that can save her people and restore -freedom to the galaxy.... - uuid = -1091633151 -tuple[1]: - id = 1 - series = Star Wars - year = 1980 - name = The Empire Strikes Back - crawl = It is a dark time for the -Rebellion. Although the Death -Star has been destroyed. -Imperial troops have driven the -Rebel forces from their hidden -base and pursued them across -the galaxy. - -Evading the dreaded Imperial -Starfleet, a group of freedom -fighters led by Luke Skywalker -have established a new secret base -on the remote ice world -of Hoth. - -The evil lord Darth Vader, -obsessed with finding young -Skywalker, has dispatched -thousands of remote probes -into the far reaches of space.... - uuid = -1091633150 -tuple[2]: - id = 2 - series = Star Wars - year = 1983 - name = Return of the Jedi - crawl = Luke Skywalker has returned -to his home planet of -Tatooine in an attempt -to rescue his friend -Han Solo from the -clutches of the vile -gangster Jabba the Hutt. - -Little does Luke know -that the GALACTIC EMPIRE -has secretly begun construction -on a new armored space station -even more powerful than the -first dreaded Death Star. - -When completed, this ultimate -weapon will spell certain -doom for the small band of -rebels struggling to restore -freedom to the galaxy... - uuid = -1091633149 ------------ test end ----------- - ----------- test begin ---------- -test select: key is empty array (expected error exception) -catched exception: invalid tuples list: empty array ------------ test end ----------- - ----------- test begin ---------- -test select: key is array of objects (expected error exception) -catched exception: unsupported tuple type ------------ test end ----------- - ----------- test begin ---------- -test select: multi keys select -result: -count = 3 -tuple[0]: - id = 0 - series = Star Wars - year = 1977 - name = A New Hope - crawl = A long time ago, in a galaxy far, far away... -It is a period of civil war. Rebel -spaceships, striking from a hidden -base, have won their first victory -against the evil Galactic Empire. - -During the battle, Rebel spies managed -to steal secret plans to the Empire's -ultimate weapon, the Death Star, an -armored space station with enough -power to destroy an entire planet. - -Pursued by the Empire's sinister agents, -Princess Leia races home aboard her -starship, custodian of the stolen plans -that can save her people and restore -freedom to the galaxy.... - uuid = -1091633151 -tuple[1]: - id = 1 - series = Star Wars - year = 1980 - name = The Empire Strikes Back - crawl = It is a dark time for the -Rebellion. Although the Death -Star has been destroyed. -Imperial troops have driven the -Rebel forces from their hidden -base and pursued them across -the galaxy. - -Evading the dreaded Imperial -Starfleet, a group of freedom -fighters led by Luke Skywalker -have established a new secret base -on the remote ice world -of Hoth. - -The evil lord Darth Vader, -obsessed with finding young -Skywalker, has dispatched -thousands of remote probes -into the far reaches of space.... - uuid = -1091633150 -tuple[2]: - id = 2 - series = Star Wars - year = 1983 - name = Return of the Jedi - crawl = Luke Skywalker has returned -to his home planet of -Tatooine in an attempt -to rescue his friend -Han Solo from the -clutches of the vile -gangster Jabba the Hutt. - -Little does Luke know -that the GALACTIC EMPIRE -has secretly begun construction -on a new armored space station -even more powerful than the -first dreaded Death Star. - -When completed, this ultimate -weapon will spell certain -doom for the small band of -rebels struggling to restore -freedom to the galaxy... - uuid = -1091633149 ------------ test end ----------- - ----------- test begin ---------- -test select: key is array of array of objects (expected error exception) -catched exception: unsupported field type ------------ test end ----------- - ----------- test begin ---------- -test select: key is array of diffirent elements (expected error exception) -catched exception: invalid tuples list: expected array of array ------------ test end ----------- - -===DONE=== \ No newline at end of file diff --git a/connector/php/test/update_fields.phpt b/connector/php/test/update_fields.phpt deleted file mode 100644 index 91287232df5c4c6010c5c08c4c505363000f5f05..0000000000000000000000000000000000000000 --- a/connector/php/test/update_fields.phpt +++ /dev/null @@ -1,115 +0,0 @@ ---TEST-- -Tarantool/box update fields commands test ---FILE-- -<?php -include "lib/php/tarantool_utest.php"; - -$tarantool = new Tarantool("localhost", 33013, 33015); -test_init($tarantool, 0); - -echo "---------- test begin ----------\n"; -echo "test update fields: do update w/o operations (expected error exception)\n"; -test_update_fields($tarantool, 0, 0, array(), TARANTOOL_FLAGS_RETURN_TUPLE); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test update fields: invalid operation list (expected error exception)\n"; -test_update_fields($tarantool, 0, 0, array($tarantool), TARANTOOL_FLAGS_RETURN_TUPLE); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test update fields: do update arith operation\n"; -test_update_fields($tarantool, 0, 0, - array( - array( - "field" => 2, - "op" => TARANTOOL_OP_ADD, - "arg" => 30, - ), - array( - "field" => 0, - "op" => TARANTOOL_OP_ASSIGN, - "arg" => 5, - ), - array( - "field" => 1, - "op" => TARANTOOL_OP_ASSIGN, - "arg" => "", - ), - array( - "field" => 3, - "op" => TARANTOOL_OP_ASSIGN, - "arg" => "return", - ), - array( - "field" => 4, - "op" => TARANTOOL_OP_SPLICE, - "offset" => 1, - "length" => 64, - "list" => " <<splice string>> ", - ), - ), TARANTOOL_FLAGS_RETURN_TUPLE); -echo "----------- test end -----------\n\n"; - -echo "---------- test begin ----------\n"; -echo "test update fields: delete not existing tuple w/ return tuple flag\n"; -test_update_fields($tarantool, 0, 0, - array( - array( - "field" => 2, - "op" => TARANTOOL_OP_ADD, - "arg" => 30, - ), - ), - TARANTOOL_FLAGS_RETURN_TUPLE); -echo "----------- test end -----------\n\n"; - -test_clean($tarantool, 0); -?> -===DONE=== ---EXPECT-- ----------- test begin ---------- -test update fields: do update w/o operations (expected error exception) -catched exception: update fields failed: 514(0x00000202): Illegal parameters, no operations for update ------------ test end ----------- - ----------- test begin ---------- -test update fields: invalid operation list (expected error exception) -catched exception: invalid operations list ------------ test end ----------- - ----------- test begin ---------- -test update fields: do update arith operation -result: -count = 1 -tuple: - id = 5 - series = - year = 2007 - name = return - crawl = A <<splice string>> ivil war. Rebel -spaceships, striking from a hidden -base, have won their first victory -against the evil Galactic Empire. - -During the battle, Rebel spies managed -to steal secret plans to the Empire's -ultimate weapon, the Death Star, an -armored space station with enough -power to destroy an entire planet. - -Pursued by the Empire's sinister agents, -Princess Leia races home aboard her -starship, custodian of the stolen plans -that can save her people and restore -freedom to the galaxy.... - uuid = -1091633151 ------------ test end ----------- - ----------- test begin ---------- -test update fields: delete not existing tuple w/ return tuple flag -result: -count = 0 ------------ test end ----------- - -===DONE=== \ No newline at end of file