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); }
protected Schema.Order GetDefaultOrder(Schema.TableVar tableVar) { foreach (Schema.Order order in tableVar.Orders) { if (Convert.ToBoolean(DerivationUtility.GetTag(order.MetaData, "IsDefault", "False"))) { return(new Schema.Order(order)); } } foreach (Schema.Key key in tableVar.Keys) { if (Convert.ToBoolean(DerivationUtility.GetTag(key.MetaData, "IsDefault", "False"))) { return(new Schema.Order(key)); } } if (tableVar.Keys.Count > 0) { Schema.Order order = new Schema.Order(_program.FindClusteringKey(tableVar)); if (IsOrderVisible(order)) { return(order); } foreach (Schema.Key key in tableVar.Keys) { order = new Schema.Order(key); if (IsOrderVisible(order)) { return(order); } } } if (tableVar.Orders.Count > 0) { foreach (Schema.Order order in tableVar.Orders) { if (IsOrderVisible(order)) { return(order); } } } return(null); }