Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Oracle provider does not work correctly when quoted identifiers are used

オープン
#778 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
fsharp, sql
領域
databases

調査の方向性

まず、レポートに示されている引用符付きの Oracle のスキーマ、テーブル、列の識別子を使って問題を再現し、次に provider 用に生成された SQL を追跡します。失敗する引用符なしの文を期待される引用符付きの形式と比較し、引用符付きの識別子に対するクエリが、引用符なしの識別子を壊すことなく成功することを検証します。

索引モデルが issue の本文から書いたものです。

説明

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)
主要言語
F#
スター
627
フォーク
147
平均マージ
2時間 2分
マージ済み PR(30日)
1

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

fsprojects/SQLProvider のほかの issue

fsprojects/SQLProvider の issue をすべて見る

似ている issue

Databases の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。