SAF> * Константин wrote, On 15.11.2006 5:13:
>> подозреваю что неправильно разбирается строка:
>> select 'OK' from rdb$database where 0 not in (null, 1)
>> =>
>> select 'OK' from rdb$database where not ((0 = null) or (0 = 1))
>>
>> а должно в
>> select 'OK' from rdb$database where (0 <> null) or (0 <> 1)
>>
>> или
>> select 'OK' from rdb$database where (not (0 = null) or not (0 = 1))
>>
>>
>> вот! ЭТО БАГА !!! И притом понкретная ...
SAF> Ну вообще-то если предполагать, что утверждения
SAF> a NOT IN (b)
SAF> и
SAF> NOT (a IN (b))
SAF> эквивалентны, то разбор, который ты предполагаешь, как раз правильный ;)
SAF> А так, как ты хочешь в "должно", вообще получается и ни туда, и ни сюда
SAF> - попробуй в конструкцию, построенную по такому принципу, подставить
SAF> присутствующее в IN значение (только не null) - всё равно у тебя
SAF> получится true.
select 'OK' from rdb$database where 0 not in (1,2)
select 'OK' from rdb$database where not ((0 = 1) or (0 = 2)) = true
select 'OK' from rdb$database where (0 <> 1) or (0 <> 2) = true
select 'OK' from rdb$database where (not (0 = 1) or not (0 = 2)) = true
И ? ... Я одного не пойму причём здесь null ? Null это ничего и
"ничто" не должно влиять на остальные значения и/или операторы
NOT/OR/AND/XOR .... Я предложил более правильный, ИМХО, разбор ...
С уважением,
Константин Григорьевич.
===============