Как запустить SQL Expression Query без базовой базы данных - PullRequest
0 голосов
/ 24 января 2019

У меня есть ситуация, когда пользователь вводит некоторые проверочные данные в формате SQL. Этот SQL-запрос просто использует базовые функции SQL-даты, но не использует столбец базы данных. Пример запроса:

Select UNIX_TIMESTAMP(NOW()) < UNIX_TIMESTAMP(CASE WHEN DAYOFMONTH(NOW()) <= 10
THEN add_MONTHS(DATE_ADD(NOW(), (-1*DAYOFMONTH(NOW()))+1),-1)
ELSE DATE_ADD(NOW(), (-1*DAYOFMONTH(NOW()))+1) END)

Я могу запустить это, когда у меня есть объект подключения, настроенный на какую-то реальную базу данных. Но я не считаю целесообразным использовать базу данных и управлять ею только для этой цели. Есть ли способ, где я могу выполнить эти типы запросов или запросов, таких как выбор даты () из двойного и т. Д. В моем коде.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Честно говоря, если вы собираетесь делать запросы к базе данных SQL ... обычно лучше иметь базу данных для запроса:)

Кроме того, если ваша цель состоит в том, чтобы "протестировать" ваши запросы ... поскольку многие вещи зависят от БД, обычно лучше иметь экземпляр фактической БД, с которой вы хотите проверить.

Сказав это, существует много вариантов использования SQL без базовой базы данных:

  • Вы можете использовать онлайновую «скрипку» для тестирования SQL-запросов, например SQLFiddle.com

  • Для модульных тестов вы должны использовать фиктивный фреймворк. Например, для Java / JUnit я бы использовал Mockito .

  • Если бы я тестировал доступ к данным Spring / Hibernate, я бы использовал легковесную базу данных H2 в памяти.

Есть действительно много, много альтернатив. Все зависит только от вашего конкретного «варианта использования»; что вы на самом деле пытаетесь достичь.

PS:

Я привел несколько примеров Java. Вот статья о насмешливых вызовах данных Microsoft / EF:

https://entityframework.net/how-to-mock-data

0 голосов
/ 24 января 2019

нет, запрос sql должен выполняться к ядру базы данных.

Например, select date () из dual - это запрос оракула;вы не можете запустить его против mssql или mysql.

...