Non so se c'è un modo più semplice, ma ho scritto un lexer e parser per espressioni SQL in un personalizzato Abstract Syntax Albero (come io non conoscevo Expression Trees di .net al momento) e non mi è piaciuto molto l'analisi di SQL.
La sintassi solo che non è molto amichevole analizzare, come ordine è diverso a seconda del contesto (ad esempio, il non in NOT IN
vs IS NOT
), i token sono sovraccaricati (la parentesi per sovrascrivere la precedenza operatore predefinito vs. parentesi per la creazione di un elenco come in WHERE x IN (1, 2)
) e così via.
Ovviamente l'utilizzo di un generatore di parser invece di eseguire il lexing e l'analisi personale semplificherebbe le cose, ma non so se c'è qualcosa di più specifico in SQL.
Quindi, scrivere il proprio è sicuramente possibile, anche se noioso.
fonte
2012-07-12 23:49:45
Hai trovato qualche soluzione per questa domanda. Ho anche bisogno di ottenere un albero di espressioni da una stringa sql in C# – Saravanan