You are viewing a plain text version of this content. The canonical link for it is here.
Posted to embperl@perl.apache.org by "Cameron B. Prince" <cp...@rideware.com> on 2003/05/22 22:30:27 UTC
DBIx::Recordset Patch - Direct Query Input
Hey guys,
After digging around in the mailing list, I found the problem with
escaping... But was still stumped as to how I was going to convert some
rather complex queries to a new format I wasn't familiar with.
When I was applying the escaping patch, I decided to try a direct query
input. I discovered that I had to add the $append to the end because it
contains the LIMIT and OFFSET clauses which allow the paging effect to work.
Please let me know if I'm overlooking some reason why I shouldn't do it this
way.
Here's a sample call and the patch:
[-
use DBIx::Recordset ;
$fdat{'!DataSource'} = 'dbi:Pg:dbname=devdb' ;
$fdat{'$max'} = 50 ;
$fdat{'!Query'} = <<EOP;
SELECT a.user__id, a.title, a.dateadded, b.title AS hr_title, c.title AS
w2_title
FROM user a
LEFT OUTER JOIN hr b
ON a.hr__id=b.hr__id
LEFT OUTER JOIN w2 c
ON a.w2__id=c.w2__id
WHERE a.dateadded = (
SELECT MAX(dateadded)
FROM user
)
EOP
*set = DBIx::Recordset -> Search(\%fdat) ;
$names = $set -> Names ;
-]
<table>
<tr>
<th>[+ $names -> [$col] +]</th>
</tr>
<tr>
[- $rec = $set[$row] -]
<td>[+ $rec -> {$names->[$col]} +]</td>
</tr>
</table>
<br><br>
[+do { local $escmode = 3 ;$set->PrevNextForm
({-prev=>'<<Back', -next=>'Next>>'}, \%fdat) } +]
<br><br>
--- DBIx/Recordset.pm.orig 2003-05-23 03:14:50.000000000 -0500
+++ DBIx/Recordset.pm 2003-05-23 04:20:43.000000000 -0500
@@ -161,6 +161,7 @@
$self->{'*DBIAttr'} = $data_source->{'*DBIAttr'} ;
$self->{'*MainHdl'} = 0 ;
$self->{'*TableFilter'}= $data_source->{'*TableFilter'} ;
+ $self->{'*Query'} = $data_source->{'*Query'} ;
}
elsif (ref ($data_source) eq 'DBIx::Database')
{ # copy from database object
@@ -447,6 +448,7 @@
$self -> SetupMemberVar ('Order', $parm) ;
$self -> SetupMemberVar ('TableFilter', $parm) ;
$self -> SetupMemberVar ('DoOnConnect', $parm) ;
+ $self -> SetupMemberVar ('Query', $parm) ;
if ($self -> {'*Serial'})
@@ -1325,7 +1327,13 @@
$fields ||= '*';
$table = $self->{'*TabJoin'} || $self->{'*Table'} ;
- my $statement = "SELECT $fields FROM $table $where $expr $groupby
$group $orderby $order $append" ;
+ my $statement;
+
+ if ($self->{'*Query'}) {
+ $statement = $self->{'*Query'} . " " . $append;
+ } else {
+ $statement = "SELECT $fields FROM $table $where $expr $groupby
$group $orderby $order $append" ;
+ }
if ($self->{'*Debug'} > 1)
{
@@ -3063,9 +3071,11 @@
my $start = $self -> {'*StartRecordNo'} ;
my $max = $self -> {'*FetchMax'} - $self -> {'*FetchStart'} + 1 ;
-
+
my $esc = '' ;
- $esc = '\\' if (defined ($HTML::Embperl::escmode) &&
($HTML::Embperl::escmode & 1)) ;
+ $esc = '\\' if ((defined ($HTML::Embperl::escmode) &&
+ ($HTML::Embperl::escmode & 1)) || (defined ($Embperl::escmode) &&
+ ($Embperl::escmode & 1))) ;
my $buttons = "$esc<form method=$esc\"POST$esc\"$esc>$esc<input
type=$esc\"hidden$esc\" name=$esc\"\$start$esc\"
value=$esc\"$start$esc\"$esc>\n$esc<input type=$esc\"hidden$esc\"
name=$esc\"\$max$esc\" value=$esc\"$max$esc\"$esc>\n" ;
my $k ;
my $v ;
---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org