Dmitry Astapov (_adept_) wrote,
Dmitry Astapov
_adept_

Скромное очарование SQLite

СЯУ, что sqlite обладает двумя совершенно очаровательными "фичами":
1)Когда ты бэкапишь базу, "CREATE VIEW" выписываются в порядке, в котором они создавались.

Казалось бы - ну и что? Теперь представим, что у тебя была вот такая база:
create table a (int aa);
create view b as select * from a;
create view c as select * from b;


Затем вью b немного изменили:
begin; drop view b; create view b as select * from a where aa < 10; commit;

(отдельный вопрос, почему это проходит без ругани, но такое поведение более-менее неплохо документировано)

Если теперь сделать ".dump", то сначала будет выписано "CREATE TABLE a", потом - "CREATE VIEW c", потом - "CREATE VIEW b". Естественно, "create view c" обломается, так как "b" еще не существует. Единственное лечение - пересоздать все view в "правильном порядке".

2)Если у тебя есть вью, описание которого оканчивается комментарием, то в бэкап это попадет вот таким образом:
create view commented_view
  as select something
       from some_table -- pretty useless view;
create view another_view as ....


Видите точку с запятой в конце описания commented_view? А вот sqlite ее не видит, так как она ... Правильно, является теперь частью комментария!

Все это выяснилось в процессе поднятия из бэкапа столетней давности некий софт в условиях ... эээ ... жестких временных ограничений. Помнится, thesz давеча писал, что у sqlite на 1 строку кода приходится 100 строк тестов.

(принимая позу Станиславского) "Не верю!"

Если кому надо: раз багрепорт, два багрепорт.
Tags: tech, работа
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 18 comments