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); }
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())); }
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())); }
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())); }
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); } } }
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())); }
/// <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; }
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())); }
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())); }
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); }
public void WithPassesAndReturnsTheQueryItself() { var query = new SqlQuery(); var afterWith = query.With(insideWidth => { Assert.Equal(query, insideWidth); }); Assert.Equal(query, afterWith); }
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()) ); }
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())); }
public void SubQueryShouldBeEnclosedInParen() { var sub = new SqlQuery().SubQuery() .Select("TestColumn") .From("TestTable"); Assert.Equal( TestSqlHelper.Normalize( "(SELECT TestColumn FROM TestTable)"), TestSqlHelper.Normalize( sub.ToString())); }
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"); }
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())); }
public virtual void OnPrepareQuery(IDeleteRequestHandler handler, SqlQuery query) { }
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); }
public void SkipThrowsExceptionIfNoOrderByForSql2000Dialect() { var query = new SqlQuery() .Dialect(SqlServer2000Dialect.Instance) .Select("c") .From("t") .Skip(10); Assert.Throws<InvalidOperationException>(delegate { query.ToString(); }); }
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())); }
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())); }
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) { }
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())); }
/// <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); }
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())); }
public void OnPrepareQuery(IRetrieveRequestHandler handler, SqlQuery query) { }
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())); }