Как проверить, допустим ли запрос MySQL, не выполняя его?

При вызове .map(f) для Map с f, который возвращает (K, V) для некоторых K и V (не обязательно тех же типов K и V оригинала Map), результатом будет Map[K, V]. В противном случае, если f возвращает какой-либо другой (не парный) тип T, результатом будет Iterable[T]. Так что будет Map, если функция вернет пару, и Iterable в противном случае.

В вашем случае функция возвращает List[(Int, Int)], поэтому результатом является Iterable[List[(Int, Int)]], а не Map. .flatten затем превращает это в Iterable[(Int, Int)].

При непосредственном использовании flatMap вы напрямую получите пары (Int, Int), поэтому результатом будет Map[Int, Int], а не Iterable[(Int, Int)]. И поскольку Map не допускают дублирования ключей, Map содержит меньше элементов, чем Iterable.

11
задан Piskvor cc-by-sa 3.0 14 December 2015 в 11:24
поделиться

3 ответа

Не без ведома схемы (например, 'действительно ли x' является таблицей?) и запись синтаксического анализатора SQL. Ваше инструментальное средство формирования запросов MySQL должно смочь сделать такую проверку (intellisense, если Вам нравится), но я знаю из собственного опыта, большинство (свободных) инструментов MySQL плачевно.

'Подготовка' запроса сделала бы то, что Вы хотите, но проверка на этапе выполнения, не проверка времени компиляции - Вы, кажется, ищете время компиляции / офлайновое решение.

8
ответ дан 3 December 2019 в 05:14
поделиться

Вы могли составить временную таблицу для хитрости побочных эффектов запроса:

CREATE TEMPORARY TABLE users SELECT * FROM users;
INSERT INTO users(name) VALUES('UniqueName');
DROP TABLE users;
SELECT * FROM users WHERE name='UniqueName'; -- Should return 0 results
4
ответ дан 3 December 2019 в 05:14
поделиться

В зависимости от Вашего механизма MySQL и настроек, Вы могли запустить транзакцию, попробовать запрос и затем сделать откат. Принимающие грязные чтения выключены, который должен работать.

6
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: