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

ScriptDom does not fill Clustered property even if it was explicitly provided on HASH index

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

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

評価

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

調査の方向性

まず、提供された CREATE TABLE ステートメントを ScriptDOM で解析し、主キー ノードの Clustered プロパティを調べます。明示的な NONCLUSTERED HASH 宣言の場合の結果と比較します。このケースで、そのプロパティが null ではなく false になれば、issue は完了です。

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

説明

ScriptDom version: 161.8919.0
Compatibility level used for parsing: 150

Parser did not fill Clustered property and because it is a PRIMARY KEY which are CLUSTERED by default unless explicitly defined as NONCLUSTERED, I resolved this case in my code as implicitly clustered. However it is clearly explicitly NONCLUSTERED. I think Clustered property should be false in this case.

CREATE TABLE dbo.foo
(
    bar VARCHAR(512)   NOT NULL
    , far VARCHAR(20)    NULL
    , CONSTRAINT PK PRIMARY KEY NONCLUSTERED HASH (bar) WITH (BUCKET_COUNT = 500000)
    , INDEX IX_2 NONCLUSTERED HASH (far)
          WITH (BUCKET_COUNT = 500000)
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
GO

Here are object properties for PK node:
image

So to check if index is clustered with respect to property nullability one has to do something like that:

bool isClustered;
if (node.Clustered.HasValue)
{
    isClustered = node.Clustered.Value;
}
else if (node.IndexType != null && node.IndexType.IndexTypeKind.HasValue)
{
    isClustered = node.IndexType.IndexTypeKind.Value == IndexTypeKind.Clustered
        || node.IndexType.IndexTypeKind.Value == IndexTypeKind.ClusteredColumnStore;
}
else
{
    isClustered = node.IsPrimaryKey;
}

feels like it could be more straightforward

主要言語
GAP
スター
277
フォーク
43
平均マージ
6日 17時間
マージ済み PR(30日)
3

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

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

はじめの一歩

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

microsoft/SqlScriptDOM のほかの issue

microsoft/SqlScriptDOM の issue をすべて見る

似ている issue

Databases の issue をもっと見る

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

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