[rtg] Bug in targetmaker [WAS: RTG 9]
Brandon Ewing
nicotine at warningg.com
Mon Mar 24 15:49:12 EDT 2008
On Fri, Mar 21, 2008 at 04:34:24PM -0500, Brandon Ewing wrote:
> On Sun, Mar 02, 2008 at 07:19:45AM -0600, Brian T. O'Neill wrote:
> > Let me know what issue's you're seeing please, I'll get them taken care
> > of ASAP.
> >
> > Brian
>
> There appears to be a bug in the CVS version of targetmaker, but I'm no perl
> guru, so I'm having trouble figuring out how to fix it.
>
> Every time I run targetmaker, it always inserts additional rows into
> options_table. From looking at the code, it appears that it is trying to
> check to see if a row exists, inserting it if it doesn't, and only updating
> if necessary.
>
> Unfortunately, something appears to be going horribly wrong.
>
> Wouldn't it make more sense to replace the whole check, INSERT/UPDATE thing
> with just a REPLACE statement, since it appears there's already a key
> composed of the 3 columns?
>
Attached patch changes options_table.graphname into a primary key, removes
the select / insert / update check with a simple REPLACE.
--
Brandon Ewing (nicotine at warningg.com)
-------------- next part --------------
--- targetmaker/etc/targetmaker.orig 2008-03-24 14:30:37.000000000 -0500
+++ targetmaker/etc/targetmaker 2008-03-24 14:36:55.000000000 -0500
@@ -748,7 +748,7 @@
(graphname VARCHAR(64) NOT NULL, options VARCHAR(128) NOT NULL, \
class VARCHAR(32) NOT NULL )";
&sql_insert($sql);
- $sql = "CREATE INDEX options_graphname_idx on options_table(graphname)";
+ $sql = "CREATE UNIQUE INDEX options_graphname_idx on options_table(graphname)";
&sql_insert($sql);
$sql = "CREATE INDEX options_options_idx on options_table(options)";
&sql_insert($sql);
@@ -760,31 +760,8 @@
$sql = "DELETE FROM mapping_table WHERE graphname='$graph'";
&sql_insert($sql);
- if($DB_TYPE =~ /mysql/i) {
- $sql = "SELECT * FROM options_table where graphname='$graph'";
- debug("SQL: $sql");
- $sth = $dbh->prepare($sql)
- or die "Can't prepare $sql: $dbh->errstr\n";
- } elsif($DB_TYPE =~ /oracle/i) {
- $sql = "SELECT * FROM options_table where graphname=:graph";
- debug("SQL: $sql");
- $sth = $dbh->prepare($sql)
- or die "Can't prepare $sql: $dbh->errstr\n";
- $sth->bind_param(":graph",$graph);
- }
- my $rv = $sth->execute
- or die "can't execute the query: $sth->errstr\n";
- my @row = $sth->fetchrow_array();
- unless ( $#row == 0 ) {
- $sql = "INSERT INTO options_table VALUES ('$graph','@{$table_options{$graph}}','$table_class{$graph}')";
- &sql_insert($sql);
- }
- else {
- if($row[1] ne join(@{$table_options{$graph}}) || $row[2] ne $table_class{$graph}) {
- $sql = "UPDATE options_table SET options='".join(" ",@{$table_options{$graph}})."',class='$table_class{$graph}' WHERE graphname='$graph'";
- &sql_insert($sql);
- }
- }
+ $sql = "REPLACE INTO options_table VALUES ('$graph','@{$table_options{$graph}}','$table_class{$graph}')";
+ &sql_insert($sql);
foreach $table (@{$table_map{$graph}}) {
$sql = "SELECT * FROM mapping_table WHERE graphname='$graph' AND tablename='$table'";
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.grdata.com/pipermail/rtg/attachments/20080324/30b2cd6d/attachment.bin
More information about the RTG
mailing list