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

DDC-2825: SQlite - Table names are not escaped when inserting data #3578

Closed
doctrinebot opened this issue Nov 27, 2013 · 10 comments
Closed

DDC-2825: SQlite - Table names are not escaped when inserting data #3578

doctrinebot opened this issue Nov 27, 2013 · 10 comments
Assignees
Labels

Comments

@doctrinebot
Copy link

Jira issue originally created by user michael.perrin:

When a table name is defined with a dot (example: schemaname.tablename) in a Doctrine entity, it is created with a double underscode in SQlite (example : schemaname**tablename).

However, when a Doctrine entity is persisted (and saved with INSERT INTO), the dot is not converted to a double underscore, leading to "no such table: schemaname.tablename" exception.

@doctrinebot
Copy link
Author

@doctrinebot
Copy link
Author

Comment created by michael.perrin:

Sorry, it actually duplicates #DDC-2636

@doctrinebot
Copy link
Author

Issue was closed with resolution "Duplicate"

@doctrinebot
Copy link
Author

Comment created by @Ocramius:

[~michael.perrin] doctrine does not escape table names by default. You will need a custom naming and/or quoting strategy for that.

@doctrinebot
Copy link
Author

Comment created by michael.perrin:

@marco Pivetta That's right but that is a problem, isn't it?

Here is an example.

An database schema is created with this definition :

MyNamespace\Mytable:
    type: entity
    table: myschema.mytable
    # ...

If I do this :

$myTable = new MyNamespace\Mytable();
$entityManager->persist($myTable);
$entityManager->flush();

This will work for PostgreSQL for instance, but not SQlite, because Doctrine DBAL converted "myschema.mytable" to "myschema**mytable" when creating the database, but the ORM will still use "myschema.mytable".

Did I miss something or is it an issue?
Sorry if it is a feature and that there is a way to avoid this.

@doctrinebot
Copy link
Author

Comment created by @Ocramius:

No, it is indeed a problem. I'm wondering if the default naming strategy should handle this for SQLite...

@doctrinebot
Copy link
Author

Comment created by michael.perrin:

I started to explore the code and see how this could be solved, but unfortunately I don't have an enough broad knowledge of the whole Doctrine architecture and how new things should be solved the right way.
But I would happy to help when I'm back in a few days!

@doctrinebot
Copy link
Author

Comment created by michael.perrin:

@marco Pivetta I am wondering if the best solution to handle this would be to handle the "schema" attribute the right way.

I mean: instead of defining a table with a name like "myschema.mytable", wouldn't it be better to define it with "name: mytable, schema: myschema" (either in YAML, or Annotation, ...).
Database systems that handle schemas like PostgreSQL will transform such table definition to "myschema.mytable", and those which don't would use "myschema**mytable" or even "mytable" if the schema name is ignored in this case (it could be configurable).
In all cases, the table name would be processed to be transformed to something, whatever the database system being used.

This would be used both in the ORM and DBAL.

@doctrinebot
Copy link
Author

Comment created by @doctrinebot:

A related Github Pull-Request [GH-881] was closed:
#881

@doctrinebot
Copy link
Author

Comment created by @doctrinebot:

A related Github Pull-Request [GH-881] was assigned:
#881

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants