X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXSql.pm;h=842e30054fc1a8c00db5f483d8593ef02b25e10b;hb=7d4b15681464d77945e7ea78ef60ed3305d57d95;hp=5d45eb94ea68108ba6b2e023f7edb32906981893;hpb=dc305f992d75a6b35edda9e1aefab510a3ed617e;p=spider.git diff --git a/perl/DXSql.pm b/perl/DXSql.pm index 5d45eb94..842e3005 100644 --- a/perl/DXSql.pm +++ b/perl/DXSql.pm @@ -1,7 +1,7 @@ # # The master SQL module # -# $Id$ +# # # Copyright (c) 2006 Dirk Koopman G1TLH # @@ -12,16 +12,13 @@ use strict; use DXDebug; -use vars qw($VERSION $BRANCH); -$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); -$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0)); -$main::build += $VERSION; -$main::branch += $BRANCH; - -our $active = 0; +use vars qw($active); +$active = 0; sub init { + my $dsn = shift; + return unless $dsn; return $active if $active; eval { @@ -63,7 +60,7 @@ sub connect my $dbh; eval { no strict 'refs'; - $dbh = DBI->connect($dsn, $user, $passwd, {AutoCommit => 0}); + $dbh = DBI->connect($dsn, $user, $passwd); }; unless ($dbh) { $active = 0; @@ -87,16 +84,19 @@ sub do eval { $self->{dbh}->do($s); }; } +sub begin_work +{ + $_[0]->{dbh}->begin_work; +} + sub commit { $_[0]->{dbh}->commit; - $_[0]->{dbh}->{AutoCommit} = 0; } sub rollback { $_[0]->{dbh}->rollback; - $_[0]->{dbh}->{AutoCommit} = 0; } sub quote @@ -112,7 +112,7 @@ sub prepare sub spot_insert_prepare { my $self = shift; - return $self->prepare('insert into spot values(?' . ',?' x 14 . ')'); + return $self->prepare('insert into spot values(?' . ',?' x 15 . ')'); } sub spot_insert @@ -122,6 +122,8 @@ sub spot_insert my $sth = shift; if ($sth) { + push @$spot, undef while @$spot < 15; + pop @$spot while @$spot > 15; eval {$sth->execute(undef, @$spot)}; } else { my $s = "insert into spot values(NULL,"; @@ -138,7 +140,8 @@ sub spot_insert $s .= $spot->[10] . ','; $s .= $spot->[11] . ','; $s .= (length $spot->[12] ? $self->quote($spot->[12]) : 'NULL') . ','; - $s .= (length $spot->[13] ? $self->quote($spot->[13]) : 'NULL') . ')'; + $s .= (length $spot->[13] ? $self->quote($spot->[13]) : 'NULL') . ','; + $s .= (length $spot->[14] ? $self->quote($spot->[14]) : 'NULL') . ')'; eval {$self->do($s)}; } } @@ -159,6 +162,7 @@ sub spot_search $expr =~ s/\$f11/spottercq/g; $expr =~ s/\$f12/spotstate/g; $expr =~ s/\$f13/spotterstate/g; + $expr =~ s/\$f14/ipaddr/g; $expr =~ s/\$f0/freq/g; $expr =~ s/\$f1/spotcall/g; $expr =~ s/\$f2/time/g; @@ -180,7 +184,7 @@ sub spot_search my $trange = $fdays ? "($fdays and $days)" : $days; $expr .= $expr ? " and $trange" : $trange; my $s = qq{select freq,spotcall,time,comment,spotter,spotdxcc,spotterdxcc, -origin,spotitu,spotcq,spotteritu,spottercq,spotstate,spotterstate from spot +origin,spotitu,spotcq,spotteritu,spottercq,spotstate,spotterstate,ipaddr from spot where $expr order by time desc limit $n}; dbg("sql expr: $s") if isdbg('search'); my $ref = $self->{dbh}->selectall_arrayref($s);