File tree Expand file tree Collapse file tree 2 files changed +45
-11
lines changed Expand file tree Collapse file tree 2 files changed +45
-11
lines changed Original file line number Diff line number Diff line change 134
134
} else {
135
135
$ statement = $ db ->prepare ($ data ->params [0 ]);
136
136
foreach ($ data ->params [1 ] as $ index => $ value ) {
137
+ if ($ value === null ) {
138
+ $ type = \SQLITE3_NULL ;
139
+ } elseif ($ value === true || $ value === false ) {
140
+ // explicitly cast bool to int because SQLite does not have a native boolean
141
+ $ type = \SQLITE3_INTEGER ;
142
+ $ value = (int )$ value ;
143
+ } elseif (\is_int ($ value )) {
144
+ $ type = \SQLITE3_INTEGER ;
145
+ } elseif (\is_float ($ value )) {
146
+ $ type = \SQLITE3_FLOAT ;
147
+ } else {
148
+ $ type = \SQLITE3_TEXT ;
149
+ }
150
+
137
151
$ statement ->bindValue (
138
152
$ index + 1 ,
139
153
$ value ,
140
- $ value === null ? \ SQLITE3_NULL : \is_int ( $ value ) || \is_bool ( $ value ) ? \ SQLITE3_INTEGER : \is_float ( $ value ) ? \ SQLITE3_FLOAT : \ SQLITE3_TEXT
154
+ $ type
141
155
);
142
156
}
143
157
$ result = @$ statement ->execute ();
173
187
} elseif ($ data ->method === 'query ' && $ db !== null && \count ($ data ->params ) === 2 && \is_string ($ data ->params [0 ]) && \is_object ($ data ->params [1 ])) {
174
188
$ statement = $ db ->prepare ($ data ->params [0 ]);
175
189
foreach ($ data ->params [1 ] as $ index => $ value ) {
190
+ if ($ value === null ) {
191
+ $ type = \SQLITE3_NULL ;
192
+ } elseif ($ value === true || $ value === false ) {
193
+ // explicitly cast bool to int because SQLite does not have a native boolean
194
+ $ type = \SQLITE3_INTEGER ;
195
+ $ value = (int )$ value ;
196
+ } elseif (\is_int ($ value )) {
197
+ $ type = \SQLITE3_INTEGER ;
198
+ } elseif (\is_float ($ value )) {
199
+ $ type = \SQLITE3_FLOAT ;
200
+ } else {
201
+ $ type = \SQLITE3_TEXT ;
202
+ }
203
+
176
204
$ statement ->bindValue (
177
205
$ index ,
178
206
$ value ,
179
- $ value === null ? \ SQLITE3_NULL : \is_int ( $ value ) || \is_bool ( $ value ) ? \ SQLITE3_INTEGER : \is_float ( $ value ) ? \ SQLITE3_FLOAT : \ SQLITE3_TEXT
207
+ $ type
180
208
);
181
209
}
182
210
$ result = @$ statement ->execute ();
Original file line number Diff line number Diff line change @@ -281,15 +281,21 @@ public function testQueryStringResolvesWithResultWithTypeStringAndRunsUntilQuit(
281
281
282
282
public function provideSqlDataWillBeReturnedWithType ()
283
283
{
284
- return [
285
- ['42 ' , 42 ],
286
- ['1.5 ' , 1.5 ],
287
- ['null ' , null ],
288
- ['"hello" ' , 'hello ' ],
289
- ['"hellö" ' , 'hellö ' ],
290
- ['true ' , 1 ],
291
- ['false ' , 0 ],
292
- ];
284
+ return array_merge (
285
+ [
286
+ ['42 ' , 42 ],
287
+ ['2.5 ' , 2.5 ],
288
+ ['null ' , null ],
289
+ ['"hello" ' , 'hello ' ],
290
+ ['"hellö" ' , 'hellö ' ]
291
+ ],
292
+ SQLite3::version ()['versionNumber ' ] < 3023000 ? [] : [
293
+ // boolean identifiers exist only as of SQLite 3.23.0 (2018-04-02)
294
+ // @link https://www.sqlite.org/lang_expr.html#booleanexpr
295
+ ['true ' , 1 ],
296
+ ['false ' , 0 ]
297
+ ]
298
+ );
293
299
}
294
300
295
301
/**
You can’t perform that action at this time.
0 commit comments