Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix unwanted SQLite schema emulation in SqliteSchemaManager #6337

Open
wants to merge 1 commit into
base: 3.8.x
Choose a base branch
from

Conversation

mvorisek
Copy link
Contributor

@mvorisek mvorisek commented Mar 18, 2024

Q A
Type bug
Fixed issues #6314

Summary

Missed in #4804 and fix related #5517.

When merging up (into 4.x), simply remove the str_replace.

@derrabus
Copy link
Member

Can we cover this with a test please?

@mvorisek
Copy link
Contributor Author

mvorisek commented Mar 18, 2024

Is your request for a one functional test into Doctrine\DBAL\Tests\Functional\Schema\SqliteSchemaManagerTest?

@mvorisek
Copy link
Contributor Author

@derrabus may I understand your wishes better?

@derrabus
Copy link
Member

A test please.

@mvorisek mvorisek force-pushed the fix_6314_sqlite_schema_emulation branch 7 times, most recently from 6245c62 to 49f86b9 Compare April 5, 2024 19:28
tests/Functional/Schema/SqliteSchemaManagerTest.php Outdated Show resolved Hide resolved
tests/Functional/Schema/SqliteSchemaManagerTest.php Outdated Show resolved Hide resolved
tests/Functional/Schema/SqliteSchemaManagerTest.php Outdated Show resolved Hide resolved

$schemaManager = $this->schemaManager;
$refl = new ReflectionMethod($schemaManager, 'selectTableColumns');
$refl->setAccessible(true);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changing method accessibility in tests is a smell. Why do you need to do it?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is because full table introspection with schema is not supported (yet).

Therefore, I test functional behaviour using protected methods.

@mvorisek mvorisek force-pushed the fix_6314_sqlite_schema_emulation branch 4 times, most recently from 1c6cc29 to 150fa23 Compare April 6, 2024 22:32
@greg0ire greg0ire requested a review from derrabus April 7, 2024 06:51
@mvorisek
Copy link
Contributor Author

@derrabus may I ask you for a review?

@derrabus
Copy link
Member

Sure. It's on my todo list, but I don't have much time to spend on open source work at the moment.

@mvorisek mvorisek force-pushed the fix_6314_sqlite_schema_emulation branch from 150fa23 to 19b8299 Compare May 3, 2024 08:06
@derrabus
Copy link
Member

derrabus commented May 3, 2024

I don't quite understand this test, tbh. You're testing with a dot in a table name that SQLite to my astonishment seems to accept when quoted. But that doesn't have much to do with schema emulation. Shouldn't the test work with a table from an actual secondary schema?

@mvorisek
Copy link
Contributor Author

mvorisek commented May 3, 2024

The fixed methods accept database name using 1st parameter, the table name is accepted as 2nd parameter, thus the 2nd parameter can be unquoted and dot must be preserved (it cannot contain schema).

As the fixed methods cannot be reached easily from public API as table with schema and dot is not fully supported yet, the test is coded to call the fixed protected methods.

@derrabus
Copy link
Member

derrabus commented May 3, 2024

As the fixed methods cannot be reached easily from public API as table with schema and dot is not fully supported yet, the test is coded to call the fixed protected methods.

So, what does this PR fix then? An implementation detail?

@mvorisek
Copy link
Contributor Author

mvorisek commented May 3, 2024

The schema manager can be extended by user classes and the protected methods must behave as expected. This PR fixes the behaviour and it is tested with functional test. For more details, see the #4804 and #5517 PRs, ie. the schema emulation is deprecated for 3.x and removed in 4.x. Can we agree on this? Is there anything else I should do?

@mvorisek mvorisek requested a review from greg0ire May 5, 2024 06:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants