Example #1
0
        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);
        }
Example #2
0
 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);
     }
 }
Example #3
0
        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));
        }