File tree Expand file tree Collapse file tree 4 files changed +44
-1
lines changed
Expand file tree Collapse file tree 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()
127127
128128 Assert . Equal ( 3ul , rowsAffected ) ;
129129 }
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+ }
130159}
Original file line number Diff line number Diff line change @@ -17,5 +17,6 @@ public interface IStatement : IDisposable
1717 void BindNull ( ) ;
1818 Task < ulong > Execute ( ) ;
1919 Task < IResultSet > Query ( ) ;
20+ void Reset ( ) ;
2021 }
2122}
Original file line number Diff line number Diff line change @@ -123,7 +123,7 @@ private unsafe Value[] ParseRow(libsql_row_t row)
123123 _enumeratorData . ColumnTypes [ i ] == ValueType . Text ? row . GetText ( i ) :
124124 _enumeratorData . ColumnTypes [ i ] == ValueType . Blob ? row . GetBlob ( i ) :
125125 _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 ] } " ) ;
127127
128128 parsedRow [ i ] = value ;
129129 }
Original file line number Diff line number Diff line change @@ -159,6 +159,19 @@ public Task<IResultSet> Query()
159159 return _database . Query ( this ) ;
160160 }
161161
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+
162175 private void ReleaseUnmanagedResources ( )
163176 {
164177 Bindings . libsql_free_stmt ( Stmt ) ;
You can’t perform that action at this time.
0 commit comments