23 февр. 2014 г.

К нам на сайт вот-вот заглянет миллионный посетитель!

19 февр. 2014 г.

10 февр. 2014 г.

Циклическое сканирование таблиц документов

После упрощения задачи единственная сложность, которая осталась, поиск ссылок на документы в удаляемом периоде.

Пусть, H1, H2, H3... HN -- таблицы шапок документов и связанные с ними 1-к-1 (или "нашей" связью 1-к-1, как в USR$INV_ADDINFO). P1, P2, P3... PN -- таблицы позиций документов и связанные с ними 1-к-1. H1K1, H1K2... H1KN -- поля ссылки на документ в таблице H1. P1K1, P1K2... P1KN -- поля ссылки на документ в таблице P1.

Тогда алгоритм выглядит следующим образом:

  1. Формируем массив ИД документов, которые остаются в БД:

    SELECT SUM(g_his_add(1, id))
    FROM gd_document
    WHERE documentdate >= :D


    Обратите внимание, что и шапки и позиции сразу попадут в выборку, так как у позиции документа дата обязательно совпадает с шапкой.
  2. Организуем цикл по таблицам H. Для каждой формируем и выполняем запрос:

    SELECT
    SUM(g_his_add(1, HjK1)),
    COUNT(HjK1),
    SUM(g_his_add(1, HjK2)),
    COUNT(HjK2),
    ...
    FROM Hj
    WHERE g_his_has(1, documentkey)


    Важно собрать все поля в один запрос, чтобы обойтись только одним сканом таблицы.

  3. Для позиций:

    SELECT
    COUNT(*), SUM(g_his_add(1, documentkey)),
    SUM(g_his_add(1, PjK1)),
    COUNT(PjK1),
    SUM(g_his_add(1, PjK2)),
    COUNT(PjK2),
    ...
    FROM Pj
    WHERE g_his_has(1, masterkeykey)


  4. Если после обработки всех таблиц шапок и всех позиций, все суммы сложились в ноль, то значит ни одной записи не добавилось к сохраняемому множеству ИД. Если больше нуля, то повторяем, начиная с шага 2.
  5. Если после обработки таблицы мы получили:

    COUNT(HjKi)- SUM(g_his_add(1, HjKi)) = 0

    То такую колонку исключаем из дальнейшей обработки. Если в таблице исключены все колонки, то в дальнейшем такую таблицу не обрабатываем.

5 февр. 2014 г.

Перезапись объекта по потенциальному ключу

При загрузке объектов приоритет имеет поиск по потенциальному ключу (там, где перекрыт метод CheckTheSameStatement) перед поиском по РУИДу. Например, пусть у нас имеется исходная база данных с двумя отчетами:

Разработчик копирует ее себе на локальную машину:

...и производит доработку: удаляет отчет "Реестр" и переименовывает отчет "Новый реестр" в просто "Реестр":

Сохраняет доработанный отчет в ПИ и загружает его на исходную БД. Для отчетов у нас определен поиск объектов по имени в пределах одной папки. Т.е. будет найден отчет с именем "Реестр" и перезаписан. Попутно, его РУИД_1 заменится на РУИД_2 из файла.

Перезапись РУИДа означает, что исходный отчет "Новый реестр" вообще останется без РУИДа, потому что РУИД_2 теперь указывает на отчет "Реестр":

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

Наконец-то, LibreOffice начал использовать Firebird вместо какой-то Java-мути.
This allows creation of databases that perform many times faster than the previous built-in HSQLDB.
Кто бы сомневался.
We plan to phase HSQLDB out over the next few releases, and provide a smooth migration path to Firebird.

3 февр. 2014 г.

Боты пытаются пробить Gedemin Web Server

[02/Feb/2014 03:23:56] 81.17.28.108 /cgi-bin/php
[02/Feb/2014 03:23:56] 81.17.28.108 /cgi-bin/php5
[02/Feb/2014 03:23:56] 81.17.28.108 /cgi-bin/php-cgi
[02/Feb/2014 03:23:56] 81.17.28.108 /cgi-bin/php.cgi
[02/Feb/2014 03:23:56] 81.17.28.108 /cgi-bin/php4
[02/Feb/2014 06:22:11] 124.194.118.194 phpTest/zologize/axa.php
[02/Feb/2014 06:59:11] 175.115.53.237 w00tw00t.at.blackhats.romanian.anti-sec:)
[02/Feb/2014 06:59:12] 175.115.53.237 phpmyadmin/scripts/setup.php
[02/Feb/2014 06:59:12] 175.115.53.237 phpMyAdmin/scripts/setup.php
[02/Feb/2014 06:59:13] 175.115.53.237 mysqladmin/scripts/setup.php
[02/Feb/2014 06:59:14] 175.115.53.237 pma/scripts/setup.php
[02/Feb/2014 07:04:09] 97.66.248.195 HNAP1/
[02/Feb/2014 15:53:33] 1.245.71.56 manager/html
[02/Feb/2014 21:13:44] 203.113.174.72 phpTest/zologize/axa.php
[03/Feb/2014 00:50:07] 175.115.53.237 w00tw00t.at.blackhats.romanian.anti-sec:)
[03/Feb/2014 00:50:08] 175.115.53.237 phpmyadmin/scripts/setup.php
[03/Feb/2014 00:50:09] 175.115.53.237 phpMyAdmin/scripts/setup.php
[03/Feb/2014 00:50:10] 175.115.53.237 mysqladmin/scripts/setup.php
[03/Feb/2014 00:50:10] 175.115.53.237 pma/scripts/setup.php
[03/Feb/2014 06:42:04] 24.51.148.129 HNAP1/