Skip to content

Conversation

@janbarasek
Copy link
Contributor

  • bug fix
  • BC break? yes

In case of Doctrine ORM Schema update when all entities are loaded automatically, $trace with index file can be undefined.

Snímek obrazovky 2019-09-09 v 13 54 22

@dg
Copy link
Member

dg commented Sep 9, 2019

Thanks

@dg dg merged commit 6c3cf4e into nette:master Sep 9, 2019
@dg
Copy link
Member

dg commented Sep 9, 2019

What is the reason that there is not file? Could you dump the trace here?

@janbarasek
Copy link
Contributor Author

@dg In case of:

/**
 * Returns current test annotations.
 */
public static function getTestAnnotations(): array
{
	$trace = debug_backtrace();
	$file = $trace[count($trace) - 1]['file'] ?? null;
	if ($file === null) {
		echo \Tracy\Dumper::toTerminal($trace);
	}
	return Helpers::parseDocComment($file ? file_get_contents($file) : '') + ['file' => $file];
}

First part looks ok:

Snímek obrazovky 2019-09-09 v 17 54 29

But last part not:

Snímek obrazovky 2019-09-09 v 17 55 23

Source:

Snímek obrazovky 2019-09-09 v 17 58 15

Source code: https://github.com/baraja-core/doctrine/blob/master/src/OrmSchemaUpdateTool.php#L24

Called command in Terminal: php www/index.php o:s:u -f --dump-sql

I think the bug is in my TestCase class, because I should use if (isset(... in this construction here:

if (isset($_SERVER['NETTE_TESTER_RUNNER'])) {
	$di = Booting::bootForTests()->createContainer();

	(new QueryToLatexTest(
		$di->getByType(Tokenizer::class),
		$di->getByType(QueryNormalizer::class)
	))->run();
}

I think it's relatively complex problem. Do you understand the principle?

@dg
Copy link
Member

dg commented Sep 9, 2019

And what is in www/index.php? How is OrmSchemaUpdateTool::run() called?

@janbarasek
Copy link
Contributor Author

@dg I use Nette sandbox:

<?php

declare(strict_types=1);

require __DIR__ . '/../vendor/autoload.php';

App\Booting::boot()
	->createContainer()
	->getByType(Nette\Application\Application::class)
	->run();

But in Container in initialize() method is (in Container specific for CLI):

OrmSchemaUpdateTool::setContainer($this);
register_shutdown_function([OrmSchemaUpdateTool::class, 'run']);

When I think about it, it wasn't very smart. I use it as a hack to call a specific piece of code in CLI mode.

@dg
Copy link
Member

dg commented Sep 10, 2019

So it is called via register_shutdown_function(), thats why file is missing.

dg pushed a commit that referenced this pull request Sep 10, 2019
@janbarasek
Copy link
Contributor Author

I think yes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants