示例#1
0
        protected override void ExecuteStatement(ExecutionContext context)
        {
            //if (!context.User.CanCreateInSchema(TriggerName.ParentName))
            //	throw new SecurityException(String.Format("The user '{0}' cannot create in schema '{1}'.", context.User.Name, TriggerName.ParentName));

            if (!context.DirectAccess.TableExists(TableName))
            {
                throw new ObjectNotFoundException(TableName);
            }

            // TODO: Discover the accessed objects in the Body and verifies the user has the rights

            if (context.DirectAccess.ObjectExists(DbObjectType.Trigger, TriggerName))
            {
                if (!ReplaceIfExists)
                {
                    throw new StatementException(String.Format("A trigger named '{0}' already exists.", TriggerName));
                }

                context.DirectAccess.DropObject(DbObjectType.Trigger, TriggerName);
            }

            var triggerInfo = new PlSqlTriggerInfo(TriggerName, TableName, EventTime, EventType, Body);

            if (Status != TriggerStatus.Unknown)
            {
                triggerInfo.Status = Status;
            }

            context.DirectAccess.CreateObject(triggerInfo);
            context.DirectAccess.GrantOn(DbObjectType.Trigger, TableName, context.User.Name, PrivilegeSets.SchemaAll, true);
        }
示例#2
0
        private void CreateTriggers(IQuery query, ObjectName tableName)
        {
            var triggerName = ObjectName.Parse("APP.trigger1");
            var eventTime   = TriggerEventTime.Before;
            var eventType   = TriggerEventType.Insert | TriggerEventType.Update;
            var body        = new PlSqlBlockStatement();

            body.Declarations.Add(new DeclareVariableStatement("a", PrimitiveTypes.Integer()));
            body.Statements.Add(new AssignVariableStatement(SqlExpression.VariableReference("a"), SqlExpression.Constant(33)));
            var triggerInfo = new PlSqlTriggerInfo(triggerName, tableName, eventTime, eventType, body);

            query.Access().CreateObject(triggerInfo);
        }