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

Oracle provider does not work correctly when quoted identifiers are used #778

Open
keimpema opened this issue Dec 28, 2022 · 0 comments
Open

Comments

@keimpema
Copy link

Describe the bug
Like Firebug (#431) Oracle also has a problem with quoted table names. Actually the same goes for schema names and column names as well. (ref). When a table is created with quoted identifiers:

CREATE TABLE "SchemaName"."table_name" 
   (	"timestamp" TIMESTAMP (6) NOT NULL ENABLE, 
	"text" NVARCHAR2(50) NOT NULL ENABLE  )

Identifiers with quotes are case sensitive. Identifiers without quotes are treated as uppercase. To maintain the casing of the identifier names, they should be referenced everywhere with quotes:

SELECT t."timestamp", t."text" FROM "SchemaName"."table_name" t

To Reproduce
Steps to reproduce the behavior:

  1. create a table like mentioned above
  2. create a query to retrieve records from that table
let records = 
    query {
        for t in context.SchemName.TableName do
        select ( t.Timestamp, t.Text )
    }

It wil fail with Oracle.ManagedDataAccess.Client.OracleException: 'ORA-00942: table or view does not exist' because it creates the query:

SELECT table_name.timestamp as "timestamp", table_name.text as "text" FROM SchemaName.table_name table_name

Which is interpreted by Oracle as something that cannot be found:

SELECT table_name.TIMESTAMP as "timestamp", table_name.TEXT as "text" FROM SCHEMANAME.TABLE_NAME table_name

Expected behavior
The schema object identifiers schema name, table name and column name should be quoted in statements when they were created as quoted identifiers. Preferably automatically otherwise with a flag like the one used in the Firebird solution (#431). The resulting query in this case should look like:

SELECT table_name."timestamp" as "timestamp", table_name."text" as "text" FROM "SchemaName"."table_name" table_name

Desktop (please complete the following information):

  • OS: windows 11
  • Oracle 12
  • SqlProvider 1.3.5

Libraries used for resolution

  • Oracle.ManagedDataAccess.dl (version 2.0.19.1)
  • System.Diagnostics.PerformanceCounter.dll (targeting netstandard2.0, version 6.0.0)
  • System.DirectoryService.dll (targeting netstandard2.0, version 5.0.0)
  • System.DirectoryService.Protocols.dll (targeting netstandard2.0, version 5.0.1)
  • System.Text.Json.dll (targeting netstandard2.0, version 6.0.0)
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

No branches or pull requests

1 participant