Skip to main content

query compile

Compile ou vérifie le code QL.

Qui peut utiliser cette fonctionnalité ?

CodeQL est disponible pour les types de référentiels suivants :

Ce contenu décrit la version la plus récente de CodeQL CLI. Pour plus d’informations sur cette version, consultez https://github.com/github/codeql-cli-binaries/releases.

Pour voir les détails des options disponibles pour cette commande dans une version antérieure, exécutez la commande avec l’option --help dans votre terminal.

Synopsis

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

Description

Compile ou vérifie le code QL.

Compile une ou plusieurs requêtes. Le but principal de cette commande est généralement d’écrire la version compilée de la requête dans un cache de compilation où elle pourra être trouvée lorsque la requête sera exécutée par la suite. Les autres options de sortie sont principalement pour le débogage.

Options

Options principales

<file>...

[Obligatoire] Requêtes à compiler. Chaque argument est l’un des éléments suivants :

  • Un fichier .ql à compiler.
  • Un répertoire dans lequel les fichiers .ql seront recherchés de façon récursive.
  • Un fichier .qls qui définit un ensemble particulier de requêtes.
  • Le nom de base d’un fichier .qls « connu » exporté par l’un des packs QL installés.

-n, --check-only

Vérifie juste que le QL est valide et affiche les erreurs le cas échéant ; n’optimise ni ne stocke de plan de requête. Peut être beaucoup plus rapide qu’une compilation complète.

--[no-]precompile

[Avancé] Enregistre chaque requête compilée sous la forme d’un fichier .qlx binaire à côté de la source .ql.

Cette option est censée être utilisée uniquement lors de la préparation d’un pack de requêtes pour la distribution (auquel cas elle est utilisée automatiquement par codeql pack publish). Une fois que les fichiers .qlx existent, les commandes qui exécutent par la suite des requêtes peuvent ignorer les modifications de la source QL au profit de la version précompilée.

Certaines options de compilation rarement utilisées ne sont pas compatibles avec cela et entraînent une erreur d’exécution.

Disponible depuis v2.12.0.

--[no-]dump-dil

[Avancé] Affiche la représentation intermédiaire DIL optimisée dans la sortie standard lors de la compilation.

Lorsque la sortie JSON est sélectionnée, le DIL est représenté sous la forme d’un tableau de chaînes à une seule ligne, avec des wrappings pour identifier la requête en cours de compilation.

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

Continue la compilation même si une erreur est trouvée.

--[no-]dump-ra

[Avancé] Affiche le plan de requête RA optimisé dans la sortie standard lors de la compilation.

Lorsque la sortie JSON est sélectionnée, le RA est représenté sous la forme d’un tableau de chaînes à une seule ligne, avec des wrappings pour identifier la requête en cours de compilation.

--format=<fmt>

Sélectionne le format de sortie text (par défaut) ou json.

-j, --threads=<num>

Utilise le nombre de threads spécifié pour compiler les requêtes.

La valeur par défaut est de 1. Vous pouvez passer 0 pour utiliser un thread par cœur sur la machine ou -N pour laisser N cœurs inutilisés (sauf si au moins un thread est toujours utilisé).

-M, --ram=<MB>

Définit la quantité totale de RAM que le compilateur doit être autorisé à utiliser.

Options de contrôle du compilateur et du variant QL

--warnings=<mode>

Comment gérer les avertissements du compilateur QL. Valeurs possibles :

hide : Supprime les avertissements.

show (par défaut)  : Affiche les avertissements, mais poursuit la compilation.

error : Traite les avertissements comme des erreurs.

--no-debug-info

N’émet pas d’informations d’emplacement source dans RA pour le débogage.

--[no-]fast-compilation

[Déprécié] [Avancé] Omet les étapes d’optimisation particulièrement lentes.

--no-release-compatibility

[Avancé] Utilise les fonctionnalités les plus récentes du compilateur, au détriment de la portabilité.

Parfois, les nouvelles fonctionnalités du langage QL et les optimisations de l’évaluateur sont prises en charge par l’évaluateur QL quelques versions avant qu’elles ne soient activées par défaut dans le compilateur QL. Cela permet de garantir que les performances dont vous bénéficiez lors du développement de requêtes dans la dernière version de CodeQL peuvent être atteintes par des versions légèrement plus anciennes qui peuvent encore être utilisées pour l’Analyse du code ou les intégrations CI.

Si la compatibilité de vos requêtes avec d’autres versions (antérieures ou ultérieures) de CodeQL n’est pas un souci pour vous, vous pouvez parfois atteindre des performances un peu meilleures en utilisant cet indicateur pour activer les améliorations récentes du compilateur dès le début.

Dans les versions pour lesquelles il n’y a pas d’améliorations récentes à activer, cette option ne fait rien. Par conséquent, vous pouvez sans problème la définir une fois pour toutes dans votre fichier de configuration CodeQL global.

Disponible depuis v2.11.1.

--[no-]local-checking

Effectue uniquement les vérifications initiales sur la partie de la source QL utilisée.

--no-metadata-verification

Ne vérifie pas les métadonnées de requête incorporées dans les commentaires QLDoc à des fins de validité.

--compilation-cache-size=<MB>

[Avancé] Remplace la taille maximale par défaut d’un répertoire de cache de compilation.

--fail-on-ambiguous-relation-name

[Avancé] Échec de la compilation si un nom de relation ambigu est généré pendant la compilation.

Options pour configurer l’environnement de compilation

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

Liste des répertoires sous lesquels les packs QL peuvent être trouvés. Chaque répertoire peut être un pack QL (ou un bundle de packs contenant un fichier .codeqlmanifest.json à la racine) ou le parent immédiat d’un ou plusieurs de ces répertoires.

Si le chemin contient plusieurs répertoires, leur ordre définit la priorité entre eux : quand un nom de pack qui doit être résolu est mis en correspondance dans plusieurs arborescences de répertoires, celle donnée en premier gagne.

Le pointage de ce chemin vers une extraction du dépôt CodeQL open source devrait fonctionner lors de l’interrogation d’un des langages qui y résident.

Si vous avez extrait le dépôt CodeQL en tant que frère de la chaîne d’outils CodeQL décompressée, vous n’avez pas besoin de donner cette option ; ces répertoires frères sont toujours recherchés pour les packs QL qui ne peuvent pas être trouvés autrement. (Si cette valeur par défaut ne fonctionne pas, il est fortement recommandé de configurer --search-path une fois pour toutes dans un fichier de configuration par utilisateur).

(Remarque : Sur Windows, le séparateur de chemin est ;.)

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

Si cette liste de répertoires est donnée, des packs y sont recherchés avant ceux indiqués dans --search-path. L’ordre entre eux n’a pas d’importance ; il s’agit d’une erreur si un nom de pack est trouvé dans deux répertoires différents de cette liste.

Cette option est utile si vous développez temporairement une nouvelle version d’un pack qui apparaît aussi dans le chemin par défaut. En revanche, il n’est pas recommandé de remplacer cette option dans un fichier de configuration ; certaines actions internes ajoutent cette option à la volée, remplaçant toute valeur configurée.

(Remarque : Sur Windows, le séparateur de chemin est ;.)

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

[Avancé] Liste facultative des répertoires qui sont ajoutés au chemin de recherche d’importation brut pour les bibliothèques QL. Doit être utilisé seulement si vous utilisez des bibliothèques QL qui n’ont pas été empaquetées en tant que packs QL.

(Remarque : Sur Windows, le séparateur de chemin est ;.)

--dbscheme=<file>

[Avancé] Définit explicitement les requêtes de schéma de base de données à compiler. Ne doit être donné que par les appelants qui sont extrêmement sûrs de ce qu’ils font.

--compilation-cache=<dir>

[Avancé] Spécifie un répertoire supplémentaire à utiliser comme cache de compilation.

--no-default-compilation-cache

[Avancé] N’utilise pas de caches de compilation dans des emplacements standard, comme dans le pack QL contenant la requête ou dans le répertoire de la chaîne d’outils CodeQL.

Options pour configurer le gestionnaire de package CodeQL

--registries-auth-stdin

Permet de vous authentifier auprès des registres de conteneurs GitHub Enterprise Server en passant une liste de paires <registry_url>=<token> séparées par des virgules.

Par exemple, vous pouvez passer https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 pour vous authentifier auprès de deux instances GitHub Enterprise Server.

Cela remplace les variables d’environnement CODEQL_REGISTRIES_AUTH et GITHUB_TOKEN. Si vous avez seulement besoin de vous authentifier auprès du registre de conteneurs github.com, vous pouvez vous authentifier en utilisant l’option plus simple --github-auth-stdin.

--github-auth-stdin

Permet de vous authentifier auprès du registre de conteneurs github.com en passant un jeton github.com GitHub Apps ou un jeton d’accès personnel via une entrée standard.

Pour vous authentifier auprès des registres de conteneurs GitHub Enterprise Server, passez --registries-auth-stdin ou utilisez la variable d’environnement CODEQL_REGISTRIES_AUTH.

Cela remplace la variable d’environnement GITHUB_TOKEN.

Options courantes

-h, --help

Affiche ce texte d’aide.

-J=<opt>

[Avancé] Donne une option à l’environnement JVM exécutant la commande.

(Attention, les options contenant des espaces ne sont pas gérées correctement.)

-v, --verbose

Augmente de façon incrémentielle le nombre de messages de progression affichés.

-q, --quiet

Diminue de façon incrémentielle le nombre de messages de progression affichés.

--verbosity=<level>

[Avancé] Définit explicitement le niveau de détail sur errors, warnings, progress, progress+, progress++ ou progress+++. Remplace -v et -q.

--logdir=<dir>

[Avancé] Écrit des journaux détaillés dans un ou plusieurs fichiers du répertoire donné, avec des noms générés qui incluent des horodatages et le nom de la sous-commande en cours d’exécution.

(Pour écrire un fichier journal avec un nom sur lequel vous avez un contrôle total, donnez plutôt --log-to-stderr et redirigez stderr comme vous le souhaitez.)

--common-caches=<dir>

[Avancé] Contrôle l’emplacement des données en cache sur le disque qui persisteront entre plusieurs exécutions de l’interface CLI, telles que les packs QL téléchargés et les plans de requête compilés. S’il n’est pas défini explicitement, il s’agit par défaut d’un répertoire nommé .codeql dans le répertoire de base de l’utilisateur. S’il n’existe pas déjà, il est créé.

Disponible depuis v2.15.2.