YarrowSoft

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


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


Письмо #5210

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

Приветствую.

Буквально сегодня выбил из саппорта решение проблемы, мучавшей меня все время
моей работы в Каше. Речь идет о так называемых логических полях (%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 (ООО Димас, Хабаровск)


[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. (14)