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

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

> \[!NOTE]
> Это содержимое описывает последний выпуск данных CodeQL CLI. Дополнительные сведения об этом выпуске см. в статье <https://github.com/github/codeql-cli-binaries/releases>.
>
> Чтобы просмотреть сведения о параметрах, доступных для этой команды в предыдущем выпуске, выполните команду с <span style="white-space: nowrap;">`--help`</span> параметром в терминале.

## Synopsis

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

## Description

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

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

## Options

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

#### `<file>...`

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

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

#### `-n, --check-only`

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

#### `--[no-]precompile`

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

Это должно использоваться только при подготовке пакета запросов для распространения (в этом случае он используется автоматически [при публикации](/ru/code-security/reference/code-scanning/codeql/codeql-cli-manual/pack-publish) пакета 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`.