@@ -78,10 +78,14 @@ func statementToJSON(stmt ast.Statement) jsonNode {
7878 return beginConversationTimerStatementToJSON (s )
7979 case * ast.CreateViewStatement :
8080 return createViewStatementToJSON (s )
81+ case * ast.CreateOrAlterViewStatement :
82+ return createOrAlterViewStatementToJSON (s )
8183 case * ast.CreateSchemaStatement :
8284 return createSchemaStatementToJSON (s )
8385 case * ast.CreateProcedureStatement :
8486 return createProcedureStatementToJSON (s )
87+ case * ast.CreateOrAlterProcedureStatement :
88+ return createOrAlterProcedureStatementToJSON (s )
8589 case * ast.AlterProcedureStatement :
8690 return alterProcedureStatementToJSON (s )
8791 case * ast.CreateRoleStatement :
@@ -380,6 +384,8 @@ func statementToJSON(stmt ast.Statement) jsonNode {
380384 return alterTriggerStatementToJSON (s )
381385 case * ast.CreateTriggerStatement :
382386 return createTriggerStatementToJSON (s )
387+ case * ast.CreateOrAlterTriggerStatement :
388+ return createOrAlterTriggerStatementToJSON (s )
383389 case * ast.EnableDisableTriggerStatement :
384390 return enableDisableTriggerStatementToJSON (s )
385391 case * ast.EndConversationStatement :
@@ -2973,6 +2979,35 @@ func createViewStatementToJSON(s *ast.CreateViewStatement) jsonNode {
29732979 return node
29742980}
29752981
2982+ func createOrAlterViewStatementToJSON (s * ast.CreateOrAlterViewStatement ) jsonNode {
2983+ node := jsonNode {
2984+ "$type" : "CreateOrAlterViewStatement" ,
2985+ }
2986+ if s .SchemaObjectName != nil {
2987+ node ["SchemaObjectName" ] = schemaObjectNameToJSON (s .SchemaObjectName )
2988+ }
2989+ if len (s .Columns ) > 0 {
2990+ cols := make ([]jsonNode , len (s .Columns ))
2991+ for i , c := range s .Columns {
2992+ cols [i ] = identifierToJSON (c )
2993+ }
2994+ node ["Columns" ] = cols
2995+ }
2996+ if len (s .ViewOptions ) > 0 {
2997+ opts := make ([]jsonNode , len (s .ViewOptions ))
2998+ for i , opt := range s .ViewOptions {
2999+ opts [i ] = viewOptionToJSON (opt )
3000+ }
3001+ node ["ViewOptions" ] = opts
3002+ }
3003+ if s .SelectStatement != nil {
3004+ node ["SelectStatement" ] = selectStatementToJSON (s .SelectStatement )
3005+ }
3006+ node ["WithCheckOption" ] = s .WithCheckOption
3007+ node ["IsMaterialized" ] = s .IsMaterialized
3008+ return node
3009+ }
3010+
29763011func viewOptionToJSON (opt ast.ViewOption ) jsonNode {
29773012 switch o := opt .(type ) {
29783013 case * ast.ViewStatementOption :
@@ -6339,6 +6374,37 @@ func createProcedureStatementToJSON(s *ast.CreateProcedureStatement) jsonNode {
63396374 return node
63406375}
63416376
6377+ func createOrAlterProcedureStatementToJSON (s * ast.CreateOrAlterProcedureStatement ) jsonNode {
6378+ node := jsonNode {
6379+ "$type" : "CreateOrAlterProcedureStatement" ,
6380+ "IsForReplication" : s .IsForReplication ,
6381+ }
6382+ if s .ProcedureReference != nil {
6383+ node ["ProcedureReference" ] = procedureReferenceToJSON (s .ProcedureReference )
6384+ }
6385+ if len (s .Options ) > 0 {
6386+ options := make ([]jsonNode , len (s .Options ))
6387+ for i , opt := range s .Options {
6388+ options [i ] = procedureOptionToJSON (opt )
6389+ }
6390+ node ["Options" ] = options
6391+ }
6392+ if len (s .Parameters ) > 0 {
6393+ params := make ([]jsonNode , len (s .Parameters ))
6394+ for i , p := range s .Parameters {
6395+ params [i ] = procedureParameterToJSON (p )
6396+ }
6397+ node ["Parameters" ] = params
6398+ }
6399+ if s .MethodSpecifier != nil {
6400+ node ["MethodSpecifier" ] = methodSpecifierToJSON (s .MethodSpecifier )
6401+ }
6402+ if s .StatementList != nil {
6403+ node ["StatementList" ] = statementListToJSON (s .StatementList )
6404+ }
6405+ return node
6406+ }
6407+
63426408func procedureOptionToJSON (opt ast.ProcedureOptionBase ) jsonNode {
63436409 switch o := opt .(type ) {
63446410 case * ast.ProcedureOption :
@@ -8553,21 +8619,57 @@ func (p *Parser) parseCreateOrAlterFunctionStatement() (*ast.CreateOrAlterFuncti
85538619}
85548620
85558621// parseCreateOrAlterProcedureStatement parses a CREATE OR ALTER PROCEDURE statement
8556- func (p * Parser ) parseCreateOrAlterProcedureStatement () (* ast.CreateProcedureStatement , error ) {
8557- // For now, delegate to regular CREATE PROCEDURE parsing
8558- return p .parseCreateProcedureStatement ()
8622+ func (p * Parser ) parseCreateOrAlterProcedureStatement () (* ast.CreateOrAlterProcedureStatement , error ) {
8623+ // Parse as regular CREATE PROCEDURE, then convert to CreateOrAlter type
8624+ stmt , err := p .parseCreateProcedureStatement ()
8625+ if err != nil {
8626+ return nil , err
8627+ }
8628+ return & ast.CreateOrAlterProcedureStatement {
8629+ ProcedureReference : stmt .ProcedureReference ,
8630+ Parameters : stmt .Parameters ,
8631+ StatementList : stmt .StatementList ,
8632+ IsForReplication : stmt .IsForReplication ,
8633+ Options : stmt .Options ,
8634+ MethodSpecifier : stmt .MethodSpecifier ,
8635+ }, nil
85598636}
85608637
85618638// parseCreateOrAlterViewStatement parses a CREATE OR ALTER VIEW statement
8562- func (p * Parser ) parseCreateOrAlterViewStatement () (* ast.CreateViewStatement , error ) {
8563- // For now, delegate to regular CREATE VIEW parsing
8564- return p .parseCreateViewStatement ()
8639+ func (p * Parser ) parseCreateOrAlterViewStatement () (* ast.CreateOrAlterViewStatement , error ) {
8640+ // Parse as regular CREATE VIEW, then convert to CreateOrAlter type
8641+ stmt , err := p .parseCreateViewStatement ()
8642+ if err != nil {
8643+ return nil , err
8644+ }
8645+ return & ast.CreateOrAlterViewStatement {
8646+ SchemaObjectName : stmt .SchemaObjectName ,
8647+ Columns : stmt .Columns ,
8648+ SelectStatement : stmt .SelectStatement ,
8649+ WithCheckOption : stmt .WithCheckOption ,
8650+ ViewOptions : stmt .ViewOptions ,
8651+ IsMaterialized : stmt .IsMaterialized ,
8652+ }, nil
85658653}
85668654
85678655// parseCreateOrAlterTriggerStatement parses a CREATE OR ALTER TRIGGER statement
8568- func (p * Parser ) parseCreateOrAlterTriggerStatement () (* ast.CreateTriggerStatement , error ) {
8569- // For now, delegate to regular CREATE TRIGGER parsing
8570- return p .parseCreateTriggerStatement ()
8656+ func (p * Parser ) parseCreateOrAlterTriggerStatement () (* ast.CreateOrAlterTriggerStatement , error ) {
8657+ // Parse as regular CREATE TRIGGER, then convert to CreateOrAlter type
8658+ stmt , err := p .parseCreateTriggerStatement ()
8659+ if err != nil {
8660+ return nil , err
8661+ }
8662+ return & ast.CreateOrAlterTriggerStatement {
8663+ Name : stmt .Name ,
8664+ TriggerObject : stmt .TriggerObject ,
8665+ TriggerType : stmt .TriggerType ,
8666+ TriggerActions : stmt .TriggerActions ,
8667+ Options : stmt .Options ,
8668+ WithAppend : stmt .WithAppend ,
8669+ IsNotForReplication : stmt .IsNotForReplication ,
8670+ MethodSpecifier : stmt .MethodSpecifier ,
8671+ StatementList : stmt .StatementList ,
8672+ }, nil
85718673}
85728674
85738675// parseCreateTriggerStatement parses a CREATE TRIGGER statement
@@ -9580,6 +9682,39 @@ func createTriggerStatementToJSON(s *ast.CreateTriggerStatement) jsonNode {
95809682 return node
95819683}
95829684
9685+ func createOrAlterTriggerStatementToJSON (s * ast.CreateOrAlterTriggerStatement ) jsonNode {
9686+ node := jsonNode {
9687+ "$type" : "CreateOrAlterTriggerStatement" ,
9688+ "TriggerType" : s .TriggerType ,
9689+ "WithAppend" : s .WithAppend ,
9690+ "IsNotForReplication" : s .IsNotForReplication ,
9691+ }
9692+ if s .Name != nil {
9693+ node ["Name" ] = schemaObjectNameToJSON (s .Name )
9694+ }
9695+ if s .TriggerObject != nil {
9696+ node ["TriggerObject" ] = triggerObjectToJSON (s .TriggerObject )
9697+ }
9698+ if len (s .Options ) > 0 {
9699+ options := make ([]jsonNode , len (s .Options ))
9700+ for i , o := range s .Options {
9701+ options [i ] = triggerOptionTypeToJSON (o )
9702+ }
9703+ node ["Options" ] = options
9704+ }
9705+ if len (s .TriggerActions ) > 0 {
9706+ actions := make ([]jsonNode , len (s .TriggerActions ))
9707+ for i , a := range s .TriggerActions {
9708+ actions [i ] = triggerActionToJSON (a )
9709+ }
9710+ node ["TriggerActions" ] = actions
9711+ }
9712+ if s .StatementList != nil {
9713+ node ["StatementList" ] = statementListToJSON (s .StatementList )
9714+ }
9715+ return node
9716+ }
9717+
95839718func triggerOptionTypeToJSON (o ast.TriggerOptionType ) jsonNode {
95849719 switch opt := o .(type ) {
95859720 case * ast.TriggerOption :
0 commit comments