SELTA/devel
Разработка транслятора
Транслятор в виде прокси-сервера
Планируется реализовать транслятор в виде прокси-сервера протокола TDS,
чтобы обеспечить работу приложений, не использующих ODBC.
Транслятор в виде ODBC-драйвера
Основная проблема создания транслятора - преобразование функций из используемого в MS SQL языка TSQL в язык выбранной базы данных.
Для этого необходимо на уровне ODBC драйвера преобразовывать SQL запросы, корректировать ответы, а также дописать недостающие функции в самой базе (в виде подключаемого модуля).
Запросы для 1С 7.7
Большая часть запросов, посылаемых 1С к серверу, хранится в файле BkEnd.dll, некоторые хранимые процедуры для работы с таблицами базы данных хранятся в файле 1Cv7.DDS (в каталоге программы). Файлы, которые хранятся в каталоге с базой: 1Cv7.MD - файл с метаданными, в нем хранится все то что можно посмотреть в Конфигураторе, 1Cv7.DDS - файл описание метаданных, в этом файле хранится описание таблиц базы данных MS SQL Server, а также хранимые процедуры, 1Cv7.DBA - файл с описанием настроек доступа к MS SQL Server-у, имя сервера, логин и пароль, usrdef\users.usr - файл описания пользователей 1С.
Что понадобится сделать
- Реализация системных хранимых функций, которые есть в MS SQL (выдают системную информацию о базе)
- Системные таблицы: доступ к ним осуществляется из системных функций
- Расширенные хранимые функции MS SQL (поставляются с дистрибутивом в отдельных dll)
- Типы данных (bigint, sql_variant, table и т.д.)
- Реализация операторов языка T-SQL: предварительный транслятор кода, который пользователь посылает на сервер через ODBC (в том числе запросы на создание хранимых функций) + реализация дополнительных функций (которых нет в заменяющей базе) в качестве дополнительных модулей.
- Если с приложением поставляются отдельные dll для MS SQL, в которых хранятся расширенные хранимые функции, то их придётся банально переписывать под заменяющую базу, либо эмулировать API, под который они написаны. В 1С этот механизм не используется.
Основные проблемы скорее всего возникнут с реализацией блокировок.
Транслятор в виде клиентской библиотеки
Транслятор в виде клиентской библиотеки, заменяющей оригинальную, вряд ли будет реализован.