Oracle provider does not work correctly when quoted identifiers are used

Aperta
#778 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
fsharp, sql
Ambito
databases

Direzione di ricerca

Inizia riproducendo il problema con gli identificatori Oracle di schema, tabella e colonna tra virgolette mostrati nel report, quindi traccia l’SQL generato per il provider. Confronta l’istruzione senza virgolette che fallisce con la forma attesa tra virgolette e verifica che le query sugli identificatori tra virgolette abbiano esito positivo senza compromettere gli identificatori senza virgolette.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Oracle

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)
Lingua principale
F#
Stelle
627
Fork
147
Merge medio
2h 2m
PR unite (30g)
1

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di fsprojects/SQLProvider

Tutte le issue di fsprojects/SQLProvider

Issue simili

Altre issue su Databases

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.