CGI-Bus
view release on metacpan or search on metacpan
lib/CGI/Bus/tmsql.pm view on Meta::CPAN
# Assembly Where Part of SQL Select
foreach my $v (($opt !~/!q/ ? $swps :'')
, $swfs
) {
my $vv=(ref($v) ? &$v($s): $v);
$sws .=(!$sws ? '' : ' AND ') .'(' . $vv.') ' if $vv
}
foreach my $v ( ($opt =~/!q/ ? '' : $swps)
, ($opt =~/!q/ ? '' : ($s->qparamsw('WHERE')||($vw && $vw->{-wherepar})||''))
) {
my $vv=(!defined($v) ? '' : ref($v) ? &$v($s): $v =~/^ *$/ ? '' : $v);
$swts .=(!$swts ? '' : ' AND ') .'(' . $vv .') ' if $vv
}
if ($opt !~/!q/ && $s->{-ftext} && $s->qparamsw('FTEXT')) {
my $c =$s->{-ftext};
my $v =$s->qparamsw('FTEXT');
$c =~s/%\$_/$s->dbi->quote('%' .$v .'%')/ge;
$c =~s/\$_/$s->dbi->quote($v)/ge;
$sws .=(!$sws ? '' : ' AND ') ."($c)";
$swts .=(!$swts ? '' : ' AND ') ."($c)"
}
if ($vw && $vw->{-gant1}) {
$sws .=(!$sws ? '' : ' AND ')
.'(' .join(' AND ', map {"$_ IS NOT NULL"} $vw->{-gant1}, $vw->{-gant2}) .')'
}
$s->{-genwhr} =$sws;
$s->{-genfrom} =$sts;
# Assembly OrderBy Part of SQL Select
$sobs =join(',', map {ref($_) ? join(' ',@$_): $_} @$sobs) if ref($sobs);
# Assembly SQL Select Statement
my $lr =!$s->dbi ? undef : ($s->qparamsw('LIMIT') || ($vw && $vw->{-listrnm}) || $s->{-listrnm});
$s->{-gensel} =
' FROM ' .$sts
.($sws ? " WHERE $sws " : '')
.($vw && $vw->{-groupby} ? ' GROUP BY ' .$vw->{-groupby} .' ' :'')
.($sobs ? " ORDER BY $sobs " :'')
.(!$lr ? '' : eval{$s->dbi->{Driver}->{Name} eq 'mysql'} ? (' LIMIT ' .($lr+1) .' ') : '')
;
$s->{-genselg} =$vw && $vw->{-gant1}
? 'SELECT MIN(' .$vw->{-gant1} .'), MAX(' .$vw->{-gant2} .')'
. ', MAX(' .$vw->{-gant1} .'), MIN(' .$vw->{-gant2} .')'
#.' ' .$s->{-gensel} # 'order by' clause may contain fields to be defined in 'select' list
.' FROM ' .$sts
.($sws ? " WHERE $sws " : '')
: '';
$s->{-gensel} =
'SELECT ' .$sfs .($vw && $vw->{-gant1} ? ', ' .join(', ', $vw->{-gant1}, $vw->{-gant2}) : '')
.$s->{-gensel};
$s->{-genselt} =$swts;
}
if ($opt =~/x/ && $s->dbi) { # Execute SQL Statement
my $p =$s->parent;
my $g =$s->cgi;
if ($opt !~/m/) {
my $t =$p->{-htmlstart}->{-title}||$p->{-htpgstart}->{-title}||'';
print '<div class="MenuArea">'
,($vw && $vw->{-cmt}
?('<strong class="MenuArea MenuHeader">'
,$p->htmlescape(($t ? "$t - " : '' ), (ref($vw->{-cmt}) ? $vw->{-cmt}->[0] : $vw->{-cmt}))
,"</strong><br />\n")
:())
,($vw && $vw->{-cmt} && ref($vw->{-cmt})
?('<span class="MenuArea MenuComment">'
,join("<br />\n"
,map {$p->htmlescape($_)} @{$vw->{-cmt}}[1..$#{$vw->{-cmt}}])
,"<br /></span>\n")
:())
,($s->{-genselt}
? ('<span class="MenuArea MenuComment" style="font-size: smaller;">'
,$p->htmlescape($s->{-genselt})
,"</span>\n")
:())
,"<hr class=\"MenuArea MenuHeader\"/></div>\n";
}
my $c;
my ($gt1, $gt2, $gm1, $gm2, $gi1, $gi2, $gv1, $gv2, $gs0);
my $r;
my $rh;
if (!$dsub) {
if ($s->{-genselg}) {
eval('use POSIX');
$s->pushmsg($s->{-genselg});
$s->_explain($s->{-genselg});
$c =$s->dbi->prepare($s->{-genselg});
$c->execute;
if ($gt2 =$c->fetchrow_arrayref) {
$gt1 =defined($gt2->[3]) && $gt2->[3] lt $gt2->[0] ? $gt2->[3] : $gt2->[0];
$gt2 =defined($gt2->[2]) && $gt2->[2] gt $gt2->[1] ? $gt2->[2] : $gt2->[1];
if ($gt1 ||$gt2) {
$gm1 =int($gt1 =~/(\d+)-(\d+)-(\d+)\s*(\d*):(\d*):(\d*)/ && (POSIX::mktime($6, $5, $4, $3, $2-1, $1 -1900)/86400)) +1;
$gm2 =int($gt2 =~/(\d+)-(\d+)-(\d+)\s*(\d*):(\d*):(\d*)/ && (POSIX::mktime($6, $5, $4, $3, $2-1, $1 -1900)/86400)) +1;
$gs0 =$vw && $vw->{-htmlg1}
?$vw->{-htmlg1}
:'<td valign=top bgcolor=gray>#</td>';
if ($gm1 >$gm2) {
$c =$gt1; $gt1 =$gt2; $gt2 =$c;
$c =$gm1; $gm1 =$gm2; $gm2 =$c;
}
$s->pushmsg("Gant margins retrieved: $gt1 (" .gmtime($gm1*86400) ."), $gt2 (" .gmtime($gm2*86400) .")");
}
}
}
$s->pushmsg($s->{-gensel});
$s->_explain($s->{-gensel});
$c =$s->dbi->prepare($s->{-gensel});
$c->execute;
}
else {
$dsub =&$dsub($s,$vw,$cnd,$sfdl,$rh);
}
my $lr=$s->qparamsw('LIMIT') ||($vw && $vw->{-listrnm}) ||$s->{-listrnm};
my $rc =0;
my @hr0=$vw && $vw->{-href} ? @{$vw->{-href}} :();
$hr0[0] =$p->qurl if !$hr0[0];
$hr0[1] =$s->pxcb('-cmd') if !$hr0[1];
$hr0[2] ='-sel' if !$hr0[2];
my $mh =$vw && $vw->{-hrefc} ? $vw->{-hrefc} :0;
my $mr =$#{$vfnl};
$mh =$mr if $mh <0;
local $_;
print $vw && $vw->{-htmlts} ? $vw->{-htmlts}
: $s->{-htmlts} ? $s->{-htmlts}
: $gm2 ? "<font style=\"font-size: smaller;\">\n<table class=\"ListTable\" rules=all border=1 cellspacing=0 frame=void style=\"font-size: x-small;\">\n"
# rules=rows|all frame=void
# : "<table class=\"ListTable\">\n";
: "<table class=\"ListTable\" cellpadding=\"3%\">\n";
# : "<table class=\"ListTable\" cellpadding=3>\n";
# : "<table class=\"ListTable\" rules=all border=1 cellspacing=0 frame=void>\n";
if ($opt !~/m/) {
print '<thead><tr>'
,map {
my $v =$sfdl->[$_]->{-lbl}||''; # ||$sfdl->[$_]->{-fld}
('<th align="left" valign="top" class="ListTable" title="'
( run in 1.500 second using v1.01-cache-2.11-cpan-39bf76dae61 )