phpmyadmin / phpmyadmin/sql-parser
Hex string literal x'...' incorrectly parsed as keyword + string
Nessuno ha ancora preso questa issue.
- Lingua principale
- PHP
- Stelle
- 485
- Fork
- 119
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Bug
The lexer incorrectly tokenizes hex string literals x'...' as two separate tokens (keyword x + string '...'),
causing the builder to produce invalid SQL x AS '...' instead of x'...'.
This affects CREATE TABLE statements with binary column defaults on MariaDB 11.8+ which outputs DEFAULT x'...'
in SHOW CREATE TABLE.
The b'...' binary string literal format is handled correctly — only x'...' is affected.
To Reproduce
$parser = new Parser("CREATE TABLE test (IP binary(16) NOT NULL DEFAULT x'00000000000000000000000000000000')");
echo $parser->statements[0]->build();
// Output: ... DEFAULT x AS `00000000000000000000000000000000`
// Expected: ... DEFAULT x'00000000000000000000000000000000'
Affected versions
Both 5.11.x and master.
Root cause
The Lexer's number parsing state machine has states 7-9 for b'...' binary literals, but no equivalent states for
x'...' hex string literals. The x is instead matched as a keyword.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia nella macchina a stati del Lexer per l'analisi dei numeri, in particolare negli stati 7-9 che gestiscono i literal b'...', e confrontali con il modo in cui x viene attualmente riconosciuto come parola chiave. Esegui nuovamente la riproduzione fornita di Parser e conferma che l'istruzione CREATE TABLE generata preservi DEFAULT x'...' invece di produrre x AS seguito da una stringa.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- php, sql
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 70/100