Переход с Диалекта 1 на диалект 3

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
Hadroran
Сообщения: 39
Зарегистрирован: 22 фев 2005, 10:23

Переход с Диалекта 1 на диалект 3

Сообщение Hadroran » 07 фев 2006, 11:43

Уважаемые мастера. Подскажите как осуществить переход базы на сервере FireBird с диалекта 1 на диалект 3, или как в базе с диалектом 1 создать процедуру выводящую дату сервера. Команда current_date не работает (используемый редактор IBExpert).

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 07 фев 2006, 12:28

www.ibase.ru/devinfo/migration.htm

перед тем как задать вопрос лучше ознакомиться с faq и попробовать поиск.

кстати, никаких проблем с выводом даты сервера нет ни в первом ни в третьем диалекте - 'now', 'today'.

Hadroran
Сообщения: 39
Зарегистрирован: 22 фев 2005, 10:23

Сообщение Hadroran » 07 фев 2006, 12:33

Спасибо, бум знать, где искать.

Hadroran
Сообщения: 39
Зарегистрирован: 22 фев 2005, 10:23

Сообщение Hadroran » 01 мар 2006, 17:18

А вот сегодня я сделал такую вещь :twisted: , что непонятно как это дальше будет работать. :shock:
У меня рабочая база на диалекте 1.
В IBExpert в параметрах изменил в выпадающем списке с цифиры 1 на 3. После этого закрыл базу, затем снова открыл и у меня получилась база с диалектом 3. В процедуре вывода времени заработала функция current_date, я сменил "now"
Вопрос. Чем это чревато? База продолжает работать, жалоб поока не поступало. :roll:

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 мар 2006, 17:35

диалект определяется сервером (то есть базой). На клиенте ты его хоть обменяйся в большую сторону, база от этого диалект не сменит. к глюкам может привести только работа клиентом диалекта 1 с базой диалекта 3.

p.s. если тебе интересно, посмотри исходник IBX, IBDatabase, как происходит обработка диалекта при коннекте.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 01 мар 2006, 18:27

kdv писал(а): к глюкам может привести только работа клиентом диалекта 1 с базой диалекта 3.
Наоборот тоже. Как только модификацией метаданных заняться - такие забавные фокусы могут случаццо :lol:

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 мар 2006, 20:04

Наоборот тоже.
ты меня иногда попинываешь, по делу, ну вот и я взаимно отыграюсь :-)

итак, по исходнику IBDatabase.pas

1. при IBDatabase.Create диалект устанавливается в 3.
2. у IBDatabase есть специальное событие, onDialectDowngradeWarning
3. в IBDatabase.DoConnect есть код:

FDBSQLDialect := GetDBSQLDialect;
ValidateClientSQLDialect;

В GetDBSQLDialect диалект читается из базы. То есть, если перед коннектом его установить в 3, а база в 1, то диалект сбросится в 1.
ValidateClientSQLDialect проверяет только на "понижение" диалекта.

НО! ничто не мешает после коннекта установить другой диалект (1 вместо 3 или 3 вместо 1), и получить те самые грабли.
Hadroran писал(а):В IBExpert в параметрах изменил в выпадающем списке с цифиры 1 на 3. После этого закрыл базу, затем снова открыл и у меня получилась база с диалектом 3
IBE вроде работает через FIBPlus, но я сомневаюсь, что там допущен такой просчет. И глядя в исходники FIBPlus, в процитированную сказку о "повышении диалекта" не верю.
при коннекте:
if DBSQLDialect<SQLDialect then FSQLDialect:=DBSQLDialect;
проперть DBSQLDialect при чтении вызывает GetDBSQLDialect.
то есть, если 1 < 3, то диалект клиента = 1.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 мар 2006, 20:10

кроме того, в старых дебатах была установлена почти истина:
диалект для клиента должен быть свойством readonly. Потому что,
- если клиент поддерживает диалекты, то он должен использовать только тот диалект, который идентичен базе.
- если клиент (gds32.dll) не поддерживает диалекты, то есть работает в диалекте 1, то любое изменение диалекта в компонентах все равно ни к чему не приведет.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 01 мар 2006, 21:31

kdv писал(а):
Наоборот тоже.
ты меня иногда попинываешь, по делу, ну вот и я взаимно отыграюсь :-)
Ну, не всё ж коту масленница :lol:
kdv писал(а): итак, по исходнику IBDatabase.pas
<пинки поскипаны>
kdv писал(а): НО! ничто не мешает после коннекта установить другой диалект (1 вместо 3 или 3 вместо 1), и получить те самые грабли.
О. Я правда не пробовал. И не буду ;) Получить в BLR триггеров и процедур несоответствующую версию и изумляться потом во всяких разных местах и с неподдельным волнением приступать к b/r - эт пусть Hadroran так развлекаеццо, я для энтого уже старенький :-D
kdv писал(а): IBE вроде работает через FIBPlus, но я сомневаюсь, что там допущен такой просчет.


Насколько я помню, он таки работал через FIB без Плюс, который о диалектах не имел ни малейшего представления. Или на такой ранней версии Плюсов, что гадать не возьмусь. Они ж с Буззом с некоторых пор не так чтоб совсем в контрах, но прохладненько. Про Devrace в целом я умолчу ;) Правда Хвастунов и сам с усам, так что тут гадать - не перегадать.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 02 мар 2006, 09:09

"Ну вы еще подеритесь, горячие финские парни..."
Hadroran же не сказал в каких именно параметрах он щелкнул комбо-боксом. Если в параметрах базы (из меню "Сервис") то он теперь действительно имеет базу третьего диалекта. Более того, насколько я помню это официальный путь миграции от Борланда. Вот только глюков и на этом пути лежит немеряно... Например, если у него в TIBDatabase жестко прописан первый диалект.

Hadroran
Сообщения: 39
Зарегистрирован: 22 фев 2005, 10:23

Сообщение Hadroran » 02 мар 2006, 09:18

Dimitry Sibiryakov писал(а): Вот только глюков и на этом пути лежит немеряно... Например, если у него в TIBDatabase жестко прописан первый диалект.
Вот здесь пришлось все быренько изменить теперь в TIBDatabase прописан 3 диалект. Пошли вторые сутки работы базы. Полет нормальный. :wink:
(мож клиенты не работают? :shock: )

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 мар 2006, 09:58

все написано в www.ibase.ru/devinfo/migration.htm

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 02 мар 2006, 11:50

В заголовке БД можно прописать хоть 35-ый диалект - стр-ры таблиц и данные в них от этого не изменятся. numeric'и как были double'ами, там ими и останутся

Ответить