为什么我的 DBI 连接器使用谓词 "where 0 = 1" 执行虚拟查询?
Why is my DBI connector doing a dummy query with predicate "where 0 = 1"?
我有一些用于连接到 MonetDB 实例的 R 测试代码。
我注意到,对于通过 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 不应执行任何虚拟查询。
dplyr
自动生成并运行此查询以获取 table 的列。例如,需要确定 filter
中的 bar
是否存在于 table 中。
我有一些用于连接到 MonetDB 实例的 R 测试代码。
我注意到,对于通过 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 不应执行任何虚拟查询。
dplyr
自动生成并运行此查询以获取 table 的列。例如,需要确定 filter
中的 bar
是否存在于 table 中。