File tree Expand file tree Collapse file tree 2 files changed +20
-9
lines changed Expand file tree Collapse file tree 2 files changed +20
-9
lines changed Original file line number Diff line number Diff line change @@ -836,15 +836,11 @@ def test_execute_wrong_no_of_args1(self):
836
836
with self .assertRaises (sqlite .ProgrammingError ):
837
837
self .cu .execute ("insert into test(id) values (?)" , (17 , "Egon" ))
838
838
839
- # TODO: RUSTPYTHON
840
- @unittest .expectedFailure
841
839
def test_execute_wrong_no_of_args2 (self ):
842
840
# too little parameters
843
841
with self .assertRaises (sqlite .ProgrammingError ):
844
842
self .cu .execute ("insert into test(id) values (?)" )
845
843
846
- # TODO: RUSTPYTHON
847
- @unittest .expectedFailure
848
844
def test_execute_wrong_no_of_args3 (self ):
849
845
# no parameters, parameters are needed
850
846
with self .assertRaises (sqlite .ProgrammingError ):
@@ -911,8 +907,6 @@ def test_execute_dict_mapping_too_little_args(self):
911
907
with self .assertRaises (sqlite .ProgrammingError ):
912
908
self .cu .execute ("select name from test where name=:name and id=:id" , {"name" : "foo" })
913
909
914
- # TODO: RUSTPYTHON
915
- @unittest .expectedFailure
916
910
def test_execute_dict_mapping_no_args (self ):
917
911
self .cu .execute ("insert into test(name) values ('foo')" )
918
912
with self .assertRaises (sqlite .ProgrammingError ):
Original file line number Diff line number Diff line change @@ -1533,8 +1533,16 @@ mod _sqlite {
1533
1533
}
1534
1534
1535
1535
let st = stmt. lock ( ) ;
1536
+ let params_needed = st. bind_parameter_count ( ) ;
1537
+
1536
1538
if let OptionalArg :: Present ( parameters) = parameters {
1537
1539
st. bind_parameters ( & parameters, vm) ?;
1540
+ } else if params_needed > 0 {
1541
+ let msg = format ! (
1542
+ "Incorrect number of bindings supplied. The current statement uses {}, and 0 were supplied." ,
1543
+ params_needed
1544
+ ) ;
1545
+ return Err ( new_programming_error ( vm, msg) ) ;
1538
1546
}
1539
1547
1540
1548
let ret = st. step ( ) ;
@@ -2848,16 +2856,25 @@ mod _sqlite {
2848
2856
Ok ( ( ) )
2849
2857
}
2850
2858
2859
+ fn bind_parameter_count ( self ) -> c_int {
2860
+ unsafe { sqlite3_bind_parameter_count ( self . st ) }
2861
+ }
2862
+
2851
2863
fn bind_parameters_sequence (
2852
2864
self ,
2853
2865
seq : PySequence < ' _ > ,
2854
2866
vm : & VirtualMachine ,
2855
2867
) -> PyResult < ( ) > {
2856
- let num_needed = unsafe { sqlite3_bind_parameter_count ( self . st ) } ;
2857
- if seq. length ( vm) ? != num_needed as usize {
2868
+ let num_needed = self . bind_parameter_count ( ) ;
2869
+ let num_supplied = seq. length ( vm) ?;
2870
+
2871
+ if num_supplied != num_needed as usize {
2858
2872
return Err ( new_programming_error (
2859
2873
vm,
2860
- "Incorrect number of binding supplied" . to_owned ( ) ,
2874
+ format ! (
2875
+ "Incorrect number of bindings supplied. The current statement uses {}, and {} were supplied." ,
2876
+ num_needed, num_supplied
2877
+ ) ,
2861
2878
) ) ;
2862
2879
}
2863
2880
You can’t perform that action at this time.
0 commit comments