Skip to main content

database analyze

Analise um banco de dados, produzindo resultados significativos no contexto do código-fonte.

Quem pode usar esse recurso?

O CodeQL está disponível para os seguintes tipos de repositórios:

Este conteúdo descreve a versão mais recente do CodeQL CLI. Para obter mais informações sobre essa versão, confira https://github.com/github/codeql-cli-binaries/releases.

Para ver os detalhes das opções disponíveis para esse comando em uma versão anterior, execute o comando com a opção --help no terminal.

Sinopse

Shell
codeql database analyze --format=<format> --output=<output> [--threads=<num>] [--ram=<MB>] <options>... -- <database> <query|dir|suite|pack>...

Descrição

Analise um banco de dados, produzindo resultados significativos no contexto do código-fonte.

Execute um pacote de consultas (ou algumas consultas individuais) em um banco de dados CodeQL, produzindo resultados, estilizados como alertas ou caminhos, em SARIF ou em outro formato interpretado.

Esse comando combina o efeito dos comandos codeql database run-queries e codeql database interpret-results. Caso você deseje executar consultas cujos resultados não atendam aos requisitos de serem interpretados como alertas de código-fonte, use codeql database run-queries ou codeql query run e, em seguida, codeql bqrs decode para converter os resultados brutos em uma notação legível.

Opções

Opções principais

<database>

[Obrigatório] Caminho para o banco de dados CodeQL a ser consultado.

<querysuite|pack>...

Consultas a serem executadas. Cada argumento está no formato scope/name@range:path, sendo que:

  • scope/name é o nome qualificado de um pacote CodeQL.
  • range é um intervalo do semver.
  • path é um caminho do sistema de arquivos.

Se um scope/name for especificado, o range e path serão opcionais. Um range ausente implica a última versão do pacote especificado. Um path ausente implica o pacote de consultas padrão do pacote especificado.

O path pode ser: um arquivo de consulta *.ql, um diretório que contém uma ou mais consultas ou um arquivo de conjunto de consultas .qls. Se não houver nenhum nome de pacote especificado, um path precisará ser fornecido e será interpretado em relação ao diretório de trabalho atual do processo atual.

Para especificar um path que contenha um literal @ ou :, use path: como um prefixo para o argumento, assim: path:directory/with:and@/chars.

Se você especificar as opções scope/name e path, o path não poderá ser absoluto. Ele é considerado relativo à raiz do pacote CodeQL.

Se nenhuma consulta for especificada, a CLI determinará automaticamente um conjunto adequado de consultas a serem executadas. Em particular, se um arquivo de configuração da verificação de código tiver sido especificado no momento da criação do banco de dados usando --codescanning-config, as consultas dele serão usadas. Caso contrário, as consultas padrão para a linguagem que está sendo analisada serão usadas.

--format=<format>

[Obrigatório] O formato no qual os resultados serão gravados. Um destes:

csv: valores formatados separados por vírgula, incluindo colunas com metadados de regra e de alerta.

sarif-latest: SARIF (Static Analysis Results Interchange Format), um formato baseado em JSON usado para descrever os resultados da análise estática. Essa opção de formato usa a versão mais recente com suporte (v2.1.0). Essa opção não é adequada para uso na automação, pois produzirá diferentes versões do SARIF entre diferentes versões do CodeQL.

sarifv2.1.0: SARIF v2.1.0.

graphtext: um formato textual que representa um grafo. Compatível apenas com consultas com o grafo @kind.

dgml: Directed Graph Markup Language, um formato baseado em XML para a descrição de grafos. Compatível apenas com consultas com o grafo @kind.

dot: linguagem DOT do Graphviz, um formato baseado em texto para a descrição de grafos. Compatível apenas com consultas com o grafo @kind.

-o, --output=<output>

[Obrigatório] O caminho de saída no qual os resultados serão gravados. Para formatos de grafo, esse deve ser um diretório, e o resultado (ou os resultados, caso o comando dê suporte à interpretação de mais de uma consulta) será gravado nesse diretório.

--[no-]rerun

Avalie até as consultas que já parecem ter um resultado BQRS armazenado no banco de dados.

--no-print-diagnostics-summary

Não imprima um resumo do diagnóstico analisado na saída padrão.

--no-print-metrics-summary

Não imprima um resumo das métricas analisadas na saída padrão.

--max-paths=<maxPaths>

O número máximo de caminhos a serem produzidos para cada alerta com caminhos. (Padrão: 4)

--[no-]sarif-add-file-contents

[Somente formatos SARIF] Inclua o conteúdo completo do arquivo para todos os arquivos referenciados em, pelo menos, um resultado.

--[no-]sarif-add-snippets

[Somente formatos SARIF] Inclua snippets de código para cada local mencionado nos resultados, com duas linhas de contexto antes e depois do local relatado.

--[no-]sarif-add-query-help

[Somente formatos SARIF] [Preterido] Inclua ajuda de consulta Markdown para todas as consultas. Isso carrega a ajuda de consulta para /path/to/query.ql por meio do arquivo /path/to/query.md. Se esse sinalizador não for fornecido, o comportamento padrão será incluir ajuda apenas para consultas personalizadas, ou seja, aquelas em pacotes de consulta que não são na forma `codeql/<lang&rt;-queries`. Essa opção não tem nenhum efeito quando transmitida para codeql bqrs interpret.

--sarif-include-query-help=<mode>

[Somente formatos SARIF] Especifique se deseja incluir ajuda de consulta na saída SARIF. Um destes:

always: Incluir ajuda de consulta para todas as consultas.

custom_queries_only(padrão): inclua ajuda de consulta apenas para consultas personalizadas, ou seja, aquelas em pacotes de consulta que não são do formulário `codeql/<lang&rt;-queries`.

never: Não inclua ajuda de consulta para quaisquer consultas.

Essa opção não tem nenhum efeito quando transmitida para codeql bqrs interpret.

Disponível desde v2.15.2.

--no-sarif-include-alert-provenance

[[Avançado] [[Somente formatos SARIF] Não inclua informações de proveniência de alerta na saída SARIF.

Disponível desde v2.18.1.

--[no-]sarif-group-rules-by-pack

[Somente formatos SARIF] Coloque o objeto de regra para cada consulta no pacote QL correspondente na propriedade <run>.tool.extensions. Essa opção não tem nenhum efeito quando transmitida para codeql bqrs interpret.

--[no-]sarif-multicause-markdown

[Somente formatos SARIF] Para alertas que têm várias causas, inclua-os como uma lista de itens formatados em Markdown na saída, além de uma cadeia de caracteres sem formatação.

--no-sarif-minify

[Somente formatos SARIF] Produza uma saída SARIF impressa bonita. Por padrão, a saída SARIF é minificada para reduzir o tamanho do arquivo de saída.

--sarif-run-property=<String=String>

[Somente formatos SARIF] Um par de valores de chave a ser adicionado ao recipiente de propriedades 'run' do SARIF gerado. Pode ser repetido.

--no-group-results

[Somente formatos SARIF] Produz um resultado por mensagem, em vez de um resultado por local exclusivo.

--csv-location-format=<csvLocationFormat>

O formato no qual os locais serão produzidos na saída CSV. Um dos seguintes: uri, line-column ou offset-length. (Padrão: linha-coluna)

--dot-location-url-format=<dotLocationUrlFormat>

Uma cadeia de caracteres de formato que define o formato no qual as URLs de local do arquivo serão produzidas na saída DOT. Os seguintes espaços reservados podem ser usados: {path} {start:line} {start:column} {end:line} {end:column}, {offset} e {length}

--[no-]sublanguage-file-coverage

[Somente para GitHub.com e GitHub Enterprise Server v3.12.0+] Use informações de cobertura de arquivo de sub-linguagem. Isso calcula, exibe e exporta informações de cobertura de arquivos separadas para linguagens que compartilham um extrator CodeQL como C e C++, Java e Kotlin e JavaScript e TypeScript.

Disponível desde v2.15.2.

--sarif-category=<category>

[Somente formatos SARIF] [Recomendado] Especifique uma categoria para essa análise incluir na saída SARIF. Uma categoria pode ser usada para distinguir várias análises executadas no mesmo commit e repositório, mas em diferentes linguagens ou partes do código.

Se você analisar a mesma versão de uma base de código de várias maneiras diferentes (por exemplo, para diferentes linguagens) e carregar os resultados no GitHub para apresentação na verificação de código, esse valor deverá ser diferente entre cada uma das análises, o que informa à verificação de código de que as análises suplementam umas às outras em vez de substituí-las. (Os valores devem ser consistentes entre as execuções da mesma análise para diferentes versões da base de código.)

Esse valor aparecerá (com uma barra à direita acrescentada se ainda não estiver presente) como a propriedade <run>.automationDetails.id.

--no-database-extension-packs

[Avançado] Omita pacotes de extensão armazenados no banco de dados durante a criação do banco de dados, seja de um arquivo de configuração de varredura de código ou de arquivos de extensão armazenados no diretório 'extensions' da base de código analisada.

--no-database-threat-models

[Avançado] Omita a configuração do modelo de risco armazenado no banco de dados durante a criação do banco de dados a partir de um arquivo de configuração de varredura de código.

--[no-]download

Baixe as consultas ausentes antes da análise.

Opções para controlar os pacotes de modelo a serem usados

--model-packs=<name@range>...

Uma lista de nomes de pacotes CodeQL, cada um com um intervalo de versões opcional, a serem usados como pacotes de modelo para personalizar as consultas que estão prestes a ser avaliadas.

Opções para controlar os modelos de risco a serem usados

--threat-model=<name>...

Uma lista de modelos de risco a serem habilitados ou desabilitados.

O argumento é o nome de um modelo de risco, opcionalmente precedido por um '!'. Se nenhum '!' estiver presente, o modelo de risco nomeado e todos os seus descendentes serão habilitados. Se houver um '!' presente, o modelo de risco nomeado e todos os seus descendentes serão desabilitados.

O modelo de risco 'padrão' é habilitado por padrão, mas pode ser desabilitado especificando-se '--threat-model !default'.

O modelo de risco "all" pode ser usado para habilitar ou desabilitar todos os modelos de ameaça.

As opções --threat model são processadas em ordem. Por exemplo, '--threat-model local --threat-model !environment' habilita todos os modelos de risco no grupo 'local', exceto o modelo de risco 'environment'.

Essa opção só tem efeito para idiomas que oferecem suporte a modelos de risco.

Disponível desde v2.15.3.

Opções para controlar o avaliador de consulta

--[no-]tuple-counting

[Avançado] Veja as contagens de tupla de cada etapa de avaliação nos logs do avaliador de consulta. Se a opção --evaluator-log for fornecida, as contagens de tupla serão incluídas nos logs JSON baseados em texto e estruturados produzidos pelo comando. (Isso pode ser útil para a otimização de desempenho de um código QL complexo).

--timeout=<seconds>

[Avançado] Defina o tempo limite para a avaliação da consulta, em segundos.

O recurso de tempo limite se destina a capturar casos em que uma consulta complexa levará um tempo prologado indeterminado para ser avaliada. Não é uma forma eficaz de limitar o tempo total que a avaliação de consulta pode levar. A avaliação terá permissão para continuar, desde que cada parte cronometrada separadamente da computação seja concluída dentro do tempo limite. Atualmente, essas partes cronometradas separadamente são "camadas de RA" da consulta otimizada, mas isso poderá mudar no futuro.

Se nenhum tempo limite for especificado ou for fornecido como 0, nenhum tempo limite será definido (exceto codeql test run, sendo que o tempo limite padrão é de cinco minutos).

-j, --threads=<num>

Use esse número de threads para avaliar as consultas.

O valor padrão é 1. Você pode transmitir 0 para usar um thread por núcleo no computador ou -N para manter N núcleos não utilizados (com a exceção de que ainda será usado, pelo menos, um thread).

--[no-]save-cache

[Avançado] Grava agressivamente os resultados intermediários no cache de disco. Isso leva mais tempo e usa (muito) mais espaço em disco, mas pode acelerar a execução seguinte de consultas semelhantes.

--[no-]expect-discarded-cache

[Avançado] Tome decisões sobre os predicados que serão avaliados e o que será gravado no cache de disco, com base na suposição de que o cache será descartado após a execução das consultas.

--[no-]keep-full-cache

[Avançado] Não limpe o cache de disco após a conclusão da avaliação. Isso poderá economizar tempo se você executar codeql dataset cleanup ou codeql database cleanup posteriormente de qualquer maneira.

--max-disk-cache=<MB>

Defina a quantidade máxima de espaço que pode ser usada pelo cache de disco para os resultados intermediários da consulta.

Se esse tamanho não for configurado explicitamente, o avaliador tentará usar uma quantidade "razoável" de espaço em cache, com base no tamanho do conjunto de dados e na complexidade das consultas. Se você definir explicitamente um limite mais alto do que esse uso padrão, isso habilitará o cache adicional, que pode acelerar as consultas posteriores.

--min-disk-free=<MB>

[Avançado] Defina a quantidade de destino de espaço livre no sistema de arquivos.

Se --max-disk-cache não for fornecido, o avaliador tentará reduzir o uso do cache de disco se o espaço livre no sistema de arquivos ficar abaixo desse valor.

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

[Avançado] Defina a fração de destino de espaço livre no sistema de arquivos.

Se --max-disk-cache não for fornecido, o avaliador tentará reduzir o uso do cache de disco se o espaço livre no sistema de arquivos ficar abaixo desse percentual.

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

Um arquivo CSV que contém linhas para o predicado externo <pred> . É possível fornecer várias opções --external.

--xterm-progress=<mode>

[Avançado] Controla se o acompanhamento de progresso deve ser mostrado durante a avaliação de QL usando sequências do controle xterm. Os valores possíveis são:

no: nunca produza um progresso sofisticado; pressuponha um terminal burro.

auto (padrão) : detecte automaticamente se o comando está sendo executado em um terminal apropriado.

yes: suponha que o terminal possa entender as sequências do controle xterm. O recurso ainda depende da capacidade de fazer a detecção automática do tamanho do terminal, sendo também desabilitado se -q for fornecido.

25x80 (ou semelhante): como yes, além de fornecer explicitamente o tamanho do terminal.

25x80:/dev/pts/17 (ou semelhante): mostre um progresso sofisticado em um terminal diferente do stderr. Principalmente útil para testes internos.

Opções para controlar a saída de logs estruturados do avaliador

--evaluator-log=<file>

[Avançado] Saída de logs estruturados sobre o desempenho do avaliador para o arquivo especificado. O formato desse arquivo de log está sujeito a alterações sem aviso prévio, mas será um fluxo de objetos JSON separados por dois caracteres de nova linha (por padrão) ou um se a opção --evaluator-log-minify for transmitida. Use codeql generate log-summary <file> para produzir um resumo mais estável desse arquivo e evitar a análise direta dele. O arquivo será substituído se ele já existir.

--evaluator-log-minify

[Avançado] Se a opção --evaluator-log for transmitida, também transmitir essa opção minimizará o tamanho do log JSON produzido, em detrimento de torná-lo muito menos legível por humanos.

Opções para controlar o uso de RAM

-M, --ram=<MB>

O avaliador de consulta se esforçará para manter seu volume de memória total abaixo desse valor. (No entanto, para bancos de dados grandes, é possível que o limite seja quebrado por mapas de memória com suporte de arquivo, que podem ser transferidos para disco em caso de pressão de memória).

O valor deve ser de pelo menos 2048 MB; valores menores serão arredondados de forma transparente.

Opções para controlar a compilação de QL

--warnings=<mode>

Como lidar com os avisos do compilador de QL. Um destes:

hide: suprima os avisos.

show (padrão) : imprima os avisos, mas continue com a compilação.

error: trate os avisos como erros.

--no-debug-info

Não emita as informações de local de origem no RA para depuração.

--[no-]fast-compilation

[Preterido] [Avançado] Omita as etapas particularmente lentas da otimização.

--no-release-compatibility

[Avançado] Use os recursos mais recentes do compilador, em detrimento da portabilidade.

De tempos em tempos, novos recursos da linguagem QL e otimizações do avaliador terão suporte do avaliador de QL algumas versões antes de serem habilitadas por padrão no compilador de QL. Isso ajuda a garantir que o desempenho que você experimenta ao desenvolver consultas na versão mais recente do CodeQL possa ser equivalente ao de versões um pouco mais antigas que ainda podem estar em uso para a verificação de código ou as integrações de CI.

Se você não se importa que suas consultas sejam compatíveis com outras versões (anteriores ou posteriores) do CodeQL, às vezes, você pode obter uma pequena quantidade de desempenho extra usando esse sinalizador para habilitar aprimoramentos recentes no compilador antecipadamente.

Nas versões em que não há aprimoramentos recentes a serem habilitados, essa opção silenciosamente não executa nenhuma ação. Portanto, é seguro defini-la de uma vez por todas no arquivo de configuração global do CodeQL.

Disponível desde v2.11.1.

--[no-]local-checking

Só execute verificações iniciais na parte da fonte de QL usada.

--no-metadata-verification

Não verifique a validade dos metadados de consulta inseridos nos comentários do QLDoc.

--compilation-cache-size=<MB>

[Avançado] Substitua o tamanho máximo padrão de um diretório de cache de compilação.

--fail-on-ambiguous-relation-name

[Avançado] Falha na compilação se for gerado um nome de relação ambíguo durante a compilação.

Opções para configurar o ambiente de compilação

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

Uma lista de diretórios nos quais os pacotes QL podem ser encontrados. Cada diretório pode ser um pacote QL (ou um conjunto de pacotes que contém um arquivo .codeqlmanifest.json na raiz) ou o pai imediato de um ou mais desses diretórios.

Se o caminho contiver mais de um diretório, a ordem deles definirá a precedência entre eles: quando for encontrada uma correspondência do nome de um pacote que precisa ser resolvido em mais de uma das árvores do diretório, a primeira fornecida vencerá.

Se você apontar isso para um check-out do repositório do CodeQL de código aberto, isso deverá funcionar durante a consulta de uma das linguagens que se encontram nele.

Se você tiver feito check-out do repositório do CodeQL como um irmão da cadeia de ferramentas CodeQL descompactada, não precisará fornecer essa opção. Nesses diretórios irmãos, sempre será feita a pesquisa por pacotes QL que não podem ser encontrados de outra forma. (Caso esse padrão não funcione, recomendamos fortemente configurar --search-path de uma vez por todas em um arquivo de configuração por usuário).

(Observação: no Windows, o separador de caminho é ;).

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

Se essa lista de diretórios for fornecida, nesses diretórios, será feita a pesquisa de pacotes antes daqueles contidos em --search-path. A ordem entre eles não importa: será indicado um erro se o nome de um pacote for encontrado em dois locais diferentes nessa lista.

Isso será útil se você estiver desenvolvendo temporariamente uma nova versão de um pacote que também aparece no caminho padrão. Por outro lado, não recomendamos substituir essa opção em um arquivo de configuração. Algumas ações internas adicionarão essa opção em tempo real, substituindo qualquer valor configurado.

(Observação: no Windows, o separador de caminho é ;).

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

[Avançado] Uma lista opcional de diretórios que serão adicionados ao caminho de pesquisa de importação bruta para as bibliotecas QL. Isso só deverá ser usado se você estiver usando bibliotecas QL que não foram empacotadas como pacotes QL.

(Observação: no Windows, o separador de caminho é ;).

--dbscheme=<file>

[Avançado] Defina explicitamente o dbscheme no qual as consultas devem ser compiladas. Isso só deve ser fornecido pelos chamadores que têm certeza do que estão fazendo.

--compilation-cache=<dir>

[Avançado] Especifique um diretório adicional a ser usado como um cache de compilação.

--no-default-compilation-cache

[Avançado] Não use caches de compilação em locais padrão, como no pacote QL que contém a consulta ou no diretório de cadeia de ferramentas CodeQL.

Opções para configurar o gerenciador de pacotes CodeQL

--registries-auth-stdin

Autentique-se nos registros de contêiner do GitHub Enterprise Server transmitindo uma lista separada por vírgula de pares <registry_url>=<token>.

Por exemplo, você pode transmitir https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 para se autenticar em duas instâncias do GitHub Enterprise Server.

Isso substitui as variáveis de ambiente CODEQL_REGISTRIES_AUTH e GITHUB_TOKEN. Se você só precisar se autenticar no registro de contêiner do github.com, poderá se autenticar usando a opção --github-auth-stdin mais simples.

--github-auth-stdin

Autentique-se no registro de contêiner do github.com transmitindo um token do GitHub Apps do github.com ou um token de acesso pessoal por meio da entrada padrão.

Para se autenticar nos registros de contêiner do GitHub Enterprise Server, transmita --registries-auth-stdin ou use a variável de ambiente CODEQL_REGISTRIES_AUTH.

Isso substitui a variável de ambiente GITHUB_TOKEN.

Opções comuns

-h, --help

Mostre este texto de ajuda.

-J=<opt>

[Avançado] Forneça a opção para a JVM que executa o comando.

(Use-a com cautela, pois as opções que contêm espaços não serão tratadas corretamente.)

-v, --verbose

Aumente incrementalmente o número de mensagens de progresso impressas.

-q, --quiet

Diminua incrementalmente o número de mensagens de progresso impressas.

--verbosity=<level>

[Avançado] Defina explicitamente o nível de detalhamento como erros, avisos, progresso, progresso+, progresso++ ou progresso+++. Substitui -v e -q.

--logdir=<dir>

[Avançado] Escreva logs detalhados em um ou mais arquivos no diretório fornecido, com nomes gerados que incluem carimbos de data/hora e o nome do subcomando em execução.

(Para gravar um arquivo de log com um nome sobre o qual você tem controle completo, forneça --log-to-stderr e redirecione stderr conforme desejado.)

--common-caches=<dir>

[Avançado] Controle a localização dos dados armazenados em cache no disco que persistirão entre várias execuções da CLI, como pacotes QL baixados e planos de consulta compilada. Se não for definido explicitamente, o padrão corresponde a um diretório intitulado .codeql no diretório inicial do usuário; que será criado se ainda não existir.

Disponível desde v2.15.2.