@@ -657,16 +657,14 @@ void pgsqlCopyFromArray_internal(INTERNAL_FUNCTION_PARAMETERS)
657
657
PGresult * pgsql_result ;
658
658
ExecStatusType status ;
659
659
660
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "sA|sss!" ,
661
- & table_name , & table_name_len , & pg_rows ,
662
- & pg_delim , & pg_delim_len , & pg_null_as , & pg_null_as_len , & pg_fields , & pg_fields_len ) == FAILURE ) {
663
- RETURN_THROWS ();
664
- }
665
-
666
- if ((Z_TYPE_P (pg_rows ) != IS_ARRAY && !instanceof_function (Z_OBJCE_P (pg_rows ), zend_ce_traversable ))) {
667
- zend_argument_type_error (2 , "must be of type array or Traversable" );
668
- RETURN_THROWS ();
669
- }
660
+ ZEND_PARSE_PARAMETERS_START (2 , 5 )
661
+ Z_PARAM_STRING (table_name , table_name_len )
662
+ Z_PARAM_ITERABLE (pg_rows )
663
+ Z_PARAM_OPTIONAL
664
+ Z_PARAM_STRING (pg_delim , pg_delim_len )
665
+ Z_PARAM_STRING (pg_null_as , pg_null_as_len )
666
+ Z_PARAM_STRING_OR_NULL (pg_fields , pg_fields_len )
667
+ ZEND_PARSE_PARAMETERS_END ();
670
668
671
669
dbh = Z_PDO_DBH_P (ZEND_THIS );
672
670
PDO_CONSTRUCT_CHECK ;
@@ -712,11 +710,18 @@ void pgsqlCopyFromArray_internal(INTERNAL_FUNCTION_PARAMETERS)
712
710
}
713
711
} ZEND_HASH_FOREACH_END ();
714
712
} else {
715
- iter = Z_OBJ_P (pg_rows )-> ce -> get_iterator (Z_OBJCE_P (pg_rows ), pg_rows , 0 );
713
+ iter = Z_OBJCE_P (pg_rows )-> get_iterator (Z_OBJCE_P (pg_rows ), pg_rows , 0 );
716
714
if (iter == NULL || EG (exception )) {
717
715
RETURN_THROWS ();
718
716
}
719
717
718
+ if (iter -> funcs -> rewind ) {
719
+ iter -> funcs -> rewind (iter );
720
+ if (EG (exception )) {
721
+ RETURN_THROWS ();
722
+ }
723
+ }
724
+
720
725
for (; iter -> funcs -> valid (iter ) == SUCCESS && EG (exception ) == NULL ; iter -> funcs -> move_forward (iter )) {
721
726
tmp = iter -> funcs -> get_current_data (iter );
722
727
if (!_pdo_pgsql_send_copy_data (H , tmp )) {
0 commit comments