File tree 4 files changed +44
-1
lines changed
4 files changed +44
-1
lines changed Original file line number Diff line number Diff line change @@ -127,4 +127,33 @@ public async Task Database_CanExecute_Statements()
127
127
128
128
Assert . Equal ( 3ul , rowsAffected ) ;
129
129
}
130
+
131
+ [ Fact ]
132
+ public async Task Statement_CanBeReset ( )
133
+ {
134
+ await _db . Execute ( "CREATE TABLE `test` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT)" ) ;
135
+ await _db . Execute ( "INSERT INTO `test` (`name`) VALUES ('a'), ('b'), ('c')" ) ;
136
+
137
+ using var statement = await _db . Prepare ( "SELECT `name` FROM `test` WHERE `id` = ?" ) ;
138
+ var firstExpected = "a" ;
139
+ var secondExpected = "b" ;
140
+
141
+ statement . Bind ( new Integer ( 1 ) ) ;
142
+ var rs = await statement . Query ( ) ;
143
+ var row = rs . Rows . First ( ) ;
144
+ var value = row . First ( ) ;
145
+ var text = Assert . IsType < Text > ( value ) ;
146
+
147
+ Assert . Equal ( firstExpected , text ) ;
148
+
149
+ statement . Reset ( ) ;
150
+
151
+ statement . Bind ( new Integer ( 2 ) ) ;
152
+ var rs2 = await statement . Query ( ) ;
153
+ var row2 = rs2 . Rows . First ( ) ;
154
+ var value2 = row2 . First ( ) ;
155
+ var text2 = Assert . IsType < Text > ( value2 ) ;
156
+
157
+ Assert . Equal ( secondExpected , text2 ) ;
158
+ }
130
159
}
Original file line number Diff line number Diff line change @@ -17,5 +17,6 @@ public interface IStatement : IDisposable
17
17
void BindNull ( ) ;
18
18
Task < ulong > Execute ( ) ;
19
19
Task < IResultSet > Query ( ) ;
20
+ void Reset ( ) ;
20
21
}
21
22
}
Original file line number Diff line number Diff line change @@ -123,7 +123,7 @@ private unsafe Value[] ParseRow(libsql_row_t row)
123
123
_enumeratorData . ColumnTypes [ i ] == ValueType . Text ? row . GetText ( i ) :
124
124
_enumeratorData . ColumnTypes [ i ] == ValueType . Blob ? row . GetBlob ( i ) :
125
125
_enumeratorData . ColumnTypes [ i ] == ValueType . Null ? ( Value ) new Null ( ) :
126
- throw new ArgumentOutOfRangeException ( ) ;
126
+ throw new ArgumentOutOfRangeException ( $ "Non-exhaustive check. Could not find a case to match value of { _enumeratorData . ColumnTypes [ i ] } " ) ;
127
127
128
128
parsedRow [ i ] = value ;
129
129
}
Original file line number Diff line number Diff line change @@ -159,6 +159,19 @@ public Task<IResultSet> Query()
159
159
return _database . Query ( this ) ;
160
160
}
161
161
162
+ public void Reset ( )
163
+ {
164
+ var error = new Error ( ) ;
165
+ int exitCode ;
166
+
167
+ unsafe {
168
+ exitCode = Bindings . libsql_reset_stmt ( Stmt , & error . Ptr ) ;
169
+ }
170
+
171
+ error . ThrowIfNonZero ( exitCode , "Failed to reset statement" ) ;
172
+ }
173
+
174
+
162
175
private void ReleaseUnmanagedResources ( )
163
176
{
164
177
Bindings . libsql_free_stmt ( Stmt ) ;
You can’t perform that action at this time.
0 commit comments