跳至主要内容

数据库升级

升级数据库以便当前工具可以使用。

谁可以使用此功能?

CodeQL 可用于以下类型的仓库

本文档中

此内容描述了 CodeQL CLI 的最新版本。有关此版本的更多信息,请参见 https://github.com/github/codeql-cli-binaries/releases

要在较早版本中查看此命令可用的选项详细信息,请在终端中使用 --help 选项运行该命令。

概要

Shell
codeql database upgrade [--threads=<num>] [--ram=<MB>] <options>... -- <database>

描述

升级数据库以便当前工具可以使用。

如有必要,此命令会重写 CodeQL 数据库,使其与 QL 包搜索路径中找到的 QL 库兼容。

如果需要升级,则该升级是不可逆的。随后,将无法使用创建数据库时当前使用的库。

选项

主要选项

<database>

[必填] 要升级的 CodeQL 数据库的路径。

--search-path=<dir>[:<dir>...]

可以找到包含升级方案的 QL 包的目录列表。每个目录可以是 QL 包(或包含根目录中 .codeqlmanifest.json 文件的包捆绑包),也可以是多个此类目录的直接父目录。

如果路径包含目录树,则它们的顺序定义了它们之间的优先级:如果必须解析的包名在多个目录树中匹配,则首先给出的目录树获胜。

指向开源 CodeQL 仓库的检出应该在查询其中一种语言时有效。

(注意:在 Windows 上,路径分隔符为 ;)。

--additional-packs=<dir>[:<dir>...]

[高级] 如果给出此目录列表,则在 --search-path 中的目录之前搜索升级。这些目录之间的顺序无关紧要;如果通过此列表在两个不同位置找到包名,则这是一个错误。

如果您暂时正在开发一个新版本的包(该包也出现在默认路径中),则此功能非常有用。另一方面,_不建议_在配置文件中覆盖此选项;某些内部操作会动态添加此选项,从而覆盖任何已配置的值。

(注意:在 Windows 上,路径分隔符为 ;)。

--target-dbscheme=<file>

我们要升级到的_目标_ dbscheme。如果未给出此选项,则将构建最大升级路径。

--target-sha=<sha>

[高级] --target-dbscheme 的替代方案,提供目标 dbscheme 的内部哈希值而不是 dbscheme 文件。

--[no-]allow-downgrades

如果没有升级,则包含任何相关的降级。

控制升级查询评估的选项

--[no-]tuple-counting

[高级] 显示查询评估器日志中每个评估步骤的元组计数。如果提供了 --evaluator-log 选项,则元组计数将包含在命令生成的基于文本和结构化 JSON 日志中。(这对于复杂 QL 代码的性能优化很有用)。

--timeout=<seconds>

[高级] 以秒为单位设置查询评估的超时长度。

超时功能旨在捕获复杂查询将“永远”评估的情况。它不是限制查询评估可能花费的总时间的有效方法。只要计算的每个单独计时部分都在超时内完成,评估就可以继续进行。当前,这些单独计时的部分是优化查询的“RA 层”,但这在将来可能会发生变化。

如果未指定超时或将其指定为 0,则不会设置超时(codeql test run 除外,其默认超时为 5 分钟)。

-j, --threads=<num>

使用这么多的线程来评估查询。

默认为 1。您可以传入 0 来为机器上的每个核心使用一个线程,或者传入 -N 来保留 N 个核心未使用(但仍然至少使用一个线程)。

--[no-]save-cache

[高级] 积极地将中间结果写入磁盘缓存。这需要更多时间并使用(更多)磁盘空间,但可能会加快后续执行类似查询的速度。

--[no-]expect-discarded-cache

[高级] 基于查询执行后缓存将被丢弃的假设,做出关于评估哪些谓词以及将什么写入磁盘缓存的决策。

--[no-]keep-full-cache

[高级] 评估完成后不清理磁盘缓存。如果您随后要进行codeql 数据集清理codeql 数据库清理,这可以节省时间。

--max-disk-cache=<MB>

设置中间查询结果的磁盘缓存可以使用的最大空间量。

如果未显式配置此大小,评估器将尝试使用基于数据集大小和查询复杂性的“合理”缓存空间量。显式设置高于此默认用量的限制将启用额外的缓存,这可以加快后续查询的速度。

--min-disk-free=<MB>

[高级] 设置文件系统上目标的可用空间量。

如果未给出--max-disk-cache,则如果文件系统的可用空间低于此值,评估器将努力减少磁盘缓存的使用。

--min-disk-free-pct=<pct>

[高级] 设置文件系统上可用空间的目标百分比。

如果未给出--max-disk-cache,则如果文件系统的可用空间低于此百分比,评估器将努力减少磁盘缓存的使用。

--external=<pred>=<file.csv>

包含外部谓词 <pred> 行的 CSV 文件。可以提供多个--external选项。

--xterm-progress=<mode>

[高级] 控制是否使用 xterm 控制序列显示 QL 评估期间的进度跟踪。可能的值为

no:从不显示高级进度;假设是一个哑终端。

auto (默认):自动检测命令是否在合适的终端中运行。

yes:假设终端可以理解 xterm 控制序列。此功能仍然取决于能够自动检测终端的大小,并且如果给出-q,也将被禁用。

25x80(或类似):与yes类似,并且还显式给出终端的大小。

25x80:/dev/pts/17(或类似):在与 stderr 不同的终端上显示高级进度。主要用于内部测试。

控制输出结构化评估器日志的选项

--evaluator-log=<file>

[高级] 将关于评估器性能的结构化日志输出到给定的文件。此日志文件的格式可能会更改,恕不另行通知,但将是一系列由两个换行符(默认为)或一个换行符(如果传递了--evaluator-log-minify选项)分隔的 JSON 对象。请使用codeql generate log-summary <file>生成此文件的更稳定的摘要,并避免直接解析该文件。如果文件已存在,则该文件将被覆盖。

--evaluator-log-minify

[高级] 如果传递了--evaluator-log选项,则传递此选项还会减小生成的 JSON 日志的大小,但代价是使其更难以人为阅读。

控制升级过程 RAM 使用量的选项

-M, --ram=<MB>

查询评估器将努力使其总内存占用低于此值。(但是,对于大型数据库,文件支持的内存映射可能会突破此阈值,如果内存压力过大,可以将其交换到磁盘)。

该值至少应为 2048 MB;较小的值将被透明地向上舍入。

常用选项

-h, --help

显示此帮助文本。

-J=<opt>

[高级] 向运行命令的 JVM 提供选项。

(请注意,包含空格的选项将无法正确处理。)

-v, --verbose

逐步增加打印的进度消息数量。

-q, --quiet

逐步减少打印的进度消息数量。

--verbosity=<level>

[高级] 将详细程度级别显式设置为错误、警告、进度、进度+、进度++、进度+++ 之一。覆盖-v-q

--logdir=<dir>

[高级] 将详细日志写入给定目录中的一个或多个文件中,生成的名称包含时间戳和正在运行的子命令的名称。

(要写入名称完全受您控制的日志文件,请改为使用--log-to-stderr并根据需要重定向 stderr。)

--common-caches=<dir>

[高级] 控制磁盘上缓存数据的存储位置,这些数据将在 CLI 的几次运行之间持续存在,例如下载的 QL 包和已编译的查询计划。如果未显式设置,则默认为用户主目录中名为.codeql的目录;如果该目录不存在,则会创建它。

v2.15.2起可用。