Задача которая меня вымотала
Дисклеймер: Писал с телефона в состоянии индифферентности к форматированию
На работе меня передали в аренду в другую команду для реализации интеграции со сторонней системой.
Задача по интеграции заключалась в том, чтобы забрать данные из двух табличек сторонней базы данных в наши таблицы, а потом, на основании полученных данных, формировать записи в третьей таблице.
Первый камень о который я споткнулся называется Microsoft SQL Server. Это именно та база из которой нужно было забирать данные.
А второй камень - это r2dbc. У нас на проекте стоит Kotlin и WebFlux, реактивный стек. А r2dbc - это реактивный драйвер для баз данных.
Ну так вот, нужно мне фильтрануть данные в исходной табличке по дате.
В базе стоит тип smalldatetime. В документации майкрософта написано, что для Java smalldatetime парсится в java.sql.Timestamp.
Но r2dbc не поддерживает java.sql.Timestamp, он поддерживает LocalDateTime. Но при передачи значения фильтра в виде LocalDateTime ругается уже MS SQL.
Ну не хотят дружить, со всеми бывает. Решил передать значение фильтра по дате тупо как строку и распарсить в самом запросе.
Что-то типа такого:
‘’’
Select *
From table
Where date > CAST(‘2024-07-14 10:00:00’ as smalldatetime)
‘’’
И вроде заработало… А вроде и нет. Часть дат парсится нормально, а часть падает с ошибкой.
С помощью метода тыка, танцев с бубном и заветов Ванги возникла одна безумная теория.
А что если все даты отображаются в базе в формате YYYY-MM-DD, но парсить их надо в формате YYYY-DD-MM?
Безумие, скажете вы. Продукты майкрософт отвечу я. Да действительно. Оказалось нужно передавать сначала день, потом месяц. Но при отображении в бд все отображается по человески.
Тут мои мозги закончились вместе с желанием разбираться дальше почему люди не любят пилить интеграции, но впереди меня ждало еще много интересных, но очень не вкусных открытий.
Ставь 🔥, если интересно почитать через что я прошел, чтобы запилить MR на 2.7К строк, и расскажу почему я не люблю r2dbc и как я в очередной раз убедился что от соприкосновения со всем, где в названии есть слово Microsoft все таки укачивает.
Post #255
356

- 🔥 27
- ❤ 2
- 👍 1
- 😁 1