Skip to content

Commit 2c93200

Browse files
committed
Add SET ROWCOUNT, SET OFFSETS, and multi-option SET parsing
Implements support for: - SET ROWCOUNT <number|@variable> - SET OFFSETS <options> ON/OFF with proper option sorting - Multiple comma-separated options in PredicateSetStatement - Multiple comma-separated options in SetStatisticsStatement Also updates PredicateSetStatement and SetStatisticsStatement to use string for Options field to support comma-separated values. Enables 1 previously failing test: - BaselinesCommon_SetOffsetsAndOnOffSetTests
1 parent 953009d commit 2c93200

7 files changed

Lines changed: 349 additions & 104 deletions

File tree

ast/predicate_set_statement.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package ast
22

33
// PredicateSetStatement represents a SET statement like SET ANSI_NULLS ON
4+
// Options can contain multiple comma-separated values like "ConcatNullYieldsNull, CursorCloseOnCommit"
45
type PredicateSetStatement struct {
5-
Options SetOptions
6+
Options string
67
IsOn bool
78
}
89

ast/set_offsets_statement.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package ast
2+
3+
// SetOffsetsStatement represents SET OFFSETS statement
4+
type SetOffsetsStatement struct {
5+
Options string
6+
IsOn bool
7+
}
8+
9+
func (s *SetOffsetsStatement) node() {}
10+
func (s *SetOffsetsStatement) statement() {}

ast/set_rowcount_statement.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package ast
2+
3+
// SetRowCountStatement represents SET ROWCOUNT statement
4+
type SetRowCountStatement struct {
5+
NumberRows ScalarExpression
6+
}
7+
8+
func (s *SetRowCountStatement) node() {}
9+
func (s *SetRowCountStatement) statement() {}

ast/set_statistics_statement.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package ast
22

33
// SetStatisticsStatement represents SET STATISTICS IO/PROFILE/TIME/XML statements
4+
// Options can contain multiple comma-separated values like "IO, Profile, Time"
45
type SetStatisticsStatement struct {
5-
Options SetOptions
6+
Options string
67
IsOn bool
78
}
89

parser/marshal.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,10 @@ func statementToJSON(stmt ast.Statement) jsonNode {
226226
return predicateSetStatementToJSON(s)
227227
case *ast.SetStatisticsStatement:
228228
return setStatisticsStatementToJSON(s)
229+
case *ast.SetRowCountStatement:
230+
return setRowCountStatementToJSON(s)
231+
case *ast.SetOffsetsStatement:
232+
return setOffsetsStatementToJSON(s)
229233
case *ast.CommitTransactionStatement:
230234
return commitTransactionStatementToJSON(s)
231235
case *ast.RollbackTransactionStatement:
@@ -4281,15 +4285,33 @@ func securityPrincipalToJSON(p *ast.SecurityPrincipal) jsonNode {
42814285
func predicateSetStatementToJSON(s *ast.PredicateSetStatement) jsonNode {
42824286
return jsonNode{
42834287
"$type": "PredicateSetStatement",
4284-
"Options": string(s.Options),
4288+
"Options": s.Options,
42854289
"IsOn": s.IsOn,
42864290
}
42874291
}
42884292

42894293
func setStatisticsStatementToJSON(s *ast.SetStatisticsStatement) jsonNode {
42904294
return jsonNode{
42914295
"$type": "SetStatisticsStatement",
4292-
"Options": string(s.Options),
4296+
"Options": s.Options,
4297+
"IsOn": s.IsOn,
4298+
}
4299+
}
4300+
4301+
func setRowCountStatementToJSON(s *ast.SetRowCountStatement) jsonNode {
4302+
node := jsonNode{
4303+
"$type": "SetRowCountStatement",
4304+
}
4305+
if s.NumberRows != nil {
4306+
node["NumberRows"] = scalarExpressionToJSON(s.NumberRows)
4307+
}
4308+
return node
4309+
}
4310+
4311+
func setOffsetsStatementToJSON(s *ast.SetOffsetsStatement) jsonNode {
4312+
return jsonNode{
4313+
"$type": "SetOffsetsStatement",
4314+
"Options": s.Options,
42934315
"IsOn": s.IsOn,
42944316
}
42954317
}

0 commit comments

Comments
 (0)