Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
"be consistent"
 
PerlMonks  

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

by planetscape (Canon)
on Jun 29, 2011 at 04:42 UTC ( #911893=note: print w/ replies, xml ) Need Help??


in reply to Re: "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

Actually, there seems to be a problem with this fix.

If I run the code from Re: DumpArrayToExcel (for example):

use DBI; my $dbh=DBI->connect('dbi:CSV:'); my $AoA =[ ['number','name','sex','age'], ['0','Jack','M','28'], ['1',"Marry",'F','29'] ]; $dbh->do("CREATE TABLE worksheet AS IMPORT(?)",{},$AoA); __END__

I get the following error on Strawberry Perl (where I installed your patch), but not on Cygwin Perl, which was unchanged:

DBD::CSV::db do failed: You passed 1 parameters where 0 required [for +Statement "CREATE TABLE worksheet AS IMPORT(?)"] at 443517.pl line 6.
planetscape


Comment on Re^2: "You passed 0 parameters where 1 required" error using DBD::CSV, an INNER JOIN, and a WHERE clause
Select or Download Code
Re^3: "You passed 0 parameters where 1 required" error using DBD::CSV, an INNER JOIN, and a WHERE clause
by Tux (Monsignor) on Jun 29, 2011 at 06:43 UTC

    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

      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
Node Status?
node history
Node Type: note [id://911893]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (12)
As of 2014-04-17 08:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (441 votes), past polls