Самое опасное — между сегодня и завтра

* * *

Снова и снова несколько поколений переживали глупейшую катастрофу, выкрикивая обязательное: "Помни Кумскую долину!"
Каждому обществу жизненно необходим подобный клич, но только в крайне редких случаях используется полный, не приукрашенный вариант, а именно: "Помните-Злодеяния-Совершенные-Против-Нас-В-Прошлый-Раз-Которые-Оправдывают-Те-Злодеяния-Что-Мы-Совершим-Сегодня! Ну И Так Далее! Ура!"

* * *

— А ты что будешь делать? — спросила Сьюзен, схватив два ведра.
— Очень сильно переживать! И это, поверь, совсем не простое занятие!

* * *

Некоторые люди готовы сотворить что угодно, лишь бы выяснить, возможно это или нет. Если где-нибудь в глубокой пещере установить большой рычаг с огромной такой надписью "Конец Света/Включить. ПРОСЬБА НЕ ТРОГАТЬ!", то даже краска не успеет высохнуть.

* * *

— Конечно, — согласилась Сьюзен. — иногда мне кажется, что люди должны сдать соответствующий и надлежащий экзамен, прежде чем заслужить право быть родителями. И я имею в виду не только практическую часть вопроса.

* * *

То, что работает исправно, никто никогда не замечает.

* * *

Очень трудно заставить кого-то, что-то сделать, когда ты самый главный…

* * *

И рука об руку с этим шла способность ассоциировать, делать вещи нормальными. Мир чудовищно изменился, а люди через несколько дней решили, что этонормально. У них есть неподражаемый талант закрывать глаза на очевидное и забывать то, что не подходит. Они сами себе рассказывают небылицы, чтобы объяснить необъяснимое, представить его в нормальном свете.

Особенно хорошо это удается историкам.

* * *

Девять десятых вселенной — это, по сути, документация.

* * *

Вор Времени (с) Терри Пратчетт

Ещё один потолок

Работа в отчётах с параметром SELECT-OPTIONS проста.

Сначала определяем:

select-options: s_anln1 for anla-anln1.

Потом используем:

select * from anla into table gt_report where anln1 in s_anln1.

Всё просто на первый взгляд. При таком коде внутри Open SQL происходит простая работа: OpenSQL трансформируется в NativeSQL, а там подобной конструкции нет. Поэтому фактический запрос превращается приблизительно в следующее:

select * from dbchema.anla where anln1 = ‘1’ or anln1 = ‘2’ or anln1 = ‘3’;

И если бы забьём очень много значений в поле выбора, то длина получающегося в результате SQL запроса будет расти линейно. Именно где-то тут я встретился с узким местом, в котором меня стукнули по носу динамической ошибкой DBIF_RSQL_INVALID_RSQL. Интересно, а почему не SAPSQL_STMNT_TOO_LARGE?

В моём случае это примерно 9980 значений типа ANLN1. Это эмпирическое число видимо будет разниться от системе к системе, от используемого типа данных и прочих условий. И как его гарантированно предсказать в общем случае?

Есть в недавней игре Saints Row: Gat Out of Hell одно достижение: десять раз стукнуться головой о потолок.

 

Achievement unlocked

 

Как быть?

В моём случае я решил, что пользователю не следует выдумывать себе сценарии, в которых необходимо вводить десять тысяч значений в поле выбора. Ибо нефиг. Для красоты можно разве что поставить проверку на экране выбора, чтобы в эти очень редкие моменты красиво выругаться. Динамическая ошибка – это не красиво.