Linux ip-172-26-2-223 5.4.0-1018-aws #18-Ubuntu SMP Wed Jun 24 01:15:00 UTC 2020 x86_64
Apache
: 172.26.2.223 | : 18.118.210.110
Cant Read [ /etc/named.conf ]
8.1.13
www
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
www /
server /
php /
80 /
src /
ext /
oci8 /
[ HOME SHELL ]
Name
Size
Permission
Action
tests
[ DIR ]
drwxr-xr-x
CREDITS
173
B
-rw-r--r--
LICENSE
3.13
KB
-rw-r--r--
README.md
986
B
-rw-r--r--
config.m4
15.67
KB
-rw-r--r--
config.w32
5.48
KB
-rw-r--r--
oci8.c
89.69
KB
-rw-r--r--
oci8.stub.php
17.39
KB
-rw-r--r--
oci8_arginfo.h
32.06
KB
-rw-r--r--
oci8_collection.c
23.25
KB
-rw-r--r--
oci8_dtrace.d
2.28
KB
-rw-r--r--
oci8_failover.c
4.79
KB
-rw-r--r--
oci8_interface.c
60.15
KB
-rw-r--r--
oci8_lob.c
26.92
KB
-rw-r--r--
oci8_statement.c
58.74
KB
-rw-r--r--
package.xml
46.76
KB
-rw-r--r--
php_oci8.h
2.47
KB
-rw-r--r--
php_oci8_int.h
24.47
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : oci8_interface.c
/* +----------------------------------------------------------------------+ | Copyright (c) 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. | +----------------------------------------------------------------------+ | Authors: Stig Sæther Bakken <ssb@php.net> | | Thies C. Arntzen <thies@thieso.net> | | | | Collection support by Andy Sautins <asautins@veripost.net> | | Temporary LOB support by David Benson <dbenson@mancala.com> | | ZTS per process OCIPLogon by Harald Radi <harald.radi@nme.at> | | | | Redesigned by: Antony Dovgal <antony@zend.com> | | Andi Gutmans <andi@php.net> | | Wez Furlong <wez@omniti.com> | +----------------------------------------------------------------------+ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "ext/standard/info.h" #include "php_ini.h" #ifdef HAVE_OCI8 #include "php_oci8.h" #include "php_oci8_int.h" #ifndef OCI_STMT_CALL #define OCI_STMT_CALL 10 #endif #define ERROR_ARG_POS(arg_num) (getThis() ? (arg_num-1) : (arg_num)) /* {{{ Register a callback function for Oracle Transparent Application Failover (TAF) */ PHP_FUNCTION(oci_register_taf_callback) { zval *z_connection; php_oci_connection *connection; zend_fcall_info fci; zend_fcall_info_cache fcc; zval *callback = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|f!", &z_connection, &fci, &fcc) == FAILURE) { RETURN_THROWS(); } PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); /* If callable passed, assign callback zval so that it can be passed to php_oci_register_taf_callback() */ if (ZEND_FCI_INITIALIZED(fci)) { callback = &fci.function_name; } if (php_oci_register_taf_callback(connection, callback) == 0) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ Unregister a callback function for Oracle Transparent Application Failover (TAF) */ PHP_FUNCTION(oci_unregister_taf_callback) { zval *z_connection; php_oci_connection *connection; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_connection) == FAILURE) { RETURN_THROWS(); } PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); if (php_oci_unregister_taf_callback(connection) == 0) { RETURN_TRUE; } else { RETURN_FALSE; } } /* }}} */ /* {{{ Define a PHP variable to an Oracle column by name */ /* if you want to define a LOB/CLOB etc make sure you allocate it via OCINewDescriptor BEFORE defining!!! */ PHP_FUNCTION(oci_define_by_name) { zval *stmt, *var; char *name; size_t name_len; zend_long type = 0; php_oci_statement *statement; php_oci_define *define; zend_string *zvtmp; ZEND_PARSE_PARAMETERS_START(3, 4) Z_PARAM_RESOURCE(stmt) Z_PARAM_STRING(name, name_len) Z_PARAM_ZVAL(var) Z_PARAM_OPTIONAL Z_PARAM_LONG(type) ZEND_PARSE_PARAMETERS_END(); if (!name_len) { zend_argument_value_error(2, "cannot be empty"); RETURN_THROWS(); } PHP_OCI_ZVAL_TO_STATEMENT(stmt, statement); if (statement->defines == NULL) { ALLOC_HASHTABLE(statement->defines); zend_hash_init(statement->defines, 13, NULL, php_oci_define_hash_dtor, 0); } else if (zend_hash_str_exists(statement->defines, (const char *)name, name_len)) { RETURN_FALSE; } define = ecalloc(1,sizeof(php_oci_define)); /* if (zend_hash_add(statement->defines, name, name_len, define, sizeof(php_oci_define), (void **)&tmp_define) == SUCCESS) { */ zvtmp = zend_string_init(name, name_len, 0); if ((define = zend_hash_add_new_ptr(statement->defines, zvtmp, define)) != NULL) { zend_string_release_ex(zvtmp, 0); } else { efree(define); zend_string_release_ex(zvtmp, 0); RETURN_FALSE; } define->name = (text*) ecalloc(1, name_len+1); memcpy(define->name, name, name_len); define->name[name_len] = '\0'; define->name_len = (ub4) name_len; define->type = (ub4) type; ZEND_ASSERT(Z_ISREF_P(var)); ZVAL_COPY(&define->val, var); RETURN_TRUE; } /* }}} */ /* {{{ Bind a PHP variable to an Oracle placeholder by name */ /* if you want to bind a LOB/CLOB etc make sure you allocate it via OCINewDescriptor BEFORE binding!!! */ PHP_FUNCTION(oci_bind_by_name) { ub2 bind_type = SQLT_CHR; /* unterminated string */ size_t name_len; zend_long maxlen = -1, type = 0; char *name; zval *z_statement; zval *bind_var = NULL; php_oci_statement *statement; ZEND_PARSE_PARAMETERS_START(3, 5) Z_PARAM_RESOURCE(z_statement) Z_PARAM_STRING(name, name_len) Z_PARAM_ZVAL(bind_var) Z_PARAM_OPTIONAL Z_PARAM_LONG(maxlen) Z_PARAM_LONG(type) ZEND_PARSE_PARAMETERS_END(); if (type) { bind_type = (ub2) type; } PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); if (php_oci_bind_by_name(statement, name, name_len, bind_var, maxlen, bind_type)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Bind a PHP array to an Oracle PL/SQL type by name */ PHP_FUNCTION(oci_bind_array_by_name) { size_t name_len; zend_long max_item_len = -1; zend_long max_array_len = 0; zend_long type = SQLT_AFC; char *name; zval *z_statement; zval *bind_var = NULL; php_oci_statement *statement; ZEND_PARSE_PARAMETERS_START(4, 6) Z_PARAM_RESOURCE(z_statement) Z_PARAM_STRING(name, name_len) Z_PARAM_ZVAL(bind_var) Z_PARAM_LONG(max_array_len) Z_PARAM_OPTIONAL Z_PARAM_LONG(max_item_len) Z_PARAM_LONG(type) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); if (ZEND_NUM_ARGS() == 5 && max_item_len <= 0) { max_item_len = -1; } if (max_array_len <= 0) { zend_argument_value_error(4, "must be greater than 0"); RETURN_THROWS(); } if (php_oci_bind_array_by_name(statement, name, (sb4) name_len, bind_var, max_array_len, max_item_len, type)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Deletes large object description */ PHP_FUNCTION(oci_free_descriptor) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_descriptor, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); zend_list_close(descriptor->id); RETURN_TRUE; } /* }}} */ /* {{{ Saves a large object */ PHP_FUNCTION(oci_lob_save) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; char *data; size_t data_len; zend_long offset = 0; ub4 bytes_written; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|l", &z_descriptor, oci_lob_class_entry_ptr, &data, &data_len, &offset) == FAILURE) { RETURN_THROWS(); } if (offset < 0) { zend_argument_value_error(ERROR_ARG_POS(3), "must be greater than or equal to 0"); RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_write(descriptor, (ub4) offset, data, (ub4) data_len, &bytes_written)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Loads file into a LOB */ PHP_FUNCTION(oci_lob_import) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; char *filename; size_t filename_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Op", &z_descriptor, oci_lob_class_entry_ptr, &filename, &filename_len) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_import(descriptor, filename)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Loads a large object */ PHP_FUNCTION(oci_lob_load) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; char *buffer = NULL; ub4 buffer_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_descriptor, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_read(descriptor, -1, 0, &buffer, &buffer_len)) { RETURN_FALSE; } if (buffer_len > 0) { zend_string *ret = zend_string_init(buffer, buffer_len, 0); if (buffer) efree(buffer); RETURN_STR(ret); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* {{{ Reads particular part of a large object */ PHP_FUNCTION(oci_lob_read) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; zend_long length; char *buffer; ub4 buffer_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &z_descriptor, oci_lob_class_entry_ptr, &length) == FAILURE) { RETURN_THROWS(); } if (length <= 0) { zend_argument_value_error(ERROR_ARG_POS(2), "must be greater than 0"); RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_read(descriptor, length, descriptor->lob_current_position, &buffer, &buffer_len)) { RETURN_FALSE; } if (buffer_len > 0) { zend_string *ret = zend_string_init(buffer, buffer_len, 0); efree(buffer); RETURN_STR(ret); } else { RETURN_EMPTY_STRING(); } } /* }}} */ /* {{{ Checks if EOF is reached */ PHP_FUNCTION(oci_lob_eof) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; ub4 lob_length; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_descriptor, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (!php_oci_lob_get_length(descriptor, &lob_length)) { if (lob_length == descriptor->lob_current_position) { RETURN_TRUE; } } RETURN_FALSE; } /* }}} */ /* {{{ Tells LOB pointer position */ PHP_FUNCTION(oci_lob_tell) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_descriptor, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); RETURN_LONG(descriptor->lob_current_position); } /* }}} */ /* {{{ Rewind pointer of a LOB */ PHP_FUNCTION(oci_lob_rewind) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_descriptor, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); descriptor->lob_current_position = 0; RETURN_TRUE; } /* }}} */ /* {{{ Moves the pointer of a LOB */ PHP_FUNCTION(oci_lob_seek) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; zend_long offset, whence = PHP_OCI_SEEK_SET; ub4 lob_length; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol|l", &z_descriptor, oci_lob_class_entry_ptr, &offset, &whence) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_get_length(descriptor, &lob_length)) { RETURN_FALSE; } switch(whence) { case PHP_OCI_SEEK_CUR: descriptor->lob_current_position += (ub4) offset; break; case PHP_OCI_SEEK_END: if ((descriptor->lob_size + offset) >= 0) { descriptor->lob_current_position = descriptor->lob_size + (ub4) offset; } else { descriptor->lob_current_position = 0; } break; case PHP_OCI_SEEK_SET: default: descriptor->lob_current_position = (offset > 0) ? (ub4) offset : 0; break; } if (descriptor->lob_current_position > UB4MAXVAL) { php_error_docref(NULL, E_WARNING, "Invalid offset or LOB position"); RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Returns size of a large object */ PHP_FUNCTION(oci_lob_size) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; ub4 lob_length; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_descriptor, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_get_length(descriptor, &lob_length)) { RETURN_FALSE; } RETURN_LONG(lob_length); } /* }}} */ /* {{{ Writes data to current position of a LOB */ PHP_FUNCTION(oci_lob_write) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; size_t data_len; zend_long write_len; zend_bool write_len_is_null = 1; ub4 bytes_written; char *data; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|l!", &z_descriptor, oci_lob_class_entry_ptr, &data, &data_len, &write_len, &write_len_is_null) == FAILURE) { RETURN_THROWS(); } if (!write_len_is_null) { data_len = MIN((zend_long) data_len, write_len); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (data_len <= 0) { RETURN_LONG(0); } if (php_oci_lob_write(descriptor, descriptor->lob_current_position, data, (ub4) data_len, &bytes_written)) { RETURN_FALSE; } RETURN_LONG(bytes_written); } /* }}} */ /* {{{ Appends data from a LOB to another LOB */ PHP_FUNCTION(oci_lob_append) { zval *tmp_dest, *tmp_from, *z_descriptor_dest, *z_descriptor_from; php_oci_descriptor *descriptor_dest, *descriptor_from; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "OO", &z_descriptor_dest, oci_lob_class_entry_ptr, &z_descriptor_from, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_dest), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object"); RETURN_FALSE; } if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_from), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_dest, descriptor_dest); PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_from, descriptor_from); if (php_oci_lob_append(descriptor_dest, descriptor_from)) { RETURN_FALSE; } /* XXX should we increase lob_size here ? */ RETURN_TRUE; } /* }}} */ /* {{{ Truncates a LOB */ PHP_FUNCTION(oci_lob_truncate) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; zend_long trim_length = 0; ub4 ub_trim_length; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|l", &z_descriptor, oci_lob_class_entry_ptr, &trim_length) == FAILURE) { RETURN_THROWS(); } if (trim_length < 0) { zend_argument_value_error(ERROR_ARG_POS(2), "must be greater than or equal to 0"); RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } ub_trim_length = (ub4) trim_length; PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_truncate(descriptor, ub_trim_length)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Erases a specified portion of the internal LOB, starting at a specified offset */ PHP_FUNCTION(oci_lob_erase) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; ub4 bytes_erased; zend_long offset, length; zend_bool offset_is_null = 1, length_is_null = 1; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|l!l!", &z_descriptor, oci_lob_class_entry_ptr, &offset, &offset_is_null, &length, &length_is_null) == FAILURE) { RETURN_THROWS(); } if (offset_is_null) { offset = -1; } else if (offset < 0) { zend_argument_value_error(ERROR_ARG_POS(2), "must be greater than or equal to 0"); RETURN_THROWS(); } if (length_is_null) { length = -1; } else if (length < 0) { zend_argument_value_error(ERROR_ARG_POS(3), "must be greater than or equal to 0"); RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_erase(descriptor, offset, (ub4) length, &bytes_erased)) { RETURN_FALSE; } RETURN_LONG(bytes_erased); } /* }}} */ /* {{{ Flushes the LOB buffer */ PHP_FUNCTION(oci_lob_flush) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; zend_long flush_flag = 0; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|l", &z_descriptor, oci_lob_class_entry_ptr, &flush_flag) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (descriptor->buffering == PHP_OCI_LOB_BUFFER_DISABLED) { /* buffering wasn't enabled, there is nothing to flush */ RETURN_FALSE; } if (php_oci_lob_flush(descriptor, flush_flag)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Enables/disables buffering for a LOB */ PHP_FUNCTION(ocisetbufferinglob) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; zend_bool flag; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ob", &z_descriptor, oci_lob_class_entry_ptr, &flag) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_set_buffering(descriptor, flag)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Returns current state of buffering for a LOB */ PHP_FUNCTION(ocigetbufferinglob) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_descriptor, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (descriptor->buffering != PHP_OCI_LOB_BUFFER_DISABLED) { RETURN_TRUE; } RETURN_FALSE; } /* }}} */ /* {{{ Copies data from a LOB to another LOB */ PHP_FUNCTION(oci_lob_copy) { zval *tmp_dest, *tmp_from, *z_descriptor_dest, *z_descriptor_from; php_oci_descriptor *descriptor_dest, *descriptor_from; zend_long length; zend_bool length_is_null = 1; if (zend_parse_parameters(ZEND_NUM_ARGS(), "OO|l!", &z_descriptor_dest, oci_lob_class_entry_ptr, &z_descriptor_from, oci_lob_class_entry_ptr, &length, &length_is_null) == FAILURE) { RETURN_THROWS(); } if (length_is_null) { length = -1; } else if (length < 0) { zend_argument_value_error(3, "must be greater than or equal to 0"); RETURN_THROWS(); } if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_dest), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object"); RETURN_FALSE; } if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_from), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_dest, descriptor_dest); PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_from, descriptor_from); if (php_oci_lob_copy(descriptor_dest, descriptor_from, length)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Tests to see if two LOB/FILE locators are equal */ PHP_FUNCTION(oci_lob_is_equal) { zval *tmp_first, *tmp_second, *z_descriptor_first, *z_descriptor_second; php_oci_descriptor *descriptor_first, *descriptor_second; boolean is_equal; if (zend_parse_parameters(ZEND_NUM_ARGS(), "OO", &z_descriptor_first, oci_lob_class_entry_ptr, &z_descriptor_second, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp_first = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_first), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object"); RETURN_FALSE; } if ((tmp_second = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_second), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_first, descriptor_first); PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_second, descriptor_second); if (php_oci_lob_is_equal(descriptor_first, descriptor_second, &is_equal)) { RETURN_FALSE; } if (is_equal == TRUE) { RETURN_TRUE; } RETURN_FALSE; } /* }}} */ /* {{{ Writes a large object into a file */ PHP_FUNCTION(oci_lob_export) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; char *filename; char *buffer; size_t filename_len; zend_long start, length, block_length; zend_bool start_is_null = 1, length_is_null = 1; php_stream *stream; ub4 lob_length; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Op|l!l!", &z_descriptor, oci_lob_class_entry_ptr, &filename, &filename_len, &start, &start_is_null, &length, &length_is_null) == FAILURE) { RETURN_THROWS(); } if (start_is_null) { start = -1; } else if (start < 0) { zend_argument_value_error(ERROR_ARG_POS(3), "must be greater than or equal to 0"); RETURN_THROWS(); } if (length_is_null) { length = -1; } else if (length < 0) { zend_argument_value_error(ERROR_ARG_POS(4), "must be greater than or equal to 0"); RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_get_length(descriptor, &lob_length)) { RETURN_FALSE; } if (start == -1) { start = 0; } if (length == -1) { length = lob_length - descriptor->lob_current_position; } if (lob_length == 0) { length = 0; } if (length == 0) { /* nothing to write, fail silently */ RETURN_FALSE; } if (php_check_open_basedir(filename)) { RETURN_FALSE; } stream = php_stream_open_wrapper_ex(filename, "w", REPORT_ERRORS, NULL, NULL); block_length = PHP_OCI_LOB_BUFFER_SIZE; if (block_length > length) { block_length = length; } while(length > 0) { ub4 tmp_bytes_read = 0; if (php_oci_lob_read(descriptor, block_length, start, &buffer, &tmp_bytes_read)) { php_stream_close(stream); RETURN_FALSE; } if (tmp_bytes_read && !php_stream_write(stream, buffer, tmp_bytes_read)) { php_stream_close(stream); if (buffer) efree(buffer); RETURN_FALSE; } if (buffer) { efree(buffer); } length -= tmp_bytes_read; descriptor->lob_current_position += tmp_bytes_read; start += tmp_bytes_read; if (block_length > length) { block_length = length; } } php_stream_close(stream); RETURN_TRUE; } /* }}} */ /* {{{ Writes temporary blob */ PHP_METHOD(OCILob, writeTemporary) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; char *data; size_t data_len; zend_long type = OCI_TEMP_CLOB; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os|l", &z_descriptor, oci_lob_class_entry_ptr, &data, &data_len, &type) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_write_tmp(descriptor, type, data, (int) data_len)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Closes lob descriptor */ PHP_METHOD(OCILob, close) { zval *tmp, *z_descriptor; php_oci_descriptor *descriptor; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_descriptor, oci_lob_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find descriptor property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor); if (php_oci_lob_close(descriptor)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Initialize a new empty descriptor LOB/FILE (LOB is default) */ PHP_FUNCTION(oci_new_descriptor) { zval *z_connection; php_oci_connection *connection; php_oci_descriptor *descriptor; zend_long type = OCI_DTYPE_LOB; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|l", &z_connection, &type) == FAILURE) { RETURN_THROWS(); } PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); /* php_oci_lob_create() checks type */ descriptor = php_oci_lob_create(connection, type); if (!descriptor) { RETURN_NULL(); } object_init_ex(return_value, oci_lob_class_entry_ptr); add_property_resource(return_value, "descriptor", descriptor->id); } /* }}} */ /* {{{ Rollback the current context */ PHP_FUNCTION(oci_rollback) { zval *z_connection; php_oci_connection *connection; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_connection) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); if (connection->descriptors) { php_oci_connection_descriptors_free(connection); } if (php_oci_connection_rollback(connection)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Commit the current context */ PHP_FUNCTION(oci_commit) { zval *z_connection; php_oci_connection *connection; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_connection) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); if (connection->descriptors) { php_oci_connection_descriptors_free(connection); } if (php_oci_connection_commit(connection)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Tell the name of a column */ PHP_FUNCTION(oci_field_name) { php_oci_out_column *column; if ( ( column = php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) ) ) { RETURN_STRINGL(column->name, column->name_len); } RETURN_FALSE; } /* }}} */ /* {{{ Tell the maximum data size of a column */ PHP_FUNCTION(oci_field_size) { php_oci_out_column *column; if ( ( column = php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) ) ) { /* Handle data type of LONG */ if (column->data_type == SQLT_LNG){ RETURN_LONG(column->storage_size4); } RETURN_LONG(column->data_size); } RETURN_FALSE; } /* }}} */ /* {{{ Tell the scale of a column */ PHP_FUNCTION(oci_field_scale) { php_oci_out_column *column; if ( ( column = php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) ) ) { RETURN_LONG(column->scale); } RETURN_FALSE; } /* }}} */ /* {{{ Tell the precision of a column */ PHP_FUNCTION(oci_field_precision) { php_oci_out_column *column; if ( ( column = php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) ) ) { RETURN_LONG(column->precision); } RETURN_FALSE; } /* }}} */ /* {{{ Tell the data type of a column */ PHP_FUNCTION(oci_field_type) { php_oci_out_column *column; column = php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); if (!column) { RETURN_FALSE; } switch (column->data_type) { #ifdef SQLT_TIMESTAMP case SQLT_TIMESTAMP: RETVAL_STRING("TIMESTAMP"); break; #endif #ifdef SQLT_TIMESTAMP_TZ case SQLT_TIMESTAMP_TZ: RETVAL_STRING("TIMESTAMP WITH TIMEZONE"); break; #endif #ifdef SQLT_TIMESTAMP_LTZ case SQLT_TIMESTAMP_LTZ: RETVAL_STRING("TIMESTAMP WITH LOCAL TIMEZONE"); break; #endif #ifdef SQLT_INTERVAL_YM case SQLT_INTERVAL_YM: RETVAL_STRING("INTERVAL YEAR TO MONTH"); break; #endif #ifdef SQLT_INTERVAL_DS case SQLT_INTERVAL_DS: RETVAL_STRING("INTERVAL DAY TO SECOND"); break; #endif case SQLT_DAT: RETVAL_STRING("DATE"); break; case SQLT_NUM: RETVAL_STRING("NUMBER"); break; case SQLT_LNG: RETVAL_STRING("LONG"); break; case SQLT_BIN: RETVAL_STRING("RAW"); break; case SQLT_LBI: RETVAL_STRING("LONG RAW"); break; case SQLT_CHR: RETVAL_STRING("VARCHAR2"); break; case SQLT_RSET: RETVAL_STRING("REFCURSOR"); break; case SQLT_AFC: RETVAL_STRING("CHAR"); break; case SQLT_BLOB: RETVAL_STRING("BLOB"); break; case SQLT_CLOB: RETVAL_STRING("CLOB"); break; case SQLT_BFILE: RETVAL_STRING("BFILE"); break; case SQLT_RDD: RETVAL_STRING("ROWID"); break; default: RETVAL_LONG(column->data_type); } } /* }}} */ /* {{{ Tell the raw oracle data type of a column */ PHP_FUNCTION(oci_field_type_raw) { php_oci_out_column *column; column = php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); if (column) { RETURN_LONG(column->data_type); } RETURN_FALSE; } /* }}} */ /* {{{ Tell whether a field in the current row is NULL */ PHP_FUNCTION(oci_field_is_null) { php_oci_out_column *column; if ( ( column = php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0) ) ) { if (column->indicator == -1) { RETURN_TRUE; } } RETURN_FALSE; } /* }}} */ /* {{{ Execute a parsed statement */ PHP_FUNCTION(oci_execute) { zval *z_statement; php_oci_statement *statement; zend_long mode = OCI_COMMIT_ON_SUCCESS; ZEND_PARSE_PARAMETERS_START(1, 2) Z_PARAM_RESOURCE(z_statement) Z_PARAM_OPTIONAL Z_PARAM_LONG(mode) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); if (php_oci_statement_execute(statement, (ub4) mode)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Cancel reading from a cursor */ PHP_FUNCTION(oci_cancel) { zval *z_statement; php_oci_statement *statement; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &z_statement) == FAILURE) { RETURN_THROWS(); } PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); if (php_oci_statement_cancel(statement)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Prepare a new row of data for reading */ PHP_FUNCTION(oci_fetch) { zval *z_statement; php_oci_statement *statement; ub4 nrows = 1; /* only one row at a time is supported for now */ ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_statement) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); if (php_oci_statement_fetch(statement, nrows)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Fetch a row of result data into an array */ PHP_FUNCTION(ocifetchinto) { php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_OCI_NUM, 3); } /* }}} */ /* {{{ Fetch all rows of result data into an array */ PHP_FUNCTION(oci_fetch_all) { zval *z_statement, *array; zval element, tmp; php_oci_statement *statement; php_oci_out_column **columns; zval **outarrs; ub4 nrows = 1; int i; zend_long rows = 0, flags = PHP_OCI_FETCHSTATEMENT_BY_COLUMN, skip = 0, maxrows = -1; ZEND_PARSE_PARAMETERS_START(2, 5) Z_PARAM_RESOURCE(z_statement) Z_PARAM_ZVAL(array) Z_PARAM_OPTIONAL Z_PARAM_LONG(skip) Z_PARAM_LONG(maxrows) Z_PARAM_LONG(flags) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); while (skip--) { if (php_oci_statement_fetch(statement, nrows)) { zend_try_array_init(array); RETURN_LONG(0); } } if (flags & PHP_OCI_FETCHSTATEMENT_BY_ROW) { /* Fetch by Row: array will contain one sub-array per query row */ array = zend_try_array_init(array); if (!array) { RETURN_THROWS(); } columns = safe_emalloc(statement->ncolumns, sizeof(php_oci_out_column *), 0); for (i = 0; i < statement->ncolumns; i++) { columns[ i ] = php_oci_statement_get_column(statement, i + 1, NULL, 0); } while (!php_oci_statement_fetch(statement, nrows)) { zval row; array_init_size(&row, statement->ncolumns); for (i = 0; i < statement->ncolumns; i++) { php_oci_column_to_zval(columns[ i ], &element, PHP_OCI_RETURN_LOBS); if (flags & PHP_OCI_NUM) { zend_hash_next_index_insert(Z_ARRVAL(row), &element); } else { /* default to ASSOC */ zend_string *zvtmp; zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0); zend_symtable_update(Z_ARRVAL(row), zvtmp, &element); zend_string_release_ex(zvtmp, 0); } } zend_hash_next_index_insert(Z_ARRVAL_P(array), &row); rows++; if (maxrows != -1 && rows == maxrows) { php_oci_statement_cancel(statement); break; } } efree(columns); } else { /* default to BY_COLUMN */ /* Fetch by columns: array will contain one sub-array per query column */ array = zend_try_array_init_size(array, statement->ncolumns); if (!array) { RETURN_THROWS(); } columns = safe_emalloc(statement->ncolumns, sizeof(php_oci_out_column *), 0); outarrs = safe_emalloc(statement->ncolumns, sizeof(zval*), 0); if (flags & PHP_OCI_NUM) { for (i = 0; i < statement->ncolumns; i++) { columns[ i ] = php_oci_statement_get_column(statement, i + 1, NULL, 0); array_init(&tmp); outarrs[ i ] = zend_hash_next_index_insert(Z_ARRVAL_P(array), &tmp); } } else { /* default to ASSOC */ for (i = 0; i < statement->ncolumns; i++) { zend_string *zvtmp; columns[ i ] = php_oci_statement_get_column(statement, i + 1, NULL, 0); array_init(&tmp); zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0); outarrs[ i ] = zend_symtable_update(Z_ARRVAL_P(array), zvtmp, &tmp); zend_string_release_ex(zvtmp, 0); } } while (!php_oci_statement_fetch(statement, nrows)) { for (i = 0; i < statement->ncolumns; i++) { php_oci_column_to_zval(columns[ i ], &element, PHP_OCI_RETURN_LOBS); zend_hash_index_update(Z_ARRVAL_P(outarrs[ i ]), rows, &element); } rows++; if (maxrows != -1 && rows == maxrows) { php_oci_statement_cancel(statement); break; } } efree(columns); efree(outarrs); } RETURN_LONG(rows); } /* }}} */ /* {{{ Fetch a result row as an object */ PHP_FUNCTION(oci_fetch_object) { php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_OCI_ASSOC | PHP_OCI_RETURN_NULLS, 2); if (Z_TYPE_P(return_value) == IS_ARRAY) { object_and_properties_init(return_value, ZEND_STANDARD_CLASS_DEF_PTR, Z_ARRVAL_P(return_value)); } } /* }}} */ /* {{{ Fetch a result row as an enumerated array */ PHP_FUNCTION(oci_fetch_row) { php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_OCI_NUM | PHP_OCI_RETURN_NULLS, 1); } /* }}} */ /* {{{ Fetch a result row as an associative array */ PHP_FUNCTION(oci_fetch_assoc) { php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_OCI_ASSOC | PHP_OCI_RETURN_NULLS, 1); } /* }}} */ /* {{{ Fetch a result row as an array */ PHP_FUNCTION(oci_fetch_array) { php_oci_fetch_row(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_OCI_BOTH | PHP_OCI_RETURN_NULLS, 2); } /* }}} */ /* {{{ Free all resources associated with a statement */ PHP_FUNCTION(oci_free_statement) { zval *z_statement; php_oci_statement *statement; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_statement) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); zend_list_close(statement->id); RETURN_TRUE; } /* }}} */ /* {{{ Disconnect from database */ PHP_FUNCTION(oci_close) { /* oci_close for pconnect (if old_oci_close_semantics not set) would * release the connection back to the client-side session pool (and to the * server-side pool if Database Resident Connection Pool is being used). * Subsequent pconnects in the same script are not guaranteed to get the * same database session. */ zval *z_connection; php_oci_connection *connection; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_connection) ZEND_PARSE_PARAMETERS_END(); if (OCI_G(old_oci_close_semantics)) { /* do nothing to keep BC */ RETURN_NULL(); } PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); if (GC_REFCOUNT(connection->id) == 2) { /* CHANGED VERSION::PHP7 Changed the refCount to 2 since internally Zend engine increments RefCount value by 1 */ /* Unregister Oracle TAF */ php_oci_unregister_taf_callback(connection); zend_list_close(connection->id); } /* ZVAL_NULL(z_connection); */ RETURN_TRUE; } /* }}} */ /* {{{ Connect to an Oracle database and log on. Returns a new session. */ PHP_FUNCTION(oci_new_connect) { php_oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 1); } /* }}} */ /* {{{ Connect to an Oracle database and log on. Returns a new session. */ PHP_FUNCTION(oci_connect) { php_oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 0); } /* }}} */ /* {{{ Connect to an Oracle database using a persistent connection and log on. Returns a new session. */ PHP_FUNCTION(oci_pconnect) { php_oci_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1, 0); } /* }}} */ /* {{{ Return the last error of stmt|connection|global. If no error happened returns false. */ PHP_FUNCTION(oci_error) { zval *arg = NULL; php_oci_statement *statement; php_oci_connection *connection; text errbuf[PHP_OCI_ERRBUF_LEN]; sb4 errcode = 0; dvoid *errh = NULL; ub2 error_offset = 0; text *sqltext = NULL; ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL Z_PARAM_RESOURCE_OR_NULL(arg) ZEND_PARSE_PARAMETERS_END(); if (arg) { statement = (php_oci_statement *) zend_fetch_resource_ex(arg, NULL, le_statement); if (statement) { errh = statement->err; errcode = statement->errcode; if (php_oci_fetch_sqltext_offset(statement, &sqltext, &error_offset)) { RETURN_FALSE; } goto go_out; } connection = (php_oci_connection *) zend_fetch_resource_ex(arg, NULL, le_connection); if (connection) { errh = connection->err; errcode = connection->errcode; goto go_out; } connection = (php_oci_connection *) zend_fetch_resource_ex(arg, NULL, le_pconnection); if (connection) { errh = connection->err; errcode = connection->errcode; goto go_out; } } else { errh = OCI_G(err); errcode = OCI_G(errcode); } go_out: if (errcode == 0) { /* no error set in the handle */ RETURN_FALSE; } if (!errh) { php_error_docref(NULL, E_WARNING, "oci_error: unable to find error handle"); RETURN_FALSE; } errcode = php_oci_fetch_errmsg(errh, errbuf, sizeof(errbuf)); if (errcode) { array_init(return_value); add_assoc_long(return_value, "code", errcode); /* TODO: avoid reallocation ??? */ add_assoc_string(return_value, "message", (char*) errbuf); add_assoc_long(return_value, "offset", error_offset); add_assoc_string(return_value, "sqltext", sqltext ? (char *) sqltext : ""); } else { RETURN_FALSE; } } /* }}} */ /* {{{ Return the number of result columns in a statement */ PHP_FUNCTION(oci_num_fields) { zval *z_statement; php_oci_statement *statement; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_statement) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); RETURN_LONG(statement->ncolumns); } /* }}} */ /* {{{ Parse a SQL or PL/SQL statement and return a statement resource */ PHP_FUNCTION(oci_parse) { zval *z_connection; php_oci_connection *connection; php_oci_statement *statement; char *query; size_t query_len; ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_RESOURCE(z_connection) Z_PARAM_STRING(query, query_len) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); statement = php_oci_statement_create(connection, query, (int) query_len); if (statement) { RETURN_RES(statement->id); } RETURN_FALSE; } /* }}} */ /* {{{ Sets the number of rows to be prefetched on execute to prefetch_rows for stmt */ PHP_FUNCTION(oci_set_prefetch) { zval *z_statement; php_oci_statement *statement; zend_long size; ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_RESOURCE(z_statement) Z_PARAM_LONG(size) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); if (size < 0) { zend_argument_value_error(2, "must be greater than or equal to 0"); RETURN_THROWS(); } if (php_oci_statement_set_prefetch(statement, (ub4)size)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Sets the client identifier attribute on the connection */ PHP_FUNCTION(oci_set_client_identifier) { zval *z_connection; php_oci_connection *connection; char *client_id; size_t client_id_len; sword errstatus; ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_RESOURCE(z_connection) Z_PARAM_STRING(client_id, client_id_len) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); PHP_OCI_CALL_RETURN(errstatus, OCIAttrSet, ((dvoid *) connection->session, (ub4) OCI_HTYPE_SESSION, (dvoid *) client_id, (ub4) client_id_len, (ub4) OCI_ATTR_CLIENT_IDENTIFIER, connection->err)); if (errstatus != OCI_SUCCESS) { connection->errcode = php_oci_error(connection->err, errstatus); RETURN_FALSE; } #ifdef HAVE_OCI8_DTRACE /* The alternatives to storing client_id like done below are i) display it in a probe here in oci_set_client_identifier and let the user D script correlate the connection address probe argument and the client_id. This would likely require user D script variables, which would use kernel memory. ii) call OCIAttrGet for each probe definition that uses client_id. This would be slower than storing it. */ if (connection->client_id) { pefree(connection->client_id, connection->is_persistent); } if (client_id) { /* this long winded copy allows compatibility with older PHP versions */ connection->client_id = (char *)pemalloc(client_id_len+1, connection->is_persistent); memcpy(connection->client_id, client_id, client_id_len); connection->client_id[client_id_len] = '\0'; } else { connection->client_id = NULL; } #endif /* HAVE_OCI8_DTRACE */ RETURN_TRUE; } /* }}} */ /* {{{ Sets the edition attribute for all subsequent connections created */ PHP_FUNCTION(oci_set_edition) { char *edition; size_t edition_len; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_STRING(edition, edition_len) ZEND_PARSE_PARAMETERS_END(); #if ((OCI_MAJOR_VERSION > 11) || ((OCI_MAJOR_VERSION == 11) && (OCI_MINOR_VERSION >= 2))) if (OCI_G(edition)) { efree(OCI_G(edition)); } if (edition) { OCI_G(edition) = (char *)safe_emalloc(edition_len+1, sizeof(char), 0); memcpy(OCI_G(edition), edition, edition_len); OCI_G(edition)[edition_len] = '\0'; } else { OCI_G(edition) = NULL; } RETURN_TRUE; #else php_error_docref(NULL, E_NOTICE, "Unsupported attribute type"); RETURN_FALSE; #endif } /* }}} */ /* {{{ Sets the module attribute on the connection for end-to-end tracing */ PHP_FUNCTION(oci_set_module_name) { zval *z_connection; char *module; size_t module_len; ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_RESOURCE(z_connection) Z_PARAM_STRING(module, module_len) ZEND_PARSE_PARAMETERS_END(); #if (OCI_MAJOR_VERSION >= 10) php_oci_connection *connection; sword errstatus; PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); PHP_OCI_CALL_RETURN(errstatus, OCIAttrSet, ((dvoid *) connection->session, (ub4) OCI_HTYPE_SESSION, (dvoid *) module, (ub4) module_len, (ub4) OCI_ATTR_MODULE, connection->err)); if (errstatus != OCI_SUCCESS) { connection->errcode = php_oci_error(connection->err, errstatus); RETURN_FALSE; } RETURN_TRUE; #else php_error_docref(NULL, E_NOTICE, "Unsupported attribute type"); RETURN_FALSE; #endif } /* }}} */ /* {{{ Sets the action attribute on the connection for end-to-end tracing */ PHP_FUNCTION(oci_set_action) { zval *z_connection; char *action; size_t action_len; ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_RESOURCE(z_connection) Z_PARAM_STRING(action, action_len) ZEND_PARSE_PARAMETERS_END(); #if (OCI_MAJOR_VERSION >= 10) php_oci_connection *connection; sword errstatus; PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); PHP_OCI_CALL_RETURN(errstatus, OCIAttrSet, ((dvoid *) connection->session, (ub4) OCI_HTYPE_SESSION, (dvoid *) action, (ub4) action_len, (ub4) OCI_ATTR_ACTION, connection->err)); if (errstatus != OCI_SUCCESS) { connection->errcode = php_oci_error(connection->err, errstatus); RETURN_FALSE; } RETURN_TRUE; #else php_error_docref(NULL, E_NOTICE, "Unsupported attribute type"); RETURN_FALSE; #endif } /* }}} */ /* {{{ Sets the client info attribute on the connection for end-to-end tracing */ PHP_FUNCTION(oci_set_client_info) { zval *z_connection; char *client_info; size_t client_info_len; ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_RESOURCE(z_connection) Z_PARAM_STRING(client_info, client_info_len) ZEND_PARSE_PARAMETERS_END(); #if (OCI_MAJOR_VERSION >= 10) php_oci_connection *connection; sword errstatus; PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); PHP_OCI_CALL_RETURN(errstatus, OCIAttrSet, ((dvoid *) connection->session, (ub4) OCI_HTYPE_SESSION, (dvoid *) client_info, (ub4) client_info_len, (ub4) OCI_ATTR_CLIENT_INFO, connection->err)); if (errstatus != OCI_SUCCESS) { connection->errcode = php_oci_error(connection->err, errstatus); RETURN_FALSE; } RETURN_TRUE; #else php_error_docref(NULL, E_NOTICE, "Unsupported attribute type"); RETURN_FALSE; #endif } /* }}} */ /* {{{ Sets the "DB operation" on the connection for Oracle end-to-end tracing. For history, see Oracle bug 16695981 */ PHP_FUNCTION(oci_set_db_operation) { zval *z_connection; char *dbop_name; size_t dbop_name_len; ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_RESOURCE(z_connection) Z_PARAM_STRING(dbop_name, dbop_name_len) ZEND_PARSE_PARAMETERS_END(); #if (OCI_MAJOR_VERSION > 11) php_oci_connection *connection; PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); PHP_OCI_CALL_RETURN(OCI_G(errcode), OCIAttrSet, ((dvoid *) connection->session, (ub4) OCI_HTYPE_SESSION, (dvoid *) dbop_name, (ub4) dbop_name_len, (ub4) OCI_ATTR_DBOP, OCI_G(err))); if (OCI_G(errcode) != OCI_SUCCESS) { php_oci_error(OCI_G(err), OCI_G(errcode)); RETURN_FALSE; } RETURN_TRUE; #else php_error_docref(NULL, E_NOTICE, "Unsupported attribute type"); RETURN_FALSE; #endif } /* }}} */ /* {{{ */ PHP_FUNCTION(oci_set_call_timeout) { zval *z_connection; zend_long call_timeout; // milliseconds ZEND_PARSE_PARAMETERS_START(2, 2) Z_PARAM_RESOURCE(z_connection) Z_PARAM_LONG(call_timeout) ZEND_PARSE_PARAMETERS_END(); #if (OCI_MAJOR_VERSION >= 18) php_oci_connection *connection; PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); PHP_OCI_CALL_RETURN(OCI_G(errcode), OCIAttrSet, ((dvoid *) connection->svc, (ub4) OCI_HTYPE_SVCCTX, (ub4 *) &call_timeout, 0, OCI_ATTR_CALL_TIMEOUT, OCI_G(err))); if (OCI_G(errcode) != OCI_SUCCESS) { php_oci_error(OCI_G(err), OCI_G(errcode)); RETURN_FALSE; } RETURN_TRUE; #else php_error_docref(NULL, E_NOTICE, "Unsupported with this version of Oracle Client"); RETURN_FALSE; #endif } /* }}} */ /* {{{ Changes the password of an account */ PHP_FUNCTION(oci_password_change) { zval *z_connection; char *user, *pass_old, *pass_new, *dbname; size_t user_len, pass_old_len, pass_new_len, dbname_len; php_oci_connection *connection; if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "rsss", &z_connection, &user, &user_len, &pass_old, &pass_old_len, &pass_new, &pass_new_len) == SUCCESS) { PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); if (!user_len) { zend_argument_value_error(2, "cannot be empty"); RETURN_THROWS(); } if (!pass_old_len) { zend_argument_value_error(3, "cannot be empty"); RETURN_THROWS(); } if (!pass_new_len) { zend_argument_value_error(4, "cannot be empty"); RETURN_THROWS(); } if (php_oci_password_change(connection, user, (int) user_len, pass_old, (int) pass_old_len, pass_new, (int) pass_new_len)) { RETURN_FALSE; } RETURN_TRUE; } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "ssss", &dbname, &dbname_len, &user, &user_len, &pass_old, &pass_old_len, &pass_new, &pass_new_len) == SUCCESS) { if (!user_len) { zend_argument_value_error(2, "cannot be empty"); RETURN_THROWS(); } if (!pass_old_len) { zend_argument_value_error(3, "cannot be empty"); RETURN_THROWS(); } if (!pass_new_len) { zend_argument_value_error(4, "cannot be empty"); RETURN_THROWS(); } connection = php_oci_do_connect_ex(user, (int) user_len, pass_old, (int) pass_old_len, pass_new, (int) pass_new_len, dbname, (int) dbname_len, NULL, OCI_DEFAULT, 0, 0); if (!connection) { RETURN_FALSE; } RETURN_RES(connection->id); } WRONG_PARAM_COUNT; } /* }}} */ /* {{{ Return a new cursor (Statement-Handle) - use this to bind ref-cursors! */ PHP_FUNCTION(oci_new_cursor) { zval *z_connection; php_oci_connection *connection; php_oci_statement *statement; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_connection) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); statement = php_oci_statement_create(connection, NULL, 0); if (statement) { RETURN_RES(statement->id); } RETURN_FALSE; } /* }}} */ /* {{{ Return a single column of result data */ PHP_FUNCTION(oci_result) { php_oci_out_column *column; column = php_oci_statement_get_column_helper(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); if(column) { php_oci_column_to_zval(column, return_value, 0); } else { RETURN_FALSE; } } /* }}} */ /* {{{ Return a string containing runtime client library version information */ PHP_FUNCTION(oci_client_version) { char version[256]; ZEND_PARSE_PARAMETERS_NONE(); php_oci_client_get_version(version, sizeof(version)); RETURN_STRING(version); } /* }}} */ /* {{{ Return a string containing server version information */ PHP_FUNCTION(oci_server_version) { zval *z_connection; php_oci_connection *connection; char version[256]; zend_string *ret; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_connection) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); if (php_oci_server_get_version(connection, version, sizeof(version))) { RETURN_FALSE; } ret = zend_string_init(version, strlen(version), 0); RETURN_STR(ret); } /* }}} */ /* {{{ Return the query type of an OCI statement */ PHP_FUNCTION(oci_statement_type) { zval *z_statement; php_oci_statement *statement; ub2 type; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_statement) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); if (php_oci_statement_get_type(statement, &type)) { RETURN_FALSE; } switch (type) { case OCI_STMT_SELECT: RETVAL_STRING("SELECT"); break; case OCI_STMT_UPDATE: RETVAL_STRING("UPDATE"); break; case OCI_STMT_DELETE: RETVAL_STRING("DELETE"); break; case OCI_STMT_INSERT: RETVAL_STRING("INSERT"); break; case OCI_STMT_CREATE: RETVAL_STRING("CREATE"); break; case OCI_STMT_DROP: RETVAL_STRING("DROP"); break; case OCI_STMT_ALTER: RETVAL_STRING("ALTER"); break; case OCI_STMT_BEGIN: RETVAL_STRING("BEGIN"); break; case OCI_STMT_DECLARE: RETVAL_STRING("DECLARE"); break; case OCI_STMT_CALL: RETVAL_STRING("CALL"); break; default: RETVAL_STRING("UNKNOWN"); } } /* }}} */ /* {{{ Return the row count of an OCI statement */ PHP_FUNCTION(oci_num_rows) { zval *z_statement; php_oci_statement *statement; ub4 rowcount; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_statement) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); if (php_oci_statement_get_numrows(statement, &rowcount)) { RETURN_FALSE; } RETURN_LONG(rowcount); } /* }}} */ /* {{{ Deletes collection object*/ PHP_FUNCTION(oci_free_collection) { zval *tmp, *z_collection; php_oci_collection *collection; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_collection, oci_coll_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_COLLECTION(tmp, collection); zend_list_close(collection->id); RETURN_TRUE; } /* }}} */ /* {{{ Append an object to the collection */ PHP_FUNCTION(oci_collection_append) { zval *tmp, *z_collection; php_oci_collection *collection; char *value; size_t value_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &z_collection, oci_coll_class_entry_ptr, &value, &value_len) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_COLLECTION(tmp, collection); if (php_oci_collection_append(collection, value, (int) value_len)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Retrieve the value at collection index ndx */ PHP_FUNCTION(oci_collection_element_get) { zval *tmp, *z_collection; php_oci_collection *collection; zend_long element_index; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &z_collection, oci_coll_class_entry_ptr, &element_index) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_COLLECTION(tmp, collection); if (php_oci_collection_element_get(collection, element_index, return_value)) { RETURN_FALSE; } } /* }}} */ /* {{{ Assign a collection from another existing collection */ PHP_FUNCTION(oci_collection_assign) { zval *tmp_dest, *tmp_from, *z_collection_dest, *z_collection_from; php_oci_collection *collection_dest, *collection_from; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "OO", &z_collection_dest, oci_coll_class_entry_ptr, &z_collection_from, oci_coll_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_collection_dest), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property. The first argument should be valid collection object"); RETURN_FALSE; } if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_collection_from), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property. The second argument should be valid collection object"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_COLLECTION(tmp_dest, collection_dest); PHP_OCI_ZVAL_TO_COLLECTION(tmp_from, collection_from); if (php_oci_collection_assign(collection_dest, collection_from)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Assign element val to collection at index ndx */ PHP_FUNCTION(oci_collection_element_assign) { zval *tmp, *z_collection; php_oci_collection *collection; size_t value_len; zend_long element_index; char *value; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ols", &z_collection, oci_coll_class_entry_ptr, &element_index, &value, &value_len) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_COLLECTION(tmp, collection); if (php_oci_collection_element_set(collection, element_index, value, (int) value_len)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Return the size of a collection */ PHP_FUNCTION(oci_collection_size) { zval *tmp, *z_collection; php_oci_collection *collection; sb4 size = 0; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_collection, oci_coll_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_COLLECTION(tmp, collection); if (php_oci_collection_size(collection, &size)) { RETURN_FALSE; } RETURN_LONG(size); } /* }}} */ /* {{{ Return the max value of a collection. For a varray this is the maximum length of the array */ PHP_FUNCTION(oci_collection_max) { zval *tmp, *z_collection; php_oci_collection *collection; zend_long max; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &z_collection, oci_coll_class_entry_ptr) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_COLLECTION(tmp, collection); if (php_oci_collection_max(collection, &max)) { RETURN_FALSE; } RETURN_LONG(max); } /* }}} */ /* {{{ Trim num elements from the end of a collection */ PHP_FUNCTION(oci_collection_trim) { zval *tmp, *z_collection; php_oci_collection *collection; zend_long trim_size; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Ol", &z_collection, oci_coll_class_entry_ptr, &trim_size) == FAILURE) { RETURN_THROWS(); } if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_collection), "collection", sizeof("collection")-1)) == NULL) { php_error_docref(NULL, E_WARNING, "Unable to find collection property"); RETURN_FALSE; } PHP_OCI_ZVAL_TO_COLLECTION(tmp, collection); if (php_oci_collection_trim(collection, trim_size)) { RETURN_FALSE; } RETURN_TRUE; } /* }}} */ /* {{{ Initialize a new collection */ PHP_FUNCTION(oci_new_collection) { zval *z_connection; php_oci_connection *connection; php_oci_collection *collection; char *tdo, *schema = NULL; size_t tdo_len, schema_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS(), "rs|s!", &z_connection, &tdo, &tdo_len, &schema, &schema_len) == FAILURE) { RETURN_THROWS(); } PHP_OCI_ZVAL_TO_CONNECTION(z_connection, connection); if ( (collection = php_oci_collection_create(connection, tdo, (int) tdo_len, schema, (int) schema_len)) ) { object_init_ex(return_value, oci_coll_class_entry_ptr); add_property_resource(return_value, "collection", collection->id); } else { RETURN_FALSE; } } /* }}} */ /* {{{ Get the next statement resource from an Oracle 12c PL/SQL Implicit Result Set */ PHP_FUNCTION(oci_get_implicit_resultset) { zval *z_statement; php_oci_statement *statement; php_oci_statement *imp_statement; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_RESOURCE(z_statement) ZEND_PARSE_PARAMETERS_END(); PHP_OCI_ZVAL_TO_STATEMENT(z_statement, statement); imp_statement = php_oci_get_implicit_resultset(statement); if (imp_statement) { if (php_oci_statement_execute(imp_statement, (ub4)OCI_DEFAULT)) RETURN_FALSE; RETURN_RES(imp_statement->id); } RETURN_FALSE; } /* }}} */ #endif /* HAVE_OCI8 */
Close