|
слежка за метаданными
|
|||
---|---|---|---|
#18+
Здравствуйте, я к вам за советом. положим, есть БД и пара подключений к ней из клиентского приложения (моего) - скажем, одно подключение держится (ну или периодически создаётся) браузером структуры БД, а второе - редактором SQL-запросов. Допустим, в редакторе выполнили и закоммитили DDL-запрос. Как теперь первое соединение (браузер) может узнать как именно изменена схема? Т.е. не только узнать о факте изменения, но и о том, какой именно объект и как был изменён. От того, что сам надумал, не в восторге: * понятно, что если распарсить вручную текст запроса, поискать там CREATE TABLE и проч., то можно всё понять и оповестить через sendMessage. Буду пока считать этот вариант не подходящим, ибо лень писать парсер, хочется более лёгких путей. * вариант "PRAGMA schema_version" + "перечитать всю схему заново" считаю ещё более не подходящим - накладно по времени, и не изящно. Фу! * Можно ли CREATE TRIGGER ON sqlite_master? Если да, то можно создать триггер, который будет дёргать виртуальную таблицу, а её реализация оповестит браузер. Это решение так себе, т.к. появляется лишний триггер, который надо создавать при коннекте, прятать от браузера, уничтожать при дисконнекте. Зато навигация в изменённое место просто сказочная. Для определённости - SQLite 3.8-с-чем-то - самый распоследний, а подключаюсь с помощью C API. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2015, 22:59 |
|
слежка за метаданными
|
|||
---|---|---|---|
#18+
MrCatположим, есть БД и пара подключений к ней из клиентского приложения (моего) - скажем, одно подключение держится (ну или периодически создаётся) браузером структуры БД, а второе - редактором SQL-запросов. Допустим, в редакторе выполнили и закоммитили DDL-запрос. Как теперь первое соединение (браузер) может узнать как именно изменена схема? Т.е. не только узнать о факте изменения, но и о том, какой именно объект и как был изменён. ЗАЧЕМ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2015, 23:26 |
|
слежка за метаданными
|
|||
---|---|---|---|
#18+
Зачем что именно? Два соединения? Можно и одним обойтись. Зачем отслеживать изменение структуры? Хочу написать редактор БД, который будет автоматом обновлять браузер объектов по DDL в редакторе скрипта. Ну представьте, написал в редакторе "CREATE TABLE тра-та-та", нажал Enter, и в соседнем TreeView сразу же табличка нарисовалась. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2015, 00:56 |
|
слежка за метаданными
|
|||
---|---|---|---|
#18+
MrCatЗачем отслеживать изменение структуры? Хочу написать редактор БД, который будет автоматом обновлять браузер объектов по DDL в редакторе скрипта. Ну представьте, написал в редакторе "CREATE TABLE тра-та-та", нажал Enter, и в соседнем TreeView сразу же табличка нарисовалась.Все среды редактирования СУБД используют один из трех подходов: кнопка обновить на списках объектов БД, парсер запускаемого скрипта, встраивание себя в движок СУБД и организация колбеков на обновление структуры. Чаще всего используется именно парсер запускаемых скриптов. Это очень простая штука на самом деле. И прежде чем заниматься написанием нового редактора подумай: - Чем тебя не устраивают существующие? - Почему существующие редакторы настолько мало используются? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2015, 01:17 |
|
слежка за метаданными
|
|||
---|---|---|---|
#18+
Не то, чтобы они меня не устраивали, мне просто нужно быстро въехать в SQLite, вот и практикуюсь - пересматриваю API, пишу свою надстройку, вместо того, чтобы взять готовые компоненты, пишу свой редактор, чтобы было где всё это тестировать. Из трёх методов парсер выглядит самым приличным, буду его мучать. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2015, 02:13 |
|
|
start [/forum/topic.php?fid=54&fpage=10&tid=2008698]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 122ms |
0 / 0 |