iafisher / sqliteparser

A parser for SQLite's dialect of SQL
https://sqliteparser.readthedocs.io/en/latest/
MIT License
1 stars 1 forks source link

Allow SQL keywords as identifiers in some positions #5

Open iafisher opened 2 years ago

iafisher commented 2 years ago

The SQLite docs say that keywords can't be used as identifiers, but in reality the SQLite implementation is fairly permissive. Try running this script to see which SQL keywords can be used as column names:

import sqlite3
from sqliteparser.lexer import SQL_KEYWORDS

conn = sqlite3.connect(":memory:")
disallowed = set()
allowed = set()
for i, keyword in enumerate(SQL_KEYWORDS):
    try:
        conn.execute(f"CREATE TABLE lol{i}({keyword} text)")
    except sqlite3.OperationalError:
        disallowed.add(keyword)
    else:
        allowed.add(keyword)

for keyword in sorted(disallowed):
    print("Disallowed keyword:", keyword)

print()

for keyword in sorted(allowed):
    print("Allowed keyword:", keyword)

conn.close()