@@ -598,8 +598,11 @@ PHP_METHOD(SQLite3, query)
598
598
return_code = sqlite3_step (result -> stmt_obj -> stmt );
599
599
600
600
switch (return_code ) {
601
- case SQLITE_ROW : /* Valid Row */
602
601
case SQLITE_DONE : /* Valid but no results */
602
+ {
603
+ result -> complete = 1 ;
604
+ }
605
+ case SQLITE_ROW : /* Valid Row */
603
606
{
604
607
php_sqlite3_free_list * free_item ;
605
608
free_item = emalloc (sizeof (php_sqlite3_free_list ));
@@ -610,6 +613,7 @@ PHP_METHOD(SQLite3, query)
610
613
break ;
611
614
}
612
615
default :
616
+ result -> complete = 1 ;
613
617
if (!EG (exception )) {
614
618
php_sqlite3_error (db_obj , sqlite3_errcode (db_obj -> db ), "Unable to execute statement: %s" , sqlite3_errmsg (db_obj -> db ));
615
619
}
@@ -700,6 +704,9 @@ PHP_METHOD(SQLite3, querySingle)
700
704
return_code = sqlite3_step (stmt );
701
705
702
706
switch (return_code ) {
707
+ php_sqlite3_result * result_obj ;
708
+ zval * object = ZEND_THIS ;
709
+ result_obj = Z_SQLITE3_RESULT_P (object );
703
710
case SQLITE_ROW : /* Valid Row */
704
711
{
705
712
if (!entire_row ) {
@@ -717,6 +724,8 @@ PHP_METHOD(SQLite3, querySingle)
717
724
}
718
725
case SQLITE_DONE : /* Valid but no results */
719
726
{
727
+ result_obj -> complete = 1 ;
728
+
720
729
if (!entire_row ) {
721
730
RETVAL_NULL ();
722
731
} else {
@@ -725,6 +734,7 @@ PHP_METHOD(SQLite3, querySingle)
725
734
break ;
726
735
}
727
736
default :
737
+ result_obj -> complete = 1 ;
728
738
if (!EG (exception )) {
729
739
php_sqlite3_error (db_obj , sqlite3_errcode (db_obj -> db ), "Unable to execute statement: %s" , sqlite3_errmsg (db_obj -> db ));
730
740
}
@@ -1798,14 +1808,16 @@ PHP_METHOD(SQLite3Stmt, execute)
1798
1808
1799
1809
return_code = sqlite3_step (stmt_obj -> stmt );
1800
1810
1811
+ sqlite3_reset (stmt_obj -> stmt );
1812
+ object_init_ex (return_value , php_sqlite3_result_entry );
1813
+ result = Z_SQLITE3_RESULT_P (return_value );
1801
1814
switch (return_code ) {
1802
- case SQLITE_ROW : /* Valid Row */
1803
1815
case SQLITE_DONE : /* Valid but no results */
1816
+ {
1817
+ result -> complete = 1 ;
1818
+ }
1819
+ case SQLITE_ROW : /* Valid Row */
1804
1820
{
1805
- sqlite3_reset (stmt_obj -> stmt );
1806
- object_init_ex (return_value , php_sqlite3_result_entry );
1807
- result = Z_SQLITE3_RESULT_P (return_value );
1808
-
1809
1821
result -> is_prepared_statement = 1 ;
1810
1822
result -> db_obj = stmt_obj -> db_obj ;
1811
1823
result -> stmt_obj = stmt_obj ;
@@ -1816,9 +1828,11 @@ PHP_METHOD(SQLite3Stmt, execute)
1816
1828
break ;
1817
1829
}
1818
1830
case SQLITE_ERROR :
1831
+ result_obj -> complete = 1 ;
1819
1832
sqlite3_reset (stmt_obj -> stmt );
1820
1833
ZEND_FALLTHROUGH ;
1821
1834
default :
1835
+ result_obj -> complete = 1 ;
1822
1836
if (!EG (exception )) {
1823
1837
php_sqlite3_error (stmt_obj -> db_obj , sqlite3_errcode (sqlite3_db_handle (stmt_obj -> stmt )), "Unable to execute statement: %s" , sqlite3_errmsg (sqlite3_db_handle (stmt_obj -> stmt )));
1824
1838
}
@@ -1886,6 +1900,10 @@ PHP_METHOD(SQLite3Result, numColumns)
1886
1900
1887
1901
SQLITE3_CHECK_INITIALIZED (result_obj -> db_obj , result_obj -> stmt_obj -> initialised , SQLite3Result )
1888
1902
1903
+ if (result_obj -> complete ) {
1904
+ RETURN_FALSE ;
1905
+ }
1906
+
1889
1907
RETURN_LONG (sqlite3_column_count (result_obj -> stmt_obj -> stmt ));
1890
1908
}
1891
1909
/* }}} */
@@ -1953,6 +1971,10 @@ PHP_METHOD(SQLite3Result, fetchArray)
1953
1971
1954
1972
SQLITE3_CHECK_INITIALIZED (result_obj -> db_obj , result_obj -> stmt_obj -> initialised , SQLite3Result )
1955
1973
1974
+ if (result_obj -> complete == 1 ) {
1975
+ return ;
1976
+ }
1977
+
1956
1978
ret = sqlite3_step (result_obj -> stmt_obj -> stmt );
1957
1979
switch (ret ) {
1958
1980
case SQLITE_ROW :
@@ -2006,6 +2028,7 @@ PHP_METHOD(SQLite3Result, fetchArray)
2006
2028
break ;
2007
2029
2008
2030
default :
2031
+ result_obj -> complete = 1 ;
2009
2032
php_sqlite3_error (result_obj -> db_obj , sqlite3_errcode (sqlite3_db_handle (result_obj -> stmt_obj -> stmt )), "Unable to execute statement: %s" , sqlite3_errmsg (sqlite3_db_handle (result_obj -> stmt_obj -> stmt )));
2010
2033
}
2011
2034
}
0 commit comments