Inheritance: QueryWithParams, IFilterableQuery, IGetExpressionByName
Esempio n. 1
0
 public void FirstIntoRowShouldReturnFirstRowIfMoreThanOneEntityUsed()
 {
     var first = new MyEntity() { Table = "x" };
     var second = new MyEntity() { Table = "y" };
     var query = new SqlQuery().From(first).From(second.Table, Alias.T1).Into(second);
     Assert.Equal(first, ((ISqlQueryExtensible)query).FirstIntoRow);
 }
Esempio n. 2
0
        public void DistinctAddsKeyword()
        {
            var query = new SqlQuery()
                .Distinct(true)
                .Select("TestColumn")
                .From("TestTable");

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT DISTINCT TestColumn FROM TestTable"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 3
0
        public void FromMultipleCallsDoesCrossJoin()
        {
            var query = new SqlQuery()
                .From("TestTable1")
                .From("TestTable2")
                .Select("TestColumn");

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT TestColumn FROM TestTable1, TestTable2"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 4
0
        public void DistinctCanBeTurnedOff()
        {
            var query = new SqlQuery()
                .Distinct(true)
                .Select("TestColumn")
                .From("TestTable")
                .Distinct(false);

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT TestColumn FROM TestTable"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 5
0
        public void FromMixedOverloadsMultipleCallsDoesCrossJoin()
        {
            var query = new SqlQuery()
                .From("TestTable1", new Alias("x1"))
                .From(new Alias("TestTable2", "x2"))
                .From("TestTable3")
                .Select("TestColumn");

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT TestColumn FROM TestTable1 x1, TestTable2 x2, TestTable3"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
        public override void OnPrepareQuery(ISaveRequestHandler handler, SqlQuery query)
        {
            base.OnPrepareQuery(handler, query);

            if (this.replaceFields != null)
            {
                foreach (var field in replaceFields.Values)
                {
                    if (!field.IsTableField() &&
                        (!(query is ISqlQueryExtensible) ||
                          ((ISqlQueryExtensible)query).GetSelectIntoIndex(field) <= 0))
                        query.Select(field);
                }
            }
        }
Esempio n. 7
0
        public void DoesAutomaticJoinProperlyWithAliasedFields()
        {
            var x = RowMappingTests.ComplexRow.Fields.As("x");

            var query = new SqlQuery()
                    .From(x)
                    .Select(x.CountryName);

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT x_c.Name AS [CountryName] FROM ComplexTable x " +
                    "LEFT JOIN TheCountryTable x_c ON (x_c.TheCountryID = x.CountryID)"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 8
0
        /// <summary>
        /// Creates a clone of the query.
        /// </summary>
        /// <returns>A cloned query.</returns>
        /// <remarks>
        /// Clones states like TrackAssignments, AssignedFields etc,
        /// creates a copy of Params dictionary
        /// </remarks>
        public SqlQuery Clone()
        {
            var clone = new SqlQuery();

            clone.dialect = dialect;
            clone.dialectOverridden = dialectOverridden;
            clone.skip = skip;
            clone.take = take;
            clone.countRecords = countRecords;

            clone.into = new List<object>(into);
            clone.intoIndex = intoIndex;

            Column s;
            for (int i = 0; i < columns.Count; i++)
            {
                s = columns[i];
                var si = new Column(s.Expression, s.ColumnName, s.IntoRowIndex, s.IntoField);
                clone.columns.Add(si);
            }

            clone.from = new StringBuilder(from.ToString());
            if (where != null)
                clone.where = new StringBuilder(where.ToString());

            if (orderBy != null)
            {
                clone.orderBy = new List<string>();
                clone.orderBy.AddRange(orderBy);
            }

            if (groupBy != null)
                clone.groupBy = new StringBuilder(groupBy.ToString());

            if (having != null)
                clone.having = new StringBuilder(having.ToString());

            if (parent != null)
                clone.parent = this.parent;
            else if (this.Params != null)
                foreach (var pair in this.Params)
                    clone.AddParam(pair.Key, pair.Value);

            return clone;
        }
Esempio n. 9
0
        public void DoesAutomaticJoinProperlyWithAliasedAndJoinedFieldsAndSelect()
        {
            var x = RowMappingTests.ComplexRow.Fields.As("x");
            var y = RowMappingTests.ComplexRow.Fields.As("y");

            var query = new SqlQuery()
                    .From(x)
                    .LeftJoin(y, y.ID == x.ID)
                    .Select(x.CountryName, "CountryNameX")
                    .Select(y.CountryName, "CountryNameY");

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT " +
                        "x_c.Name AS [CountryNameX], " +
                        "y_c.Name AS [CountryNameY] " +
                    "FROM ComplexTable x " +
                    "LEFT JOIN ComplexTable y ON (y.ComplexID = x.ComplexID) " +
                    "LEFT JOIN TheCountryTable x_c ON (x_c.TheCountryID = x.CountryID) " +
                    "LEFT JOIN TheCountryTable y_c ON (y_c.TheCountryID = y.CountryID)"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 10
0
        public void DoesAutomaticJoinProperlyWithViewRowIfAllNamesAreSelectedInJoinOrder()
        {
            var fld = ViewRow.Fields;

            var query = new SqlQuery()
                    .From(fld)
                    .Select(fld.District)
                    .Select(fld.City)
                    .Select(fld.Country);

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT " +
                        "d.Name AS [District], " +
                        "c.Name AS [City], " +
                        "o.Name AS [Country] " +
                    "FROM ViewTable T0 " +
                    "LEFT JOIN Districts d ON (d.DistrictID = T0.DistrictID) " +
                    "LEFT JOIN Cities c ON (c.CityID = d.CityID) " +
                    "LEFT JOIN Countries o ON (o.CountryID = c.CountryID) "),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 11
0
        public SaveResponse TxtYukle(IUnitOfWork uow, SaveRequest<MyRow> request)
        {
            if (request.Entity == null)
                throw new Exception("Entity null olamaz! ");

            if (request.Entity.KurumId == null)
                throw new Exception("KurumId null olamaz! ");

            if (request.Entity.OptikFormId == null)
                throw new Exception("OptikFormId null olamaz! ");

            if (request.Entity.SinavId == null)
                throw new Exception("SinavId null olamaz! ");

            if (request.Entity.Txt.IsEmptyOrNull())
                throw new Exception("Dosya null olamaz! ");

            var kurum = new KurumRepository().Retrieve(uow.Connection, new RetrieveRequest() { EntityId = request.Entity.KurumId }).Entity;
            var optikFormBayi = new OptikFormRepository().Retrieve(uow.Connection, new RetrieveRequest() { EntityId = request.Entity.OptikFormId }).Entity;
            var sinav = new SinavRepository().Retrieve(uow.Connection, new RetrieveRequest() { EntityId = request.Entity.SinavId }).Entity;
            var optikFormSinav = new OptikFormRepository().Retrieve(uow.Connection, new RetrieveRequest() { EntityId = request.Entity.OptikFormId }).Entity;
            var bayi = new BayiRepository().Retrieve(uow.Connection, new RetrieveRequest() { EntityId = 2 }).Entity;

            if (kurum == null)
                throw new Exception("Entity null olamaz! ");

            ////zaten retrieve çağrısında kayıt gelmez ise kendisi otomatik olarak hata dönüyor.
            if (optikFormSinav == null || optikFormBayi == null)
                throw new Exception("optikForm null olamaz! ");

            if (sinav == null)
                throw new Exception("sinav null olamaz! ");

            if (bayi == null)
                throw new Exception("Bayi null olamaz! ");

            bool optikFormDegistiMi = optikFormBayi.Id != optikFormSinav.Id;
            //var dd = KurumRow.Fields.IlceAd.PropertyName;
            //var flds = OptikFormAlanRow.Fields;

            //var optikFormAlanlari = new OptikFormAlanRepository()
            //    .List(uow.Connection, new ListRequest() { Criteria = new Criteria(OptikFormAlanRow.Fields.FormKodu.PropertyName.ToString()) == optikFormBayi.FormKodu.Value, Sort = new List<SortBy> { new SortBy { Field = OptikFormAlanRow.Fields.Baslangic.PropertyName, Descending = false } }.ToArray() })
            //    .Entities;

            //var fldOptikFormAlan = OptikFormAlanRow.Fields;
            //var qq = new SqlQuery().From(OptikFormAlanRow.Fields.TableName)
            //       .Select(fldOptikFormAlan.AlanAdi)
            //       .Select(fldOptikFormAlan.Baslangic.PropertyName + " as  old" + fldOptikFormAlan.Baslangic.PropertyName)
            //       .Select(fldOptikFormAlan.Uzunluk.PropertyName + " as  old" + fldOptikFormAlan.Uzunluk.PropertyName)
            //       .Select(fldOptikFormAlan.Baslangic.PropertyName + " as  new" + fldOptikFormAlan.Baslangic.PropertyName)
            //       .Select(fldOptikFormAlan.Uzunluk.PropertyName + " as  new" + fldOptikFormAlan.Uzunluk.PropertyName)
            //       .Join(new LeftJoin(fldOptikFormAlan.TableName, "T1", new Criteria(fldOptikFormAlan.FormKodu) == 100 & new Criteria(fldOptikFormAlan.FormKodu) == 2001))
            //       ;
            //var dd = qq.ToString();

            /*
             new Criteria(fldOptikFormAlan.FormKodu) == 2001
             sonuç olarak T0.FormKodu = 2001 sonucu çıkıyor
             *
             * coalesce kullanımı == Select(Sql.Coalesce(new string[2] { s.AlanAdi.Expression, b.AlanAdi.Expression }))
            */

            var s = OptikFormAlanRow.Fields.As("s");
            var b = OptikFormAlanRow.Fields.As("b");
            var sss = new SqlQuery()
                .From(s)
                .InnerJoin(b, new Criteria(s.FormKodu) == optikFormSinav.FormKodu.Value & new Criteria(b.FormKodu) == optikFormSinav.FormKodu.Value & new Criteria(s.AlanAdi) == new Criteria(b.AlanAdi))
                .Select(s.AlanAdi)
                .Select(s.Baslangic, "BaslangicS")
                .Select(s.Uzunluk, "UzunlukS")
                .Select(b.Baslangic, "BaslangicB")
                .Select(b.Uzunluk, "UzunlukB")
                .OrderBy(s.Baslangic);

            List<OptikFormEslestirmeView> optikFormAlanlari = new List<OptikFormEslestirmeView>();

            using (IDataReader reader = SqlHelper.ExecuteReader(uow.Connection, sss))
            {
                while (reader.Read())
                {
                    OptikFormEslestirmeView tRow = new OptikFormEslestirmeView();
                    tRow.AlanAdi = reader.AsString(0);
                    tRow.SinavBaslangic = reader.AsInt32(1);
                    tRow.SinavUzunluk = reader.AsInt32(2);
                    tRow.BayiBaslangic = reader.AsInt32(3);
                    tRow.BayiUzunluk= reader.AsInt32(4);

                    optikFormAlanlari.Add(tRow);
                }
            }

            //        .Where(filter)
            //       .GetFirst(connection))
            //{
            //    return row;
            //}

            int offset = 395;
            int length = 20;
            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"App_Data\upload\" + request.Entity.Txt.Replace("/", "\\"));

            var pp = Server.MapPath("~/App_Data/upload/" + request.Entity.Txt);
            StringBuilder sb = new StringBuilder();
            using (StreamReader sr = new StreamReader(pp))
            {
                while (!sr.EndOfStream)
                {
                    string lineOld = sr.ReadLine();
                    string lineNew = "";
                    int lastIndex = 0;
                    lineNew = lineNew.PadLeft(lineOld.Length);
                    //sb.Insert(0, lineNew);
                    //sb.Insert(0, Regex.Replace(lineOld, @"[\s\S]*", " "));
                    if (!lineOld.IsEmptyOrNull())
                    {
                        string myData;
                        foreach (var optikFormAlan in optikFormAlanlari)
                        {
                            myData = lineOld.Substring(optikFormAlan.BayiBaslangic.Value-1, optikFormAlan.BayiUzunluk.Value);
                          lineNew=  lineNew.Insert(optikFormAlan.SinavBaslangic.Value - 1, myData);

                            lineNew = lineNew.Substring(0, lineNew.Length - myData.Length);
                          //lastIndex = optikFormAlan.SinavBaslangic.Value + optikFormAlan.SinavUzunluk.Value-1;
                        }

                        sb.Append(lineNew);
                        sb.AppendLine();
                    }
                }
            }

            System.IO.File.WriteAllText(@"C:\MyNewTextFile" + DateTime.Now.ToString("YYYYddMMss") + ".txt", sb.ToString());
            //            var optikFormAlanlari = new OptikFormAlanRepository().List(uow.Connection, new ListRequest() {  Criteria = new Criteria("FormKodu")== 87 }).Entities;

            throw new Exception("dsa");
            //var o = OptikFormAlanRow.Fields.As("o");
            //var n = OptikFormAlanRow.Fields.As("n");

            //var query = new SqlQuery()
            //        .From(o)
            //        .LeftJoin(n, o.AlanAdi == n.AlanAdi)
            //        .Select(o.AlanAdi, "AlanAdi")
            //        .Select(o.Baslangic, "oldBaslangic")
            //        .Select(o.Uzunluk, "oldUzunluk")
            //        .Select(n.Baslangic, "newBaslangic")
            //        .Select(n.Uzunluk, "newUzunluk");

            //var ddd = query.ToString();

            return new MyRepository().TxtYukle(uow, request);
        }
Esempio n. 12
0
        public void WithPassesAndReturnsTheQueryItself()
        {
            var query = new SqlQuery();
            var afterWith = query.With(insideWidth =>
            {
                Assert.Equal(query, insideWidth);
            });

            Assert.Equal(query, afterWith);
        }
Esempio n. 13
0
 public void WhereDoesAndWhenCalledMoreThanOnce()
 {
     var query = new SqlQuery().From("t").Select("c").Where("x > 5").Where("y < 4");
     Assert.Equal(
         TestSqlHelper.Normalize(
             "SELECT c FROM t WHERE x > 5 AND y < 4"),
         TestSqlHelper.Normalize(
             query.ToString())
     );
 }
Esempio n. 14
0
        public void TakeUsesCorrectSyntaxForSqliteDialect()
        {
            var query = new SqlQuery()
                .Dialect(SqliteDialect.Instance)
                .Select("c")
                .From("t")
                .Take(10);

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT c FROM t LIMIT 10"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 15
0
        public void SubQueryShouldBeEnclosedInParen()
        {
            var sub = new SqlQuery().SubQuery()
                .Select("TestColumn")
                .From("TestTable");

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "(SELECT TestColumn FROM TestTable)"),
                TestSqlHelper.Normalize(
                    sub.ToString()));
        }
Esempio n. 16
0
        public void SubQuerySharesParameters()
        {
            var query = new SqlQuery();
            Assert.Equal(0, query.ParamCount);

            var sub = query.SubQuery();
            sub.AddParam("@px1", "value");
            Assert.Equal(1, query.ParamCount);
            Assert.Equal((string)query.Params["@px1"], "value");
        }
Esempio n. 17
0
        public void SubQueryCanBeUsedAsCriteriaUsingWith()
        {
            var query = new SqlQuery()
                .From("ParentTable")
                .Select("ParentColumn")
                .With(me => me.Where(new Criteria(me.SubQuery()
                    .From("SubTable")
                    .Take(1)
                    .Select("SubColumn")) >= 1));

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT ParentColumn FROM ParentTable WHERE " +
                        "((SELECT TOP 1 SubColumn FROM SubTable) >= @p1)"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 18
0
 public virtual void OnPrepareQuery(IDeleteRequestHandler handler, SqlQuery query)
 {
 }
Esempio n. 19
0
        public void ReorderWithNoSpecificItemSetsValuesProperly()
        {
            using (var dbContext = NewDbTestContext())
            using (var connection = SqlConnections.NewByKey("Serenity"))
            {
                foreach (var data in new[] { /* input in id order, expected output in same order */
                    new Tuple<int[], int[]>(new[] { 0, 0, 0, 0, 0 }, new[] { 1, 2, 3, 4, 5 }),
                    new Tuple<int[], int[]>(new[] { 1, 5, 3, 0, 4 }, new[] { 2, 5, 3, 1, 4 }),
                    new Tuple<int[], int[]>(new[] { 1, 2, 2, 9, 0 }, new[] { 2, 3, 4, 5, 1 }),
                    new Tuple<int[], int[]>(new[] { 0, 0, 3, 1, 4 }, new[] { 1, 2, 4, 3, 5 })
                })
                {
                    new SqlDelete(DisplayOrderRow.TableName)
                        .Execute(connection, ExpectedRows.Ignore);

                    for (var i = 0; i < data.Item1.Length; i++)
                    {
                        new SqlInsert(DisplayOrderRow.TableName)
                            .Set(fld.GroupID, 1)
                            .Set(fld.IsActive, 1)
                            .Set(fld.DisplayOrder, data.Item1[i])
                            .Execute(connection);
                    }

                    DisplayOrderHelper.ReorderValues(connection, DisplayOrderRow.Instance);

                    var row = new DisplayOrderRow();
                    var actual = new SqlQuery().From(row).Select(fld.DisplayOrder).OrderBy(fld.ID)
                        .List(connection, row).Select(x => x.DisplayOrder.Value).ToArray();

                    Assert.Equal(data.Item2, actual);
                }
            }
        }
 public void OnPrepareQuery(IListRequestHandler handler, SqlQuery query)
 {
     var user = (UserDefinition)Authorization.UserDefinition;
     if (!Authorization.HasPermission(PermissionKeys.Tenants))
         query.Where(fldTenantId == user.TenantId);
 }
Esempio n. 21
0
        public void SkipThrowsExceptionIfNoOrderByForSql2000Dialect()
        {
            var query = new SqlQuery()
                .Dialect(SqlServer2000Dialect.Instance)
                .Select("c")
                .From("t")
                .Skip(10);

            Assert.Throws<InvalidOperationException>(delegate
            {
                query.ToString();
            });
        }
Esempio n. 22
0
        public void OrderByWithExpressionWorks()
        {
            var query = new SqlQuery()
                .Select("TestColumn")
                .From("TestTable")
                .OrderBy("TestColumn")
                .OrderBy("TestColumn2");

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT TestColumn FROM TestTable ORDER BY TestColumn, TestColumn2"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 23
0
        public void OrderByWithAliasAndFieldnameWorks()
        {
            var query = new SqlQuery()
                .Select("u.TestColumn")
                .From("TestTable u")
                .OrderBy(new Alias("u"), "TestColumn")
                .OrderBy(new Alias("u"), "TestColumn2");

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT u.TestColumn FROM TestTable u ORDER BY u.TestColumn, u.TestColumn2"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 24
0
        public void OrderByFirstWorksProperlyWhenNoOrderByExists()
        {
            var query = new SqlQuery()
                .Select("TestColumn")
                .From("TestTable")
                .OrderByFirst("TestColumn")
                .OrderBy("SecondColumn");

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT TestColumn FROM TestTable ORDER BY TestColumn, SecondColumn"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
 public void OnApplyFilters(IListRequestHandler handler, SqlQuery query) { }
Esempio n. 26
0
        public void SkipUsesRowNumberForSql2005Dialect()
        {
            var query = new SqlQuery()
                .Dialect(SqlServer2005Dialect.Instance)
                .Select("c")
                .From("t")
                .OrderBy("x")
                .Skip(10)
                .Take(20);

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "SELECT * FROM (\n" +
                        "SELECT TOP 30 c, ROW_NUMBER() OVER (ORDER BY x) AS __num__ FROM t) __results__ " +
                    "WHERE __num__ > 10"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 27
0
        /// <summary>
        ///   Sets a records display order to to requested value, and also renumbers other records
        ///   in the group as required.</summary>
        /// <param name="connection">
        ///   Connection (required).</param>
        /// <param name="tableName">
        ///   Tablename (required).</param>
        /// <param name="keyField">
        ///   ID field meta that will be used to locate the record (required).</param>
        /// <param name="orderField">
        ///   Display order field meta.</param>
        /// <param name="filter">
        ///   Filter that will determine the record group (can be null).</param>
        /// <param name="recordID">
        ///   ID value of the record.</param>
        /// <param name="newDisplayOrder">
        ///   New display order of the record.</param>
        /// <param name="descendingKeyOrder">
        ///   Will records with same display order values be sorted in ascending or descending ID order?
        ///   For example, if records with ID's 1, 2, 3 has display order value of "0", their actual display
        ///   orders are 1, 2 and 3. If this parameter is set to true (descending), their display orders will
        ///   become 3, 2, 1. This parameter controls if records that are added recently and has no display
        ///   order value assigned (or 0) be shown at start or at the end.</param>
        /// <returns>
        ///   If any of the display order values is changed true.</returns>
        public static bool ReorderValues(IDbConnection connection, string tableName, Field keyField, Field orderField,
            ICriteria filter = null, Int64? recordID = null, int newDisplayOrder = 1,
            bool descendingKeyOrder = false, bool hasUniqueConstraint = false)
        {
            if (connection == null)
                throw new ArgumentNullException("connection");
            if (tableName == null || tableName.Length == 0)
                throw new ArgumentNullException("tableName");
            if (ReferenceEquals(null, keyField))
                throw new ArgumentNullException("keyField");
            if (ReferenceEquals(null, orderField))
                throw new ArgumentNullException("orderField");

            // last assigned display order value
            int order = 0;

            // a list that will contain an element for each record, and hold old and new display
            // order values of records
            List<OrderRecord> orderRecords = new List<OrderRecord>();

            // link to the order entry for record whose display order value is asked to be changed
            OrderRecord changing = null;

            // query to fetch id and display order values of the records in the group
            SqlQuery query = new SqlQuery()
                .Select(
                    keyField,
                    orderField)
                .From(
                    tableName, Alias.T0)
                .Where(
                    filter)
                .OrderBy(
                    orderField);

            // determine display order for records with same display order values
            // based on ID ordering set
            query.OrderBy(keyField.Name, desc : descendingKeyOrder);

            // read all existing records
            using (IDataReader reader = SqlHelper.ExecuteReader(connection, query))
            {
                while (reader.Read())
                {
                    // each records actual display order value is one more than previous one
                    order++;
                    // create an entry to hold current and new display order value of the record
                    OrderRecord r = new OrderRecord();
                    // record ID
                    r.recordID = Convert.ToInt64(reader.GetValue(0));
                    // old display order field value (not the actual display order!)
                    r.oldOrder = Convert.ToInt32(reader.GetValue(1));
                    // new display order value (actual one to be set)
                    r.newOrder = order;

                    orderRecords.Add(r);

                    // if this is the one that is requested to be changed, hold a link to its entry
                    if (recordID == r.recordID)
                        changing = r;
                }
            }

            // ensure that the new display order is within limits
            // if its lower than 1 or bigger than record count, fix it
            if (newDisplayOrder <= 0)
                newDisplayOrder = 1;
            else if (newDisplayOrder > order)
                newDisplayOrder = order;

            // if the record whose display order is to be changed can be found, and its display order value is different
            // than the one in database
            if (changing != null && changing.newOrder != newDisplayOrder)
            {
                // let's say record had a display order value of 6and now it will become 10, the records with actual
                // display orders of 7, 8, 9, 10 will become 6, 7, 8, 9 orders.
                //
                // WARNING: notice that array is 0 based, so record with actual display order of 7 is in the
                // 6th index in the array)
                for (int i = changing.newOrder; i < newDisplayOrder; i++)
                    orderRecords[i].newOrder = i;

                // if the records display order is to be changed from 9 to 5, the records with actual orders of 5, 6, 7, 8
                // is going to be 6, 7, 8, 9 ordered.
                for (int i = newDisplayOrder - 1; i < changing.newOrder - 1; i++)
                    orderRecords[i].newOrder = i + 2;

                // as the records that will be changing are assigned new orders, we may assign new display order
                // directly.
                changing.newOrder = newDisplayOrder;
            }

            return UpdateOrders(connection, orderRecords, tableName, keyField, orderField, hasUniqueConstraint);
        }
Esempio n. 28
0
        public void SkipUsesWorkAroundWithOneOrderByForSql2000Dialect()
        {
            var query = new SqlQuery()
                .Dialect(SqlServer2000Dialect.Instance)
                .Select("c")
                .From("t")
                .OrderBy("x")
                .Skip(10);

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "DECLARE @Value0 SQL_VARIANT;" +
                    "SELECT TOP 10 @Value0 = x FROM t ORDER BY x;" +
                    "SELECT c FROM t WHERE ((((x IS NOT NULL AND @Value0 IS NULL) OR (x > @Value0)))) ORDER BY x"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }
Esempio n. 29
0
 public void OnPrepareQuery(IRetrieveRequestHandler handler, SqlQuery query) { }
Esempio n. 30
0
        public void SkipUsesWorkAroundWithTwoOrderByForSql2000Dialect()
        {
            var query = new SqlQuery()
                .Dialect(SqlServer2000Dialect.Instance)
                .Select("c")
                .From("t")
                .Where("c > 2")
                .OrderBy("x")
                .OrderBy("y")

                .Skip(100)
                .Take(50);

            Assert.Equal(
                TestSqlHelper.Normalize(
                    "DECLARE @Value0 SQL_VARIANT;" +
                    "DECLARE @Value1 SQL_VARIANT;" +
                    "SELECT TOP 100 @Value0 = x,@Value1 = y FROM t WHERE c > 2 ORDER BY x, y;" +
                    "SELECT TOP 50 c FROM t WHERE c > 2 AND " +
                        "((((x IS NOT NULL AND @Value0 IS NULL) OR (x > @Value0))) " +
                            "OR (((x IS NULL AND @Value0 IS NULL) OR (x = @Value0)) " +
                            "AND ((y IS NOT NULL AND @Value1 IS NULL) OR (y > @Value1)))) ORDER BY x, y"),
                TestSqlHelper.Normalize(
                    query.ToString()));
        }