Protokoll #10415
| ID | 10415 |
|---|---|
| Zeitstempel | 2025-12-23 15:17:40.645233 |
| Client | root |
| IP | Warning: Undefined array key "request_ip" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 |
| Modell | claude-sonnet-4-20250514 |
| Status | completed |
| Tokens | 6,334 (Input: 0, Output: 0) |
| Dauer | 105 ms |
| Request-Zeit | Warning: Undefined array key "request_timestamp" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 18 |
| Response-Zeit | - |
Warning: Undefined array key "error_message" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 22
Request
{
"event": "PreToolUse",
"tool_name": "Edit",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/Persistence\/CodeAnalysisRepository.php",
"old_string": " \/**\n * @param array<array<string, mixed>> $items\n *\/\n public function saveBatch(array $items, string $scanId): int\n {\n if (empty($items)) {\n return 0;\n }\n\n $this->pdo->beginTransaction();\n\n try {\n $stmt = $this->pdo->prepare('\n INSERT INTO code_analysis\n (scan_id, file_path, file_name, extension, directory, file_size, line_count,\n modified_at, namespace, classes, functions, parse_error, triggered_by)\n VALUES\n (:scan_id, :file_path, :file_name, :extension, :directory, :file_size, :line_count,\n :modified_at, :namespace, :classes, :functions, :parse_error, :triggered_by)\n ');\n\n $count = 0;\n foreach ($items as $item) {\n $stmt->execute([\n 'scan_id' => $scanId,\n 'file_path' => $item['file_path'],\n 'file_name' => $item['file_name'],\n 'extension' => $item['extension'],\n 'directory' => $item['directory'],\n 'file_size' => $item['file_size'],\n 'line_count' => $item['line_count'],\n 'modified_at' => $item['modified_at'],\n 'namespace' => $item['namespace'],\n 'classes' => json_encode($item['classes'] ?? [], JSON_UNESCAPED_UNICODE),\n 'functions' => json_encode($item['functions'] ?? [], JSON_UNESCAPED_UNICODE),\n 'parse_error' => $item['parse_error'],\n 'triggered_by' => $item['triggered_by'] ?? 'web',\n ]);\n $count++;\n }\n\n $this->pdo->commit();\n\n return $count;\n } catch (\\Throwable $e) {\n $this->pdo->rollBack();\n\n throw $e;\n }\n }",
"new_string": " \/**\n * @param array<array<string, mixed>> $items\n *\/\n public function saveBatch(array $items, string $scanId): int\n {\n if (empty($items)) {\n return 0;\n }\n\n $this->pdo->beginTransaction();\n\n try {\n $analysisStmt = $this->pdo->prepare('\n INSERT INTO code_analysis\n (scan_id, file_path, file_name, extension, directory, file_size, line_count,\n modified_at, namespace, classes, functions, uses, extends_class,\n implements_interfaces, traits_used, constructor_deps, parse_error, triggered_by)\n VALUES\n (:scan_id, :file_path, :file_name, :extension, :directory, :file_size, :line_count,\n :modified_at, :namespace, :classes, :functions, :uses, :extends_class,\n :implements_interfaces, :traits_used, :constructor_deps, :parse_error, :triggered_by)\n ');\n\n $depStmt = $this->pdo->prepare('\n INSERT INTO code_dependencies (analysis_id, dependency_type, target_fqcn)\n VALUES (:analysis_id, :dep_type, :target_fqcn)\n ');\n\n $count = 0;\n foreach ($items as $item) {\n $analysisStmt->execute([\n 'scan_id' => $scanId,\n 'file_path' => $item['file_path'],\n 'file_name' => $item['file_name'],\n 'extension' => $item['extension'],\n 'directory' => $item['directory'],\n 'file_size' => $item['file_size'],\n 'line_count' => $item['line_count'],\n 'modified_at' => $item['modified_at'],\n 'namespace' => $item['namespace'],\n 'classes' => json_encode($item['classes'] ?? [], JSON_UNESCAPED_UNICODE),\n 'functions' => json_encode($item['functions'] ?? [], JSON_UNESCAPED_UNICODE),\n 'uses' => json_encode($item['uses'] ?? [], JSON_UNESCAPED_UNICODE),\n 'extends_class' => $item['extends_class'],\n 'implements_interfaces' => json_encode($item['implements_interfaces'] ?? [], JSON_UNESCAPED_UNICODE),\n 'traits_used' => json_encode($item['traits_used'] ?? [], JSON_UNESCAPED_UNICODE),\n 'constructor_deps' => json_encode($item['constructor_deps'] ?? [], JSON_UNESCAPED_UNICODE),\n 'parse_error' => $item['parse_error'],\n 'triggered_by' => $item['triggered_by'] ?? 'web',\n ]);\n\n $analysisId = (int) $this->pdo->lastInsertId();\n\n \/\/ Save dependencies to normalized table\n $this->saveDependencies($depStmt, $analysisId, $item);\n\n $count++;\n }\n\n $this->pdo->commit();\n\n return $count;\n } catch (\\Throwable $e) {\n $this->pdo->rollBack();\n\n throw $e;\n }\n }\n\n \/**\n * @param array<string, mixed> $item\n *\/\n private function saveDependencies(\\PDOStatement $stmt, int $analysisId, array $item): void\n {\n \/\/ Use statements\n foreach ($item['uses'] ?? [] as $fqcn) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'use', 'target_fqcn' => $fqcn]);\n }\n\n \/\/ Extends\n if (!empty($item['extends_class'])) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'extends', 'target_fqcn' => $item['extends_class']]);\n }\n\n \/\/ Implements\n foreach ($item['implements_interfaces'] ?? [] as $fqcn) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'implements', 'target_fqcn' => $fqcn]);\n }\n\n \/\/ Traits\n foreach ($item['traits_used'] ?? [] as $fqcn) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'trait', 'target_fqcn' => $fqcn]);\n }\n\n \/\/ Constructor dependencies\n foreach ($item['constructor_deps'] ?? [] as $fqcn) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'constructor', 'target_fqcn' => $fqcn]);\n }\n }"
}
}
Response
{
"tool_response": {
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/Infrastructure\/Persistence\/CodeAnalysisRepository.php",
"oldString": " \/**\n * @param array<array<string, mixed>> $items\n *\/\n public function saveBatch(array $items, string $scanId): int\n {\n if (empty($items)) {\n return 0;\n }\n\n $this->pdo->beginTransaction();\n\n try {\n $stmt = $this->pdo->prepare('\n INSERT INTO code_analysis\n (scan_id, file_path, file_name, extension, directory, file_size, line_count,\n modified_at, namespace, classes, functions, parse_error, triggered_by)\n VALUES\n (:scan_id, :file_path, :file_name, :extension, :directory, :file_size, :line_count,\n :modified_at, :namespace, :classes, :functions, :parse_error, :triggered_by)\n ');\n\n $count = 0;\n foreach ($items as $item) {\n $stmt->execute([\n 'scan_id' => $scanId,\n 'file_path' => $item['file_path'],\n 'file_name' => $item['file_name'],\n 'extension' => $item['extension'],\n 'directory' => $item['directory'],\n 'file_size' => $item['file_size'],\n 'line_count' => $item['line_count'],\n 'modified_at' => $item['modified_at'],\n 'namespace' => $item['namespace'],\n 'classes' => json_encode($item['classes'] ?? [], JSON_UNESCAPED_UNICODE),\n 'functions' => json_encode($item['functions'] ?? [], JSON_UNESCAPED_UNICODE),\n 'parse_error' => $item['parse_error'],\n 'triggered_by' => $item['triggered_by'] ?? 'web',\n ]);\n $count++;\n }\n\n $this->pdo->commit();\n\n return $count;\n } catch (\\Throwable $e) {\n $this->pdo->rollBack();\n\n throw $e;\n }\n }",
"newString": " \/**\n * @param array<array<string, mixed>> $items\n *\/\n public function saveBatch(array $items, string $scanId): int\n {\n if (empty($items)) {\n return 0;\n }\n\n $this->pdo->beginTransaction();\n\n try {\n $analysisStmt = $this->pdo->prepare('\n INSERT INTO code_analysis\n (scan_id, file_path, file_name, extension, directory, file_size, line_count,\n modified_at, namespace, classes, functions, uses, extends_class,\n implements_interfaces, traits_used, constructor_deps, parse_error, triggered_by)\n VALUES\n (:scan_id, :file_path, :file_name, :extension, :directory, :file_size, :line_count,\n :modified_at, :namespace, :classes, :functions, :uses, :extends_class,\n :implements_interfaces, :traits_used, :constructor_deps, :parse_error, :triggered_by)\n ');\n\n $depStmt = $this->pdo->prepare('\n INSERT INTO code_dependencies (analysis_id, dependency_type, target_fqcn)\n VALUES (:analysis_id, :dep_type, :target_fqcn)\n ');\n\n $count = 0;\n foreach ($items as $item) {\n $analysisStmt->execute([\n 'scan_id' => $scanId,\n 'file_path' => $item['file_path'],\n 'file_name' => $item['file_name'],\n 'extension' => $item['extension'],\n 'directory' => $item['directory'],\n 'file_size' => $item['file_size'],\n 'line_count' => $item['line_count'],\n 'modified_at' => $item['modified_at'],\n 'namespace' => $item['namespace'],\n 'classes' => json_encode($item['classes'] ?? [], JSON_UNESCAPED_UNICODE),\n 'functions' => json_encode($item['functions'] ?? [], JSON_UNESCAPED_UNICODE),\n 'uses' => json_encode($item['uses'] ?? [], JSON_UNESCAPED_UNICODE),\n 'extends_class' => $item['extends_class'],\n 'implements_interfaces' => json_encode($item['implements_interfaces'] ?? [], JSON_UNESCAPED_UNICODE),\n 'traits_used' => json_encode($item['traits_used'] ?? [], JSON_UNESCAPED_UNICODE),\n 'constructor_deps' => json_encode($item['constructor_deps'] ?? [], JSON_UNESCAPED_UNICODE),\n 'parse_error' => $item['parse_error'],\n 'triggered_by' => $item['triggered_by'] ?? 'web',\n ]);\n\n $analysisId = (int) $this->pdo->lastInsertId();\n\n \/\/ Save dependencies to normalized table\n $this->saveDependencies($depStmt, $analysisId, $item);\n\n $count++;\n }\n\n $this->pdo->commit();\n\n return $count;\n } catch (\\Throwable $e) {\n $this->pdo->rollBack();\n\n throw $e;\n }\n }\n\n \/**\n * @param array<string, mixed> $item\n *\/\n private function saveDependencies(\\PDOStatement $stmt, int $analysisId, array $item): void\n {\n \/\/ Use statements\n foreach ($item['uses'] ?? [] as $fqcn) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'use', 'target_fqcn' => $fqcn]);\n }\n\n \/\/ Extends\n if (!empty($item['extends_class'])) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'extends', 'target_fqcn' => $item['extends_class']]);\n }\n\n \/\/ Implements\n foreach ($item['implements_interfaces'] ?? [] as $fqcn) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'implements', 'target_fqcn' => $fqcn]);\n }\n\n \/\/ Traits\n foreach ($item['traits_used'] ?? [] as $fqcn) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'trait', 'target_fqcn' => $fqcn]);\n }\n\n \/\/ Constructor dependencies\n foreach ($item['constructor_deps'] ?? [] as $fqcn) {\n $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'constructor', 'target_fqcn' => $fqcn]);\n }\n }",
"originalFile": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Infrastructure\\Persistence;\n\n\/\/ @responsibility: Persistenz für Code-Analyse-Ergebnisse\n\nuse Domain\\Repository\\CodeAnalysisRepositoryInterface;\nuse PDO;\n\nclass CodeAnalysisRepository implements CodeAnalysisRepositoryInterface\n{\n private PDO $pdo;\n\n public function __construct(PDO $pdo)\n {\n $this->pdo = $pdo;\n }\n\n \/**\n * @param array<string, mixed> $filters\n * @return array<array<string, mixed>>\n *\/\n public function findAll(array $filters = [], int $limit = 100, int $offset = 0): array\n {\n $sql = 'SELECT * FROM code_analysis WHERE 1=1';\n $params = [];\n\n if (!empty($filters['scan_id'])) {\n $sql .= ' AND scan_id = :scan_id';\n $params['scan_id'] = $filters['scan_id'];\n }\n\n if (!empty($filters['directory'])) {\n $sql .= ' AND directory = :directory';\n $params['directory'] = $filters['directory'];\n }\n\n if (!empty($filters['namespace'])) {\n $sql .= ' AND namespace = :namespace';\n $params['namespace'] = $filters['namespace'];\n }\n\n if (!empty($filters['extension'])) {\n $sql .= ' AND extension = :extension';\n $params['extension'] = $filters['extension'];\n }\n\n if (!empty($filters['search'])) {\n $sql .= ' AND (file_name LIKE :search OR namespace LIKE :search2)';\n $params['search'] = '%' . $filters['search'] . '%';\n $params['search2'] = '%' . $filters['search'] . '%';\n }\n\n if (isset($filters['has_classes']) && $filters['has_classes'] !== '') {\n if ($filters['has_classes'] === '1') {\n $sql .= \" AND classes IS NOT NULL AND classes != '[]'\";\n } else {\n $sql .= \" AND (classes IS NULL OR classes = '[]')\";\n }\n }\n\n if (isset($filters['has_error']) && $filters['has_error'] === '1') {\n $sql .= ' AND parse_error IS NOT NULL';\n }\n\n $sql .= ' ORDER BY directory, file_name LIMIT :limit OFFSET :offset';\n\n $stmt = $this->pdo->prepare($sql);\n foreach ($params as $key => $value) {\n $stmt->bindValue(':' . $key, $value);\n }\n $stmt->bindValue(':limit', $limit, PDO::PARAM_INT);\n $stmt->bindValue(':offset', $offset, PDO::PARAM_INT);\n $stmt->execute();\n\n return $stmt->fetchAll(PDO::FETCH_ASSOC);\n }\n\n \/**\n * @return array<string, mixed>|null\n *\/\n public function findById(int $id): ?array\n {\n $stmt = $this->pdo->prepare('SELECT * FROM code_analysis WHERE id = :id');\n $stmt->execute(['id' => $id]);\n $result = $stmt->fetch(PDO::FETCH_ASSOC);\n\n return $result ?: null;\n }\n\n \/**\n * @param array<array<string, mixed>> $items\n *\/\n public function saveBatch(array $items, string $scanId): int\n {\n if (empty($items)) {\n return 0;\n }\n\n $this->pdo->beginTransaction();\n\n try {\n $stmt = $this->pdo->prepare('\n INSERT INTO code_analysis\n (scan_id, file_path, file_name, extension, directory, file_size, line_count,\n modified_at, namespace, classes, functions, parse_error, triggered_by)\n VALUES\n (:scan_id, :file_path, :file_name, :extension, :directory, :file_size, :line_count,\n :modified_at, :namespace, :classes, :functions, :parse_error, :triggered_by)\n ');\n\n $count = 0;\n foreach ($items as $item) {\n $stmt->execute([\n 'scan_id' => $scanId,\n 'file_path' => $item['file_path'],\n 'file_name' => $item['file_name'],\n 'extension' => $item['extension'],\n 'directory' => $item['directory'],\n 'file_size' => $item['file_size'],\n 'line_count' => $item['line_count'],\n 'modified_at' => $item['modified_at'],\n 'namespace' => $item['namespace'],\n 'classes' => json_encode($item['classes'] ?? [], JSON_UNESCAPED_UNICODE),\n 'functions' => json_encode($item['functions'] ?? [], JSON_UNESCAPED_UNICODE),\n 'parse_error' => $item['parse_error'],\n 'triggered_by' => $item['triggered_by'] ?? 'web',\n ]);\n $count++;\n }\n\n $this->pdo->commit();\n\n return $count;\n } catch (\\Throwable $e) {\n $this->pdo->rollBack();\n\n throw $e;\n }\n }\n\n public function deleteByNotScanId(string $currentScanId): int\n {\n $stmt = $this->pdo->prepare('DELETE FROM code_analysis WHERE scan_id != :scan_id');\n $stmt->execute(['scan_id' => $currentScanId]);\n\n return $stmt->rowCount();\n }\n\n public function getLatestScanId(): ?string\n {\n $stmt = $this->pdo->query('SELECT scan_id FROM code_analysis ORDER BY scanned_at DESC LIMIT 1');\n $result = $stmt->fetchColumn();\n\n return $result ?: null;\n }\n\n \/**\n * @return array<string, mixed>\n *\/\n public function getStatistics(?string $scanId = null): array\n {\n $where = $scanId ? 'WHERE scan_id = :scan_id' : '';\n $params = $scanId ? ['scan_id' => $scanId] : [];\n\n $stmt = $this->pdo->prepare(\"\n SELECT\n COUNT(*) as total_files,\n SUM(line_count) as total_lines,\n SUM(file_size) as total_size,\n COUNT(CASE WHEN parse_error IS NOT NULL THEN 1 END) as files_with_errors,\n MAX(scanned_at) as last_scan\n FROM code_analysis {$where}\n \");\n $stmt->execute($params);\n $stats = $stmt->fetch(PDO::FETCH_ASSOC);\n\n $stmt = $this->pdo->prepare(\"SELECT classes, functions FROM code_analysis {$where}\");\n $stmt->execute($params);\n $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\n\n $totalClasses = 0;\n $totalFunctions = 0;\n foreach ($rows as $row) {\n $classes = json_decode($row['classes'] ?? '[]', true);\n $functions = json_decode($row['functions'] ?? '[]', true);\n $totalClasses += count($classes);\n $totalFunctions += count($functions);\n }\n\n return [\n 'total_files' => (int) ($stats['total_files'] ?? 0),\n 'total_lines' => (int) ($stats['total_lines'] ?? 0),\n 'total_size' => (int) ($stats['total_size'] ?? 0),\n 'total_classes' => $totalClasses,\n 'total_functions' => $totalFunctions,\n 'files_with_errors' => (int) ($stats['files_with_errors'] ?? 0),\n 'last_scan' => $stats['last_scan'],\n ];\n }\n\n \/**\n * @return array<string>\n *\/\n public function getDistinctDirectories(): array\n {\n $stmt = $this->pdo->query('SELECT DISTINCT directory FROM code_analysis ORDER BY directory');\n\n return $stmt->fetchAll(PDO::FETCH_COLUMN);\n }\n\n \/**\n * @return array<string>\n *\/\n public function getDistinctNamespaces(): array\n {\n $stmt = $this->pdo->query('SELECT DISTINCT namespace FROM code_analysis WHERE namespace IS NOT NULL ORDER BY namespace');\n\n return $stmt->fetchAll(PDO::FETCH_COLUMN);\n }\n\n \/**\n * @return array<array<string, mixed>>\n *\/\n public function getConfiguredDirectories(): array\n {\n $stmt = $this->pdo->query('SELECT * FROM code_scan_config WHERE enabled = 1 ORDER BY label');\n\n return $stmt->fetchAll(PDO::FETCH_ASSOC);\n }\n}\n",
"structuredPatch": [
{
"oldStart": 102,
"oldLines": 18,
"newStart": 102,
"newLines": 25,
"lines": [
" $this->pdo->beginTransaction();",
" ",
" try {",
"- $stmt = $this->pdo->prepare('",
"+ $analysisStmt = $this->pdo->prepare('",
" INSERT INTO code_analysis",
" (scan_id, file_path, file_name, extension, directory, file_size, line_count,",
"- modified_at, namespace, classes, functions, parse_error, triggered_by)",
"+ modified_at, namespace, classes, functions, uses, extends_class,",
"+ implements_interfaces, traits_used, constructor_deps, parse_error, triggered_by)",
" VALUES",
" (:scan_id, :file_path, :file_name, :extension, :directory, :file_size, :line_count,",
"- :modified_at, :namespace, :classes, :functions, :parse_error, :triggered_by)",
"+ :modified_at, :namespace, :classes, :functions, :uses, :extends_class,",
"+ :implements_interfaces, :traits_used, :constructor_deps, :parse_error, :triggered_by)",
" ');",
" ",
"+ $depStmt = $this->pdo->prepare('",
"+ INSERT INTO code_dependencies (analysis_id, dependency_type, target_fqcn)",
"+ VALUES (:analysis_id, :dep_type, :target_fqcn)",
"+ ');",
"+",
" $count = 0;",
" foreach ($items as $item) {",
"- $stmt->execute([",
"+ $analysisStmt->execute([",
" 'scan_id' => $scanId,",
" 'file_path' => $item['file_path'],",
" 'file_name' => $item['file_name'],"
]
},
{
"oldStart": 125,
"oldLines": 9,
"newStart": 132,
"newLines": 20,
"lines": [
" 'namespace' => $item['namespace'],",
" 'classes' => json_encode($item['classes'] ?? [], JSON_UNESCAPED_UNICODE),",
" 'functions' => json_encode($item['functions'] ?? [], JSON_UNESCAPED_UNICODE),",
"+ 'uses' => json_encode($item['uses'] ?? [], JSON_UNESCAPED_UNICODE),",
"+ 'extends_class' => $item['extends_class'],",
"+ 'implements_interfaces' => json_encode($item['implements_interfaces'] ?? [], JSON_UNESCAPED_UNICODE),",
"+ 'traits_used' => json_encode($item['traits_used'] ?? [], JSON_UNESCAPED_UNICODE),",
"+ 'constructor_deps' => json_encode($item['constructor_deps'] ?? [], JSON_UNESCAPED_UNICODE),",
" 'parse_error' => $item['parse_error'],",
" 'triggered_by' => $item['triggered_by'] ?? 'web',",
" ]);",
"+",
"+ $analysisId = (int) $this->pdo->lastInsertId();",
"+",
"+ \/\/ Save dependencies to normalized table",
"+ $this->saveDependencies($depStmt, $analysisId, $item);",
"+",
" $count++;",
" }",
" "
]
},
{
"oldStart": 141,
"oldLines": 6,
"newStart": 159,
"newLines": 37,
"lines": [
" }",
" }",
" ",
"+ \/**",
"+ * @param array<string, mixed> $item",
"+ *\/",
"+ private function saveDependencies(\\PDOStatement $stmt, int $analysisId, array $item): void",
"+ {",
"+ \/\/ Use statements",
"+ foreach ($item['uses'] ?? [] as $fqcn) {",
"+ $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'use', 'target_fqcn' => $fqcn]);",
"+ }",
"+",
"+ \/\/ Extends",
"+ if (!empty($item['extends_class'])) {",
"+ $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'extends', 'target_fqcn' => $item['extends_class']]);",
"+ }",
"+",
"+ \/\/ Implements",
"+ foreach ($item['implements_interfaces'] ?? [] as $fqcn) {",
"+ $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'implements', 'target_fqcn' => $fqcn]);",
"+ }",
"+",
"+ \/\/ Traits",
"+ foreach ($item['traits_used'] ?? [] as $fqcn) {",
"+ $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'trait', 'target_fqcn' => $fqcn]);",
"+ }",
"+",
"+ \/\/ Constructor dependencies",
"+ foreach ($item['constructor_deps'] ?? [] as $fqcn) {",
"+ $stmt->execute(['analysis_id' => $analysisId, 'dep_type' => 'constructor', 'target_fqcn' => $fqcn]);",
"+ }",
"+ }",
"+",
" public function deleteByNotScanId(string $currentScanId): int",
" {",
" $stmt = $this->pdo->prepare('DELETE FROM code_analysis WHERE scan_id != :scan_id');"
]
}
],
"userModified": false,
"replaceAll": false
}
}