Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^3: "You passed 0 parameters where 1 required" error using DBD::CSV, an INNER JOIN, and a WHERE clause

by Tux (Canon)
on Jun 29, 2011 at 06:43 UTC ( [id://911904]=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://911904]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (3)
As of 2024-04-16 21:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found