ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QL语言参考-2查询

2022-04-25 16:00:05  阅读:198  来源: 互联网

标签:... product 参考 int 查询 谓词 QL select


查询(Queries)

官方文档

https://codeql.github.com/docs/ql-language-reference/queries/

查询是 QL 程序的输出,它们计算成组的结果。

有两种查询方式:

  • 使用select字句进行查询。如果存在select模块,在该模块中定义。
  • 使用query谓词进行查询。该模块的谓词命名空间中的任何查询谓词。也就是说,它们可以在模块本身中定义,或者从不同的模块中导入。

Select 字句

在编写查询模块时,可以包含以下格式的 select 子句(通常位于文件的末尾) :

from /* ... variable declarations ... */
where /* ... logical formula ... */
select /* ... expressions ... */

fromwhere 部分是可选的。

除了“表达式”中描述的表达式之外,还可以包括:

  • as 关键字,后跟名称。这为结果列提供了一个“标签”,并允许您在后续的选择表达式中使用它们。
  • order by关键字,后面跟着结果列的名称,还可以选择关键字 asc 或 desc。这决定了显示结果的顺序。

例如:

from int x, int y
where x = 3 and y in [0 .. 2]
select x, y, x * y as product, "product: " + product 

select 语句输出的结果

x y product
3 0 0 product: 0
3 1 3 product: 3
3 2 6 product: 6

还可以在 select 子句的末尾添加order by y desc 实现排序。现在根据 y 列中的值按降序排列结果:

from int x, int y
where x = 3 and y in [0 .. 2]
select x, y, x * y as product, "product: " + product order by y desc
x y product
3 2 6 product: 6
3 1 3 product: 3
3 0 0 product: 0

Query 谓词

查询谓词是带有查询注释非成员谓词。它返回谓词计算得到的所有元组。

query int getProduct(int x, int y) {
  x = 3 and
  y in [0 .. 2] and
  result = x * y 
}
序号 x y result
1 3 1 3
2 3 0 0
3 3 2 6

编写Query查询谓词而不是Select选择子句的一个好处是,您也可以在代码的其他部分调用谓词。例如,你可以在类的主体中调用 getProduct:

class MultipleOfThree extends int {
  MultipleOfThree() { this = getProduct(_, _) }
}

相比之下,select 子句就像一个匿名谓词,因此您不能在以后调用它。

在调试代码时向谓词添加查询注释也很有帮助。这样,就可以显式地看到谓词计算得到的元组集。

标签:...,product,参考,int,查询,谓词,QL,select
来源: https://www.cnblogs.com/macter/p/16190598.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有