Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE / 5 сообщений из 5, страница 1 из 1
17.12.2015, 23:55
    #39131422
Izya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
Я до определенной поры думал, что эта команда, как и другие, идет через парсер, тем более, что в parse.y она обрабатывается с созданием нода AlterDatabaseNode. Долго-долго втыкал в этот нод, не поимая, где, собственно работа.
И тут выяснил, что в isql для нее (и для коннект дб) существует отдельное заднее килирисо со своим маленьким товаровэдсинтаксическим разбором, которое заканчивается практически напрямую вызовом JProvider::createDatabase. И, кажется, fbserver делает тоже самое. Причем этот маленький разбор выполняется аж в fbclient.
Вопросы
1) Это так?
2) fbserevr в конце концов тот же метод JProvider::createDatabase
3) Существующая обработка команды в parse.y с созданием нода AlterDatabaseNode - она зачем?
4) В моем примитивном представлении пакет от клиента к серверу содержал строку команды (+ служебная инфо, типа имя клиенты и тд.). А если синт.разбор на клиенте выполняется, что тогда в пакете? Или fbclient с сервером ваще по другому общаются? Где можно это узнать?
...
Рейтинг: 0 / 0
17.12.2015, 23:59
    #39131423
Izya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
...
2) fbserver в конце концов тот же метод JProvider::createDatabase дергает?
...
...
Рейтинг: 0 / 0
18.12.2015, 00:41
    #39131431
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
Для того, чтобы создать БД, нужно как минимум выделить из запроса имя хоста и имя файла БД.
Т.е. минимальный парсинг на клиенте нужен, без него никак.
Однако парсер не обязан знать дополнительных необязательных параметров, указываемых при создании БД.
Тем более, если на той стороне провода более новый сервер, умеющий новые штуки.

Посему, запрос CREATE DATABASE обрабатывается в две стадии:

1. простой препарсинг выделяет известные ему параметры, заполняет DPB и вызывает isc_create_database (или IProvider::createDatabase в новом АПИ 3-ки). Если этот вызов завершился успешно, то

2. весь запрос снова выполняется в уже созданном коннекте к новой БД - там он обрабатывается (фактически как ALTER DATABASE) движком, который знает и понимает все дополнительные параметры.
Если что-то пойдёт не так, то БД дропается и возвращается ошибка.
...
Рейтинг: 0 / 0
18.12.2015, 01:31
    #39131442
Izya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
т.е фактически БД создается вызовом JProvider::createDatabase? И системные таблица в ней - тоже?
...
Рейтинг: 0 / 0
18.12.2015, 01:41
    #39131445
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE
Izya,

да
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / По сорсу FB3 разрешите сомнения по поводу CREATE DATABASE / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]