*** DBMirror.pl Mon Aug 11 10:49:33 2003 --- DBMirror.pl.new Mon Aug 11 10:38:08 2003 *************** *** 399,404 **** --- 399,420 ---- my $firstIteration=1; my %recordValues = extractData($pendingResults,$currentTuple); + my $doInsert = 1; + + my $specialTablesResult = $masterConn->exec("select siteidkeyname from specialtables where tblname='".$tableName."'"); + if ($specialTablesResult->resultStatus != PGRES_TUPLES_OK) { + my $errorMessage = $masterConn->errorMessage . "\n"; + logErrorMessage("Error fetching special tables:".$errorMessage); + die; + } + my $numspecialTablesResult = $specialTablesResult->ntuples; + my $specialTableSiteIdKeyName; + if ($numspecialTablesResult > 0) { + $specialTableSiteIdKeyName = $specialTablesResult->getvalue(0,0); + if ($recordValues{$specialTableSiteIdKeyName} != $::slaveInfo->{"slaveSiteId"}) { + $doInsert = 0; + } + } #Now build the insert query. my $insertQuery = "INSERT INTO $tableName ("; *************** *** 421,427 **** $firstIteration=0; } $valuesQuery .= ")"; ! sendQueryToSlaves(undef,$insertQuery . $valuesQuery); return $currentTuple; } --- 437,445 ---- $firstIteration=0; } $valuesQuery .= ")"; ! if ($doInsert == 1) { ! sendQueryToSlaves(undef,$insertQuery . $valuesQuery); ! } return $currentTuple; } *************** *** 481,486 **** --- 499,506 ---- my $firstField=1; %dataHash = extractData($pendingResult,$currentTuple); + my $doDelete = 1; + my $counter=0; my $deleteQuery = "DELETE FROM $tableName WHERE "; foreach $currentField (keys %dataHash) { *************** *** 570,576 **** my $updateQuery = "UPDATE $tableName SET "; my $currentField; ! my %keyValueHash; my %dataValueHash; --- 590,596 ---- my $updateQuery = "UPDATE $tableName SET "; my $currentField; ! my $doUpdate=1; my %keyValueHash; my %dataValueHash; *************** *** 585,590 **** --- 605,625 ---- #values for the entire row AFTER the update. %dataValueHash = extractData($pendingResult,$currentTuple+1); + my $specialTablesResult = $masterConn->exec("select siteidkeyname from specialtables where tblname='".$tableName."'"); + if ($specialTablesResult->resultStatus != PGRES_TUPLES_OK) { + my $errorMessage = $masterConn->errorMessage . "\n"; + logErrorMessage("Error fetching special tables:".$errorMessage); + die; + } + my $numspecialTablesResult = $specialTablesResult->ntuples; + my $specialTableSiteIdKeyName; + if ($numspecialTablesResult > 0) { + $specialTableSiteIdKeyName = $specialTablesResult->getvalue(0,0); + if ($dataValueHash{$specialTableSiteIdKeyName} != $::slaveInfo->{"slaveSiteId"}) { + $doUpdate = 0; + } + } + $firstIteration=1; foreach $currentField (keys (%dataValueHash)) { if($firstIteration==0) { *************** *** 626,632 **** $firstIteration=0; } ! sendQueryToSlaves($transId,$updateQuery); return $currentTuple+1; } --- 661,669 ---- $firstIteration=0; } ! if ($doUpdate == 1) { ! sendQueryToSlaves($transId,$updateQuery); ! } return $currentTuple+1; }