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:
@@ -10,9 +10,10 @@ import (
|
||||
|
||||
_ "github.com/jackc/pgx/v5/stdlib" // драйвер "pgx" для PostgreSQL
|
||||
_ "github.com/microsoft/go-mssqldb" // драйвер "sqlserver" для MSSQL
|
||||
_ "github.com/nakagami/firebirdsql" // драйвер "firebirdsql" для Firebird
|
||||
)
|
||||
|
||||
// Подключение к серверу учётной базы клиента Fancy DEPO — MSSQL или PostgreSQL,
|
||||
// Подключение к серверу учётной базы клиента Fancy DEPO — MSSQL, PostgreSQL или Firebird,
|
||||
// SQL-логин. База выбирается в настройках (DepoDB).
|
||||
|
||||
// validDBName — безопасное имя БД/идентификатора MSSQL (буквы/цифры/_), чтобы
|
||||
@@ -35,6 +36,9 @@ func fancyDriver(s FancyMSSQLSettings) string {
|
||||
if s.IsPostgres() {
|
||||
return "pgx"
|
||||
}
|
||||
if s.IsFirebird() {
|
||||
return "firebirdsql"
|
||||
}
|
||||
return "sqlserver"
|
||||
}
|
||||
|
||||
@@ -49,6 +53,9 @@ func fancyAdminDB(s FancyMSSQLSettings) string {
|
||||
|
||||
// fancyDSN строит строку подключения. db="" → к служебной БД (для CREATE DATABASE).
|
||||
func fancyDSN(s FancyMSSQLSettings, db string) string {
|
||||
if s.IsFirebird() {
|
||||
return fbDSN(s, db)
|
||||
}
|
||||
port := s.DefaultPort()
|
||||
if s.IsPostgres() {
|
||||
ssl := s.Encrypt
|
||||
@@ -95,6 +102,9 @@ func fancyOpen(s FancyMSSQLSettings, db string) (*sql.DB, error) {
|
||||
if s.IsPostgres() && db == "" {
|
||||
db = fancyAdminDB(s)
|
||||
}
|
||||
if s.IsFirebird() && db == "" { // служебной базы у Firebird нет: подключение к серверу — это подключение к базе
|
||||
db = s.DepoDB()
|
||||
}
|
||||
conn, err := fancyOpenGated(s, fancyDSN(s, db)) // после неудачного входа — пауза, чтобы не заблокировать логин
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -121,6 +131,9 @@ func fancyPing(ctx context.Context, s FancyMSSQLSettings, db string) (string, er
|
||||
if s.IsPostgres() {
|
||||
verQuery = "SELECT version()"
|
||||
}
|
||||
if s.IsFirebird() {
|
||||
verQuery = "SELECT 'Firebird ' || RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION') FROM RDB$DATABASE"
|
||||
}
|
||||
_ = conn.QueryRowContext(cctx, verQuery).Scan(&ver)
|
||||
ver = strings.TrimSpace(ver)
|
||||
if i := strings.IndexAny(ver, "\r\n"); i > 0 {
|
||||
|
||||
Reference in New Issue
Block a user