Skip to main content

query compile

Compila o prueba el código QL.

¿Quién puede utilizar esta característica?

CodeQL está disponible para los siguientes tipos de repositorios:

Note

En este contenido se describe la versión más reciente de CodeQL CLI. Para obtener más información sobre esta versión, consulta https://github.com/github/codeql-cli-binaries/releases.

Para ver detalles de las opciones disponibles para este comando en una versión anterior, ejecuta el comando con la opción --help en el terminal.

Sinopsis

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

Descripción

Compila o prueba el código QL.

Compila una o varias consultas. Por lo general, la salida principal de este comando es que la versión compilada de la consulta se escribe en una caché de compilación en la que se encontrará cuando se ejecute posteriormente la consulta. Otras opciones de salida son principalmente para la depuración.

Opciones

Opciones principales

<file>...

[Obligatorio] Consultas que se van a compilar. Cada argumento es uno de los siguientes:

  • Un archivo .ql que se va a compilar.
  • Un directorio en el que se buscarán de manera recursiva los archivos .ql.
  • Un archivo .qls que define un conjunto determinado de consultas.
  • Nombre base de un archivo .qls "conocido" exportado por uno de los paquetes de QL instalados.

-n, --check-only

Simplemente, comprueba que el QL es válido e imprime los errores; no realices ninguna optimización ni almacenes un plan de consulta. Esto puede ser mucho más rápido que realizar una compilación completa.

--[no-]precompile

[Avanzado] Guarda cada consulta compilada como archivo .qlx binario junto al origen .ql.

Esta opción está pensada para usarla cuando se prepara un paquete de consultas para su distribución (en cuyo caso, codeql pack publish la usa automáticamente). Una vez que existen los archivos .qlx, los comandos posteriores que ejecutan consultas pueden omitir los cambios en el origen de QL en favor de la versión precompilada.

Algunas opciones de compilación que rara vez se usan no son compatibles con esto y generarán un error en tiempo de ejecución.

Disponible desde la versión v2.12.0.

--[no-]dump-dil

[Avanzado] Imprime la representación intermedia de DIL optimizado en la salida estándar durante la compilación.

Cuando se selecciona la salida JSON, el DIL se representará como una matriz de cadenas de una sola línea, con algún ajuste para identificar qué consulta se está compilando.

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

Sigue con la compilación incluso si se encuentra un error.

--[no-]dump-ra

[Avanzado] Imprime el plan de consulta de RA optimizado en la salida estándar durante la compilación.

Cuando se selecciona la salida JSON, el RA se representará como una matriz de cadenas de una sola línea, con algún ajuste para identificar qué consulta se está compilando.

--format=<fmt>

Selecciona el formato de salida, ya sea text (predeterminado) o json.

-j, --threads=<num>

Usa todos estos subprocesos para compilar las consultas.

De manera predeterminada, su valor es 1. Puedes pasar 0 para usar un subproceso por núcleo en la máquina o -N para dejar N núcleos sin utilizar (excepto que aún se usa al menos un subproceso).

-M, --ram=<MB>

Establece la cantidad total de RAM que se debe permitir usar al compilador.

Opciones de control del compilador y la variante QL

--warnings=<mode>

Cómo controlar las advertencias del compilador de QL. Uno de los valores siguientes:

hide: suprime las advertencias.

show (predeterminado) : imprime advertencias, pero continúa con la compilación.

error: trata las advertencias como errores.

--no-debug-info

No emite información de ubicación de origen en RA para la depuración.

--[no-]fast-compilation

[En desuso] [Avanzado] Omite los pasos de optimización especialmente lentos.

--no-release-compatibility

[Avanzado] Usa las características más recientes del compilador, a costa de la portabilidad.

De vez en cuando, el evaluador de QL será compatible con nuevas características del lenguaje QL y optimizaciones del evaluador unas cuantas versiones antes de que se habiliten de forma predeterminada en el compilador de QL. Esto ayuda a garantizar que el rendimiento que experimentes al desarrollar consultas en la versión de CodeQL más reciente puede coincidir con versiones ligeramente anteriores que todavía pueden estar en uso para las integraciones de CI o el examen de código.

Si no te importa que las consultas sean compatibles con otras versiones de CodeQL (anteriores o posteriores), a veces puedes lograr una pequeña cantidad de rendimiento adicional mediante esta marca para habilitar las mejoras recientes en el compilador desde el principio.

En versiones en las que no hay ninguna mejora reciente que se deba habilitar, esta opción silenciosamente no hace nada. Por lo tanto, es seguro establecerla una vez y para todo en el archivo de configuración de CodeQL global.

Disponible desde la versión v2.11.1.

--[no-]local-checking

Realiza solo comprobaciones iniciales en la parte del origen de QL que se usa.

--no-metadata-verification

No compruebes los metadatos de consulta insertados en los comentarios de QLDoc para ver si son válidos.

--compilation-cache-size=<MB>

[Avanzado] Reemplaza el tamaño máximo predeterminado para un directorio de caché de compilación.

--fail-on-ambiguous-relation-name

[Avanzado] Se produce un error en la compilación si se genera un nombre de relación ambiguo durante la compilación.

Opciones para configurar el entorno de compilación

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

Lista de directorios en los que se pueden encontrar paquetes de QL. Cada directorio puede ser un paquete de QL (o una agrupación de paquetes que contenga un archivo .codeqlmanifest.json en la raíz) o el elemento primario inmediato de uno o varios directorios de este tipo.

Si la ruta de acceso contiene más de un directorio, su orden define la prioridad entre ellos: cuando un nombre de paquete que se debe resolver tiene coincidencias en más de uno de los árboles de directorio, tiene prioridad el que se indica primero.

Apuntar esto a una extracción del repositorio CodeQL de código abierto debería funcionar al consultar uno de los lenguajes que residen allí.

Si extrajiste el repositorio CodeQL como un elemento relacionado de la cadena de herramientas CodeQL desempaquetada, no es necesario proporcionar esta opción; dichos directorios del mismo nivel siempre se buscarán paquetes de QL que no se encuentren de otro modo. (Si este valor predeterminado no funciona, se recomienda encarecidamente configurar --search-path de una vez en un archivo de configuración por usuario).

(Nota: En Windows, el separador de ruta de acceso es ;).

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

Si se da esta lista de directorios, se buscarán paquetes en ellos antes que en los incluidos en --search-path. El orden entre ellos no importa; si se encuentra un nombre de paquete en dos lugares diferentes de esta lista es un error.

Esto resulta útil si estás desarrollando temporalmente una versión nueva de un paquete que también aparece en la ruta de acceso predeterminada. Por otro lado, no se recomienda reemplazar esta opción en un archivo de configuración; algunas acciones internas agregarán esta opción sobre la marcha y reemplazarán cualquier valor configurado.

(Nota: En Windows, el separador de ruta de acceso es ;).

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

[Avanzado] Lista opcional de los directorios que se agregarán a la ruta de búsqueda de importación sin procesar para las bibliotecas de QL. Esto solo debe usarse si usas bibliotecas de QL que no se han empaquetado como paquetes de QL.

(Nota: En Windows, el separador de ruta de acceso es ;).

--dbscheme=<file>

[Avanzado] Define explícitamente las consultas dbscheme en las que se debe realizar la compilación. Esto solo debe proporcionarse a los autores de llamadas que están extremadamente seguros de lo que están haciendo.

--compilation-cache=<dir>

[Avanzado] Especifica un directorio adicional que se va a usar como caché de compilación.

--no-default-compilation-cache

[Avanzado] No uses cachés de compilación en ubicaciones estándar, como en el paquete de QL que contiene la consulta o en el directorio de la cadena de herramientas de CodeQL.

Opciones para configurar el administrador de paquetes de CodeQL

--registries-auth-stdin

Autentícate en los registros de contenedores de servidor de GitHub Enterprise; para ello, pasa una lista separada por comas de pares <registry_url>=<token>.

Por ejemplo, puedes pasar https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 para autenticarte en dos instancias del servidor de GitHub Enterprise.

Esto invalida las variables de entorno CODEQL_REGISTRIES_AUTH y GITHUB_TOKEN. Si solo necesitas autenticarte en el registro de contenedor de github.com, puedes hacerlo mediante la opción --github-auth-stdin más sencilla.

--github-auth-stdin

Autentícate en el registro de contenedores de github.com; para ello, pasa un token de aplicaciones de GitHub en github.com o un token de acceso personal mediante la entrada estándar.

Para autenticarte en los registros de contenedores de servidor de GitHub Enterprise, pasa --registries-auth-stdin o usa la variable de entorno CODEQL_REGISTRIES_AUTH.

Esto invalida la variable de entorno GITHUB_TOKEN.

Opciones comunes

-h, --help

Muestra este texto de ayuda.

-J=<opt>

[Avanzado] Asigna la opción a la JVM que ejecuta el comando.

(Ten en cuenta que las opciones que contienen espacios no se administrarán correctamente).

-v, --verbose

Aumenta incrementalmente el número de mensajes de progreso impresos.

-q, --quiet

Reduce incrementalmente el número de mensajes de progreso impresos.

--verbosity=<level>

[Avanzado] Establece explícitamente el nivel de detalle en errores, advertencias, progreso, progreso+, progreso++, progreso+++. Invalida -v y -q.

--logdir=<dir>

[Avanzado] Escribe registros detallados en uno o varios archivos del directorio especificado, con nombres generados que incluyen marcas de tiempo y el nombre del subcomando en ejecución.

(Para escribir un archivo de registro con un nombre sobre el que tienes control total, proporciona --log-to-stderr y redirige stderr como quieras).

--common-caches=<dir>

[Avanzado] Controla la ubicación de los datos en caché del disco que se conservarán entre varias ejecuciones de la CLI, como paquetes QL descargados y planes de consulta compilada. Si no se define explícitamente, se toma como predeterminado un directorio denominado .codeql en el directorio principal del usuario, que se creará en caso de que no exista.

Disponible desde la versión v2.15.2.