From 4a1e1dc124e4d78950986f12a99f7bc0770ccba1 Mon Sep 17 00:00:00 2001 From: Abel `00z' Camarillo <00z@the00z.org> Date: Wed, 25 Jun 2008 21:58:59 -0500 Subject: [PATCH] Fixed edificio_extension filled bugs. --- put | 98 +++++++++++++++++++++++++++++++++------------------------------------ 1 file changed, 47 insertions(+), 51 deletions(-) diff --git a/put b/put index fd8f197..d0e1514 100755 --- a/put +++ b/put @@ -49,7 +49,7 @@ $PARSED = ".parsed"; $INVALID = ".invalid"; # CSV format -my @csv_keys; +our @csv_keys; push @csv_keys , "id"; push @csv_keys , "cuenta"; push @csv_keys , "origen"; @@ -108,9 +108,10 @@ sub db_search { #warn join ',', @_; - my $dbh = shift @_; - my $sql = shift @_; - return map { @{$_} } @{$dbh->selectall_arrayref("$sql")}; + my ($dbh, $sql ) = @_; + $logger->write(2,qq/`$sql'\n/); + my $rows = $dbh->selectall_arrayref("$sql"); + return ( @$rows ? @{@$rows[0]}[0] : undef); } # A *very* expensive operation, use with caution. @@ -146,13 +147,31 @@ put_into_db my $data = shift @_; + my $sql; + # Add the quotes needed by MySQL - while ( my ($key, $value) = each %$data) + map { $data->{$_} = $dbh->quote($data->{$_}) } keys %$data; + + my ($results, $extension_id); + +# FIXME: an extension should already be at the db. +# FIXME: adds an extension to the db only if it does not is there + unless ($results = db_search($dbh + , qq/select extension.id + from edificio, edificio_extension, extension + where numero=$data->{extension} and edificio.id=$data->{edificio} + and edificio.id<=>edificio_extension.edificio_id + and edificio_extension.extension_id<=>extension.id/) ) { - $data->{"$key"} = $dbh->quote("$value"); + $sql = qq/INSERT INTO extension SET numero=$data->{extension} /; + $logger->write(2, "executing $sql\n"); + $dbh->do($sql); + $extension_id = db_search($dbh, qq/select last_insert_id()/) + } else { + $extension_id = $results; } - my $sql; + $extension_id = $dbh->quote("$extension_id"); $sql = "INSERT INTO llamada SET cuenta=$data->{cuenta} @@ -176,71 +195,38 @@ put_into_db # insert llamada $dbh->do($sql); - ($data->{'id'}) = db_search($dbh, qq/select last_insert_id()/); + $data->{'id'} = db_search($dbh, qq/select last_insert_id()/); $data->{'id'} = $dbh->quote($data->{'id'}); - -#print join ',' , %data; - -# FIXME: an extension should already be at the db. -# insert extension unless it exists - my @results; - - my $extension_id; - if ( scalar (@results = db_search($dbh - , qq/select * from extension where numero=$data->{extension}/)) == 0 ) - { - $sql = qq/INSERT INTO extension SET numero=$data->{extension} /; - - $logger->write(2, "executing $sql\n"); - - $dbh->do($sql); - ($extension_id) = db_search($dbh, qq/select last_insert_id()/) - } else { - ($extension_id) = @results; - } - - $extension_id =$dbh->quote("$extension_id"); - - -# FIXME: an edificio should already be at the db. - $sucess = 0; - unless ( @results = db_search($dbh - , qq/select * from edificio where id=$data->{edificio}/)) - { - $sql = "INSERT INTO edificio SET id=$data->{edificio}"; - - - $success = $dbh->do($sql); - } - # insert extension_llamada + unless ( $results = db_search($dbh, qq/select * from extension_llamada where + extension_llamada.extension_id<=>$extension_id + and extension_llamada.llamada_id=$data->{id}/)) + { $sql = qq/INSERT INTO extension_llamada SET extension_id=$extension_id , llamada_id=$data->{'id'}/; $logger->write(2, "executing $sql\n"); $dbh->do($sql); - -# FIXME: Remove this - print_tables $dbh if $logger->level() > 1; - + } - $sucess = 0; # insert edificio_extension - unless ( @results = db_search($dbh + unless ( $results = db_search($dbh , qq/select extension_id from edificio_extension where extension_id=$extension_id/)) { - $sql = qq/insert into edificio_extension set edificio_id=$data->{edificio} , extension_id=$extension_id/; $logger->write(2, "executing $sql\n"); - $success = $dbh->do($sql); + $dbh->do($sql); } +# FIXME: Remove this + print_tables $dbh if $logger->level() > 1; + $logger->write(2, "\n", "x" x 50, "\n"); } @@ -316,6 +302,16 @@ my $dbh = DBI->connect( "DBI:mysql:$db_data{db_name}" ,"$db_data{db_user}" ,"$db_data{db_passwd}", {PrintError=>0,RaiseError=>1}) or croak "ERROR: $!"; +# FIXME: an edificio should already be at the db. +# FIXME: adds an edificio to the db only if it does not is there +unless ( db_search($dbh + , qq/select id from edificio where id='$edificio'/)) +{ + my $sql = qq/INSERT INTO edificio SET id='$edificio'/; + $logger->write(2, "executing $sql\n"); + $dbh->do($sql); +} + my $lines = 0; my $good_lines = 0; my $invalid_lines = 0; -- 2.11.4.GIT