Skip to content

Commit bed1118

Browse files
committed
Add DATA_COMPRESSION option for columnstore indexes
- Add DATA_COMPRESSION parsing to columnstore index WITH clause - Add DataCompressionOption case to columnStoreIndexOptionToJSON Enables: CreateIndexStatementTests120 (both variants)
1 parent 9f130b9 commit bed1118

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

parser/marshal.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10419,6 +10419,31 @@ func (p *Parser) parseCreateColumnStoreIndexStatement() (*ast.CreateColumnStoreI
1041910419
stmt.IndexOptions = append(stmt.IndexOptions, orderOpt)
1042010420
}
1042110421

10422+
case "DATA_COMPRESSION":
10423+
p.nextToken() // consume DATA_COMPRESSION
10424+
if p.curTok.Type == TokenEquals {
10425+
p.nextToken() // consume =
10426+
}
10427+
level := strings.ToUpper(p.curTok.Literal)
10428+
compressionLevel := "None"
10429+
switch level {
10430+
case "COLUMNSTORE":
10431+
compressionLevel = "ColumnStore"
10432+
case "COLUMNSTORE_ARCHIVE":
10433+
compressionLevel = "ColumnStoreArchive"
10434+
case "PAGE":
10435+
compressionLevel = "Page"
10436+
case "ROW":
10437+
compressionLevel = "Row"
10438+
case "NONE":
10439+
compressionLevel = "None"
10440+
}
10441+
p.nextToken() // consume compression level
10442+
stmt.IndexOptions = append(stmt.IndexOptions, &ast.DataCompressionOption{
10443+
CompressionLevel: compressionLevel,
10444+
OptionKind: "DataCompression",
10445+
})
10446+
1042210447
default:
1042310448
// Skip unknown options
1042410449
p.nextToken()
@@ -12709,6 +12734,20 @@ func columnStoreIndexOptionToJSON(opt ast.IndexOption) jsonNode {
1270912734
node["Expression"] = scalarExpressionToJSON(o.Expression)
1271012735
}
1271112736
return node
12737+
case *ast.DataCompressionOption:
12738+
node := jsonNode{
12739+
"$type": "DataCompressionOption",
12740+
"CompressionLevel": o.CompressionLevel,
12741+
"OptionKind": o.OptionKind,
12742+
}
12743+
if len(o.PartitionRanges) > 0 {
12744+
ranges := make([]jsonNode, len(o.PartitionRanges))
12745+
for i, r := range o.PartitionRanges {
12746+
ranges[i] = compressionPartitionRangeToJSON(r)
12747+
}
12748+
node["PartitionRanges"] = ranges
12749+
}
12750+
return node
1271212751
default:
1271312752
return jsonNode{"$type": "UnknownIndexOption"}
1271412753
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"todo": true}
1+
{}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"todo": true}
1+
{}

0 commit comments

Comments
 (0)