@@ -5680,6 +5680,12 @@ func (p *Parser) parseCreateTableStatement() (*ast.CreateTableStatement, error)
56805680 return nil, err
56815681 }
56825682 stmt.Options = append(stmt.Options, opt)
5683+ } else if optionName == "LEDGER" {
5684+ opt, err := p.parseLedgerTableOption()
5685+ if err != nil {
5686+ return nil, err
5687+ }
5688+ stmt.Options = append(stmt.Options, opt)
56835689 } else if optionName == "CLUSTERED" {
56845690 // Could be CLUSTERED INDEX or CLUSTERED COLUMNSTORE INDEX
56855691 if strings.ToUpper(p.curTok.Literal) == "COLUMNSTORE" {
@@ -7512,6 +7518,22 @@ func (p *Parser) parseColumnDefinition() (*ast.ColumnDefinition, error) {
75127518 } else if startEnd == "END" {
75137519 col.GeneratedAlways = "UserNameEnd"
75147520 }
7521+ } else if genType == "TRANSACTION_ID" {
7522+ startEnd := strings.ToUpper(p.curTok.Literal)
7523+ p.nextToken()
7524+ if startEnd == "START" {
7525+ col.GeneratedAlways = "TransactionIdStart"
7526+ } else if startEnd == "END" {
7527+ col.GeneratedAlways = "TransactionIdEnd"
7528+ }
7529+ } else if genType == "SEQUENCE_NUMBER" {
7530+ startEnd := strings.ToUpper(p.curTok.Literal)
7531+ p.nextToken()
7532+ if startEnd == "START" {
7533+ col.GeneratedAlways = "SequenceNumberStart"
7534+ } else if startEnd == "END" {
7535+ col.GeneratedAlways = "SequenceNumberEnd"
7536+ }
75157537 }
75167538 } else if p.curTok.Type == TokenNot {
75177539 p.nextToken() // consume NOT
@@ -9741,6 +9763,8 @@ func tableOptionToJSON(opt ast.TableOption) jsonNode {
97419763 return node
97429764 case *ast.SystemVersioningTableOption:
97439765 return systemVersioningTableOptionToJSON(o)
9766+ case *ast.LedgerTableOption:
9767+ return ledgerTableOptionToJSON(o)
97449768 case *ast.MemoryOptimizedTableOption:
97459769 return jsonNode{
97469770 "$type": "MemoryOptimizedTableOption",
@@ -17725,6 +17749,42 @@ func retentionPeriodDefinitionToJSON(r *ast.RetentionPeriodDefinition) jsonNode
1772517749 return node
1772617750}
1772717751
17752+ func ledgerTableOptionToJSON(o *ast.LedgerTableOption) jsonNode {
17753+ node := jsonNode{
17754+ "$type": "LedgerTableOption",
17755+ "OptionState": o.OptionState,
17756+ "AppendOnly": o.AppendOnly,
17757+ }
17758+ if o.LedgerViewOption != nil {
17759+ node["LedgerViewOption"] = ledgerViewOptionToJSON(o.LedgerViewOption)
17760+ }
17761+ node["OptionKind"] = o.OptionKind
17762+ return node
17763+ }
17764+
17765+ func ledgerViewOptionToJSON(o *ast.LedgerViewOption) jsonNode {
17766+ node := jsonNode{
17767+ "$type": "LedgerViewOption",
17768+ }
17769+ if o.ViewName != nil {
17770+ node["ViewName"] = schemaObjectNameToJSON(o.ViewName)
17771+ }
17772+ if o.TransactionIdColumnName != nil {
17773+ node["TransactionIdColumnName"] = identifierToJSON(o.TransactionIdColumnName)
17774+ }
17775+ if o.SequenceNumberColumnName != nil {
17776+ node["SequenceNumberColumnName"] = identifierToJSON(o.SequenceNumberColumnName)
17777+ }
17778+ if o.OperationTypeColumnName != nil {
17779+ node["OperationTypeColumnName"] = identifierToJSON(o.OperationTypeColumnName)
17780+ }
17781+ if o.OperationTypeDescColumnName != nil {
17782+ node["OperationTypeDescColumnName"] = identifierToJSON(o.OperationTypeDescColumnName)
17783+ }
17784+ node["OptionKind"] = o.OptionKind
17785+ return node
17786+ }
17787+
1772817788func createExternalDataSourceStatementToJSON(s *ast.CreateExternalDataSourceStatement) jsonNode {
1772917789 node := jsonNode{
1773017790 "$type": "CreateExternalDataSourceStatement",
0 commit comments