@@ -9589,9 +9589,16 @@ func (p *Parser) parseCreateEventNotificationFromEvent() (*ast.CreateEventNotifi
95899589
95909590 // Convert event name to PascalCase and determine if it's a group or type
95919591 pascalName := eventNameToPascalCase (eventName )
9592+ upperName := strings .ToUpper (eventName )
95929593
9593- // If name ends with "Events" (after conversion), it's a group
9594- if strings .HasSuffix (strings .ToUpper (eventName ), "_EVENTS" ) || strings .HasSuffix (strings .ToUpper (eventName ), "EVENTS" ) {
9594+ // Determine if it's a group or a type
9595+ // Groups are: names ending in "_EVENTS" or "EVENTS", or TRC_* or DDL_* prefixed names
9596+ isGroup := strings .HasSuffix (upperName , "_EVENTS" ) ||
9597+ strings .HasSuffix (upperName , "EVENTS" ) ||
9598+ strings .HasPrefix (upperName , "TRC_" ) ||
9599+ strings .HasPrefix (upperName , "DDL_" )
9600+
9601+ if isGroup {
95959602 stmt .EventTypeGroups = append (stmt .EventTypeGroups , & ast.EventGroupContainer {
95969603 EventGroup : pascalName ,
95979604 })
@@ -9658,17 +9665,67 @@ func (p *Parser) parseCreateEventNotificationFromEvent() (*ast.CreateEventNotifi
96589665}
96599666
96609667// eventNameToPascalCase converts an event name like "Object_Created" or "DDL_CREDENTIAL_EVENTS" to PascalCase.
9668+ // eventTypeNameMap maps uppercase event type names to their correct PascalCase equivalents
9669+ var eventTypeNameMap = map [string ]string {
9670+ // Audit events with DB (must be uppercase)
9671+ "AUDIT_ADD_DB_USER_EVENT" : "AuditAddDBUserEvent" ,
9672+ "AUDIT_ADD_MEMBER_TO_DB_ROLE_EVENT" : "AuditAddMemberToDBRoleEvent" ,
9673+ "AUDIT_ADDLOGIN_EVENT" : "AuditAddLoginEvent" ,
9674+ // Log events
9675+ "ERRORLOG" : "ErrorLog" ,
9676+ "EVENTLOG" : "EventLog" ,
9677+ // OLEDB events
9678+ "OLEDB_DATAREAD_EVENT" : "OledbDataReadEvent" ,
9679+ "OLEDB_QUERYINTERFACE_EVENT" : "OledbQueryInterfaceEvent" ,
9680+ // Showplan events
9681+ "SHOWPLAN_ALL_FOR_QUERY_COMPILE" : "ShowPlanAllForQueryCompile" ,
9682+ "SHOWPLAN_XML_FOR_QUERY_COMPILE" : "ShowPlanXmlForQueryCompile" ,
9683+ "SHOWPLAN_XML" : "ShowPlanXml" ,
9684+ "SHOWPLAN_XML_STATISTICS_PROFILE" : "ShowPlanXmlStatisticsProfile" ,
9685+ // SP cache events
9686+ "SP_CACHEINSERT" : "SpCacheInsert" ,
9687+ "SP_CACHEMISS" : "SpCacheMiss" ,
9688+ "SP_CACHEREMOVE" : "SpCacheRemove" ,
9689+ // Recompile events
9690+ "SQL_STMTRECOMPILE" : "SqlStmtRecompile" ,
9691+ // User configurable events
9692+ "USERCONFIGURABLE_0" : "UserConfigurable0" ,
9693+ "USERCONFIGURABLE_1" : "UserConfigurable1" ,
9694+ "USERCONFIGURABLE_2" : "UserConfigurable2" ,
9695+ "USERCONFIGURABLE_3" : "UserConfigurable3" ,
9696+ "USERCONFIGURABLE_4" : "UserConfigurable4" ,
9697+ "USERCONFIGURABLE_5" : "UserConfigurable5" ,
9698+ "USERCONFIGURABLE_6" : "UserConfigurable6" ,
9699+ "USERCONFIGURABLE_7" : "UserConfigurable7" ,
9700+ "USERCONFIGURABLE_8" : "UserConfigurable8" ,
9701+ "USERCONFIGURABLE_9" : "UserConfigurable9" ,
9702+ // XQuery
9703+ "XQUERY_STATIC_TYPE" : "XQueryStaticType" ,
9704+ // TSql
9705+ "TRC_TSQL" : "TrcTSql" ,
9706+ }
9707+
96619708func eventNameToPascalCase (name string ) string {
9709+ // Check if we have a specific mapping
9710+ if mapped , ok := eventTypeNameMap [strings .ToUpper (name )]; ok {
9711+ return mapped
9712+ }
9713+
96629714 // Split by underscore
96639715 parts := strings .Split (name , "_" )
96649716 var result strings.Builder
96659717 for _ , part := range parts {
96669718 if len (part ) == 0 {
96679719 continue
96689720 }
9669- // Capitalize first letter, lowercase rest
9670- result .WriteString (strings .ToUpper (part [:1 ]))
9671- result .WriteString (strings .ToLower (part [1 :]))
9721+ // Special case: DB should be uppercase
9722+ if strings .ToUpper (part ) == "DB" {
9723+ result .WriteString ("DB" )
9724+ } else {
9725+ // Capitalize first letter, lowercase rest
9726+ result .WriteString (strings .ToUpper (part [:1 ]))
9727+ result .WriteString (strings .ToLower (part [1 :]))
9728+ }
96729729 }
96739730 return result .String ()
96749731}
0 commit comments