Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10875[/thread]

quoting problem



<< >> 7 Einträge, 1 Seite
Froschpopo
 2007-11-23 06:34
#102858 #102858
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich möchte folgendes machen:
Code: (dl )
WHERE a.user_id = b.remote_id


meine SQL::Abstract Parameter sehen so aus:
Code: (dl )
1
2
3
 my %where  = (
user_id => 'b.remote_id'
);

leider bekomme ich jedesmal kein Ergebnis, aber auch keine Fehlermeldung.
Ich vermute daher, dass b.remote_id falsch gequoted wird, es also von mySQL so interpretiert wird:
Code: (dl )
WHERE a.user_id = 'b.remote_id'


Er hält b.remote_id für einen gesuchten String.
Weiss jemand abhilfe?

Hab auch schon eine Scalarref probiert, ergebnislos.
renee
 2007-11-23 10:33
#102875 #102875
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
%where = (
  't.col1' => \'= t.col2',
);
my ($stmt) = $sql->where( \%where);
print $stmt,"\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2007-11-23 14:37
#102907 #102907
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
also bei mir funktioniert es nicht.
Im Output steht hinterher:

WHERE t.col1 = ?

Der ? ist ja ein Platzhalter der gequeted wird.
renee
 2007-11-23 14:50
#102911 #102911
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Siehst Du, dass es eine Skalarreferenz ist?

Du kannst es alternativ auch so schreiben:
Code (perl): (dl )
1
2
3
4
5
6
7
my $column_2 = '= t.col2';

my %where = (
  't.col1' => \$column_2,
);
my ($stmt) = $sql->where( \%where);
print $stmt,"\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2007-11-23 14:52
#102913 #102913
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Hab ich gemacht, aber bei stmt wird trotzdem = c.col2 durch ? ersetzt !
Ich hatte die Scalarref ja auch gestern schon probiert (steht auch in meinem ersten Post) weil pq mir einen ähnlichen Tipp gegeben hatte.
Aber ich glaub der Fehler liegt noch woanders. Ich reduziere grad mal meinen Quelltext etwas um der Sache auf die Schliche zu kommen.
renee
 2007-11-23 14:55
#102915 #102915
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welche Version von SQL::Abstract verwendest Du?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use strict;
use warnings;
use lib qw(./lib);
use SQL::Abstract;

my $sql = SQL::Abstract->new;

print "VERSION: ", SQL::Abstract->VERSION(), "\n";

my %where = (
  't.col1' => \'= t.col2',
);
my ($stmt) = $sql->where( \%where);
print $stmt,"\n";


Code: (dl )
1
2
3
C:\>abstract_test.pl
VERSION: 1.22
WHERE ( t.col1 = t.col2 )


Der Code ist also (ausnahmsweise mal) getestet...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2007-11-23 15:07
#102919 #102919
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ah jetz hab ichs. Das Problem war, dass an einer anderen Stelle $where{..} die Eigenschaft überschrieben hat. Sorry, meine Schuld! Danke für deine Hilfe!
<< >> 7 Einträge, 1 Seite



View all threads created 2007-11-23 06:34.