Dashboard > ApacheDS Addons > ... > Triggers > Grammar for Triggers
Grammar for Triggers
Added by Ersin Er, last edited by Ersin Er on Jun 06, 2006  (view change)
Labels: 


The ABNF grammar

TriggerSpecification = ActionTime TriggerEventAndTriggeredAction

ActionTime = "BEFORE"
           / "AFTER"
           / "INSTEADOF"

TriggerEventAndTriggeredAction = LDAPOperationAndStoredProcedureCall

LDAPOperationAndStoredProcedureCall = BindOperationAndStoredProcedureCall
                                    / UnbindOperationAndStoredProcedureCall
                                    / SearchOperationAndStoredProcedureCall
                                    / ModifyOperationAndStoredProcedureCall
                                    / AddOperationAndStoredProcedureCall
                                    / DeleteOperationAndStoredProcedureCall
                                    / ModDNOperationAndStoredProcedureCall
                                    / CompareOperationAndStoredProcedureCall
                                    / AbandonOperationAndStoredProcedureCall
                                    / ExtendedOperationAndStoredProcedureCall


BindOperationAndStoredProcedureCall     = "bind" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ BindStoredProcedureParameterList ]

UnbindOperationAndStoredProcedureCall   = "unbind" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ UnbindStoredProcedureParameterList ]

SearchOperationAndStoredProcedureCall   = "search" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ SearchStoredProcedureParameterList ]

ModifyOperationAndStoredProcedureCall   = "modify" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ ModifyStoredProcedureParameterList ]

AddOperationAndStoredProcedureCall      = "add" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ AddStoredProcedureParameterList ]

DeleteOperationAndStoredProcedureCall   = "delete" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ DeleteStoredProcedureParameterList ]

ModDNOperationAndStoredProcedureCall    = "modDN" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ ModDNStoredProcedureParameterList ]

CompareOperationAndStoredProcedureCall  = "compare" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ CompareStoredProcedureParameterList ]

AbandonOperationAndStoredProcedureCall  = "abandon" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ AbandonStoredProcedureParameterList ]

ExtendedOperationAndStoredProcedureCall = "extended" "CALL" FullyQualifiedStoredProcedureName
                                          [ GenericStoredProcedureOptionList ]
                                          [ ExtendedStoredProcedureParameterList ]


BindStoredProcedureParameterList     = "(" *( BindStoredProcedureParameter
                                              *( sep BindStoredProcedureParameter ) ) ")"
UnbindStoredProcedureParameterList   = "(" *( UnbindStoredProcedureParameter
                                              *( sep UnbindStoredProcedureParameter ) ) ")"
SearchStoredProcedureParameterList   = "(" *( SearchStoredProcedureParameter
                                              *( sep SearchStoredProcedureParameter ) ) ")"
ModifyStoredProcedureParameterList   = "(" *( ModifyStoredProcedureParameter
                                              *( sep ModifyStoredProcedureParameter ) ) ")"
AddStoredProcedureParameterList      = "(" *( AddStoredProcedureParameter
                                              *( sep AddStoredProcedureParameter ) ) ")"
DeleteStoredProcedureParameterList   = "(" *( DeleteStoredProcedureParameter
                                              *( sep DelStoredProcedureParameter ) ) ")"
ModDNStoredProcedureParameterList    = "(" *( ModDNStoredProcedureParameter
                                              *( sep ModDNStoredProcedureParameter ) ) ")"
CompareStoredProcedureParameterList  = "(" *( CompareStoredProcedureParameter
                                              *( sep CompareStoredProcedureParameter ) ) ")"
AbandonStoredProcedureParameterList  = "(" *( AbandonStoredProcedureParameter
                                              *( sep AbandonStoredProcedureParameter ) ) ")"
ExtendedStoredProcedureParameterList = "(" *( ExtendedStoredProcedureParameter
                                              *( sep ExtendedStoredProcedureParameter ) ) ")"


BindStoredProcedureParameter     = "$version"
                                 / "$name"
                                 / "$authentication"
                                 / GenericStoredProcedureParameter

UnbindStoredProcedureParameter   = GenericStoredProcedureParameter

SearchStoredProcedureParameter   = "$baseObject"
                                 / "$scope"
                                 / "$derefAliases"
                                 / "$sizeLimit"
                                 / "$timeLimit"
                                 / "$typesOnly"
                                 / "$filter"
                                 / "$attributes"
                                 / "$searchResults"
                                 / GenericStoredProcedureParameter

ModifyStoredProcedureParameter   = "$object"
                                 / "$modification"
                                 / GenericStoredProcedureParameter
                                 / "$oldEntry"
                                 / "$newEntry"

AddStoredProcedureParameter      = "$entry"
                                 / "$attributes"
                                 / GenericStoredProcedureParameter

DeleteStoredProcedureParameter   = "$name"
                                 / GenericStoredProcedureParameter
                                 / "$deletedEntry"

ModDNStoredProcedureParameter    = "$entry"
                                 / "$newrdn"
                                 / "$deleteoldrdn"
                                 / "$newSuperior"
                                 / GenericStoredProcedureParameter

CompareStoredProcedureParameter  = "$entry"
                                 / "$ava"
                                 / "$compareResult"
                                 / GenericStoredProcedureParameter

AbandonStoredProcedureParameter  = "$messageId"
                                 / GenericStoredProcedureParameter

ExtendedStoredProcedureParameter = "$requestName"
                                 / "$requestValue"
                                 / GenericStoredProcedureParameter


GenericStoredProcedureParameter = "$operationPrincipal"
                                / "$operationTime"


FullyQualifiedStoredProcedureName = UTF8String


GenericStoredProcedureOptionList = "{" *( GenericStoredProcedureOption
                                          *( sep GenericStoredProcedureOption ) ) "}"

GenericStoredProcedureOption = StoredProcedureLanguageOption
                             / StoredProcedureSearchContextOption

StoredProcedureLanguageOption = "language" StoredProcedureLanguage

StoredProcedureLanguage = UTF8String

StoredProcedureSearchContextOption = "searchContext"
                                     [ "{" [ "scope" StoredProcedureSearchScope ] "}" ]
                                     StoredProcedureSearchContext

StoredProcedureSearchScope = "baseObject"
                           / "singleLevel"
                           / "wholeSubtree"


StoredProcedureSearchContext = DistinguishedName


sep = ","


; All characters after # in a line are considered to be comments.
A LL(1) equivalent of this grammar can be found here (draft).

Examples

  • BEFORE delete CALL "BackupUtilities.backupDeletedEntry" ($name, $deletedEntry)
  • AFTER add CALL "Logger.logAddOperation" ($entry, $attributes, $operationPrincipal)
  • INSTEADOF search # do not do search
    CALL "RestrictionUtilities.searchNoWay" { language "Java" } () # but run a procedure
  • BEFORE bind  # Action Time and Operation
      CALL "AuthUtilities.beforeBind"  # Stored Procedure Call
        { searchContext { scope baseObject } "cn=Auth,cn=System Stored Procedures,ou=system" }  # Stored Procedure Call Options
          ($name)  # Stored Procedure Parameter(s)

Ideas

References

  • RFC 2251 Lightweight Directory Access Protocol (v3)
  • RFC 2234 Augmented BNF for Syntax Specifications: ABNF
  • RFC 3642 Common Elements of Generic String Encoding Rules (GSER) Encodings
  • ANSI/ISO/IEC 9075-2:1999 ANSI/ISO/IEC International Standard (IS), Database Language SQL — Part 2: Foundation (SQL/Foundation)
LL(1) grammar for Triggers (ApacheDS Addons)

Site running on a free Atlassian Confluence Open Source Project License granted to Safehaus. Evaluate Confluence today.
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5.4 Build:#809 Jun 12, 2007) - Bug/feature request - Contact Administrators