diff --git a/www/extern/egg/EGGDatabase.php b/www/extern/egg/EGGDatabase.php index af31dbb..290bb8c 100644 --- a/www/extern/egg/EGGDatabase.php +++ b/www/extern/egg/EGGDatabase.php @@ -104,9 +104,22 @@ class EGGDatabase } $stmt->execute(); - $r = $stmt->fetchAll(PDO::FETCH_ASSOC); - return $r; + return $stmt->fetchAll(PDO::FETCH_ASSOC); + } + + public function sql_query_assoc_pre_prep(PDOStatement $stmt, array $params) + { + $stmt->closeCursor(); + + foreach ($params as $p) + { + if (strpos($stmt->queryString, $p[0]) !== FALSE) $stmt->bindValue($p[0], $p[1], $p[2]); + } + + $stmt->execute(); + + return $stmt->fetchAll(PDO::FETCH_ASSOC); } public function sql_exec_prep(string $query, array $params) @@ -123,6 +136,20 @@ class EGGDatabase return $stmt->rowCount(); } + public function sql_exec_pre_prep(PDOStatement $stmt, array $params) + { + $stmt->closeCursor(); + + foreach ($params as $p) + { + if (str_contains($stmt->queryString, $p[0])) $stmt->bindValue($p[0], $p[1], $p[2]); + } + + $stmt->execute(); + + return $stmt->rowCount(); + } + /** * @param string $url * @param string $name @@ -224,17 +251,22 @@ class EGGDatabase public function insertNewCommits(string $source, Repository $repo, Branch $branch, array $commits) { $this->logger->proclog("Inserting " . count($commits) . " (new) commits into [" . $source . "|" . $repo->Name . "|" . $branch->Name . "]"); + + $stmtAddCommit = $this->pdo->prepare("INSERT INTO commits ([branch_id], [hash]) VALUES (:brid, :sha)"); + $stmtAddMD = $this->pdo->prepare("INSERT OR IGNORE INTO metadata ([hash], [author_name], [author_email], [committer_name], [committer_email], [message], [date], [parent_commits]) VALUES (:sha, :an, :am, :cn, :cm, :msg, :dat, :prt)"); + $stmtGetID = $this->pdo->prepare("SELECT id FROM commits WHERE [branch_id] = :brid AND [Hash] = :sha"); + foreach ($commits as $commit) { $strparents = implode(";", $commit->Parents); - $this->sql_exec_prep("INSERT INTO commits ([branch_id], [hash]) VALUES (:brid, :sha)", + $this->sql_exec_pre_prep($stmtAddCommit, [ [":brid", $branch->ID, PDO::PARAM_INT], [":sha", $commit->Hash, PDO::PARAM_STR], ]); - $this->sql_exec_prep("INSERT OR IGNORE INTO metadata ([hash], [author_name], [author_email], [committer_name], [committer_email], [message], [date], [parent_commits]) VALUES (:sha, :an, :am, :cn, :cm, :msg, :dat, :prt)", + $this->sql_exec_pre_prep($stmtAddMD, [ [":sha", $commit->Hash, PDO::PARAM_STR], [":an", $commit->AuthorName, PDO::PARAM_STR], @@ -246,7 +278,7 @@ class EGGDatabase [":prt", $strparents, PDO::PARAM_STR], ]); - $dbid = $this->sql_query_assoc_prep("SELECT id FROM commits WHERE [branch_id] = :brid AND [Hash] = :sha", + $dbid = $this->sql_query_assoc_pre_prep($stmtGetID, [ [":brid", $branch->ID, PDO::PARAM_INT], [":sha", $commit->Hash, PDO::PARAM_STR], diff --git a/www/extern/egg/RemoteSource.php b/www/extern/egg/RemoteSource.php index a6a8500..a353d56 100644 --- a/www/extern/egg/RemoteSource.php +++ b/www/extern/egg/RemoteSource.php @@ -90,7 +90,6 @@ abstract class StandardGitConnection implements IRemoteSource if ($repo_changed) $anyChanged = true; } - $this->logger->proclog("Committing SQL-transaction for [" . $this->name . "|" . $repo->Name . "]"); $db->commitTransaction(); } @@ -347,7 +346,7 @@ abstract class StandardGitConnection implements IRemoteSource } if ($branch->Head === null) { - $this->logger->proclog("HEAD pointer in new Branch: [" . $this->name . "|" . $repo->Name . "|" . $branch->Name . "] set to ". $branch->HeadFromAPI ." Queried " . count($newcommits) . " commits (reused $reusedFromExisting commits from DB)"); + $this->logger->proclog("HEAD pointer in new Branch: [" . $this->name . "|" . $repo->Name . "|" . $branch->Name . "] set to {".substr($branch->HeadFromAPI ?? 'NULL', 0, 8)."} - Queried " . count($newcommits) . " commits (reused $reusedFromExisting commits from DB)"); } else { $this->logger->proclog("HEAD pointer in Branch: [" . $this->name . "|" . $repo->Name . "|" . $branch->Name . "] no longer matches. Re-queried all " . count($newcommits) . " commits (old HEAD := {".substr($branch->Head ?? 'NULL', 0, 8)."}, missing: [" . join(", ", array_map(function($p){return substr($p ?? 'NULL', 0, 8);}, $next_sha)) . "] )"); }