protected virtual void Prepare() { Expression expression = _elaboratedExpression.Expression; _tableVar = _elaboratedExpression.MainElaboratedTableVar.TableVar; Schema.Order order = GetDefaultOrder(_tableVar); if (order != null) { BaseOrderExpression browseExpression; if (Convert.ToBoolean(DerivationUtility.GetTag(_tableVar.MetaData, "UseBrowse", _elaboratedExpression.PageType, "True"))) { browseExpression = new BrowseExpression(); } else { browseExpression = new OrderExpression(); } browseExpression.Expression = expression; foreach (Schema.OrderColumn column in order.Columns) { OrderColumnDefinition definition = column.EmitStatement(EmitMode.ForCopy) as OrderColumnDefinition; definition.ColumnName = Schema.Object.Qualify(column.Column.Name, _elaboratedExpression.MainElaboratedTableVar.ElaboratedName); browseExpression.Columns.Add(definition); } expression = browseExpression; } _expression = new D4TextEmitter().Emit ( new CursorDefinition ( expression, CursorCapability.Navigable | CursorCapability.BackwardsNavigable | CursorCapability.Bookmarkable | CursorCapability.Searchable | CursorCapability.Updateable, CursorIsolation.Browse, CursorType.Dynamic ) ); // Build the derivation info structure for use in structuring, layout and document production. _derivationInfo = new DerivationInfo(); _derivationInfo.Program = _program; _derivationInfo.Process = _process; _derivationInfo.PageType = _seed.PageType; _derivationInfo.Query = _seed.Query; _derivationInfo.Elaborate = _seed.Elaborate; _derivationInfo.MasterKeyNames = _seed.MasterKeyNames; _derivationInfo.DetailKeyNames = _seed.DetailKeyNames; _derivationInfo.KeyNames = GetKeyNames(_tableVar); _derivationInfo.Expression = _expression; _derivationInfo.ElaboratedExpression = _elaboratedExpression; _derivationInfo.TableVar = _tableVar; _derivationInfo.MainSourceName = DerivationUtility.MainSourceName; _derivationInfo.IsReadOnly = DerivationUtility.IsReadOnlyPageType(_seed.PageType); }
public override Statement EmitStatement(EmitMode mode) { if (IsAccelerator) { return(Nodes[0].EmitStatement(mode)); } else { BrowseExpression browseExpression = new BrowseExpression(); browseExpression.Expression = (Expression)Nodes[0].EmitStatement(mode); for (int index = 0; index < RequestedOrder.Columns.Count; index++) { browseExpression.Columns.Add(RequestedOrder.Columns[index].EmitStatement(mode)); } return(browseExpression); } }
protected override string InternalGetExpression() { Expression expression = GetSeedExpression(); OrderExpression saveOrderExpression = expression as OrderExpression; BrowseExpression saveBrowseExpression = expression as BrowseExpression; if (saveOrderExpression != null) { expression = saveOrderExpression.Expression; } if (saveBrowseExpression != null) { expression = saveBrowseExpression.Expression; } // Eat irrelevant browse and order operators OrderExpression orderExpression = null; BrowseExpression browseExpression = null; while (((orderExpression = expression as OrderExpression) != null) || ((browseExpression = expression as BrowseExpression) != null)) { if (orderExpression != null) { expression = orderExpression.Expression; orderExpression = null; } if (browseExpression != null) { expression = browseExpression.Expression; browseExpression = null; } } if (IsMasterSetup() && _writeWhereClause) { expression = MergeRestrictCondition ( expression, GetMasterDetailCondition(DetailKey) ); } if (_filter != String.Empty) { expression = MergeRestrictCondition ( expression, _parser.ParseExpression(_filter) ); } if (IsAdorned()) { AdornExpression adornExpression = new AdornExpression(); adornExpression.Expression = expression; adornExpression.Expressions.AddRange(_columns); adornExpression.Constraints.AddRange(_constraints); adornExpression.Orders.AddRange(_orders); adornExpression.Keys.AddRange(_keys); expression = adornExpression; } if (_orderDefinition != null) { if (_useBrowse) { browseExpression = new Language.D4.BrowseExpression(); browseExpression.Expression = expression; browseExpression.Columns.AddRange(_orderDefinition.Columns); expression = browseExpression; } else { orderExpression = new Language.D4.OrderExpression(); orderExpression.Expression = expression; orderExpression.Columns.AddRange(_orderDefinition.Columns); expression = orderExpression; } } else if (_order != null) { if (_useBrowse) { browseExpression = new BrowseExpression(); foreach (Schema.OrderColumn column in _order.Columns) { if (column.IsDefaultSort) { browseExpression.Columns.Add(new OrderColumnDefinition(column.Column.Name, column.Ascending, column.IncludeNils)); } else { browseExpression.Columns.Add(new OrderColumnDefinition(column.Column.Name, column.Ascending, column.IncludeNils, column.Sort.EmitDefinition(EmitMode.ForCopy))); } } browseExpression.Expression = expression; expression = browseExpression; } else { orderExpression = new OrderExpression(); foreach (Schema.OrderColumn column in _order.Columns) { if (column.IsDefaultSort) { orderExpression.Columns.Add(new OrderColumnDefinition(column.Column.Name, column.Ascending, column.IncludeNils)); } else { orderExpression.Columns.Add(new OrderColumnDefinition(column.Column.Name, column.Ascending, column.IncludeNils, column.Sort.EmitDefinition(EmitMode.ForCopy))); } } orderExpression.Expression = expression; expression = orderExpression; } } else { if (saveOrderExpression != null) { saveOrderExpression.Expression = expression; expression = saveOrderExpression; } else if (saveBrowseExpression != null) { saveBrowseExpression.Expression = expression; expression = saveBrowseExpression; } } CursorDefinition cursorExpression = new CursorDefinition(expression); cursorExpression.Isolation = _requestedIsolation; cursorExpression.Capabilities = _requestedCapabilities; cursorExpression.SpecifiesType = true; cursorExpression.CursorType = _cursorType; return(new D4TextEmitter().Emit(cursorExpression)); }