致命:非法使用顶级“-ident”

Fatal: Illegal use of top-level '-ident' at

我有两个布尔列,我想生成查询:WHERE f1 or f2

我尝试在 DBIx::Class 搜索 f1 OR f2。我试过了:

->search([{ -bool => 'f1' }, { -bool => 'f2' }])

但我得到错误:Fatal: Illegal use of top-level '-ident' at

我做错了什么?

DBIx::Class 使用 SQL::Abstract。但是我还是不明白 documentation 如何正确地写 search

我使用PostgreSQL作为数据库

SQLA 版本为“2.000001” DBIx::Class v0.082841

我的建议是使用“文字”。这是非常特定于数据库的,因为 SQL 服务器或 Oracle 不支持此语法。

->where([\["f1"], \["f2"]]);

$ perl -MSQL::Abstract -E '$s=SQL::Abstract->new; ($w, @b) = $s->where([\["f1"], \["f2"]]); say $w'

WHERE ( ( f1 OR f2 ) )

示例来自 ilmari@irc#dbix-class

$ psql myschema

myschema=# create table bools (f1 bool, f2 bool);
CREATE TABLE

$ cat lib/MySchema/Result/Bool.pm
package MySchema::Result::Bool;

use DBIx::Class::Candy (
    -autotable => v1,
);

column f1 => {
    data_type => 'boolean',
};

column f2 => {
    data_type => 'boolean',
};

1;

$ reply -l
0> my $s = MySchema->connect('dbi:Pg:dbname=myschema', undef, undef, { quote_names => 1 }); undef
$res[0] = undef

1> $s->storage->debug(1)
$res[1] = 1

2> $s->resultset('Bool')->search([{ -bool => 'f1' }, { -bool => 'f2' }])
SELECT "me"."f1", "me"."f2" FROM "bools" "me" WHERE ( ( "f1" OR "f2" ) ): 

将 SQL::Abstract 从 2.000001 降级到 1.86 解决了问题

Successfully installed SQL-Abstract-1.86 (downgraded from 2.000001)

DBIx::Class 从 v0.082841 升级到 v0.082842 解决了问题

https://metacpan.org/release/RIBASUSHI/DBIx-Class-0.082842/source/Changes#L28

新版本DBIx::Class不再依赖SQL::Abstract