YarrowSoft

Архив : Re: [cache_ru] Логические зрначения в полях : группа пользователей постреляционной СУБД Cache


[Предыдущее - [cache_ru] Логические зрначения в полях] [Следующее - [cache_ru] производительность]


Письмо #5211

Тема: Re: [cache_ru] Логические зрначения в полях
Начало этой темы: [cache_ru] Логические зрначения в полях
Это ответ на: [cache_ru] Логические зрначения в полях
Ответ на это письмо: нет
От: Елена Шутова Дата: 01 Августа 2006 13:30

Сын, какой же ты хороший и заботливый!

Я по тебе соскучилась. Целую, мама
----- Original Message -----
From: "logist" <E-Mail>
To: <E-Mail>
Sent: Tuesday, August 01, 2006 11:04 AM
Subject: [cache_ru] Логические зрначения в полях


> Приветствую.
>
> Буквально сегодня выбил из саппорта решение проблемы, мучавшей меня все время
> моей работы в Каше. Речь идет о так называемых логических полях (%Boolean),
> которые мало того, что имеют три значения (1, 0 и NULL) так еще и очень странно
> ведут себя в SQL-запросах.
>
> А именно, если мы сохраняем пустое значение такого поля, SQL считает, что это
> значение - NULL, т.е., цитируя саппорт, "мы не можем сказать, равно оно единице
> или не равно, следовательно оно дает false на всех проверках, кроме is null".
> Так что если в SQL-запросе мы напишем в условиях
>
> where IsSomethingWrong<>1
>
> NULL-поля в результаты не попадут. То есть я должен писать
>
> where (IsSomethingWrong<>1) or (IsSomethingWrong is null)
>
> чего мне по понятным причинам делать не хочется.
>
> А теперь внимание, решение проблемы.
>
> Создаем свой класс, например
>
> Class p5.dt.Boolean Extends %Boolean
> {
>
> ClassMethod StoredToLogical(%val As p5.dt.Boolean) As %String [ CodeMode =
> expression ]
> {
> +%val
> }
> }
>
> Прописываем его во всех полях вместо %Boolean, компилируемся.
>
> Все, теперь запросы
>
> where IsSomethingWrong<>1
>
> и даже
>
> where IsSomethingWrong=0
>
> работают безо всяких проблем, причем как на старых, так и на новых данных.
>
> Любви.
> logist (ООО Димас, Хабаровск)
>
>
>
>
> Yahoo! Groups Links
>
>
>
>
>
>
>


[2000|2001|2002|2003|2004|2005|2006|2007|2008] [Январь|Февраль|Март|Апрель|Май|Июнь]
[01|02|03|04|05|06]

Error. Page cannot be displayed. Please contact your service provider for more details. (6)