File tree 2 files changed +43
-8
lines changed
2 files changed +43
-8
lines changed Original file line number Diff line number Diff line change 174
174
}
175
175
176
176
$ rows = array ();
177
- while (($ row = $ result ->fetchArray (\SQLITE3_ASSOC )) !== false ) {
178
- // base64-encode any string that is not valid UTF-8 without control characters (BLOB)
179
- foreach ($ row as &$ value ) {
180
- if (\is_string ($ value ) && \preg_match ('/[\x00-\x08\x11\x12\x14-\x1f\x7f]/u ' , $ value ) !== 0 ) {
181
- $ value = ['base64 ' => \base64_encode ($ value )];
182
- } elseif (\is_float ($ value )) {
183
- $ value = ['float ' => $ value ];
177
+ if ($ result ->numColumns () !== 0 ) {
178
+ // Fetch all rows only if this result set has any columns.
179
+ // INSERT/UPDATE/DELETE etc. do not return any columns, trying
180
+ // to fetch the results here will issue the same query again.
181
+ while (($ row = $ result ->fetchArray (\SQLITE3_ASSOC )) !== false ) {
182
+ // base64-encode any string that is not valid UTF-8 without control characters (BLOB)
183
+ foreach ($ row as &$ value ) {
184
+ if (\is_string ($ value ) && \preg_match ('/[\x00-\x08\x11\x12\x14-\x1f\x7f]/u ' , $ value ) !== 0 ) {
185
+ $ value = ['base64 ' => \base64_encode ($ value )];
186
+ } elseif (\is_float ($ value )) {
187
+ $ value = ['float ' => $ value ];
188
+ }
184
189
}
190
+ $ rows [] = $ row ;
185
191
}
186
- $ rows [] = $ row ;
187
192
}
188
193
$ result ->finalize ();
189
194
Original file line number Diff line number Diff line change @@ -596,6 +596,36 @@ public function testExecRejectsWhenAlreadyClosed($flag)
596
596
$ loop ->run ();
597
597
}
598
598
599
+ /**
600
+ * @dataProvider provideSocketFlags
601
+ * @param bool $flag
602
+ */
603
+ public function testQueryInsertResolvesWithResultWithLastInsertIdAndRunsUntilQuit ($ flag )
604
+ {
605
+ $ loop = React \EventLoop \Factory::create ();
606
+ $ factory = new Factory ($ loop );
607
+
608
+ $ ref = new ReflectionProperty ($ factory , 'useSocket ' );
609
+ $ ref ->setAccessible (true );
610
+ $ ref ->setValue ($ factory , $ flag );
611
+
612
+ $ promise = $ factory ->open (':memory: ' );
613
+
614
+ $ data = null ;
615
+ $ promise ->then (function (DatabaseInterface $ db ) use (&$ data ){
616
+ $ db ->exec ('CREATE TABLE foo (id INTEGER PRIMARY KEY AUTOINCREMENT, bar STRING) ' );
617
+ $ db ->query ('INSERT INTO foo (bar) VALUES (?) ' , ['test ' ])->then (function (Result $ result ) use (&$ data ) {
618
+ $ data = $ result ->insertId ;
619
+ });
620
+
621
+ $ db ->quit ();
622
+ });
623
+
624
+ $ loop ->run ();
625
+
626
+ $ this ->assertSame (1 , $ data );
627
+ }
628
+
599
629
protected function expectCallableNever ()
600
630
{
601
631
$ mock = $ this ->createCallableMock ();
You can’t perform that action at this time.
0 commit comments