17 дек. 2010 г.

Сокращения на Yahoo!

Yahoo! закрывает delicious.com (и некоторые другие сервисы). Надеюсь они предоставят возможность слить ссылки. Обидно будет потерять все, что нажито непосильным трудом :(

PS: Привет Романчуку. Не всегда инвестор заинтересован в развитии и сохранении приобретенного предприятия. Бывает и так: поматросили и бросили.

13 дек. 2010 г.

По дороге к унифицированному парсеру SQL запросов

Создатели SQL похоже всерьез надеялись, что каждая кухарка со знанием английского будет писать запросы к реляционным базам. Чем еще объяснить такое буйство синтаксисов для некоторых функций? Все эти EXTRACT(year FROM date), DATEADD(month 5 TO date) и т.п. Странно, что для функции BIN_AND оставили синтаксис BIN_AND(a, b), а не придумали что-нибудь вроде BIN_AND(a AND b). Или возьмем синтаксическую избыточность многих конструкций и наличие необязательных зарезервированных слов. Например, SELECT [ALL] * FROM..., column [AS] alias... Простым разработчикам SQL парсеров от этого теперь одна головная боль.

2 дек. 2010 г.

Лечение поврежденной БД под Firebird 2.0

От клиентов пришла поврежденная база. Сервер Firebird 2.0. Внешне все ОК: gbak и gfix проходят без проблем, но некоторые хранимые процедуры не перекомпилируются (ALTER PROCEDURE) и не удаляются с сообщением:

This operation is not defined for system tables.
unsuccessful metadata update.
cannot delete.
COLUMN RDB$220.
there are 1 dependencies.

Соответственно, невозможен процесс апгрейда базы с помощью утилиты FDBConvert.

Вылечить базу получилось следующим образом:
  1. Определили список поврежденных процедур
  2. Для каждой из них сохранили исходный текст
  3. Удалили параметры процедуры с помощью запроса
    DELETE FROM rdb$procedure_parameters WHERE rdb$procedure_name = 'name'
  4. Удалили процедуру (DROP PROCEDURE)
Теперь база готова к конвертации или к бэкапу/разбэкапу. После чего можно восстановить удаленные процедуры.

UPD: Конкретно в этой базе проблемы были с процедурами: MSG_P_GETCHILDCOUNT_BOX, MSG_P_EXPANDLIMIT_BOX, MSG_P_RESTRUCT_BOX.