FOR EACH loan WHERE /* Condition1 */ loan.date = SomeDate
AND /* Condition2 */ loan.type = SomeType
AND /* Condition3 */ (IF SpecMode THEN TRUE ELSE loan.spec = SomeSpec)
当 SpecMode = TRUE 时,Condition3 = TRUE。所以我想知道当 SpecMode = TRUE 时,上面的代码和下面的代码是否会完全相同(包括速度)?
FOR EACH loan WHERE Condition1
AND Condition2
AND TRUE
或者甚至像这样?
FOR EACH loan WHERE Condition1
AND Condition2
一般而言,问题是 Progress 如何管理可以评估的条件,而不管数据库记录如何。需要更多时间吗?还可以提供有关 Progress 如何在更深入的视图中工作的链接,我们将不胜感激。
添加 08/16/13:我最初使用的代码是:
IF SpecMode THEN
FOR EACH loan WHERE Condition1 AND Condition2:
RUN Proc.
ELSE
FOR EACH loan WHERE Condition1 AND Condition2 AND Condition3:
RUN Proc.
动态查询是我想到的第一个想法,但我意识到这意味着用动态查询样式重写所有嵌套代码(这是 imo 的可读性更差,我将其移至单独的问题)。我想采用现代方法,所以如果它是最合理的解决方案,我会这样做。
第三种方法可以使代码保持“静态样式”。它使用带参数的包含文件。但这意味着.i
已经庞大的代码库中的另一个文件。而且我通常讨厌这种方法(以及使用包含代码的预处理器常量“作弊”)。我们的系统又大又旧,到处都是这种东西,很难分析,基本上看起来就是不对的。