SQLite: bitwise XOR is generated as a ^ b, which SQLite can't parse
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 70/100
Direzione di ricerca
Inizia in sqlglot/dialects/sqlite.py: la classe Generator eredita il bitwisexor_sql predefinito, che emette ^. Aggiungi un gestore BitwiseXor che si espande in (a | b) & ~(a & b), oppure chiama unsupported se i manutentori preferiscono segnalarlo. Aggiungi casi a tests/dialects/test_sqlite.py che coprano i quattro dialetti di lettura oltre a operandi negativi e NULL, ed esegui quel file di test — finito quando l'SQL generato viene eseguito su sqlite3.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Fully reproducible code snippet
SQLite has no bitwise XOR operator, but the sqlite generator writes BitwiseXor as a ^ b, which SQLite can't parse. No unsupported warning is raised either, so unsupported_level=RAISE lets it through:
import sqlite3, sqlglot
from sqlglot import ErrorLevel
for sql, read in [
("SELECT 5 # 3", "postgres"),
("SELECT XOR(5, 3)", "duckdb"),
("SELECT BITXOR(5, 3)", "snowflake"),
("SELECT 5 ^ 3", "mysql"),
]:
out = sqlglot.transpile(sql, read=read, write="sqlite", unsupported_level=ErrorLevel.RAISE)[0]
print(out) # SELECT 5 ^ 3
sqlite3.connect(":memory:").execute(out)
# sqlite3.OperationalError: unrecognized token: "^"
Expected: SQLite has |, & and ~ on 64-bit integers, so (a | b) & ~(a & b) gives the same result (including negatives and NULL propagation): (5 | 3) & ~(5 & 3) = 6, (-5 | 3) & ~(-5 & 3) = -8. If that's not wanted, an unsupported call would at least flag it, like the BITWISE_XOR aggregate already does.
Official Documentation
SQLite operators (no ^ / XOR; &, |, ~ exist): https://www.sqlite.org/lang_expr.html#operators_and_parse_affecting_attributes
Tested on main at b294f7f, SQLite 3.54.1.
- Lingua principale
- Python
- Stelle
- 9.8k
- Fork
- 1.4k
- Merge medio
- 13h 19m
- PR unite (30g)
- 243
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi 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.
Altre issue di tobymao/sqlglot
-
SQLite: CAST(x AS JSON) is generated verbatim, which SQLite evaluates as a numeric castForse già presa @Gowthamsuryagolla l’ha presa oggi. Aperta
Difficoltà 3/5 Mezza giornata Idoneità per principianti 32/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 30/100
I maintainer di solito rispondono entro 1 giorno
-
Optimizer drops parentheses for `NOT (<date> = DATE_TRUNC(...))`, changing query resultsForse già presa @parthdembla007 l’ha presa oggi. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 28/100
I maintainer di solito rispondono entro 1 giorno
-
BigQuery: region-qualified INFORMATION_SCHEMA reference is rewritten across transpile passes, gaining an invented aliasForse già presa @ansh-rohilla l’ha presa oggi. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 28/100
I maintainer di solito rispondono entro 1 giorno
-
DATE_ADD/DATE_SUB with a single argument raises AttributeError (BigQuery, MySQL, Doris, StarRocks)Forse già presa @akchhayasharma l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 42/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di tobymao/sqlglot
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
datamodel-code-generator/datamodel-code-generator#6906 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
UKGovernmentBEIS/optstop#12 ·
-
bug good first issue severity: low
Difficoltà 1/5 1-3 ore Idoneità per principianti 85/100
TMHSDigital/Awesome-Ads#37 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
smokin-salmon/smoked-salmon#1095 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
Sienna-Platform/SiennaSchemas#130 ·
I maintainer di solito rispondono entro 3 giorni