Re[11]: NonUpdatableOnInsert
От: ili Россия  
Дата: 20.07.11 06:32
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, ili, Вы писали:


IT>Кстати, похоже, что сломался тест NonUpdatableOnInsert. Надо бы починить.


да, вот только помоему он "починился".
NonUpdatable.OnInsert == false — означает, что при инсерте данное поле должно вставляться, по крайней мере я так понимаю (как минимум для Identity это именно так, там 2 true и оно не обновляется и не вставляется)
т.е. тест закрепляет неверное поведение.

вобщем, я его переделал, и закоммитил в dev (ну или постарался туда закоммититть )

ЗЫ по ходу пока я тебе полрепозитария не перекурочу, я так и не въеду в этот гит... хотя, он вроде крут, и чистить плоды моей деятельности особого труда не составляет...

ЗЫ2 а зачем всетаки TableBuilder-у 2 до боли одинаковых метода MapDataReaderToObject? неужно заради оптимизации?

ЗЫ3 да, посгрису иногда нужно делать все в lower\upper case... хотя, решение и вправду не очень, я как-то пару лет назад уже занимался миграциями и тогда до кучи все делал в ловер кейз, ну и просто дернул те наработки особо не мучаясь, а проблема в том, что посгрис начинает местами быть чувствительным к регистрам таблиц\полей, в особенности если писать их в "", а без "" зачастую низя, т.к. можно легко попасть в зарезервированные слова (у мя вот в базе часто встречается "From" )
скорее оставить надо, но перетащить в Convert... лана, руки дойдут — разберусь
Re[12]: NonUpdatableOnInsert
От: IT Россия linq2db.com
Дата: 20.07.11 13:32
Оценка:
Здравствуйте, ili, Вы писали:

ili>да, вот только помоему он "починился".


Он вообще был неправильный.

ili>вобщем, я его переделал, и закоммитил в dev (ну или постарался туда закоммититть )


Я же вроде уже починил. Ты опять переделал

ili>ЗЫ по ходу пока я тебе полрепозитария не перекурочу, я так и не въеду в этот гит... хотя, он вроде крут, и чистить плоды моей деятельности особого труда не составляет...


В этот раз лучшим решением было бы сделать Rebase на dev, чтобы не было таких загибонов как получилось

ili>ЗЫ2 а зачем всетаки TableBuilder-у 2 до боли одинаковых метода MapDataReaderToObject? неужно заради оптимизации?


Для неё. Один, конечно, можно убрать, но только не тот который ты убрал. Но с этим как-нибудь позже.

ili>ЗЫ3 да, посгрису иногда нужно делать все в lower\upper case... хотя, решение и вправду не очень, я как-то пару лет назад уже занимался миграциями и тогда до кучи все делал в ловер кейз, ну и просто дернул те наработки особо не мучаясь, а проблема в том, что посгрис начинает местами быть чувствительным к регистрам таблиц\полей, в особенности если писать их в "", а без "" зачастую низя, т.к. можно легко попасть в зарезервированные слова (у мя вот в базе часто встречается "From" )


У там тебе на гитхабе в комментариях вопрос задал по поводу upper, lower. Если не ошибаюсь у тебя там маленькая бага.

ili>скорее оставить надо, но перетащить в Convert... лана, руки дойдут — разберусь
Если нам не помогут, то мы тоже никого не пощадим.
Re[13]: NonUpdatableOnInsert
От: ili Россия  
Дата: 21.07.11 05:03
Оценка:
Здравствуйте, IT, Вы писали:

IT>Я же вроде уже починил. Ты опять переделал


война коммитов!
ммм... я не нарочно... честно

IT>В этот раз лучшим решением было бы сделать Rebase на dev, чтобы не было таких загибонов как получилось


ты учти, что говоришь с дремучим парнем из уральского леса так что говорить надо по слогам и очень громко =)
это вот надо на шестую картинку смотреть?
Автор(ы): Игорь Ткачев
Дата: 23.05.2011
Краткое введение в Git и Git Extensions.

Хотя там есть отдельная комманда Rebase они с 6-й картинкой не одно и то же?

IT>У там тебе на гитхабе в комментариях вопрос задал по поводу upper, lower. Если не ошибаюсь у тебя там маленькая бага.


да, теперь я понял как этим пользоваться =) надо было по ссылке вконце письма сходить =))
Re: Баги
От: Spaider Верблюд  
Дата: 02.08.11 12:34
Оценка:
Здравствуйте, IT, Вы писали:

IT>Вышла версия 4.1 библиотеки.


Напоролся еще на один баг:

  public class Root
  {
    public int    ID           { get; set; }
    public string Value        { get; set; }
    public int    InfoID       { get; set; }
  }
  
  public class LeafToRoot
  {
    public int ID { get; set; }
    public int RootID { get; set; }
    public int LeafID { get; set; }
  }  
  
  public class Leaf
  {
    public int    ID         { get; set; }
    public int    LeafRootID { get; set; }
    public string LeafValue  { get; set; }
  }  
  
    private void TestInternal(Expression<Func<RootInfo, bool>> selector)
    {
      using (var db = new DbManager())
      {
        var roots = db.GetTable<Root>();
        roots.Delete();
        roots.Insert(() => new Root { ID = 1, Value = "First",  InfoID = 1 });
        roots.Insert(() => new Root { ID = 2, Value = "Second", InfoID = 1 });
        roots.Insert(() => new Root { ID = 3, Value = "Third",  InfoID = 1 });

        var l2r = db.GetTable<LeafToRoot>();
        l2r.Delete();
        l2r.Insert(() => new LeafToRoot { ID = 1, LeafID = 1, RootID = 1 });
        l2r.Insert(() => new LeafToRoot { ID = 2, LeafID = 2, RootID = 1 });

        var leafs = db.GetTable<Leaf>();
        leafs.Delete();
        leafs.Insert(() => new Leaf { ID = 1, LeafRootID = 1, LeafValue = "blabla" });
        leafs.Insert(() => new Leaf { ID = 2, LeafRootID = 2, LeafValue = "blahblah" });

        DbManager.TurnTraceSwitchOn();

        var q1 = from r in roots
                 orderby r.Value
                 select new RootInfo
                          {
                            ID = r.ID,
                            Value = r.Value,
                          };

        q1 = q1.Where(selector);

        var q2 = (from l in leafs
                 join lr in l2r on l.ID equals lr.LeafID
                 join r in q1 on lr.RootID equals r.ID
                 select new
                          {
                            r.ID,
                            LeafRootID = lr.ID,
                            LeafID = l.ID
                          }).ToList();
      }
    }

    [Test]
    public void Test()
    {
//      const string param = "ir"; // С константой работает!
      string param = "ir";  // А так -- падает!
      TestInternal(i => i.Value.Contains(param));
    }


При парсинге q2 наблюдаем exception:
System.ArgumentException : An item with the same key has already been added.
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at BLToolkit.Data.Linq.Builder.ExpressionBuilder.ConvertLikePredicate(IBuildContext context, MethodCallExpression expression, String start, String end) in ExpressionBuilder.SqlBuilder.cs: line 1792
at BLToolkit.Data.Linq.Builder.ExpressionBuilder.ConvertPredicate(IBuildContext context, Expression expression) in ExpressionBuilder.SqlBuilder.cs: line 1174
at BLToolkit.Data.Linq.Builder.ExpressionBuilder.BuildSearchCondition(IBuildContext context, Expression expression, List`1 conditions) in ExpressionBuilder.SqlBuilder.cs: line 2001
at BLToolkit.Data.Linq.Builder.ExpressionBuilder.BuildWhere(IBuildContext parent, IBuildContext sequence, LambdaExpression condition, Boolean checkForSubQuery) in ExpressionBuilder.SqlBuilder.cs: line 38
at BLToolkit.Data.Linq.Builder.WhereBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in WhereBuilder.cs: line 20
at BLToolkit.Data.Linq.Builder.MethodCallBuilder.BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) in MethodCallBuilder.cs: line 22
at BLToolkit.Data.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in C:\Projects\bl-toolkit\bltoolkit.4.1\Source\Data\Linq\Builder\ExpressionBuilder.cs: line 178
at BLToolkit.Data.Linq.Builder.JoinBuilder.BuildMethodCall(ExpressionBuilder builder, MethodCallExpression methodCall, BuildInfo buildInfo) in C:\Projects\bl-toolkit\bltoolkit.4.1\Source\Data\Linq\Builder\JoinBuilder.cs: line 42
at BLToolkit.Data.Linq.Builder.MethodCallBuilder.BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) in MethodCallBuilder.cs: line 22
at BLToolkit.Data.Linq.Builder.ExpressionBuilder.BuildSequence(BuildInfo buildInfo) in C:\Projects\bl-toolkit\bltoolkit.4.1\Source\Data\Linq\Builder\ExpressionBuilder.cs: line 178
at BLToolkit.Data.Linq.Builder.ExpressionBuilder.Build() in C:\Projects\bl-toolkit\bltoolkit.4.1\Source\Data\Linq\Builder\ExpressionBuilder.cs: line 149
at BLToolkit.Data.Linq.Query`1.GetQuery(IDataContextInfo dataContextInfo, Expression expr) in C:\Projects\bl-toolkit\bltoolkit.4.1\Source\Data\Linq\Query.cs: line 134
at BLToolkit.Data.Linq.Table`1.GetQuery(Expression expression, Boolean cache) in C:\Projects\bl-toolkit\bltoolkit.4.1\Source\Data\Linq\TableT.cs: line 106
at BLToolkit.Data.Linq.Table`1.Execute(IDataContextInfo dataContextInfo, Expression expression) in C:\Projects\bl-toolkit\bltoolkit.4.1\Source\Data\Linq\TableT.cs: line 98
at BLToolkit.Data.Linq.Table`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() in C:\Projects\bl-toolkit\bltoolkit.4.1\Source\Data\Linq\TableT.cs: line 193
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList(IEnumerable`1 source)
at BLTUnitTests.Tests.TestInternal(Expression`1 selector) in Tests.cs: line 49
at BLTUnitTests.Tests.Test() in Tests.cs: line 66


Если передать константу, то в методе ConvertLikePredicate() отрабатывает ветка
if (a is SqlValue)
{
    ...
}


и всё чики-пыки.
Если же передать переменную, то падает в ветке:
if (a is SqlParameter)
{
    ...
}


Это баг или это я вот такой?
... << RSDN@Home 1.2.0 alpha 5 rev. 1514>>
--
К вашим услугам,
Re[2]: Баги
От: Spaider Верблюд  
Дата: 02.08.11 12:38
Оценка:
Здравствуйте, Spaider, Вы писали:

S>Это баг или это я вот такой?


Ой, я хотел сказать вот такой

Вот SQL скрипты для табличек:

CREATE TABLE [dbo].[Root](
    [ID] [int] NOT NULL,
    [Value] [nvarchar](50) NOT NULL,
    [InfoID] [int] NULL,
 CONSTRAINT [PK_Root] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[LeafToRoot](
    [ID] [int] NOT NULL,
    [RootID] [int] NOT NULL,
    [LeafID] [int] NOT NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[Leaf](
    [ID] [int] NOT NULL,
    [LeafRootID] [int] NOT NULL,
    [LeafValue] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Leaf] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
... << RSDN@Home 1.2.0 alpha 5 rev. 1514>>
--
К вашим услугам,
Re[2]: Баги
От: Spaider Верблюд  
Дата: 15.08.11 14:26
Оценка:
Здравствуйте, Spaider, Вы писали:

S>Здравствуйте, IT, Вы писали:


IT>>Вышла версия 4.1 библиотеки.


S>Напоролся еще на один баг


Я что-то неправильно написал? Или надо оформить баг как-то по-другому?
... << RSDN@Home 1.2.0 alpha 5 rev. 1514>>
--
К вашим услугам,
Re[3]: Баги
От: IT Россия linq2db.com
Дата: 15.08.11 16:48
Оценка:
Здравствуйте, Spaider, Вы писали:

S>Я что-то неправильно написал? Или надо оформить баг как-то по-другому?


Лучше, конечно, а треккер. Здесь в общем топике легко затеряться.
Если нам не помогут, то мы тоже никого не пощадим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.