Skip to content

Commit 8155e1b

Browse files
committed
Declare OCILob descriptor property
1 parent b0ad9df commit 8155e1b

File tree

4 files changed

+42
-117
lines changed

4 files changed

+42
-117
lines changed

ext/oci8/oci8.stub.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,6 +953,9 @@ function oci_unregister_taf_callback($connection): bool {}
953953

954954
#[\AllowDynamicProperties]
955955
class OCILob {
956+
/** @var resource */
957+
public readonly $descriptor;
958+
956959
/**
957960
* @alias oci_lob_save
958961
* @tentative-return-type

ext/oci8/oci8_arginfo.h

Lines changed: 7 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/oci8/oci8_interface.c

Lines changed: 28 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
#define OCI_STMT_CALL 10
4141
#endif
4242

43+
#define Z_OCILOB_DESCRIPTOR_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0)
44+
4345
#define ERROR_ARG_POS(arg_num) (getThis() ? (arg_num-1) : (arg_num))
4446

4547
/* {{{ Register a callback function for Oracle Transparent Application Failover (TAF) */
@@ -233,10 +235,7 @@ PHP_FUNCTION(oci_free_descriptor)
233235
RETURN_THROWS();
234236
}
235237

236-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
237-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
238-
RETURN_FALSE;
239-
}
238+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
240239

241240
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
242241

@@ -264,10 +263,7 @@ PHP_FUNCTION(oci_lob_save)
264263
RETURN_THROWS();
265264
}
266265

267-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
268-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
269-
RETURN_FALSE;
270-
}
266+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
271267

272268
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
273269

@@ -290,10 +286,7 @@ PHP_FUNCTION(oci_lob_import)
290286
RETURN_THROWS();
291287
}
292288

293-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
294-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
295-
RETURN_FALSE;
296-
}
289+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
297290

298291
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
299292

@@ -316,10 +309,7 @@ PHP_FUNCTION(oci_lob_load)
316309
RETURN_THROWS();
317310
}
318311

319-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
320-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
321-
RETURN_FALSE;
322-
}
312+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
323313

324314
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
325315

@@ -356,10 +346,7 @@ PHP_FUNCTION(oci_lob_read)
356346
RETURN_THROWS();
357347
}
358348

359-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
360-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
361-
RETURN_FALSE;
362-
}
349+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
363350

364351
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
365352

@@ -388,10 +375,7 @@ PHP_FUNCTION(oci_lob_eof)
388375
RETURN_THROWS();
389376
}
390377

391-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
392-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
393-
RETURN_FALSE;
394-
}
378+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
395379

396380
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
397381

@@ -414,11 +398,7 @@ PHP_FUNCTION(oci_lob_tell)
414398
RETURN_THROWS();
415399
}
416400

417-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
418-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
419-
RETURN_FALSE;
420-
}
421-
401+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
422402
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
423403

424404
RETURN_LONG(descriptor->lob_current_position);
@@ -435,10 +415,7 @@ PHP_FUNCTION(oci_lob_rewind)
435415
RETURN_THROWS();
436416
}
437417

438-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
439-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
440-
RETURN_FALSE;
441-
}
418+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
442419

443420
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
444421

@@ -460,10 +437,7 @@ PHP_FUNCTION(oci_lob_seek)
460437
RETURN_THROWS();
461438
}
462439

463-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
464-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
465-
RETURN_FALSE;
466-
}
440+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
467441

468442
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
469443

@@ -507,10 +481,7 @@ PHP_FUNCTION(oci_lob_size)
507481
RETURN_THROWS();
508482
}
509483

510-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
511-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
512-
RETURN_FALSE;
513-
}
484+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
514485

515486
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
516487

@@ -540,11 +511,7 @@ PHP_FUNCTION(oci_lob_write)
540511
data_len = MIN((zend_long) data_len, write_len);
541512
}
542513

543-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
544-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
545-
RETURN_FALSE;
546-
}
547-
514+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
548515
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
549516

550517
if (data_len <= 0) {
@@ -568,15 +535,8 @@ PHP_FUNCTION(oci_lob_append)
568535
RETURN_THROWS();
569536
}
570537

571-
if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_dest), "descriptor", sizeof("descriptor")-1)) == NULL) {
572-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object");
573-
RETURN_FALSE;
574-
}
575-
576-
if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_from), "descriptor", sizeof("descriptor")-1)) == NULL) {
577-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object");
578-
RETURN_FALSE;
579-
}
538+
tmp_dest = Z_OCILOB_DESCRIPTOR_P(z_descriptor_dest);
539+
tmp_from = Z_OCILOB_DESCRIPTOR_P(z_descriptor_from);
580540

581541
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_dest, descriptor_dest);
582542
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_from, descriptor_from);
@@ -606,10 +566,7 @@ PHP_FUNCTION(oci_lob_truncate)
606566
RETURN_THROWS();
607567
}
608568

609-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
610-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
611-
RETURN_FALSE;
612-
}
569+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
613570

614571
ub_trim_length = (ub4) trim_length;
615572
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
@@ -648,11 +605,7 @@ PHP_FUNCTION(oci_lob_erase)
648605
RETURN_THROWS();
649606
}
650607

651-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
652-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
653-
RETURN_FALSE;
654-
}
655-
608+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
656609
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
657610

658611
if (php_oci_lob_erase(descriptor, offset, (ub4) length, &bytes_erased)) {
@@ -673,11 +626,7 @@ PHP_FUNCTION(oci_lob_flush)
673626
RETURN_THROWS();
674627
}
675628

676-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
677-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
678-
RETURN_FALSE;
679-
}
680-
629+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
681630
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
682631

683632
if (descriptor->buffering == PHP_OCI_LOB_BUFFER_DISABLED) {
@@ -703,11 +652,7 @@ PHP_FUNCTION(ocisetbufferinglob)
703652
RETURN_THROWS();
704653
}
705654

706-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
707-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
708-
RETURN_FALSE;
709-
}
710-
655+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
711656
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
712657

713658
if (php_oci_lob_set_buffering(descriptor, flag)) {
@@ -727,11 +672,7 @@ PHP_FUNCTION(ocigetbufferinglob)
727672
RETURN_THROWS();
728673
}
729674

730-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
731-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
732-
RETURN_FALSE;
733-
}
734-
675+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
735676
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
736677

737678
if (descriptor->buffering != PHP_OCI_LOB_BUFFER_DISABLED) {
@@ -760,15 +701,8 @@ PHP_FUNCTION(oci_lob_copy)
760701
RETURN_THROWS();
761702
}
762703

763-
if ((tmp_dest = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_dest), "descriptor", sizeof("descriptor")-1)) == NULL) {
764-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object");
765-
RETURN_FALSE;
766-
}
767-
768-
if ((tmp_from = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_from), "descriptor", sizeof("descriptor")-1)) == NULL) {
769-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object");
770-
RETURN_FALSE;
771-
}
704+
tmp_dest = Z_OCILOB_DESCRIPTOR_P(z_descriptor_dest);
705+
tmp_from = Z_OCILOB_DESCRIPTOR_P(z_descriptor_from);
772706

773707
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_dest, descriptor_dest);
774708
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_from, descriptor_from);
@@ -791,15 +725,8 @@ PHP_FUNCTION(oci_lob_is_equal)
791725
RETURN_THROWS();
792726
}
793727

794-
if ((tmp_first = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_first), "descriptor", sizeof("descriptor")-1)) == NULL) {
795-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The first argument should be valid descriptor object");
796-
RETURN_FALSE;
797-
}
798-
799-
if ((tmp_second = zend_hash_str_find(Z_OBJPROP_P(z_descriptor_second), "descriptor", sizeof("descriptor")-1)) == NULL) {
800-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property. The second argument should be valid descriptor object");
801-
RETURN_FALSE;
802-
}
728+
tmp_first = Z_OCILOB_DESCRIPTOR_P(z_descriptor_first);
729+
tmp_second = Z_OCILOB_DESCRIPTOR_P(z_descriptor_second);
803730

804731
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_first, descriptor_first);
805732
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp_second, descriptor_second);
@@ -846,10 +773,7 @@ PHP_FUNCTION(oci_lob_export)
846773
RETURN_THROWS();
847774
}
848775

849-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
850-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
851-
RETURN_FALSE;
852-
}
776+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
853777

854778
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
855779

@@ -928,10 +852,7 @@ PHP_METHOD(OCILob, writeTemporary)
928852
RETURN_THROWS();
929853
}
930854

931-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
932-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
933-
RETURN_FALSE;
934-
}
855+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
935856

936857
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
937858

@@ -952,11 +873,7 @@ PHP_METHOD(OCILob, close)
952873
RETURN_THROWS();
953874
}
954875

955-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(z_descriptor), "descriptor", sizeof("descriptor")-1)) == NULL) {
956-
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
957-
RETURN_FALSE;
958-
}
959-
876+
tmp = Z_OCILOB_DESCRIPTOR_P(z_descriptor);
960877
PHP_OCI_ZVAL_TO_DESCRIPTOR(tmp, descriptor);
961878

962879
if (php_oci_lob_close(descriptor)) {
@@ -988,7 +905,7 @@ PHP_FUNCTION(oci_new_descriptor)
988905
}
989906

990907
object_init_ex(return_value, oci_lob_class_entry_ptr);
991-
add_property_resource(return_value, "descriptor", descriptor->id);
908+
ZVAL_RES(Z_OCILOB_DESCRIPTOR_P(return_value), descriptor->id);
992909
}
993910
/* }}} */
994911

ext/oci8/oci8_statement.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ typedef ub8 oci_phpsized_int;
4242
typedef ub4 oci_phpsized_int;
4343
#endif
4444

45+
#define Z_OCILOB_DESCRIPTOR_P(zv) OBJ_PROP_NUM(Z_OBJ_P(zv), 0)
46+
4547
/* {{{ php_oci_statement_create()
4648
Create statemend handle and allocate necessary resources */
4749
php_oci_statement *php_oci_statement_create(php_oci_connection *connection, char *query, int query_len)
@@ -1161,7 +1163,7 @@ int php_oci_bind_by_name(php_oci_statement *statement, char *name, size_t name_l
11611163
{
11621164
zval *tmp;
11631165

1164-
if (Z_TYPE_P(param) != IS_OBJECT || (tmp = zend_hash_str_find(Z_OBJPROP_P(param), "descriptor", sizeof("descriptor")-1)) == NULL) {
1166+
if (Z_TYPE_P(param) != IS_OBJECT || !(tmp = Z_OCILOB_DESCRIPTOR_P(param))) {
11651167
php_error_docref(NULL, E_WARNING, "Unable to find descriptor property");
11661168
return 1;
11671169
}
@@ -1480,10 +1482,7 @@ sb4 php_oci_bind_out_callback(
14801482
* out-bind as the contents would have been changed for in/out
14811483
* binds (Bug #46994).
14821484
*/
1483-
if ((tmp = zend_hash_str_find(Z_OBJPROP_P(val), "descriptor", sizeof("descriptor")-1)) == NULL) {
1484-
php_error_docref(NULL, E_WARNING, "Unable to find object outbind descriptor property");
1485-
return OCI_ERROR;
1486-
}
1485+
tmp = Z_OCILOB_DESCRIPTOR_P(val);
14871486
PHP_OCI_ZVAL_TO_DESCRIPTOR_EX(tmp, desc);
14881487
desc->lob_size = -1; /* force OCI8 to update cached size */
14891488

0 commit comments

Comments
 (0)