i'm losing my mind here;

to protect the client, i am 're-naming' the module names for confidentiality, but I have a seriously weird problem that is not adding up to anything intuitive for me at all.

We have a foundation module that deals with interacting with our databases... higher level modules then base themselves off this foundation,. which provides functionalities such as ->select, ->new, ->save, ->update, ->find ...

well, we've recently upgraded servers and moved towards apache2/modperl2

more precisely:

httpd-2.0.52-9.ent
mod_perl-1.99_16-4
perl-5.8.5-12.1

anyhow, forgive the mess, but here is a clip from the offending subroutine:

---------------
   $sql .= " ($args{FIELD} NOT IN $args{NOTIN}) " if $args{NOTIN};

    warn " <- line 903: $sql\n";

$sql =~ s/\sAND$//; warn " <- line 905: $sql\n";
$sql .= " GROUP BY $args{GROUPBY}" if $args{GROUPBY}; warn " <- line 906: $sql\n";
$sql .= " HAVING $args{HAVING}" if $args{HAVING}; warn " <- line 907: $sql\n";
$sql .= " ORDER BY $args{ORDERBY}" if $args{ORDERBY}; warn " <- line 908: $sql\n";


warn " <- line 910: $sql\n";
   $sql .= ' LIMIT 1' unless $wantarray;

   warn "ModuleName::build_sql -> \$sql = $sql\n";

   return $sql;
}

-----------------

in our error log we get:

------------------

<- line 895: SELECT ID FROM ultsys.rules WHERE ( hasvalue IN (392)
      AND field LIKE 'quotaleft'
      AND actionID = 1636
      AND criteria > 0) AND
<- line 899: SELECT ID FROM ultsys.rules WHERE ( hasvalue IN (392)
      AND field LIKE 'quotaleft'
      AND actionID = 1636
      AND criteria > 0) AND
<- line 903: SELECT ID FROM ultsys.rules WHERE ( hasvalue IN (392)
      AND field LIKE 'quotaleft'
      AND actionID = 1636
      AND criteria > 0) AND
SomeModule::Loader init!
SomeModule::Loader init!
SomeModule::Loader init!
SomeModule::Loader init!
SomeModule::Loader init!
Can't return outside a subroutine, <SOCKET> line 138.
Callback called exit, <SOCKET> line 138.

--------------------

now, i put the init warns in from of EVERY subroutine in the offending module...
you'll see the warns from previous lines, right up to 903... 904 is a blank, then 905 is a simple regex to slice off a trailing AND from the SQL statement we're trying to build... but the running never gets to the warn statement following the regular expression substitute... it never gets to the warns following line 905... but then we see a bunch of inits from an distantly related module not directly connected to this one (there is no call to it and no return this early), and them BANG, Callback called exit, etc... the page loads, but without the item from the db we tried to select and turn into an object. Other areas of the site successfully use this same routine without this problem...


it makes no sense...

ideas are welcome.

~jet








Reply via email to