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的下一版本中纳入这一点