Почему мой коннектор DBI выполняет фиктивный запрос с предикатом "где 0 = 1"? - PullRequest
0 голосов
/ 15 января 2019

У меня есть тестовый код R, который я использую для подключения к экземпляру MonetDB.

Я замечаю, что для каждого соединения, которое я создаю через tbl(conn, "some_table"), я всегда получаю запрос 'primer' форма

SELECT *
FROM "some_table" AS "zzz1"
WHERE (0 = 1)

Так что, если я запускаю код

conn <- dbConnect(MonetDB.R(), host="localhost", dbname="testdb", user="monetdb", password="monetdb")
foo <- tbl(conn, "foo")
foo %>% filter(bar %like%  '%baz%') %>% collect()

Я получаю два запроса в выводе

QQ: 'SELECT *
FROM "foo" AS "zzz1"
WHERE (0 = 1)'
QQ: Query result for query 0 with 0 rows and 34 cols, 0 rows.
QQ: 'SELECT *
FROM "foo")
WHERE ("bar" LIKE '%baz%')'
QQ: Query result for query 1 with 20 rows and 2 cols, 20 rows.

Я не понимаю, откуда этот дополнительный запрос. Насколько я знаю, DBI не должен выполнять никаких пустых запросов по умолчанию.

1 Ответ

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

dplyr автоматически генерирует и запускает этот запрос, чтобы получить столбцы для таблицы. Это необходимо, чтобы выяснить, существует ли, например, bar в filter в таблице.

...