public override long[] SearchInternal(object[] constraint, OrderExpression[] order, long offset, long limit)
        {
            var ctx        = this.DbDomain.CurrentSession;
            var translator = new SqlQueryBuilder(ctx, this);

            this.TranslateConstraint(constraint, translator);

            //处理排序
            if (order != null)
            {
                translator.SetOrders(order);
            }
            else
            {
                translator.SetOrders(this.Order);
            }

            var querySql = translator.ToSqlString();

            if (limit > 0) //处理数量限制
            {
                querySql = this.DbDomain.DataProvider.Dialect.GetLimitString(
                    querySql, new SqlString(offset.ToString()), new SqlString(limit.ToString()));
            }

            return(ctx.DataContext.QueryAsArray <long>(querySql, translator.Values));
        }
예제 #2
0
        public void SimpleConstraintsShouldBeOk()
        {
            var criteria = new Criterion[] {
                new Criterion("login", "=", "root"),
                new Criterion("organization.name", "=", "org1"),
                new Criterion("organization.code", "=", "orgcode1"),
            };

            var sql1 =
                "select _t0._id from core_user _t0  " +
                "left outer join core_organization _t1 on _t0.organization=_t1._id " +
                "where  ( _t0.login = ?  and  _t1.name = ?  and  _t1.code = ? ) " +
                "order by  _t0.login ASC,  _t0.name ASC";

            var cb = new SqlQueryBuilder(this.Context, "core.user");

            cb.AddCriteria(criteria);
            cb.AddOrder(new OrderExpression("login", SortDirection.Ascend));
            cb.AddOrder(new OrderExpression("name", SortDirection.Ascend));

            var sqlStr = cb.ToSqlString();

            Assert.AreEqual(
                sql1.ToString().Replace(" ", ""),
                sqlStr.ToString().Replace(" ", ""));

            Assert.AreEqual(cb.Values.Length, 3);
            Assert.AreEqual(cb.Values[0], "root");
            Assert.AreEqual(cb.Values[1], "org1");
            Assert.AreEqual(cb.Values[2], "orgcode1");
        }
        public override long CountInternal(object[] constraint)
        {
            var ctx = this.DbDomain.CurrentSession;

            var translator = new SqlQueryBuilder(ctx, this);

            this.TranslateConstraint(constraint, translator);

            var querySql = translator.ToSqlString(true);

            return(Convert.ToInt64(ctx.DataContext.QueryValue(querySql, translator.Values)));
        }