示例#1
0
        public void ShouldReturnCorrectSelectList()
        {
            var builder = new SelectBuilder<Model.Model>();
            builder
                .Select(model => model.Id)
                .Select(model => model.Name);

            builder.ToString().Should().Contain("SELECT [Id], [Name]");
        }
示例#2
0
        public void ShouldSetMultipleSelectListThroughExpression()
        {
            var builder = new SelectBuilder<Model.Model>();

            builder.Select(model => model.Id).Select(model => model.Name);

            builder.SelectColumns.Count.Should().Be(2);
            builder.SelectColumns.First().Should().Be("Id");
            builder.SelectColumns.Last().Should().Be("Name");
        }
示例#3
0
        public void ShouldInsertIndividualColumnNames1()
        {
            var builder = new SelectBuilder<Model.Model>();

            builder.Select("Id", "Name");

            builder.SelectColumns.Count.Should().Be(2);
            builder.SelectColumns.First().Should().Be("Id");
            builder.SelectColumns.Last().Should().Be("Name");
        }
示例#4
0
 /// <summary>
 /// 未查询到数据时返回 null
 /// </summary>
 public abstract DateTime?SelectAsDateTime <T>(DbSession session, SelectBuilder selectBuilder) where T : IPDMTBase, new();
示例#5
0
        /// <summary>执行SQL查询,返回记录集</summary>
        /// <param name="builder">SQL语句</param>
        /// <param name="startRowIndex">开始行,0表示第一行</param>
        /// <param name="maximumRows">最大返回行数,0表示所有行</param>
        /// <returns></returns>
        public virtual Task <DbTable> QueryAsync(SelectBuilder builder, Int64 startRowIndex, Int64 maximumRows)
        {
            InitData();

            return(GetDAL(true).QueryAsync(builder, startRowIndex, maximumRows));
        }
        /// <summary>
        /// 未查询到数据时返回 null
        /// </summary>
        public static TEarthworkBlock DbSelect(this TEarthworkBlock entity, DbSession session, SelectBuilder select)
        {
            var query = session.GetDbQueryBuilder();

            query.SelectBuilder = select;
            return(session.GetQueryOperator().Select <TEarthworkBlock>(query));
        }
示例#7
0
        /// <summary>查询记录数</summary>
        /// <param name="builder">查询生成器</param>
        /// <returns>记录数</returns>
        public virtual Int32 QueryCount(SelectBuilder builder)
        {
            InitData();

            return(Dal.SelectCount(builder));
        }
示例#8
0
        protected void Page_Load(object sender, EventArgs e)
        {
            e_Alteration alter = e_Alteration.Find("EmployeeID=" + Employee.Current.EmployeeID);

            if (!IsPostBack)
            {
                //if (Request["shi_addr"] != null)
                //{
                //    H_houseinfor hh = H_houseinfor.FindByHouseID(Request["HouseID"].ToDecimal().Value);
                //    string PingGuJia = hh.PingGuJia.ToString();

                //    if (PingGuJia != Request.Form["shi_addr"])
                //    {
                //        if (Convert.ToDecimal(Request["shi_addr"]) > 0)
                //            s_HouseDicFloorPrice.SetFloorPrice(hh.HouseDicID, hh.Build_id, hh.Build_floor, Request["shi_addr"].ToDecimal().Value, hh.HouseID, true);
                //    }
                //}

                if (Request["hid"] != null && Request["uid"] != null)
                {
                    int           iH = Convert.ToInt32(Request["hid"]), iU = Convert.ToInt32(Request["uid"]);
                    SelectBuilder sb = new SelectBuilder();
                    sb.Table = "h_SeeTelLog";
                    sb.Where = string.Format("EmployeeID={0} and HouseID={1} and SheBei in ('101','102') and CONVERT(DATE,exe_date,120)='" + DateTime.Now.ToString("yyyy-MM-dd") + "'", iU, iH);
                    //当日查看相同房源不算次数
                    if (h_SeeTelLog.Meta.QueryCount(sb) == 0)
                    {
                        H_houseinfor hou = H_houseinfor.FindByHouseID(iH);
                        //出售房源
                        if (hou.aType == 0)
                        {
                            H_houseinfor.Meta.Execute(string.Format("insert into h_SeeTelLog(HouseID,EmployeeID,SheBei,ComID) values({0},{1},101,{2})", iH, iU, Employee.Current.ComID));
                        }
                        else
                        {
                            H_houseinfor.Meta.Execute(string.Format("insert into h_SeeTelLog(HouseID,EmployeeID,SheBei,ComID) values({0},{1},103,{2})", iH, iU, Employee.Current.ComID));
                        }

                        //查看门牌的次数
                        int lookcount = int.Parse(DbHelperSQL.GetSingle(string.Format("select count(1) from h_SeeTelLog where EmployeeID={0} and SheBei in ('101','102') and CONVERT(DATE,exe_date,120)='" + DateTime.Now.ToString("yyyy-MM-dd") + "'", iU)).ToString());
                        //角色设置的次数
                        int count = int.Parse(DbHelperSQL.GetSingle(string.Format("select Max(Tabletnumber) as Tabletnumber from p_Role where RoleID in ({0})", Employee.Current.RoleIDs)).ToString());

                        if (lookcount > count && count != 0)
                        {
                            //alter.StateID = 5;
                            alter.Remarks  = DateTime.Now.ToString("yyyy-MM-dd") + "日,查看出售房源门牌号超出角色限制" + count + "次";
                            alter.exe_Date = DateTime.Now;
                            alter.Update();

                            Response.Write(1);
                            Response.End();
                        }
                        else if (lookcount == count && count != 0)
                        {
                            Response.Write(2);
                        }
                    }
                }
            }
        }
示例#9
0
        /// <summary>
        /// 未查询到数据时返回 null
        /// </summary>
        public static TUserBasicInfo DbSelect(this TUserBasicInfo entity, DbSession session, SelectBuilder select)
        {
            var query = IORMProvider.GetDbQueryBuilder(session);

            query.SelectBuilder = select;
            return(IORMProvider.GetQueryOperator(session).Select <TUserBasicInfo>(session, query));
        }
示例#10
0
        /// <summary>
        /// 失败返回null
        /// </summary>
        public override T Select <T>(DbSession session, IDbQueryBuilder queryBuilder)
        {
            SelectBuilder selectBuilder = queryBuilder.SelectBuilders.FirstOrDefault();

            return(Select <T>(session, selectBuilder));
        }
示例#11
0
 /// <summary>根据条件把普通查询SQL格式化为分页SQL。</summary>
 /// <remarks>
 /// 因为需要继承重写的原因,在数据类中并不方便缓存分页SQL。
 /// 所以在这里做缓存。
 /// </remarks>
 /// <param name="builder">查询生成器</param>
 /// <param name="startRowIndex">开始行,0表示第一行</param>
 /// <param name="maximumRows">最大返回行数,0表示所有行</param>
 /// <returns>分页SQL</returns>
 public virtual SelectBuilder PageSplit(SelectBuilder builder, Int32 startRowIndex, Int32 maximumRows)
 {
     //builder.Table = FormatedTableName;
     return(Dal.PageSplit(builder, startRowIndex, maximumRows));
 }
        protected override void VisitSelect(SelectBuilder item)
        {
            this.QueryExpression = new QueryExpression();
            CurrentRequest.Query = this.QueryExpression;
            if (!item.From.Any())
            {
                throw new InvalidOperationException("The query does not have a valid FROM clause");
            }
            Mode = VisitMode.From;
            if (item.From.Count() == 1)
            {
                IsSingleSource = true;
            }
            VisitEach(item.From);

            Mode = VisitMode.Projection;
            NavigateProjections(item.Projection);

            Mode = VisitMode.Filter;
            if (item.WhereFilterGroup != null)
            {
                IFilter where = item.WhereFilterGroup;
                where.Accept(this);
            }
            else
            {
                //TODO: Should only be one where clause?
                foreach (IVisitableBuilder where in item.Where)
                {
                    where.Accept(this);
                }
            }

            if (item.Top != null)
            {
                Mode = VisitMode.Top;
                IVisitableBuilder top = item.Top;
                top.Accept(this);
            }
            else
            {
                // xrm wont let you use paging and top for some reason..
                if (QueryExpression.PageInfo == null)
                {
                    QueryExpression.PageInfo = new PagingInfo();
                }
                QueryExpression.PageInfo.PageNumber = 1;
                //todo take this from the connection string..
                QueryExpression.PageInfo.Count = 500;
                QueryExpression.PageInfo.ReturnTotalRecordCount = true;
            }

            if (item.OrderBy != null)
            {
                Mode = VisitMode.OrderBy;
                foreach (IVisitableBuilder order in item.OrderBy)
                {
                    order.Accept(this);
                }
            }
        }
        /// <summary>
        /// 未查询到数据时返回 null
        /// </summary>
        public static TNodeElement DbSelect(this TNodeElement entity, DbSession session, SelectBuilder select)
        {
            var query = session.GetDbQueryBuilder();

            query.SelectBuilder = select;
            return(session.GetQueryOperator().Select <TNodeElement>(query));
        }
示例#14
0
        /// <summary>NotIn操作。直接使用字符串可能有注入风险</summary>
        /// <remarks>空参数不参与表达式操作,不生成该部分SQL拼接</remarks>
        /// <param name="builder">数值</param>
        /// <returns></returns>
        public Expression NotIn(SelectBuilder builder)
        {
            if (builder == null) return new Expression();

            return CreateIn("{0} Not In({1})", builder);
        }
        public static void Main(string[] args)
        {
            var select = new SelectBuilder();
            var insert = new InsertBuilder();
            var update = new UpdateBuilder();
            var delete = new DeleteBuilder();

            int?age = null;

            int?teste = null;

            var selectBuilder =
                select.Top(10)
                .Distinct()
                .Column("ID")
                .Column("Name")
                .Column("Age")
                .From("Table")
                .Where("ID").Eq(1).If(() => true)
                .And.Where("Age").Gt(age).If(age)
                .And.Where("Age").In(1, 2, 3, 4, 5)
                .Or.Where("Age").NotIn(1, 2, 5, 6)
                .Or.Where("Age").Between(1, 3).If(true)
                .Or.Where("Name").Like("%Angelo%")
                .And.Where("CreatedDate").Eq(teste)
                .Build();

            Console.WriteLine(selectBuilder.SQLCommand);

            var insertBuilder =
                insert.Into("table", "schema")
                .Value("ID", 1)
                .Value("Age", 20)
                .Value("Name", "Angelo")
                .Build();

            Console.WriteLine(insertBuilder.SQLCommand);

            var updateBuilder =
                update.Table("Table", "schema")
                .Set("ID", 1)
                .Set("Age", 1)
                .Set("Name", "José")
                .Where("ID").Eq(1).If(() => true)
                .And.Where("Age").Gt(age).If(age)
                .And.Where("Age").In(1, 2, 3, 4, 5)
                .Or.Where("Age").NotIn(1, 2, 5, 6)
                .Or.Where("Age").Between(1, 3).If(true)
                .Or.Where("Name").Like("%Angelo%")
                .And.Where("CreatedDate").Eq(teste)
                .Build();

            Console.WriteLine(updateBuilder.SQLCommand);

            var deleteBuilder =
                delete.Table("Table")
                .Where("ID").Eq(1).If(() => true)
                .And.Where("Age").Gt(age).If(age)
                .And.Where("Age").In(1, 2, 3, 4, 5)
                .Or.Where("Age").NotIn(1, 2, 5, 6)
                .Or.Where("Age").Between(1, 3).If(true)
                .Or.Where("Name").Like("%Angelo%")
                .And.Where("CreatedDate").Eq(teste)
                .Build();

            Console.WriteLine(deleteBuilder.SQLCommand);

            Console.ReadKey();
        }
示例#16
0
 /// <summary>
 /// Generates the text for a Select builder.
 /// </summary>
 /// <param name="item">The Select builder to generate the text for.</param>
 protected internal override void VisitSelect(SelectBuilder item)
 {
     forCommandType(CommandType.Select).visitSelect(item);
 }
示例#17
0
        public static void Run(ILogger logger)
        {
            OnlineClient client = Bootstrap.Client(logger);

            List <IFilter> filterList = new List <IFilter>();

            filterList.Add((new Filter("CUSTOMERID")).SetLike("c%"));
            filterList.Add((new Filter("CUSTOMERID")).SetLike("1%"));
            OrOperator filter = new OrOperator(filterList);

            OrderBuilder orderBuilder = new OrderBuilder();

            IOrder[] orders = orderBuilder.Descending("CUSTOMERID").GetOrders();

            SelectBuilder selectBuilder = new SelectBuilder();

            ISelect[] fields = selectBuilder.
                               Fields(new[] { "CUSTOMERID", "CUSTOMERNAME" }).
                               Sum("TOTALDUE").
                               GetFields();

            QueryFunction query = new QueryFunction()
            {
                SelectFields    = fields,
                FromObject      = "ARINVOICE",
                Filter          = filter,
                CaseInsensitive = true,
                PageSize        = 100,
                OrderBy         = orders
            };

            logger.LogInformation("Executing query to Intacct API");

            Task <OnlineResponse> task = client.Execute(query);

            task.Wait();
            OnlineResponse response = task.Result;
            Result         result   = response.Results[0];

            dynamic json = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result.Data));

            if (json != null && json.First != null)
            {
                Console.WriteLine("Success! Number of ARINVOICE objects found: " + result.TotalCount);
                Console.WriteLine("First ARINVOICE result found");
                Console.WriteLine("CUSTOMERID: " + json.First["ARINVOICE"]["CUSTOMERID"].Value);
                Console.WriteLine("CUSTOMERNAME: " + json.First["ARINVOICE"]["CUSTOMERNAME"].Value);
                Console.WriteLine("SUM.TOTALDUE: " + json.First["ARINVOICE"]["SUM.TOTALDUE"].Value);

                Console.WriteLine("See the log file (logs/intacct.log) for the complete list of results.");
            }
            else
            {
                Console.WriteLine("The query executed, but no ARINVOICE objects met the query criteria.");
                Console.WriteLine("Either modify the filter or comment it out from the query.");
                Console.WriteLine("See the log file (logs/intacct.log) for the XML request.");
            }

            try
            {
                string jsonString = json.ToString();

                logger.LogDebug(
                    "Query successful [ Company ID={0}, User ID={1}, Request control ID={2}, Function control ID={3}, Total count={4}, Data={5} ]",
                    response.Authentication.CompanyId,
                    response.Authentication.UserId,
                    response.Control.ControlId,
                    result.ControlId,
                    result.TotalCount,
                    jsonString
                    );
            }
            catch (NullReferenceException e)
            {
                logger.LogDebug("No response in Data. {0}", e);
            }
            finally
            {
                LogManager.Flush();
            }
        }
示例#18
0
 public PagedSelectCommandBuilder Select(string value)
 => this.Chain(() => SelectBuilder.Append(value));
示例#19
0
        public void EmptyConstructor()
        {
            SelectBuilder select = new SelectBuilder();

            Assert.AreEqual(select.SelectStatement, string.Empty);
        }
示例#20
0
        /// <summary>
        /// 处理SELECT部分
        /// </summary>
        /// <param name="columnList"></param>
        /// <param name="table"></param>
        /// <param name="selectBuilder"></param>
        private void MakeSelectStarPartition(IEnumerable <FapColumn> columnList, AliasedSource aliaseSource, SelectBuilder select)
        {
            string tableAlias = aliaseSource.Alias;
            int    mcIndex    = 0;

            foreach (var column in columnList)
            {
                //AliasedSource table = select.AddTable(new Table($"{column.TableName}"), tableAlias);
                if (column.IsMultiLang == 1)
                {
                    if (IsGridQuery)
                    {
                        select.AddProjection(aliaseSource.Column($"{column.ColName}{CurrentLang}"), column.ColName);
                    }
                    else
                    {
                        select.AddProjection(aliaseSource.Column(column.ColName));
                    }
                    var langs = typeof(MultiLanguageEnum).EnumItems();
                    foreach (var lang in langs)
                    {
                        select.AddProjection(aliaseSource.Column($"{column.ColName}{lang.Value}"), $"{column.ColName}{lang.Value}");
                    }
                }
                else
                {
                    select.AddProjection(aliaseSource.Column(column.ColName));
                }
                if (this._withMC)
                {
                    //处理MC字段
                    if (FapColumn.CTRL_TYPE_COMBOBOX == column.CtrlType && !IsGridQuery)
                    {
                        string refAlias = "b" + (mcIndex++);
                        BuildFapDict(select, column, aliaseSource, refAlias);
                    }
                    else if (FapColumn.CTRL_TYPE_REFERENCE == column.CtrlType)
                    {
                        string refAlias = "b" + (mcIndex++);
                        BuildRefrenceName(select, column, aliaseSource, refAlias);
                    }
                }

                //处理MC字段的ID字段
                if (this._withId)
                {
                    if (FapColumn.CTRL_TYPE_REFERENCE == column.CtrlType)
                    {
                        string refAlias = "b" + (mcIndex++);
                        BuildRefrenceCode(select, column, aliaseSource, refAlias);
                    }
                }
            }
        }
示例#21
0
        /// <summary>
        /// 失败返回 new List<T>()
        /// </summary>
        public override List <T> SelectAll <T>(DbSession session, IDbQueryBuilder queryBuilder)
        {
            SelectBuilder selectBuilder = queryBuilder.SelectBuilders.First();

            return(SelectAll <T>(session, selectBuilder));
        }
示例#22
0
        private Int64 GetCount(Int64 count)
        {
            //if (count >= 0)
            //{
            //    // 小于1000的精确查询,大于1000的快速查询
            //    if (count <= 1000L)
            //    {
            //        var builder = new SelectBuilder
            //        {
            //            Table = FormatedTableName
            //        };

            //        return Dal.SelectCount(builder);
            //    }
            //}

            // 第一次访问,SQLite的Select Count非常慢,数据大于阀值时,使用最大ID作为表记录数
            if (count < 0 && Dal.DbType == DatabaseType.SQLite && Table.Identity != null)
            {
                var builder = new SelectBuilder
                {
                    Table   = FormatedTableName,
                    OrderBy = Table.Identity.Desc()
                };
                var ds = Dal.Select(builder, 0, 1);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    count = Convert.ToInt64(ds.Tables[0].Rows[0][Table.Identity.ColumnName]);
                }
            }

            // 100w数据时,没有预热Select Count需要3000ms,预热后需要500ms
            if (count < 500000)
            {
                if (count <= 0)
                {
                    count = Dal.Session.QueryCountFast(TableName);
                }

                // 查真实记录数,修正FastCount不够准确的情况
                if (count < 10000000)
                {
                    var builder = new SelectBuilder
                    {
                        Table = FormatedTableName
                    };

                    count = Dal.SelectCount(builder);
                }
            }
            else
            {
                // 异步查询弥补不足,千万数据以内
                if (count < 10000000)
                {
                    count = Dal.Session.QueryCountFast(TableName);
                }
            }

            return(count);
        }
示例#23
0
        public void ThreeLevelFilterTest()
        {
            string expected = @"<?xml version=""1.0"" encoding=""utf-8""?>
<function controlid=""unittest"">
    <query>
        <select>
            <field>BATCHNO</field>
            <field>RECORDNO</field>
            <field>STATE</field>
        </select>
        <object>GLBATCH</object>
        <filter>
            <or>
                <and>
                    <equalto>
                        <field>JOURNAL</field>
                        <value>APJ</value>
                    </equalto>
                    <equalto>
                        <field>STATE</field>
                        <value>Posted</value>
                    </equalto>
                </and>
                <and>
                    <equalto>
                        <field>JOURNAL</field>
                        <value>RCPT</value>
                    </equalto>
                    <equalto>
                        <field>STATE</field>
                        <value>Posted</value>
                    </equalto>
                    <or>
                        <equalto>
                            <field>RECORDNO</field>
                            <value>168</value>
                        </equalto>
                        <equalto>
                            <field>RECORDNO</field>
                            <value>132</value>
                        </equalto>
                    </or>
                </and>
            </or>
        </filter>
        <options />
    </query>
</function>";

            SelectBuilder builder = new SelectBuilder();

            ISelect[] fields = builder.Fields(new[] { "BATCHNO", "RECORDNO", "STATE" }).GetFields();

            AndOperator apjAndState = new AndOperator(new List <IFilter>());

            apjAndState.AddFilter((new Filter("JOURNAL")).SetEqualTo("APJ"));
            apjAndState.AddFilter((new Filter("STATE")).SetEqualTo("Posted"));

            OrOperator recordnoOr = new OrOperator(new List <IFilter>());

            recordnoOr.AddFilter((new Filter("RECORDNO")).SetEqualTo("168"));
            recordnoOr.AddFilter((new Filter("RECORDNO")).SetEqualTo("132"));

            AndOperator rcptAndState = new AndOperator(new List <IFilter>());

            rcptAndState.AddFilter((new Filter("JOURNAL")).SetEqualTo("RCPT"));
            rcptAndState.AddFilter((new Filter("STATE")).SetEqualTo("Posted"));
            rcptAndState.AddFilter(recordnoOr);

            IFilter filter = new OrOperator(new List <IFilter>()
            {
                apjAndState, rcptAndState
            });

            IFunction query = new QueryFunction("unittest")
            {
                FromObject   = "GLBATCH",
                SelectFields = fields,
                Filter       = filter
            };

            this.CompareXml(expected, query);
        }
示例#24
0
 /// <summary>
 /// Add Where In (...) clausule
 /// </summary>
 /// <param name="builder">Builder to be include as select</param>
 /// <param name="obj">Identifier</param>
 /// <returns></returns>
 public static bool Contains(this SelectBuilder builder, object obj)
 {
     return(true);
 }
示例#25
0
        static void Test7()
        {
            var set = XCode.Setting.Current;

            //set.Debug = true;
            set.ShowSQL = false;

            //XCode.Cache.CacheBase.Debug = true;

            var dal = UserX.Meta.Session.Dal;

            dal.Db.DataCache = 3;

            var list = UserX.FindAll(null, null, null, 1, 20);
            var u    = UserX.FindByKey(1);
            var n    = UserX.FindCount();

            Console.WriteLine("总数据:{0:n0}", n);

            //using (var tr = UserX.Meta.CreateTrans())
            //{
            //    u = new UserX
            //    {
            //        Name = Rand.NextString(8),
            //        DisplayName = Rand.NextString(16)
            //    };
            //    u.Insert();

            //    if (Rand.Next(2) == 1) tr.Commit();
            //}
            Task.Run(() =>
            {
                var us = new List <UserX>();
                for (var i = 0; i < 1_000_000; i++)
                {
                    var entity = new UserX
                    {
                        Name        = Rand.NextString(8),
                        DisplayName = Rand.NextString(16)
                    };
                    us.Add(entity);
                }
                us.Insert(true);
            });

            var sql = "select * from user limit 20";
            var ds  = dal.Select(sql);

            ds = dal.Select(sql, CommandType.Text);
            ds = dal.Select(sql, CommandType.Text, new Dictionary <String, Object>());
            var dt = dal.Query(sql, new Dictionary <String, Object>());

            n = dal.SelectCount(sql, CommandType.Text);

            var sb = SelectBuilder.Create("select roleid,count(*) from user group by roleid order by count(*) desc");

            ds = dal.Select(sb, 3, 5);
            dt = dal.Query(sb, 4, 6);
            n  = dal.SelectCount(sb);

            for (var i = 0; i < 20; i++)
            {
                //Console.WriteLine(i);

                var sw = Stopwatch.StartNew();
                list = UserX.FindAll(null, null, null, 1, 20);
                u    = UserX.FindByKey(1);
                n    = UserX.FindCount();

                ds = dal.Select(sql);
                ds = dal.Select(sql, CommandType.Text);
                ds = dal.Select(sql, CommandType.Text, new Dictionary <String, Object>());
                dt = dal.Query(sql, new Dictionary <String, Object>());
                n  = dal.SelectCount(sql, CommandType.Text);

                ds = dal.Select(sb, 3, 5);
                dt = dal.Query(sb, 4, 6);
                n  = dal.SelectCount(sb);

                sw.Stop();
                XTrace.WriteLine("{0} {1:n0}us", i, sw.Elapsed.TotalMilliseconds * 1000);

                Thread.Sleep(1000);
            }
        }
示例#26
0
        public void ShouldReturnSelectAll1()
        {
            var builder = new SelectBuilder<Model.Model>().Select(model => model.All);

            builder.ToString().Should().Contain("SELECT *");
        }
示例#27
0
        /// <summary>执行SQL查询,返回记录集</summary>
        /// <param name="builder">SQL语句</param>
        /// <param name="startRowIndex">开始行,0表示第一行</param>
        /// <param name="maximumRows">最大返回行数,0表示所有行</param>
        /// <returns></returns>
        public virtual DataSet Query(SelectBuilder builder, Int64 startRowIndex, Int64 maximumRows)
        {
            InitData();

            return(Dal.Select(builder, startRowIndex, maximumRows));
        }
        public void TestSelect_ComplexCommand()
        {
            string commandText =
                @"SELECT
	r.RouteId,
    r.RouteNumber,
	o.CustomerId,
	o.CustomerKey AS [Outlet#],
	o.Name AS CustomerName,
	vm.VendingMachineId,
	vm.AssetNumber AS [Equipment#],
	m.ModelType AS Model,
	rc.FillFrequency,
	rc.EffectiveDate AS SettlementDate,
	p.ProductLookupId,
	p.ProductSKU AS ProductCode,
	rcvc.FillLevel AS ProductCapacity,
	st.QuantityDelivered AS FillUnits
FROM Company b
INNER JOIN Route r ON b.CompanyId = r.CompanyId
INNER JOIN RouteSchedule rs ON r.RouteId = rs.RouteId
INNER JOIN RouteCard rc ON rs.RouteScheduleId = rc.RouteScheduleId
INNER JOIN
(
	SELECT
		rc.RouteCardId,
		rcvc.ProductLookupId,
		SUM(rcvc.FillLevel) AS FillLevel
	FROM RouteSchedule rs
	INNER JOIN RouteCard rc ON rs.RouteScheduleId = rc.RouteScheduleId
	INNER JOIN RouteCardVendColumn rcvc ON rc.RouteCardId = rcvc.RouteCardId
	WHERE rs.RouteId IN (1, 2, 3) AND rc.EffectiveDate BETWEEN @startDate AND @stopDate
	GROUP BY rc.RouteCardId, rcvc.ProductLookupId
) as rcvc ON rc.RouteCardId = rcvc.RouteCardId
INNER JOIN ProductLookup p ON rcvc.ProductLookupId = p.ProductLookupId
INNER JOIN VendingMachine vm ON rc.VendingMachineId = vm.VendingMachineId
INNER JOIN MachineTypeLookup m ON vm.MachineTypeLookupId = m.MachineTypeLookupId
INNER JOIN Customer o ON vm.CustomerId = o.CustomerId
INNER JOIN ServiceTransaction svc ON
	(rc.VendingMachineId = svc.VendingMachineId AND rc.EffectiveDate = svc.ServiceTransactionDate)
INNER JOIN SettlementTransactionSKU st ON
	(svc.ServiceTransactionId = st.ServiceTransactionId AND p.ProductLookupId = st.ProductLookupId)
WHERE rc.EffectiveDate BETWEEN @startDate AND @endDate AND r.RouteId IN (1, 2, 3)
ORDER BY b.CompanyId, r.RouteId, vm.VendingMachineId, p.ProductLookupId, rc.EffectiveDate DESC";
            CommandBuilder commandBuilder = new CommandBuilder();
            SelectBuilder  select         = (SelectBuilder)commandBuilder.GetCommand(commandText);

            select.AddWhere(new EqualToFilter(new NumericLiteral(1), new NumericLiteral(1)));

            Formatter formatter = new Formatter();
            string    actual    = formatter.GetCommandText(select);
            string    expected  = "SELECT"
                                  + " r.RouteId,"
                                  + " r.RouteNumber,"
                                  + " o.CustomerId,"
                                  + " o.CustomerKey AS [Outlet#],"
                                  + " o.Name AS CustomerName,"
                                  + " vm.VendingMachineId,"
                                  + " vm.AssetNumber AS [Equipment#],"
                                  + " m.ModelType AS Model,"
                                  + " rc.FillFrequency,"
                                  + " rc.EffectiveDate AS SettlementDate,"
                                  + " p.ProductLookupId,"
                                  + " p.ProductSKU AS ProductCode,"
                                  + " rcvc.FillLevel AS ProductCapacity,"
                                  + " st.QuantityDelivered AS FillUnits"
                                  + " FROM Company b"
                                  + " INNER JOIN Route r ON b.CompanyId = r.CompanyId"
                                  + " INNER JOIN RouteSchedule rs ON r.RouteId = rs.RouteId"
                                  + " INNER JOIN RouteCard rc ON rs.RouteScheduleId = rc.RouteScheduleId"
                                  + " INNER JOIN (SELECT rc.RouteCardId, rcvc.ProductLookupId, SUM(rcvc.FillLevel) AS FillLevel FROM RouteSchedule rs INNER JOIN RouteCard rc ON rs.RouteScheduleId = rc.RouteScheduleId INNER JOIN RouteCardVendColumn rcvc ON rc.RouteCardId = rcvc.RouteCardId WHERE rs.RouteId IN (1, 2, 3) AND rc.EffectiveDate BETWEEN @startDate AND @stopDate GROUP BY rc.RouteCardId, rcvc.ProductLookupId) rcvc ON rc.RouteCardId = rcvc.RouteCardId"
                                  + " INNER JOIN ProductLookup p ON rcvc.ProductLookupId = p.ProductLookupId"
                                  + " INNER JOIN VendingMachine vm ON rc.VendingMachineId = vm.VendingMachineId"
                                  + " INNER JOIN MachineTypeLookup m ON vm.MachineTypeLookupId = m.MachineTypeLookupId"
                                  + " INNER JOIN Customer o ON vm.CustomerId = o.CustomerId"
                                  + " INNER JOIN ServiceTransaction svc ON (rc.VendingMachineId = svc.VendingMachineId AND rc.EffectiveDate = svc.ServiceTransactionDate)"
                                  + " INNER JOIN SettlementTransactionSKU st ON (svc.ServiceTransactionId = st.ServiceTransactionId AND p.ProductLookupId = st.ProductLookupId)"
                                  + " WHERE rc.EffectiveDate BETWEEN @startDate AND @endDate AND r.RouteId IN (1, 2, 3) AND 1 = 1"
                                  + " ORDER BY b.CompanyId, r.RouteId, vm.VendingMachineId, p.ProductLookupId, rc.EffectiveDate DESC";

            Assert.AreEqual(expected, actual, "The SELECT statement was not reproduced as expected.");
        }
示例#29
0
 /// <summary>根据条件把普通查询SQL格式化为分页SQL。</summary>
 /// <remarks>
 /// 因为需要继承重写的原因,在数据类中并不方便缓存分页SQL。
 /// 所以在这里做缓存。
 /// </remarks>
 /// <param name="builder">查询生成器</param>
 /// <param name="startRowIndex">开始行,0表示第一行</param>
 /// <param name="maximumRows">最大返回行数,0表示所有行</param>
 /// <returns>分页SQL</returns>
 public virtual SelectBuilder PageSplit(SelectBuilder builder, Int64 startRowIndex, Int64 maximumRows)
 {
     return(Dal.PageSplit(builder, startRowIndex, maximumRows));
 }
示例#30
0
            /// <summary>执行SQL查询,返回记录集</summary>
            /// <param name="builder">SQL语句</param>
            /// <param name="startRowIndex">开始行,0表示第一行</param>
            /// <param name="maximumRows">最大返回行数,0表示所有行</param>
            /// <returns></returns>
            public static DataSet Query(SelectBuilder builder, Int32 startRowIndex, Int32 maximumRows)
            {
                WaitForInitData();

                return(DBO.Select(builder, startRowIndex, maximumRows, Meta.TableName));
            }
示例#31
0
        /// <summary>查询记录数</summary>
        /// <param name="builder">查询生成器</param>
        /// <returns>记录数</returns>
        public virtual Int32 QueryCount(SelectBuilder builder)
        {
            InitData();

            return(GetDAL(true).SelectCount(builder));
        }
示例#32
0
            /// <summary>查询记录数</summary>
            /// <param name="sb">查询生成器</param>
            /// <returns>记录数</returns>
            public static Int32 QueryCount(SelectBuilder sb)
            {
                WaitForInitData();

                return(DBO.SelectCount(sb, new String[] { Meta.TableName }));
            }
示例#33
0
        /// <summary>查询记录数</summary>
        /// <param name="builder">查询生成器</param>
        /// <returns>记录数</returns>
        public virtual Task <Int64> QueryCountAsync(SelectBuilder builder)
        {
            InitData();

            return(GetDAL(true).SelectCountAsync(builder));
        }
示例#34
0
 /// <summary>
 /// 未查询到数据时返回 null
 /// </summary>
 public abstract string SelectAsString <T>(DbSession session, SelectBuilder selectBuilder) where T : IPDMTBase, new();