Яков Сироткин (yakov_sirotkin) wrote,
Яков Сироткин
yakov_sirotkin

Поддержка SQL Server в Exposed

Недавно я писал про свой коммит в Open Source, а вчера вышла новая версия Exposed — библиотеки для работы с SQL для Kotlin, для которой я занимался поддержкой SQL Server. Раньше тестирование с использованием Docker требовалось только для Oracle и его поддержка стояла несколько особняком, но с SQL Server без Docker делать нечего, поэтому интеграцию Docker в инфраструктуру проекта пришлось существенно доработать.

Добавление нового диалекта в базовой версии сводится к тому, чтобы починить для него все тесты, благо тестов в Exposed достаточно. Конечно, с SQL Server обнаружились свои специфические проблемы. Например, в поле типа DATETIME можно хранить миллисекунды, но только с точностью до 2 миллисекунд, то есть сохраняешь одно значение, в вернуться потом может немного другое. Решается проблема использованием DATETIME2.

Самая большая проблема возникла с поддержкой batch insert. Дело в том, что Exposed возвращает ID добавленных записей, а SQL Server, при попытке их получить, сразу бросает исключение. Можно вставлять записи по одной, но тогда не будет никого прироста производительности, который ожидается от batch insert. Поэтому у Exposed внутри batch insert для SQL Server реализован как INSERT INTO tableName (column1, column2) OUTPUT inserted.id VALUES (?,?), (?,?), ...

Нужно сказать, что все содержательные технические решения сделал Tapac, за что ему большое человеческое спасибо. Моя роль свелась к созданию изначального pull request и выявлению имеющихся проблем, но вроде как этого достаточно, чтобы считаться соавтором.
Tags: kotlin
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments