diff --git a/src/Dibi/Event.php b/src/Dibi/Event.php index 0533a3e4..3a41a838 100644 --- a/src/Dibi/Event.php +++ b/src/Dibi/Event.php @@ -63,7 +63,11 @@ public function __construct(Connection $connection, int $type, ?string $sql = nu $dibiDir = dirname((new \ReflectionClass('dibi'))->getFileName()) . DIRECTORY_SEPARATOR; foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $row) { - if (isset($row['file']) && is_file($row['file']) && !str_starts_with($row['file'], $dibiDir)) { + if ( + isset($row['file']) + && !str_starts_with($row['file'], $dibiDir) + && !str_ends_with($row['file'], ": eval()'d code") + ) { $this->source = [$row['file'], (int) $row['line']]; break; } diff --git a/tests/dibi/Event.source.phpt b/tests/dibi/Event.source.phpt new file mode 100644 index 00000000..05f9fcd6 --- /dev/null +++ b/tests/dibi/Event.source.phpt @@ -0,0 +1,25 @@ +loadFile(__DIR__ . "/data/$config[system].sql"); + +$conn->onEvent[] = function (Event $event) use (&$expectedLine) { + Assert::same([__FILE__, $expectedLine], $event->source); +}; + +$expectedLine = __LINE__ + 1; +$conn->connect(); + +$expectedLine = __LINE__ + 1; +eval('$conn->nativeQuery("SELECT 1");');