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)); }
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))); }