Exemple #1
0
        public override Statement EmitDefinition(EmitMode mode)
        {
            TransitionConstraintDefinition statement = new TransitionConstraintDefinition();

            statement.ConstraintName = Name;
            statement.MetaData       = MetaData == null ? null : MetaData.Copy();
            if (_onInsertNode != null)
            {
                statement.OnInsertExpression = (Expression)_onInsertNode.EmitStatement(mode);
            }
            if (_onUpdateNode != null)
            {
                statement.OnUpdateExpression = (Expression)_onUpdateNode.EmitStatement(mode);
            }
            if (_onDeleteNode != null)
            {
                statement.OnDeleteExpression = (Expression)_onDeleteNode.EmitStatement(mode);
            }
            return(statement);
        }
Exemple #2
0
        // Must be called with the original stack
        protected BrowseTableItem CreateTable(IRow origin, bool forward, bool inclusive)
        {
            // Prepare the context variable to contain the origin value (0 if this is an unanchored set)
            object contextVar;
            Row    localOrigin;

            if (origin == null)
            {
                localOrigin = null;
                contextVar  = 0;
            }
            else
            {
                if ((origin.DataType.Columns.Count > 0) && (Schema.Object.Qualifier(origin.DataType.Columns[0].Name) != Keywords.Origin))
                {
                    localOrigin = new Row(Manager, new Schema.RowType(origin.DataType.Columns, Keywords.Origin));
                }
                else
                {
                    localOrigin = new Row(Manager, new Schema.RowType(origin.DataType.Columns));
                }
                origin.CopyTo(localOrigin);
                contextVar = localOrigin;
            }

            int  originIndex    = ((localOrigin == null) ? -1 : localOrigin.DataType.Columns.Count - 1);
            bool localInclusive = (localOrigin == null) ? true : inclusive;

            // Ensure the browse node has the appropriate browse variant
            lock (Node)
            {
                if (!Node.HasBrowseVariant(originIndex, forward, localInclusive))
                {
                    Program.ServerProcess.PushGlobalContext();
                    try
                    {
                        Node.CompileBrowseVariant(Program, originIndex, forward, localInclusive);
                    }
                    finally
                    {
                        Program.ServerProcess.PopGlobalContext();
                    }
                }
            }

            // Execute the variant with the current context variable
            Program.Stack.Push(contextVar);
            try
            {
                PlanNode browseVariantNode = Node.GetBrowseVariantNode(Program.Plan, originIndex, forward, localInclusive);
                                #if TRACEBROWSEEVENTS
                Trace.WriteLine(String.Format("BrowseTableItem created with query: {0}", new D4TextEmitter().Emit(browseVariantNode.EmitStatement(EmitMode.ForCopy))));
                                #endif
                return
                    (new BrowseTableItem
                     (
                         this,
                         (ITable)browseVariantNode.Execute(Program),
                         contextVar,
                         localOrigin,
                         forward,
                         inclusive
                     ));
            }
            finally
            {
                Program.Stack.Pop();
            }
        }