Update
От: ili Россия  
Дата: 21.07.11 12:32
Оценка:
имеем 2 запроса:


var value = "some value"; 

//1
db.MyObject.Set(_ => _.Field, value).Update();

//2
db.MyObject.Set(_ => _.Field, () => value).Update();


выход у них такой:
--1
UPDATE MyObject SET Field = 'some value'

--2
UPDATE MyObject SET Field = @parameter


зачем инлайнить параметр как константу?
да и кэширование в таком случае отрубается, точнее, работает, только в случае, если значение константы совпадает.
Re: Update
От: IT Россия linq2db.com
Дата: 22.07.11 00:41
Оценка:
Здравствуйте, ili, Вы писали:

ili>зачем инлайнить параметр как константу?


Так компилятор строит Expression.

ili>да и кэширование в таком случае отрубается, точнее, работает, только в случае, если значение константы совпадает.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Update
От: ili Россия  
Дата: 22.07.11 04:49
Оценка:
Здравствуйте, IT, Вы писали:

IT>Так компилятор строит Expression.


может я сейчас глупость скажу, но, это вроде можно обойти:

на константу отрабатывает

UpdateBuilder.ParseSet(
        ExpressionBuilder builder,
        BuildInfo         buildInfo,
        LambdaExpression  extract,
        Expression        update,
        IBuildContext     select)

из него зовется:


ExpressionBuilder.SqlBulder.ConvertToSql(IBuildContext context, Expression expression)
{
    // если пропустить этот шаг в дебагере, то выражение будет построено с параметром, а не с инлайном
    if (CanBeConstant(expression))
        return BuildConstant(expression);

    if (CanBeCompiled(expression))
        return BuildParameter(expression).SqlParameter;


инлайнить, имхо, нехорошо...
Re[3]: Update
От: IT Россия linq2db.com
Дата: 22.07.11 06:32
Оценка: +2
Здравствуйте, ili, Вы писали:

ili> // если пропустить этот шаг в дебагере, то выражение будет построено с параметром, а не с инлайном


А если я хочу именно константу?
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Update
От: ili Россия  
Дата: 22.07.11 08:13
Оценка:
Здравствуйте, IT, Вы писали:

IT>А если я хочу именно константу?


а зачем?
Re[5]: Update
От: fddima  
Дата: 22.07.11 08:15
Оценка: +1
Здравствуйте, ili, Вы писали:

IT>>А если я хочу именно константу?

ili>а зачем?
На практике планы запросов с параметром от с константой иногда фатально отличаются.
Re[6]: Update
От: ili Россия  
Дата: 22.07.11 08:24
Оценка:
Здравствуйте, fddima, Вы писали:

F> На практике планы запросов с параметром от с константой иногда фатально отличаются.


эв оно как... ну тада ладно..

ну вот тогда у мяня такой вопрос возникает, DateTime инлайниться не будет?
Re[7]: Update
От: fddima  
Дата: 22.07.11 08:37
Оценка:
Здравствуйте, ili, Вы писали:

ili>эв оно как... ну тада ладно..

ili>ну вот тогда у мяня такой вопрос возникает, DateTime инлайниться не будет?
Этого уже не знаю. Сейчас кривая меня опять от BLT подальше отвела.
Re[5]: Update
От: IT Россия linq2db.com
Дата: 22.07.11 13:21
Оценка:
Здравствуйте, ili, Вы писали:

IT>>А если я хочу именно константу?

ili>а зачем?

Затем, что при наличии константы SQL иожет производить дополнительные оптимизации.
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Update
От: ili Россия  
Дата: 25.07.11 04:09
Оценка:
Здравствуйте, IT, Вы писали:

IT>Затем, что при наличии константы SQL иожет производить дополнительные оптимизации.


да, меня уже просветили.
Re[4]: Update
От: ili Россия  
Дата: 31.07.11 08:29
Оценка:
Здравствуйте, IT, Вы писали:


IT>А если я хочу именно константу?


может лучше явно, что-т типа Sql.Constant(a)?
а то ну совсем неочевидное поведение...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.