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):
836836 with self .assertRaises (sqlite .ProgrammingError ):
837837 self .cu .execute ("insert into test(id) values (?)" , (17 , "Egon" ))
838838
839- # TODO: RUSTPYTHON
840- @unittest .expectedFailure
841839 def test_execute_wrong_no_of_args2 (self ):
842840 # too little parameters
843841 with self .assertRaises (sqlite .ProgrammingError ):
844842 self .cu .execute ("insert into test(id) values (?)" )
845843
846- # TODO: RUSTPYTHON
847- @unittest .expectedFailure
848844 def test_execute_wrong_no_of_args3 (self ):
849845 # no parameters, parameters are needed
850846 with self .assertRaises (sqlite .ProgrammingError ):
@@ -911,8 +907,6 @@ def test_execute_dict_mapping_too_little_args(self):
911907 with self .assertRaises (sqlite .ProgrammingError ):
912908 self .cu .execute ("select name from test where name=:name and id=:id" , {"name" : "foo" })
913909
914- # TODO: RUSTPYTHON
915- @unittest .expectedFailure
916910 def test_execute_dict_mapping_no_args (self ):
917911 self .cu .execute ("insert into test(name) values ('foo')" )
918912 with self .assertRaises (sqlite .ProgrammingError ):
Original file line number Diff line number Diff line change @@ -1533,8 +1533,16 @@ mod _sqlite {
15331533 }
15341534
15351535 let st = stmt. lock ( ) ;
1536+ let params_needed = st. bind_parameter_count ( ) ;
1537+
15361538 if let OptionalArg :: Present ( parameters) = parameters {
15371539 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) ) ;
15381546 }
15391547
15401548 let ret = st. step ( ) ;
@@ -2848,16 +2856,25 @@ mod _sqlite {
28482856 Ok ( ( ) )
28492857 }
28502858
2859+ fn bind_parameter_count ( self ) -> c_int {
2860+ unsafe { sqlite3_bind_parameter_count ( self . st ) }
2861+ }
2862+
28512863 fn bind_parameters_sequence (
28522864 self ,
28532865 seq : PySequence < ' _ > ,
28542866 vm : & VirtualMachine ,
28552867 ) -> 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 {
28582872 return Err ( new_programming_error (
28592873 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+ ) ,
28612878 ) ) ;
28622879 }
28632880
You can’t perform that action at this time.
0 commit comments