Example #1
0
        /// <summary>
        /// 使用临时表形式,生成更新若干数据对象语句,
        /// 要求数据库拥有<see cref="EDbCapable.TemporaryTable"/>
        /// 和<see cref="EDbCapable.ModifyJoin"/>两个特性
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="content">更新表达式。</param>
        /// <returns>语句片段。</returns>
        protected virtual SqlFragment GenerateForUpdateTempTable(GenerateContext context, DbExpression content)
        {
            var                    data       = (GenerateDataForUpdate)context.Data;
            var                    name       = data.TargetName;
            var                    block      = new BlockFragment(context);
            UpdateFragment         mainUpdate = null;
            TemporaryTableFragment temptable  = null;

            var members = data.GetTables().SelectMany(a => a.Members);

            foreach (var unit in data.GetUnits())
            {
                TemporaryTableFragment current = null;
                if (temptable == null)
                {
                    current = new TemporaryTableFragment(context, members);
                }
                else
                {
                    current = new TemporaryTableFragment(context, temptable.Name, members);
                }
                GenerateForUpdateRegister(context, content, current);

                var metadata = unit.Table;
                var update   = new UpdateFragment(context, metadata, name);
                update.AddSource(update.Target, current);
                GenerateForUpdateMembers(context, unit, update, current);
                update.Target.Join(current, metadata.Keys.Concat(metadata.Concurrencys));
                block.Add(update);
                if (unit == data.MainUnit)
                {
                    mainUpdate = update;
                }
                if (temptable == null)
                {
                    temptable = current;
                }
                else
                {
                    current.Members.ForEach(m => temptable.GetMember(m.Property));
                }
            }
            block.Insert(0, GenerateCreateTemplateTable(context, temptable, data.CommitObject, data.Items));

            if (data.ReturnMembers.Any())
            {
                var target = data.SubUnits == null ? mainUpdate.Target : new InheritFragment(context, data.Table);
                var select = new SelectFragment(context, target);
                select.Members.AddRange(data.ReturnMembers.Select(a => target.GetMember(a.Metadata)));

                var datatable = temptable.Clone();
                select.AddSource(datatable);
                target.Join(datatable, data.Table.Keys);

                block.Add(select);
                data.GenerateOutput();
            }
            data.SetConcurrencyExpectCount(data.TableCount + 1);
            return(block);
        }
Example #2
0
        /// <summary>
        /// 根据指定类型<see cref="DbCollectionMemberExpression"/>表达式创建虚拟数据源列表语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="source">虚拟数据源</param>
        /// <returns>查询语句片段。</returns>
        public virtual SelectFragment CreateVirtualListForCollectionMember(GenerateContext context, VirtualSourceFragment source)
        {
            var content   = (DbCollectionMemberExpression)source.Expression;
            var target    = GetSource(context, content.TargetSet.Item);
            var container = source.Container;

            if (container.IsRecommandLock)
            {
                container = container.Parent as SelectFragment;
            }
            var list = new SelectFragment(context, target);

            if (content.Metadata.IsComposite)
            {
                GenerateVirtualCompositeJoinForCollectionMember(context, content, list, true);
            }
            container.AddSource(list);

            GenerateVirtualJoinForCollectionMember(context, source, list, false);
            list.RetrievalMembers(content.TargetSet.Item, false);
            if (IsSelectFragment(content))
            {
                context.RegisterTempSource(content.Item, target, delegate()
                {
                    list = InitialSelectFragment(list, content);
                });
            }
            return(list);
        }
Example #3
0
        /// <summary>
        /// 根据指定类型<see cref="DbGroupByExpression"/>表达式创建虚拟数据源列表语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="source">虚拟数据源</param>
        /// <returns>查询语句片段。</returns>
        public virtual SelectFragment CreateVirtualListForGroupBy(GenerateContext context, VirtualSourceFragment source)
        {
            var content = (DbGroupByExpression)source.Expression;
            var target  = source.Source;

            var body      = source.GetBody();
            var list      = new SelectFragment(context, target);
            var container = source.Container;

            if (container.IsRecommandLock)
            {
                container = container.Parent as SelectFragment;
            }
            container.AddSource(list);
            list.RetrievalMembers(content.Source.Item, false);

            list.Join      = EJoinType.InnerJoin;
            list.Condition = body.Members.OfType <ReferenceMemberFragment>().Select(member =>
            {
                var left = list.Members.OfType <ReferenceMemberFragment>().Where(a => a.Reference == member.Reference).Single();
                return(new BinaryFragment(context, EBinaryKind.Equal)
                {
                    Left = left,
                    Right = ValidateMember(context, member, container, null, true)
                });
            }).Merge();
            return(list);
        }
Example #4
0
 private void WriteFragmentForSelectSimple(SqlWriter writer, SelectFragment select, string rownumber = "")
 {
     writer.Write("SELECT");
     if (select.Distinct)
     {
         writer.Write(" DISTINCT");
     }
     if (select.Take > 0 && select.Skip <= 0)
     {
         writer.Write(" TOP ");
         writer.Write(select.Take);
     }
     writer.WriteLine();
     WriteFragmentForSelectMembers(writer, select.Members);
     if (!string.IsNullOrEmpty(rownumber))
     {
         writer.Write(", ROW_NUMBER() OVER ( ");
         WriteFragmentForOrderBy(writer, select.Sorts);
         writer.Write(" ) AS ");
         writer.Write(rownumber);
     }
     WriteFragmentForFrom(writer, select.Sources);
     WriteFragmentForWhere(writer, select.Where);
     WriteFragmentForGroupBy(writer, select.GroupBys);
     if (string.IsNullOrEmpty(rownumber))
     {
         WriteFragmentForOrderBy(writer, select.Sorts);
     }
 }
Example #5
0
        public void ThenRedirectingToMerchantSteps(string user, string password, string paymentSource, string amount)
        {
            DriverManager.GetWebDriver().Navigate().GoToUrl(TestConfiguration.Current.MerchantUrl);

            //Заполнение формы мерчанта
            new DataGridComponent(SearchElementByCss(MerchantPayForm))
            .ClearText(PartnerId)
            .SendText(PartnerId, "58")
            .SendText(partner_secret, "WQ7kQvMGp5+9KT6BaGBL")
            .SendText(OrderIdLocator, OrderId)
            .ClearText(Amount)
            .SendText(Amount, amount)
            .SendText(Currency, "Usd")
            .SendText(Details, "this is details")
            .ClickOnElement(Submit);

            //Ожидание формы ввода логина пароля
            WaitElementIsVisibleByCss(LoginForm);

            new DataGridComponent(SearchElementByCss(LoginForm))
            .SendText(Login, user)
            .SendText(Password, password)
            .ClickByText("Войти", "", "");

            //Выбор способа оплаты - (кошелек/карта)
            SelectFragment.SetOptionByFieldName("Способ оплаты", "USD", $" [label *= '{paymentSource}']");

            _context.Grid = new DataGridComponent(SearchElementByCss(ConfirmationCodeLocator));
        }
Example #6
0
        /// <summary>
        /// 根据指定类型<see cref="DbInnerJoinExpression"/>表达式创建数据源语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">指定表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual ISourceFragment CreateSourceForInnerJoin(GenerateContext context, DbExpression expression)
        {
            var content = (DbInnerJoinExpression)expression;
            var source  = CreateSource(context, content.Source);
            var target  = CreateSource(context, content.Target);

            if (source is SelectFragment select)
            {
                if (select.IsRecommandLock)
                {
                    select = new SelectFragment(context, source);
                }
            }
            else
            {
                select = new SelectFragment(context, source);
            }

            select.AddSource(target);
            if (IsSelectFragment(content))
            {
                InitialSelectFragment(select, content);
            }

            target.Join      = EJoinType.InnerJoin;
            target.Condition = content.KeyPairs.Select(a => select.CreateExpression(a)).Merge();
            return(select);
        }
        private void WriteFragmentForSelectSkip(SqlWriter writer, SelectFragment select, string rownumber, Action action, bool islistmember = false)
        {
            var alias = select.Context.GetDataSourceAlias();

            if (islistmember)
            {
                writer.Write("SELECT ");
                select.Members.ForEach(() => writer.Write(", "), member =>
                {
                    writer.Write(alias);
                    writer.Write('.');
                    WriteDbName(writer, member.OutputName);
                });
                writer.Write(" FROM ( ");
            }
            else
            {
                writer.Write("SELECT * FROM ( ");
            }
            action();
            writer.Write(" ) ");
            writer.Write(alias);
            writer.Write(" WHERE ");
            writer.Write(alias);
            writer.Write('.');
            writer.Write(rownumber);
            writer.Write(" > ");
            writer.Write(select.Skip);
        }
 protected override void AddDiscriminatorToSelect(SelectFragment select, string name, string suffix)
 {
     if (HasSubclasses)
     {
         select.SetExtraSelectList(DiscriminatorFragment(name), DiscriminatorAlias);
     }
 }
        private string ManyToManySelectFragment(
            IJoinable rhs,
            string rhsAlias,
            string lhsAlias,
            string collectionSuffix,
            IAssociationType elementType)
        {
            SelectFragment frag = GenerateSelectFragment(lhsAlias, collectionSuffix);

            // We need to select in the associated entity table instead of taking the collection actual element,
            // because filters can be applied to the entity table outer join. In such case, we need to return null
            // for filtered-out elements. (It is tempting to switch to an inner join and just use
            // SelectFragment(lhsAlias, collectionSuffix) for many-to-many too, but this would hinder the proper
            // handling of the not-found feature.)
            var elementColumnNames = string.IsNullOrEmpty(elementType.RHSUniqueKeyPropertyName)
                                ? rhs.KeyColumnNames
                                     // rhs is the entity persister, it does not handle being referenced through an unique key by a
                                     // collection and always yield its identifier columns as KeyColumnNames. We need to resolve the
                                     // key columns instead.
                                     // 6.0 TODO: consider breaking again that IJoinable.SelectFragment interface for transmitting
                                     // the OuterJoinableAssociation instead of its Joinable property. This would allow to get the
                                     // adequate columns directly instead of re-computing them.
                                : ((IPropertyMapping)rhs).ToColumns(elementType.RHSUniqueKeyPropertyName);

            frag.AddColumns(rhsAlias, elementColumnNames, elementColumnAliases);
            AppendIndexColumns(frag, lhsAlias);
            AppendIdentifierColumns(frag, lhsAlias);

            return(frag.ToSqlStringFragment(false));
        }
Example #10
0
        private void GenerateForInsertReturnStatement(GenerateContext context,
                                                      BlockFragment block, ISourceFragment target, TemporaryTableFragment temptable)
        {
            var data = (GenerateDataForInsert)context.Data;

            if (data.ReturnMembers.Any())
            {
                if (data.SubUnits != null)
                {
                    target = new InheritFragment(context, data.Table);
                }
                var select = new SelectFragment(context, target);
                select.Members.AddRange(data.ReturnMembers.Select(a => target.GetMember(a.Metadata)));
                if (temptable == null)
                {
                    select.Where = target.JoinCondition(data.CommitObject, data.Table.Keys);
                }
                else
                {
                    var datatable = temptable.Clone();
                    select.AddSource(datatable);
                    target.Join(datatable, data.Table.Keys);
                }
                block.Add(select);
            }
        }
Example #11
0
        /// <summary>
        /// 生成更新单个数据对象语句。
        /// </summary>
        /// <param name="context">生成上下文</param>
        /// <param name="content">更新表达式。</param>
        /// <returns>语句片段。</returns>
        protected virtual SqlFragment GenerateForUpdateSingle(GenerateContext context, DbExpression content)
        {
            var            data       = (GenerateDataForUpdate)context.Data;
            var            block      = new BlockFragment(context);
            UpdateFragment mainUpdate = null;
            var            name       = data.TargetName;

            GenerateForUpdateRegister(context, content, data.CommitObject);
            foreach (var unit in data.GetUnits())
            {
                var metadata = unit.Table;
                var update   = new UpdateFragment(context, metadata, name);
                data.CommitObject.Parent = update;
                GenerateForUpdateMembers(context, unit, update, data.CommitObject);
                update.Where = update.Target.JoinCondition(data.CommitObject, metadata.Keys.Union(metadata.Concurrencys));
                block.Add(update);
                if (unit == data.MainUnit)
                {
                    mainUpdate = update;
                }
            }
            if (data.ReturnMembers.Any())
            {
                var target = data.SubUnits == null ? mainUpdate.Target : new InheritFragment(context, data.Table);
                var select = new SelectFragment(context, target);
                select.Members.AddRange(data.ReturnMembers.Select(a => target.GetMember(a.Metadata)));
                select.Where = target.JoinCondition(data.CommitObject, data.Table.Keys);
                block.Add(select);
                data.GenerateOutput();
            }
            data.SetConcurrencyExpectCount(data.TableCount);
            return(block);
        }
Example #12
0
        /// <summary>
        /// 创建通过主键及值关联的返回数据语句片段。
        /// </summary>
        /// <param name="unit">内容对象。</param>
        /// <param name="target">目标对象。</param>
        /// <returns>语句片段。</returns>
        internal static SelectFragment SelectReturns(this IContentUnit unit, ISourceFragment target)
        {
            var data    = (ContentBase)unit;
            var context = data.GenerateContext;
            var select  = new SelectFragment(context, target);

            select.Members.AddRange(unit.ReturnMembers.Select(a => target.GetMember(a.Metadata)));
            select.Where = target.JoinCondition(data.CommitObject, data.Table.Keys);
            return(select);
        }
 protected override void AddDiscriminatorToSelect(SelectFragment select, string name, string suffix)
 {
     if (IsDiscriminatorFormula)
     {
         select.AddFormula(name, DiscriminatorFormulaTemplate, DiscriminatorAlias);
     }
     else
     {
         select.AddColumn(name, DiscriminatorColumnName, DiscriminatorAlias);
     }
 }
Example #14
0
        private string ManyToManySelectFragment(IJoinable rhs, string rhsAlias, string lhsAlias, string collectionSuffix)
        {
            SelectFragment frag = GenerateSelectFragment(lhsAlias, collectionSuffix);

            string[] _elementColumnNames = rhs.KeyColumnNames;
            frag.AddColumns(rhsAlias, _elementColumnNames, elementColumnAliases);
            AppendIndexColumns(frag, lhsAlias);
            AppendIdentifierColumns(frag, lhsAlias);

            return frag.ToSqlStringFragment(false);
        }
Example #15
0
        /// <summary>
        /// 创建通过临时表关联的返回数据语句片段。
        /// </summary>
        /// <param name="unit">内容对象。</param>
        /// <param name="target">目标对象。</param>
        /// <param name="temptable">临时表。</param>
        /// <returns>语句片段。</returns>
        internal static SelectFragment SelectReturns(this IContentUnit unit, ISourceFragment target, TemporaryTableFragment temptable)
        {
            var data    = (ContentBase)unit;
            var context = data.GenerateContext;
            var select  = new SelectFragment(context, target);

            select.Members.AddRange(unit.ReturnMembers.Select(a => target.GetMember(a.Metadata)));

            select.AddSource(temptable);
            target.Join(temptable, data.Table.Keys);
            return(select);
        }
 private void WriteFragmentForSelectSimple(SqlWriter writer, SelectFragment select)
 {
     writer.Write("SELECT");
     if (select.Distinct)
     {
         writer.Write(" DISTINCT");
     }
     writer.WriteLine();
     WriteFragmentForSelectMembers(writer, select.Members);
     WriteFragmentForFrom(writer, select.Sources);
     WriteFragmentForWhere(writer, select.Where);
     WriteFragmentForGroupBy(writer, select.GroupBys);
     WriteFragmentForOrderBy(writer, select.Sorts);
 }
        protected SqlString GenerateIdInsertSelect(IQueryable persister, string tableAlias, IASTNode whereClause)
        {
            var            select         = new SqlSelectBuilder(Factory);
            SelectFragment selectFragment = new SelectFragment(Factory.Dialect)
                                            .AddColumns(tableAlias, persister.IdentifierColumnNames, persister.IdentifierColumnNames);

            select.SetSelectClause(selectFragment.ToFragmentString().Substring(2));

            string    rootTableName    = persister.TableName;
            SqlString fromJoinFragment = persister.FromJoinFragment(tableAlias, true, false);

            select.SetFromClause(rootTableName + " " + tableAlias + fromJoinFragment);

            var whereJoinFragment = GetWhereJoinFragment(persister, tableAlias);

            SqlString userWhereClause = SqlString.Empty;

            if (whereClause.ChildCount != 0)
            {
                // If a where clause was specified in the update/delete query, use it to limit the
                // returned ids here...
                try
                {
                    var nodes = new CommonTreeNodeStream(whereClause);
                    var gen   = new SqlGenerator(Factory, nodes);
                    gen.whereClause();
                    userWhereClause = gen.GetSQL().Substring(7);
                }
                catch (RecognitionException e)
                {
                    throw new HibernateException("Unable to generate id select for DML operation", e);
                }
                if (whereJoinFragment.Length > 0)
                {
                    whereJoinFragment = whereJoinFragment.Append(" and ");
                }
            }

            select.SetWhereClause(whereJoinFragment + userWhereClause);

            var insert = new InsertSelect();

            if (Factory.Settings.IsCommentsEnabled)
            {
                insert.SetComment("insert-select for " + persister.EntityName + " ids");
            }
            insert.SetTableName(persister.TemporaryIdTableName);
            insert.SetSelect(select);
            return(insert.ToSqlString());
        }
Example #18
0
        /// <summary>
        /// 根据指定类型<see cref="DbCrossJoinExpression"/>表达式创建数据源语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">指定表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual ISourceFragment CreateSourceForCrossJoin(GenerateContext context, DbExpression expression)
        {
            var content = (DbCrossJoinExpression)expression;
            var source  = CreateSource(context, content.Source);

            if (source is SelectFragment select)
            {
                if (select.IsRecommandLock)
                {
                    select = new SelectFragment(context, source);
                }
            }
            else
            {
                select = new SelectFragment(context, source);
            }

            var target = CreateSource(context, content.Target);

            if (target is VirtualSourceFragment virtualSource)
            {
                switch (virtualSource.Expression.ExpressionType)
                {
                case EExpressionType.CollectionMember:
                    CreateVirtualJoinForCollectionMember(context, content, virtualSource);
                    break;

                case EExpressionType.GroupJoin:
                    CreateVirtualJoinForGroupJoin(context, content, virtualSource);
                    break;

                case EExpressionType.GroupBy:
                    CreateVirtualJoinForGroupBy(context, content, virtualSource);
                    break;

                default:
                    throw new NotSupportedException(string.Format(Res.NotSupportedJoinVirtualSource, expression.ExpressionType));
                }
            }
            else
            {
                select.AddSource(target);
                target.Join = EJoinType.CrossJoin;
            }
            if (IsSelectFragment(content))
            {
                InitialSelectFragment(select, content);
            }
            return(select);
        }
        public override SqlString PropertySelectFragment(string alias, string suffix)
        {
            SelectFragment frag = new SelectFragment(factory.Dialect)
                                  .SetSuffix(suffix)
                                  .SetUsedAliases(IdentifierAliases);

            if (HasSubclasses)
            {
                frag.AddColumn(alias, DiscriminatorColumnName, DiscriminatorAlias);
            }

            return(frag.AddColumns(alias, subclassColumnClosure, subclassColumnAliasClosure)
                   .AddFormulas(alias, subclassFormulaTemplateClosure, subclassFormulaAliasClosure)
                   .ToSqlStringFragment());
        }
Example #20
0
        internal static InsertFragment InsertTemptable(this ContentBase data, TemporaryTableFragment temptable, CommitKeyUnit unit, DbName name = null)
        {
            var members = unit.Keys.Concat(unit.Members).Select(a => a.Metadata);
            var context = data.GenerateContext;
            var table   = new TableFragment(context, unit.Table, name);
            var select  = new SelectFragment(context, temptable);
            var current = new InsertFragment(context, table, select);

            foreach (var member in members)
            {
                select.CreateMember(null, temptable.GetMember(member));
                current.CreateMember(null, member);
            }
            return(current);
        }
Example #21
0
        /// <summary>
        /// 根据指定类型<see cref="DbGroupJoinExpression"/>表达式创建数据源语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">指定表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual ISourceFragment CreateSourceForGroupJoin(GenerateContext context, DbExpression expression)
        {
            var content       = (DbGroupJoinExpression)expression;
            var source        = CreateSource(context, content.Source);
            var taget         = CreateSource(context, content.Target);
            var container     = new SelectFragment(context, source);
            var virtualSource = new VirtualSourceFragment(context, expression, container, source);

            context.RegisterSource(content.Item, virtualSource);
            if (IsSelectFragment(content))
            {
                return(InitialSelectFragment(container, content));
            }
            return(container);
        }
Example #22
0
        public SqlString SelectFragment(string alias)
        {
            SelectFragment frag = new SelectFragment(dialect)
                                  .SetSuffix(String.Empty) //always ignore suffix for collection columns
                                  .AddColumns(alias, keyColumnNames, keyColumnAliases)
                                  .AddColumns(alias, elementColumnNames, elementColumnAliases);

            if (hasIndex)
            {
                frag.AddColumns(alias, indexColumnNames, indexColumnAliases);
            }
            if (hasIdentifier)
            {
                frag.AddColumn(alias, identifierColumnName, identifierColumnAlias);
            }
            return(frag.ToSqlStringFragment(false));
        }
 private void WriteFragmentForSelectRowNumber(SqlWriter writer, SelectFragment select, string rownumber)
 {
     writer.Write("SELECT");
     if (select.Distinct)
     {
         writer.Write(" DISTINCT");
     }
     writer.WriteLine();
     WriteFragmentForSelectMembers(writer, select.Members);
     writer.Write(", ROW_NUMBER() OVER ( ");
     WriteFragmentForOrderBy(writer, select.Sorts);
     writer.Write(" ) ");
     writer.Write(rownumber);
     WriteFragmentForFrom(writer, select.Sources);
     WriteFragmentForWhere(writer, select.Where);
     WriteFragmentForGroupBy(writer, select.GroupBys);
 }
Example #24
0
        /// <summary>
        /// 根据指定类型<see cref="DbGroupByExpression"/>表达式创建数据源语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="expression">指定表达式。</param>
        /// <returns>创建结果。</returns>
        protected virtual ISourceFragment CreateSourceForGroupBy(GenerateContext context, DbExpression expression)
        {
            var content   = (DbGroupByExpression)expression;
            var groupitem = (DbGroupItemExpression)content.Item;
            var source    = CreateSource(context, content.Source);
            var body      = new SelectFragment(context, source);

            body.RetrievalMembers(content.Key, false);
            foreach (var member in body.Members.OfType <ReferenceMemberFragment>())
            {
                body.GroupBys.Add(member.Reference);
            }
            var container     = new SelectFragment(context, body);
            var virtualSource = new VirtualSourceFragment(context, expression, container, source, body);

            context.RegisterSource(content, virtualSource);
            context.RegisterSource(content.Item, virtualSource);
            return(container);
        }
Example #25
0
        public void CheckSelectElement(SelectElement selectElement, Table table, string defaultOption)
        {
            var expectedOptions = table.Rows.ToList().Select(it =>
                                                             it.Values.FirstOrDefault());

            var actualOptions = SelectFragment
                                .CheckSelectedOption(selectElement, defaultOption)
                                .Options.ToList().Select(it => it.Text).ToList();

            actualOptions.Count.Should().Be(expectedOptions.Count());

            int i = 0;

            foreach (string expOption in expectedOptions)
            {
                actualOptions[i].Should().Contain(expOption);
                i++;
            }
        }
Example #26
0
        /// <summary>
        /// 根据指定类型<see cref="DbGroupJoinExpression"/>表达式创建虚拟数据源主体语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="source">虚拟数据源</param>
        /// <returns>查询语句片段。</returns>
        public virtual SelectFragment CreateVirtualBodyForGroupJoin(GenerateContext context, VirtualSourceFragment source)
        {
            var content = (DbGroupJoinExpression)source.Expression;

            var target = GetSource(context, content.Target.Item);

            var body      = new SelectFragment(context, target);
            var container = source.Container;

            container.AddSource(body);

            body.Join      = EJoinType.LeftJoin;
            body.Condition = content.KeyPairs.Select(a =>
            {
                body.GroupBys.Add(body.RetrievalMember(a.Right));
                return(container.CreateExpression(a));
            }).Merge();
            return(body);
        }
Example #27
0
        /// <summary>
        /// 根据指定类型<see cref="DbGroupJoinExpression"/>表达式创建虚拟数据源列表语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="source">虚拟数据源</param>
        /// <returns>查询语句片段。</returns>
        public virtual SelectFragment CreateVirtualListForGroupJoin(GenerateContext context, VirtualSourceFragment source)
        {
            var content = (DbGroupJoinExpression)source.Expression;
            var target  = GetSource(context, content.Target.Item);

            var list      = new SelectFragment(context, target);
            var container = source.Container;

            if (container.IsRecommandLock)
            {
                container = container.Parent as SelectFragment;
            }
            container.AddSource(list);

            list.Join      = EJoinType.LeftJoin;
            list.Condition = content.KeyPairs.Select(a => container.CreateExpression(a)).Merge();
            list.RetrievalMembers(content.Target.Item, false);
            return(list);
        }
Example #28
0
        public static InsertFragment Insert(this GenerateContext context, ISourceFragment source, TableMetadata target
                                            , IEnumerable <ColumnMetadata> members)
        {
            DbName name = null;

            if (context.Data is ContentBase data)
            {
                name = data.TargetName;
            }
            var table   = new TableFragment(context, target, name);
            var select  = new SelectFragment(context, source);
            var current = new InsertFragment(context, table, select);

            foreach (var member in members)
            {
                select.CreateMember(null, source.GetMember(member));
                current.CreateMember(null, member);
            }
            return(current);
        }
Example #29
0
        /// <summary>
        /// 根据指定类型<see cref="DbCollectionMemberExpression"/>表达式创建虚拟数据源主体语句片段。
        /// </summary>
        /// <param name="context">生成上下文。</param>
        /// <param name="source">虚拟数据源</param>
        /// <returns>查询语句片段。</returns>
        public virtual SelectFragment CreateVirtualBodyForCollectionMember(GenerateContext context, VirtualSourceFragment source)
        {
            var content   = (DbCollectionMemberExpression)source.Expression;
            var target    = GetSource(context, content.TargetSet.Item);
            var container = source.Container;
            var body      = new SelectFragment(context, target);

            if (content.Metadata.IsComposite)
            {
                GenerateVirtualCompositeJoinForCollectionMember(context, content, body, true);
            }
            container.AddSource(body);

            GenerateVirtualJoinForCollectionMember(context, source, body, false);
            foreach (var a in content.Pairs)
            {
                body.GroupBys.Add(body.RetrievalMember(a.Left));
            }
            return(body);
        }
Example #30
0
        public void Open(string docName)
        {
            var path = Path.GetFullPath(Path.Combine(TestContext.CurrentContext.TestDirectory,
                                                     @"..\..\Resources\" + docName));

            DriverManager.GetWebDriver().Navigate().GoToUrl("file:///" + path);
            SelectFragment.SetOption("Sandbox");

            DataGridComponent partnerRegistrationPage = new DataGridComponent(SearchElementByCss("tbody"));

            _context.UserExternalCode = partnerRegistrationPage.FindElement("#clientID").GetAttribute("value");

            partnerRegistrationPage
            .ClearText("#partnerSecretKey")
            .SendText("#partnerSecretKey", "WQ7kQvMGp5+9KT6BaGBL")
            .ClearText("#partnerId")
            .SendText("#partnerId", "58")
            .ClickOnElement("input[type=submit]");
            InitPage();
        }