Я получаю странное поведение при использовании H2 SQL-запросов. Используя Java8, spring-jdbc: 4.3.13, h2: 1.4.199, в Ubuntu Linux.
Обновление: подтвердили, что это ошибка, проверьте ответ
У меня есть таблица PERSON, подобная этой:
id | name
1 | "John"
2 | "Jane"
3 | "Frank"
Когда я запускаю это подготовленное утверждение:
-- (Note ordering is descending.)
SELECT * FROM person ORDER BY id DESC LIMIT ? OFFSET ?
- ОК, используя: (
Integer.MAX_VALUE, 0
), я получаю все 3 строки: [(3, Frank), (2, Jane), (1, John)]
- ОК, используя: (
20, 2
), я получаю строку (1, John)
.
- ОК, используя: (
Integer.MAX_VALUE - 2, 2
), я получаю (1, John)
- НЕ в порядке, используя: (
Integer.MAX_VALUE - 1, 2
), я получаю (3, Frank)
Таким образом, смещение работает нормально, если я не использую очень большое число для предела, и в этом случае я понятия не имею, что происходит.
То же самое, если я попробую другие варианты, такие как "LIMIT?,?" (и переключение значений).
Так это ошибка или известное ограничение H2 / JDBC?
То же самое происходит, когда я жестко кодирую значения:
SELECT * FROM person ORDER BY id DESC LIMIT 2147483646 OFFSET 2
Java-код немного задействован с использованием spring-jdbc и rowmappers, поэтому я не могу легко вставить его сюда.