DEPO на Firebird в мастере: подготовка базы одним действием, как для MSSQL
Мастер, шаг «Учёт DEPO», и «Обмен с DEPO» в настройках: СУБД «Firebird» (Fancy на Firebird 2.5). - Подключение: драйвер nakagami/firebirdsql, путь к файлу базы или псевдоним, WIN1251. Запросы bj к DEPO (T-SQL) подключение переводит само (fancyfb.go): механически (dbo., TOP, ISNULL, GETDATE, LEN, N, exec) вне строк и комментариев, точные тексты — fsql/fb.go (каталоги, LIKE [_], COUNT(*) OVER, SELECT без FROM, PATINDEX); @имена — позиционные ?, GUID — в верхнем регистре. Системные запросы из кода — в fsql/depocatalog.go. - «Подготовить» логином SYSDBA (depo_setup_fb.go): проверка базы и UDF Fancy, логин SYSDBA_BJ (Fancy даёт права на документы логинам SYSDBA%; для Firebird — обычный пользователь), оператор-робот Fancy, кодировщик M2M, привязки FTV_M2M_SETTINGS по признакам Fancy, таблицы, процедуры, права; обработку запускает bj. «Получить скрипт» — то же для isql в WIN1251; письмо администратору, установка процедур, плашка обновления. - Скрипты Firebird встроены (depoprocs/firebird, тест сверяет с deploy/); количества — DOUBLE PRECISION: из диалекта 3 в базу диалекта 1 процедуру с NUMERIC(18,7) не создать. - Проверено на копии базы Fancy (отдельный экземпляр bj): мастер с нуля — все проверки, BJ_PING; тестовый режим DEPO — К1 Бубликов, зачисление и списание до исполнения без ошибок; очередь, справочник НРД. Тест FBLive готовит на базе все запросы bj к DEPO: 94 из 101, оставшиеся 7 — ЛК и ручной ввод (следующий этап). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -126,6 +126,10 @@ var depoSchemaFixes = []struct{ Name, SQL string }{
|
||||
// depoProcsHash — отпечаток набора процедур, который bj установит (с учётом правки под клиента).
|
||||
func depoProcsHash(f FancyMSSQLSettings) string {
|
||||
h := sha256.New()
|
||||
if f.IsFirebird() { // таблицы, привязки, процедуры и права Firebird (depo_setup_fb.go)
|
||||
h.Write(depoFBHash())
|
||||
return hex.EncodeToString(h.Sum(nil))[:16]
|
||||
}
|
||||
for _, fx := range depoSchemaFixes {
|
||||
h.Write([]byte(fx.Name + "\n" + fx.SQL + "\n"))
|
||||
}
|
||||
@@ -154,6 +158,9 @@ func depoProcList() []struct{ Name, File string } { return depoProcInstallOrder
|
||||
|
||||
// depoProcsCombined — единый скрипт установки (для скачивания администратору): USE, процедуры, GRANT.
|
||||
func depoProcsCombined(f FancyMSSQLSettings) string {
|
||||
if f.IsFirebird() {
|
||||
return depoSetupScriptFB(f, f.DepoDB(), depoSetupLogin(f), "")
|
||||
}
|
||||
return depoProcsScriptFor(f, f.DepoDB(), depoSetupLogin(f))
|
||||
}
|
||||
|
||||
@@ -233,7 +240,10 @@ func quoteIdent(s string) string { return "[" + strings.ReplaceAll(s, "]", "]]")
|
||||
// для экрана, признак «можно применять» и ошибку подключения/проверки.
|
||||
func depoProcsPreflight(ctx context.Context, f FancyMSSQLSettings, adminUser, adminPass string) (report string, canApply bool, err error) {
|
||||
if f.IsPostgres() {
|
||||
return "", false, fmt.Errorf("установка процедур bj2depo поддержана только для MSSQL")
|
||||
return "", false, fmt.Errorf("установка процедур bj2depo поддержана только для MSSQL и Firebird")
|
||||
}
|
||||
if f.IsFirebird() {
|
||||
return depoProcsPreflightFB(ctx, f, adminUser, adminPass)
|
||||
}
|
||||
conn := f
|
||||
admin := strings.TrimSpace(adminUser)
|
||||
@@ -314,6 +324,9 @@ func depoProcErrHint(msg string) string {
|
||||
// depoProcsInstall — установить процедуры логином администратора. Сначала preflight; при отсутствии
|
||||
// прав — отказ без изменений. Возвращает итоговое сообщение.
|
||||
func depoProcsInstall(ctx context.Context, f FancyMSSQLSettings, adminUser, adminPass string) (string, error) {
|
||||
if f.IsFirebird() {
|
||||
return depoProcsInstallFB(ctx, f, adminUser, adminPass)
|
||||
}
|
||||
report, canApply, err := depoProcsPreflight(ctx, f, adminUser, adminPass)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -401,6 +414,12 @@ func (h *setupHandlers) installFancyDepoProcs(w http.ResponseWriter, r *http.Req
|
||||
// fancyDepoProcsScript — GET /admin/setup/fancy/depo-procs/script.sql: единый скрипт для администратора.
|
||||
func (h *setupHandlers) fancyDepoProcsScript(w http.ResponseWriter, r *http.Request) {
|
||||
s := h.rc.Snapshot().Fancy
|
||||
if s.IsFirebird() { // isql -ch WIN1251
|
||||
w.Header().Set("Content-Type", "application/sql; charset=windows-1251")
|
||||
w.Header().Set("Content-Disposition", `attachment; filename="bj-depo-procs-firebird.sql"`)
|
||||
_, _ = w.Write(win1251(depoProcsCombined(s)))
|
||||
return
|
||||
}
|
||||
w.Header().Set("Content-Type", "application/sql; charset=utf-8")
|
||||
w.Header().Set("Content-Disposition", `attachment; filename="bj-depo-procs-mssql.sql"`)
|
||||
// UTF-8 BOM (0xEF 0xBB 0xBF): SSMS без него читает кириллицу в комментариях как ANSI.
|
||||
|
||||
Reference in New Issue
Block a user