monetdb\u check\u subquery()太严格
此函数继承自当前稳定版本的monetdb\u check\u subquery()太严格,r,monetdb,R,Monetdb,此函数继承自当前稳定版本的dplyr,但我推测它已迁移到MonetDB.R 它在字符串“limit”和“offset”出现时失败,在我的例子中,它们恰好是列名,但也可能是值。也许一个警告更合适?很抱歉,我对正则表达式不太了解,无法提出更精确的建议 > getAnywhere("monetdb_check_subquery")[2] function (sql) { if (grepl("ORDER BY|LIMIT|OFFSET", as.character(sql), igno
dplyr
,但我推测它已迁移到MonetDB.R
它在字符串“limit”和“offset”出现时失败,在我的例子中,它们恰好是列名,但也可能是值。也许一个警告更合适?很抱歉,我对正则表达式不太了解,无法提出更精确的建议
> getAnywhere("monetdb_check_subquery")[2]
function (sql)
{
if (grepl("ORDER BY|LIMIT|OFFSET", as.character(sql), ignore.case = TRUE)) {
stop(sql, " contains ORDER BY, LIMIT or OFFSET keywords, which are not supported.")
}
}
感谢您提供了一个非常方便的软件包。如果您的列名与“LIMIT”或“OFFSET”完全匹配,则正则表达式解决方案很可能会失败。您可能需要一个适当的SQL解析器,它的实现要复杂得多。实际上,在这种情况下,最好的办法可能是重写函数。你是直接调用它,还是触发错误的代码是什么?我同意你关于regex的看法。为了暂时避免这个问题,我已经更改了列名
monetdb\u check\u subquery()
是一个非导出函数,由对tbl(my\u db,sql('SELECT…')的初始调用触发
@MrFlick,这正是问题所在……但由于ORDER BY或LIMIT只能在查询结束时出现,因此这可能是一种可能性。我们将尝试在MonetDB.R的下一版本中纳入这一点