private function updateRawFacts(array $map) { foreach ($map as $phid => $facts) { assert_instances_of($facts, 'PhabricatorFactRaw'); } $phids = array_keys($map); if (!$phids) { return; } $table = new PhabricatorFactRaw(); $conn = $table->establishConnection('w'); $table_name = $table->getTableName(); $sql = array(); foreach ($map as $phid => $facts) { foreach ($facts as $fact) { $sql[] = qsprintf($conn, '(%s, %s, %s, %d, %d, %d)', $fact->getFactType(), $fact->getObjectPHID(), $fact->getObjectA(), $fact->getValueX(), $fact->getValueY(), $fact->getEpoch()); } } $table->openTransaction(); queryfx($conn, 'DELETE FROM %T WHERE objectPHID IN (%Ls)', $table_name, $phids); if ($sql) { foreach (array_chunk($sql, 256) as $chunk) { queryfx($conn, 'INSERT INTO %T (factType, objectPHID, objectA, valueX, valueY, epoch) VALUES %Q', $table_name, implode(', ', $chunk)); } } $table->saveTransaction(); }