@@ -53,7 +53,6 @@ pysqlite_cursor_init_impl(pysqlite_Cursor *self,
53
53
Py_INCREF (connection );
54
54
Py_XSETREF (self -> connection , connection );
55
55
Py_CLEAR (self -> statement );
56
- Py_CLEAR (self -> next_row );
57
56
Py_CLEAR (self -> row_cast_map );
58
57
59
58
Py_INCREF (Py_None );
@@ -94,7 +93,6 @@ cursor_traverse(pysqlite_Cursor *self, visitproc visit, void *arg)
94
93
Py_VISIT (self -> lastrowid );
95
94
Py_VISIT (self -> row_factory );
96
95
Py_VISIT (self -> statement );
97
- Py_VISIT (self -> next_row );
98
96
return 0 ;
99
97
}
100
98
@@ -111,7 +109,6 @@ cursor_clear(pysqlite_Cursor *self)
111
109
pysqlite_statement_reset (self -> statement );
112
110
Py_CLEAR (self -> statement );
113
111
}
114
- Py_CLEAR (self -> next_row );
115
112
116
113
return 0 ;
117
114
}
@@ -489,8 +486,6 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation
489
486
self -> locked = 1 ;
490
487
self -> reset = 0 ;
491
488
492
- Py_CLEAR (self -> next_row );
493
-
494
489
if (multiple ) {
495
490
if (PyIter_Check (second_argument )) {
496
491
/* iterator */
@@ -658,11 +653,7 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation
658
653
}
659
654
}
660
655
661
- if (rc == SQLITE_ROW ) {
662
- self -> next_row = _pysqlite_fetch_one_row (self );
663
- if (self -> next_row == NULL )
664
- goto error ;
665
- } else if (rc == SQLITE_DONE && !multiple ) {
656
+ if (rc == SQLITE_DONE && !multiple ) {
666
657
pysqlite_statement_reset (self -> statement );
667
658
Py_CLEAR (self -> statement );
668
659
}
@@ -821,10 +812,6 @@ pysqlite_cursor_executescript_impl(pysqlite_Cursor *self,
821
812
static PyObject *
822
813
pysqlite_cursor_iternext (pysqlite_Cursor * self )
823
814
{
824
- PyObject * next_row_tuple ;
825
- PyObject * next_row ;
826
- int rc ;
827
-
828
815
if (!check_cursor (self )) {
829
816
return NULL ;
830
817
}
@@ -835,53 +822,40 @@ pysqlite_cursor_iternext(pysqlite_Cursor *self)
835
822
return NULL ;
836
823
}
837
824
838
- if (!self -> next_row ) {
839
- if (self -> statement ) {
840
- (void )pysqlite_statement_reset (self -> statement );
841
- Py_CLEAR (self -> statement );
842
- }
825
+ if (self -> statement == NULL ) {
843
826
return NULL ;
844
827
}
845
828
846
- next_row_tuple = self -> next_row ;
847
- assert (next_row_tuple != NULL );
848
- self -> next_row = NULL ;
849
-
850
- if (self -> row_factory != Py_None ) {
851
- next_row = PyObject_CallFunction (self -> row_factory , "OO" , self , next_row_tuple );
852
- if (next_row == NULL ) {
853
- self -> next_row = next_row_tuple ;
854
- return NULL ;
855
- }
856
- Py_DECREF (next_row_tuple );
857
- } else {
858
- next_row = next_row_tuple ;
829
+ sqlite3_stmt * stmt = self -> statement -> st ;
830
+ assert (stmt != NULL );
831
+ if (sqlite3_data_count (stmt ) == 0 ) {
832
+ (void )pysqlite_statement_reset (self -> statement );
833
+ Py_CLEAR (self -> statement );
834
+ return NULL ;
859
835
}
860
836
861
- if (self -> statement ) {
862
- rc = pysqlite_step (self -> statement -> st );
863
- if (PyErr_Occurred ()) {
864
- (void )pysqlite_statement_reset (self -> statement );
865
- Py_DECREF (next_row );
866
- return NULL ;
867
- }
868
- if (rc != SQLITE_DONE && rc != SQLITE_ROW ) {
869
- (void )pysqlite_statement_reset (self -> statement );
870
- Py_DECREF (next_row );
871
- _pysqlite_seterror (self -> connection -> state , self -> connection -> db );
872
- return NULL ;
873
- }
874
-
875
- if (rc == SQLITE_ROW ) {
876
- self -> next_row = _pysqlite_fetch_one_row (self );
877
- if (self -> next_row == NULL ) {
878
- (void )pysqlite_statement_reset (self -> statement );
879
- return NULL ;
880
- }
881
- }
837
+ PyObject * row = _pysqlite_fetch_one_row (self );
838
+ if (row == NULL ) {
839
+ return NULL ;
882
840
}
883
-
884
- return next_row ;
841
+ int rc = pysqlite_step (stmt );
842
+ if (rc == SQLITE_DONE ) {
843
+ (void )pysqlite_statement_reset (self -> statement );
844
+ }
845
+ else if (rc != SQLITE_ROW ) {
846
+ (void )_pysqlite_seterror (self -> connection -> state ,
847
+ self -> connection -> db );
848
+ Py_DECREF (row );
849
+ return NULL ;
850
+ }
851
+ if (!Py_IsNone (self -> row_factory )) {
852
+ PyObject * factory = self -> row_factory ;
853
+ PyObject * args [] = { (PyObject * )self , row , };
854
+ PyObject * new_row = PyObject_Vectorcall (factory , args , 2 , NULL );
855
+ Py_DECREF (row );
856
+ row = new_row ;
857
+ }
858
+ return row ;
885
859
}
886
860
887
861
/*[clinic input]
0 commit comments