Итак, вот ситуация.У нас по сути есть новое бизнес-требование, чтобы определенный процесс ничего не записывал на диск.До сих пор он работал на PostgreSQL, но поскольку PostgreSQL не поддерживает базы данных в памяти, мы пытаемся переключиться на БД, которая поддерживает.Лучшая ставка на данный момент - H2.(Одна из причин этого заключается в том, что некоторые из нашей логики требуют рекурсивных запросов, которые, по-видимому, поддерживает H2. Он также в основном поддерживает тот же синтаксис в стиле SQL, и я бы не стал переписывать сотни строк SQL.) Однако ястолкнуться с некоторыми проблемами.У нас было несколько функций, и H2 не поддерживает функции SQL (и я действительно не хочу перекодировать наши функции в Java, если это не намного проще, чем я думал), поэтому я пытаюсь встроить их.Функция использовалась в качестве поля в операторе выбора и возвращала несколько строк, используя generate_series
, в основном выполняя автоматическое JOIN.Обратите внимание, что значения, переданные в generate_series
, получены из значений в рассматриваемой строке.(То есть для каждой строки таблицы T в конечном выводе могут присутствовать 0-N строк, в зависимости от строки в T).
Однако в H2 все немного иначе.Вместо generate_series
, есть system_range
, что A) задокументировано только косвенно (есть дополнительное поле step
, нигде не упомянутое в документации), и B), очевидно, должно использоваться в предложении FROM, а не как SELECTвыражение.Но если он находится в предложении FROM как JOIN, у меня нет доступа к полям других таблиц в JOIN, и я не могу сгенерировать необходимый диапазон.(Обратите внимание, что мы имеем дело с метками времени, поэтому числа, скорее всего, слишком велики, чтобы просто сгенерировать полный возможный диапазон и выбрать из него нужный мне диапазон.)
Итак, как мне сгенерировать динамическое Nстроки из одного ряда в H2?(Или какое альтернативное решение?)