in reply to Re^2: "You passed 0 parameters where 1 required" error using DBD::CSV, an INNER JOIN, and a WHERE clause
in thread "You passed 0 parameters where 1 required" error using DBD::CSV, an INNER JOIN, and a WHERE clause

This quite obviously is a bug in SQL::Statement, as when I display the requireed parameters (r) and the parameters actually passed (p), I see this:

{ p => [ [ [ 'number', 'name', 'sex', 'age' ], [ 0, 'Jack', 'M', 28 ], [ 1, 'Marry', 'F', 29 ] ] ], r => [ bless ({ num => 0 }, 'SQL::Statement::Param' ) ] }

You could disable the complete parameter count match test if the required params is a blessed SQL::Statement::Param object, but I'm afraid that is sweeping problems under the carpet.

Update: the this statement passed by accident before my fix, as the required list of parameters consisted of only one (wrong) item: an unchecked blessed object. The number of items in the parameters passed was also just one single item: a list reference. The old test just check the lowest level where one happens to be one and the test passed.


Enjoy, Have FUN! H.Merijn
  • Comment on Re^3: "You passed 0 parameters where 1 required" error using DBD::CSV, an INNER JOIN, and a WHERE clause
  • Select or Download Code

Replies are listed 'Best First'.
Re^4: "You passed 0 parameters where 1 required" error using DBD::CSV, an INNER JOIN, and a WHERE clause
by planetscape (Chancellor) on Jun 29, 2011 at 06:50 UTC

    Thank you.

    What are the chances of getting this bug squashed in the near future? Or, what version(s) of the module(s) should I revert to?

    planetscape

      Your best bet for now is to disable the test in these cases. The original test was (very) wrong and the new test is incomplete and thus broken for now. The new code could look something like:

      my @req_prm = $stmt->params (); unless (@req_prm == 1 && ref $req_prm[0] eq "SQL::Statement::Param" +) { my $n_req = @req_prm == 1 && ref $req_prm[0] ? $req_prm[0]->num + : scalar @req_prm; unless ($n_req == (my $nparm = @$params)) { my $msg = "You passed $nparm parameters where $n_req requir +ed"; $sth->set_err ($DBI::stderr, $msg); return; } }

      But do not see this as a fix, as it is cowardly running away from problems hiding in the dark.


      Enjoy, Have FUN! H.Merijn