致命:非法使用顶级“-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
我有两个布尔列,我想生成查询: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