Skip to main content

Enterprise Server 3.15 в настоящее время доступен в качестве кандидата на выпуск.

компиляция запросов

Скомпилируйте или проверьте код QL.

Кто может использовать эту функцию?

CodeQL доступен для следующих типов репозитория:

Это содержимое описывает последний выпуск данных CodeQL CLI. Дополнительные сведения об этом выпуске см. в статье https://github.com/github/codeql-cli-binaries/releases.

Чтобы просмотреть сведения о параметрах, доступных для этой команды в предыдущем выпуске, выполните команду с --help параметром в терминале.

Краткие сведения

Shell
codeql query compile [--check-only] [--keep-going] [--threads=<num>] [--ram=<MB>] <options>... -- <file>...

Description

Скомпилируйте или проверьте код QL.

Скомпилируйте один или несколько запросов. Обычно основной результат этой команды заключается в том, что скомпилированная версия запроса записывается в кэш компиляции, где он будет найден при последующем выполнении запроса. Другие выходные параметры в основном предназначены для отладки.

Параметры

Основные параметры

<file>...

[Обязательный] Запросы для компиляции. Каждый аргумент является одним из следующих:

  • QL-файл для компиляции.
  • Каталог, в котором выполняется рекурсивный поиск по файлам QL.
  • QLS-файл, определяющий определенный набор запросов.
  • Базовое имя файла QLS, экспортированного одним из установленных пакетов QL.

-n, --check-only

Просто убедитесь, что QL является допустимым и печатает все ошибки; не оптимизируйте и не храните план запроса. Это может быть гораздо быстрее, чем полная компиляция.

--[no-]precompile

[Дополнительно] Сохраните каждый скомпилированный запрос в виде двоичного .qlx файла рядом с .ql источником.

Это должно использоваться только при подготовке пакета запросов для распространения (в этом случае он используется автоматически при публикации пакета codeql). После создания файлов последующие .qlx команды, выполняющие запросы, могут игнорировать изменения в источнике QL в пользу предварительной версии.

Некоторые редко используемые параметры компиляции несовместимы с этим и приводят к ошибке во время выполнения.

Доступно с момента v2.12.0.

--[no-]dump-dil

[Дополнительно] Печать оптимизированного промежуточного представления DIL до стандартного выходных данных во время компиляции.

При выборе выходных данных JSON DIL будет представлен в виде массива однострочных строк, при этом некоторые оболочки определяют, какой запрос компилируется.

-k, --[no-]keep-going

Продолжайте работать с компиляцией, даже если обнаружена ошибка.

--[no-]dump-ra

[Дополнительно] Печать оптимизированного плана запросов RA в стандартные выходные данные при компиляции.

При выборе выходных данных JSON ra будет представлен в виде массива строк с одной строкой, при этом некоторые оболочки определяют, какой запрос компилируется.

--format=<fmt>

Выберите выходной формат либо (по умолчанию),_ либо text _json.

-j, --threads=<num>

Используйте это множество потоков для компиляции запросов.

По умолчанию равен 1. Вы можете передать 0 для использования одного потока на ядро на компьютере или -N, чтобы оставить неиспользуемые ядра N (за исключением того, что по-прежнему используется хотя бы один поток).

-M, --ram=<MB>

Задайте общий объем ОЗУ, который компилятор должен использовать.

Вариант QL и параметры управления компилятором

--warnings=<mode>

Обработка предупреждений компилятора QL. Одно из двух значений:

hide: подавление предупреждений.

show(по умолчанию): вывод предупреждений, но продолжение компиляции.

error: обрабатывает предупреждения как ошибки.

--no-debug-info

Не указывайте сведения о расположении источника в RA для отладки.

--[no-]fast-compilation

[Нерекомендуемые] [Дополнительно] Опустить особенно медленные шаги оптимизации.

--no-release-compatibility

[Дополнительно] Используйте новейшие функции компилятора по стоимости переносимости.

Время от времени новые функции языка QL и оптимизации оценщика будут поддерживаться оценщиком QL несколько выпусков, прежде чем они включены по умолчанию в компиляторе QL. Это помогает гарантировать, что производительность при разработке запросов в новом выпуске CodeQL может соответствовать немного более старым выпускам, которые по-прежнему могут использоваться для интеграции сканирования кода или CI.

Если вы не заботитесь о том, что запросы совместимы с другими (более ранними или более поздними) выпусками CodeQL, иногда можно достичь небольшого объема дополнительной производительности с помощью этого флага, чтобы обеспечить последние улучшения в компиляторе раньше.

В выпусках, где нет последних улучшений для включения, этот параметр автоматически не делает ничего. Таким образом, его можно установить один раз и для всех в глобальном файле конфигурации CodeQL.

Доступно с момента v2.11.1.

--[no-]local-checking

Выполняйте только начальные проверки в части используемого источника QL.

--no-metadata-verification

Не проверяйте метаданные внедренного запроса в комментариях QLDoc для допустимости.

--compilation-cache-size=<MB>

[Дополнительно] Переопределите максимальный размер по умолчанию для каталога кэша компиляции.

--fail-on-ambiguous-relation-name

[Дополнительно] Сбой компиляции, если во время компиляции создается неоднозначное имя отношения.

Параметры настройки среды компиляции

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

Список каталогов, в которых можно найти пакеты QL. Каждый каталог может быть пакетом QL (или пакетом пакетов, содержащих .codeqlmanifest.json файл в корневом каталоге) или непосредственным родительским элементом одного или нескольких таких каталогов.

Если путь содержит несколько каталогов, их порядок определяет приоритет между ними: когда имя пакета, которое должно быть разрешено, совпадает с несколькими деревьями каталогов, то один из первых побед.

Указывая это на получение репозитория CodeQL с открытым исходным кодом, должно работать при запросе одного из языков, которые живут там.

Если вы проверили репозиторий CodeQL как одноуровневую цепочку инструментов CodeQL, вам не нужно предоставлять этот параметр; Такие каталоги с братом всегда будут искать пакеты QL, которые не удается найти в противном случае. (Если это значение по умолчанию не работает, настоятельно рекомендуется настроить --search-path один раз и для всех в файле конфигурации для каждого пользователя).

(Примечание. В Windows разделитель путей имеет значение ;).

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

Если указан этот список каталогов, они будут искать пакеты до тех, в которых они есть --search-path. Порядок между ними не имеет значения; Это ошибка, если имя пакета найдено в двух разных местах в этом списке.

Это полезно, если вы временно разрабатываете новую версию пакета, который также отображается в пути по умолчанию. С другой стороны, не рекомендуется переопределить этот параметр в файле конфигурации. Некоторые внутренние действия будут добавлять этот параметр на лету, переопределяя любое настроенное значение.

(Примечание. В Windows разделитель путей имеет значение ;).

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

[Дополнительно] Необязательный список каталогов, которые будут добавлены в путь поиска необработанных импортов для библиотек QL. Это следует использовать только в том случае, если вы используете библиотеки QL, которые не были упакованы как пакеты QL.

(Примечание. В Windows разделитель путей имеет значение ;).

--dbscheme=<file>

[Advanced] Явно определяет, какие запросы dbscheme следует скомпилировать. Это должно быть дано только вызывающими, которые крайне уверены, что они делают.

--compilation-cache=<dir>

[Дополнительно] Укажите дополнительный каталог для использования в качестве кэша компиляции.

--no-default-compilation-cache

[Дополнительно] Не используйте кэши компиляции в стандартных расположениях, например в пакете QL, содержашем запрос или в каталоге цепочки инструментов CodeQL.

Параметры настройки диспетчера пакетов CodeQL

--registries-auth-stdin

Проверка подлинности в реестрах контейнеров GitHub Enterprise Server путем передачи <registry_url>=<token> разделенного запятыми списка пар.

Например, можно передать https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 для проверки подлинности на двух экземплярах GitHub Enterprise Server.

При этом переопределяются переменные среды маркера токена CODEQL_И_AUTH и GITHUB_. Если вам нужно выполнить проверку подлинности только в реестре контейнеров github.com, можно вместо этого выполнить проверку подлинности с помощью более --github-auth-stdin простого параметра.

--github-auth-stdin

Проверка подлинности в реестре контейнеров github.com путем передачи маркера github.com GitHub Apps или личного маркера доступа через стандартные входные данные.

Чтобы пройти проверку подлинности в реестрах контейнеров GitHub Enterprise Server, передайте --registries-auth-stdin или используйте переменную среды AUTH CODEQL_REGISTRIES_.

Это переопределяет переменную среды токена GITHUB_.

Распространенные параметры

-h, --help

Отображение этого текста справки.

-J=<opt>

[Дополнительно] Укажите параметр JVM, выполняя команду.

(Убедитесь, что параметры, содержащие пробелы, не будут обрабатываться правильно.)

-v, --verbose

Постепенно увеличьте число отображаемых сообщений о ходе выполнения.

-q, --quiet

Постепенно уменьшайте количество отображаемых сообщений о ходе выполнения.

--verbosity=<level>

[Дополнительно] Явным образом задайте уровень детализации на одну из ошибок, предупреждений, хода выполнения, хода выполнения+, хода выполнения++, хода выполнения+++. Переопределяет -v и -q.

--logdir=<dir>

[Дополнительно] Запись подробных журналов в один или несколько файлов в указанном каталоге с созданными именами, включающими метки времени и имя выполняющегося подкоманда.

(Чтобы записать файл журнала с именем, над которым у вас есть полный контроль, вместо этого предоставьте --log-to-stderr и перенаправите stderr по мере необходимости.)

--common-caches=<dir>

[Дополнительно] Управляет расположением кэшированных данных на диске, которые будут сохраняться между несколькими запусками интерфейса командной строки, такими как скачанные пакеты QL и скомпилированные планы запросов. Если этот параметр не задан явным образом, по умолчанию используется каталог с именем .codeql в домашнем каталоге пользователя; он будет создан, если он еще не существует.

Доступно с момента v2.15.2.