首页 > 其他分享 >CodeQL练习1

CodeQL练习1

时间:2023-01-15 21:22:05浏览次数:60  
标签:SmallInt 10 CodeQL int 练习 查询 where select

CodeQL官方准备了一些无关编程语言的QL语言练习,我这里整理稍许来记录学习一下。

QL是一种逻辑编程语言,所以它是由逻辑公式构成的。QL使用常见的逻辑连接词(如and、or、not)、量词(如forall和exists),以及其他重要的逻辑概念,如谓词。QL还支持递归和聚合。这使得你可以使用简单的QL语法编写复杂的递归查询,并直接使用计数、总和和平均数等聚合体。

以下是Introdution to QL 中的练习

简单的查询

下面是一个基本查询的例子。

select "hello world"

这个查询返回字符串 "hello world"。更复杂的查询通常看起来像这样。

from /* ... variable declarations ... */
where /* ... 逻辑公式 ... */
select /*...表达式... */

例如,这个查询的结果是数字42。

from int x, int y
where x=6 and y=7
select x * y

注意,int指定xy的类型是 "integer"。这意味着xy被限制为整数值。其他一些常见的类型有:boolean(truefalse),datefloat,和string

简单的练习

  • 字符串:写一个查询,返回字符串 "lgtm" 的长度。(提示:这里是可以应用于字符串的函数列表。)
from string s
where s = "lgtm"
select s.length()
  • 数字:写一个查询,返回 3^5(3 提高到 5 的幂)和 245.6 的最小值的正弦。
from float x, float y
where x = 3.pow(5) and y = 245.6
select x.minimum(y).sin()
  • 布尔运算:写一个查询,返回布尔值 false 的相反值。
from boolean b
where b = false
select b.booleanNot()
  • 日期:写一个查询,计算 2017 年 6 月 10 日至 9 月 28 日之间的天数。
from date start, date end
where start = "10/06/2017".toDate() and end = "28/09/2017".toDate()
select start.daysTo(end)

多结果的查询练习

以上练习都显示了正好有一个结果的查询,但许多查询都有多个结果。例如,下面的查询计算了1到10之间的所有毕达哥拉斯式三段论

from int x,int y,int z
where x in [1..10] and y in [1..10] and z in [1..10] 
    and x*x + y*y = z*z
select x,y,z

如果了解谓词的话,还可以按照谓词的形式来编写。SmallInt暂时可以理解为面向对象语言中的类,square可以理解为类中的方法。SmallInt类的实例用于表示整数1到10,square()谓词表示某个整数的平方。使用这样的写法可以减少重复代码的使用

class SmallInt extends int{
    SmallInt() {this in [1..10]}
    int square() {result = this*this}
}

from SmallInt x,SmallInt y,SmallInt z
where x.square() + y.square() = z.square()
select x,y,z

CodeQL查询实例

前面的例子使用了QL内置的原始类型。虽然我们选择了一个项目进行查询,但我们并没有使用该项目数据库中的信息。下面的例子查询确实使用了这些数据库,让你了解如何使用CodeQL来分析项目。使用java来举例

import java

from Parameter p
where not exists(p.getAnAccess())
select p

from子句定义了一个代表Java参数的变量pwhere子句通过将参数p限制在那些未被访问的参数中来找到未使用的参数。最后,select子句列出了这些参数。 其实不太懂什么意思....

标签:SmallInt,10,CodeQL,int,练习,查询,where,select
From: https://www.cnblogs.com/BUTLER/p/17054166.html

相关文章

  • JDBC练习
    JDBC练习:练习:完成商品品牌数据的增删改查操作​ 查询:查询所有数据​ 添加:添加品牌​ 修改:根据id修改​ 删除:根据id删除1、查询所有数据:准备环境:​ 数......
  • 2023寒假 图论练习
    k.KillerSajin'sMatrixhttps://ac.nowcoder.com/acm/contest/38727/K题意构造一个n*m的01矩阵使得1的个数正好是k,每行每列的和为奇数思路我们可以把这个问题转化成......
  • jQuery练习3轮播图(平滑翻页)
    视频没写动画效果的时候平滑的翻页......
  • Python django 在线练习考试系统
    Pythondjango在线练习考试系统Pythondjango考试系统Pythondjango试卷系统前端:html css js后端:Python django数据库:MySQL功能涉及:登录,注册,登出,添加试卷,添......
  • jQuery(练习2添加删除表格记录,含原生对照)
    视频原生<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><html><head> <metahttp-equiv="Content-Type"content="te......
  • angular的DEMO(用来练习和顺便看看)
    inflector(辅助) 将用户输入的字符串转化成驼峰或者空格或者底线的小插件;这个是一个小的过滤器,平常也是用不到的,合格是过滤器的代码:app.filter("inflector",......
  • RHEL9练习部署pig4cloud
    手动安装便于学习理解本文记录安装过程和遇到问题,仅供复习和参考,有问题欢迎指正一、环境说明pig4cloud3.6的环境要求工具版本下载备注pig4cloud3.6https......
  • 莫反的一些练习题(2)
    7.P2231[HNOI2002]跳蚤原题链接题目大意求\(\suma_i\cdotx_i=1\)\((1\leN\leM\le10^8,M^N\le10^{16})\)解的个数分析一道比较有意思的题根据裴蜀定理,\(\s......
  • 寒假练习记录
    \(1.1\)P3067,SP11469,CF525EMeet-in-Middle.P2901\(\text{A}^*\)求解k短路。P3052ID-DFS.P1278记忆化搜索。P4168经典的分块在线求区间众数。\(1.2\)P1074......
  • 莫反的一些练习题(1)
    1.树林里的树.TreesinaWood原题链接题目大意求\(\frac{\sum_{i=-a}^{a}\sum_{j=-b}^{b}\lbrack\lvertgcd(i,j)\rvert=1\rbrack}{(2a+1)(2b+1)-1}(a\le2000,b\le2......