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); }
// 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(); } }