Rose:查询语句中的 :D B 掩码



我正在寻求有关我的Rose::D B问题的帮助,如下所述。

我有一个帐户对象,它有一个整数"帐户类型"字段。在此示例中,我将使用以下帐户类型常量:

ACCOUNT_TYPE_SPECIAL_MASK   = 0x10;
ACCOUNT_TYPE_SPECIAL_1      = 0x10;
ACCOUNT_TYPE_SPECIAL_2      = 0x11;
ACCOUNT_TYPE_NORMAL_MASK    = 0x20;
ACCOUNT_TYPE_NORMAL_1       = 0x20;
ACCOUNT_TYPE_NORMAL_2       = 0x21;

目前,当我想要给定类型的帐户时,我会将它们全部列出并执行以下操作:

my $iter    = Test::Account::Manager->get_accounts_iterator(
db              => $db,
query           =>
[
'accounttype'   => [ ACCOUNT_TYPE_SPECIAL_1, ACCOUNT_TYPE_SPECIAL_2 ],
]
);

但是,我希望能够使用适当的掩码查询帐户,而不是指定所有可能的类型。

我希望能够说:

my $iter    = Test::Account::Manager->get_accounts_iterator(
db              => $db,
query           =>
[
'accounttype'   => 'accounttype & ACCOUNT_TYPE_SPECIAL_MASK'
]
);

但是,我还没有找到任何方法可以做到这一点。任何帮助或建议非常欢迎。

谢谢!

假设您的 SQL 服务器了解以下内容:

(accounttype & 16) <> 0

然后,这将建议您可以使用以下内容:

[ '(accounttype & ?) <> 0' => ACCOUNT_TYPE_SPECIAL_MASK ]

在这种情况下,您可以内联常量。

sprintf('(accounttype & %d) <> 0', ACCOUNT_TYPE_SPECIAL_MASK)

我不知道这两个版本是否会导致不同的 SQL,如果这样,我不知道哪个更快。

相关内容

  • 没有找到相关文章

最新更新