|
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
|
|||
---|---|---|---|
#18+
Я до определенной поры думал, что эта команда, как и другие, идет через парсер, тем более, что в parse.y она обрабатывается с созданием нода AlterDatabaseNode. Долго-долго втыкал в этот нод, не поимая, где, собственно работа. И тут выяснил, что в isql для нее (и для коннект дб) существует отдельное заднее килирисо со своим маленьким товаровэдсинтаксическим разбором, которое заканчивается практически напрямую вызовом JProvider::createDatabase. И, кажется, fbserver делает тоже самое. Причем этот маленький разбор выполняется аж в fbclient. Вопросы 1) Это так? 2) fbserevr в конце концов тот же метод JProvider::createDatabase 3) Существующая обработка команды в parse.y с созданием нода AlterDatabaseNode - она зачем? 4) В моем примитивном представлении пакет от клиента к серверу содержал строку команды (+ служебная инфо, типа имя клиенты и тд.). А если синт.разбор на клиенте выполняется, что тогда в пакете? Или fbclient с сервером ваще по другому общаются? Где можно это узнать? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 23:55 |
|
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
|
|||
---|---|---|---|
#18+
... 2) fbserver в конце концов тот же метод JProvider::createDatabase дергает? ... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2015, 23:59 |
|
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
|
|||
---|---|---|---|
#18+
Для того, чтобы создать БД, нужно как минимум выделить из запроса имя хоста и имя файла БД. Т.е. минимальный парсинг на клиенте нужен, без него никак. Однако парсер не обязан знать дополнительных необязательных параметров, указываемых при создании БД. Тем более, если на той стороне провода более новый сервер, умеющий новые штуки. Посему, запрос CREATE DATABASE обрабатывается в две стадии: 1. простой препарсинг выделяет известные ему параметры, заполняет DPB и вызывает isc_create_database (или IProvider::createDatabase в новом АПИ 3-ки). Если этот вызов завершился успешно, то 2. весь запрос снова выполняется в уже созданном коннекте к новой БД - там он обрабатывается (фактически как ALTER DATABASE) движком, который знает и понимает все дополнительные параметры. Если что-то пойдёт не так, то БД дропается и возвращается ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2015, 00:41 |
|
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
|
|||
---|---|---|---|
#18+
т.е фактически БД создается вызовом JProvider::createDatabase? И системные таблица в ней - тоже? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2015, 01:31 |
|
|
start [/forum/topic.php?fid=40&msg=39131422&tid=1562447]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 140ms |
0 / 0 |