Sentencia SQL al árbol de expresiones

c# expression-trees

Pregunta

Me pregunto cómo se podría traducir una cadena sql a un árbol de expresión. Actualmente, en Linq to SQL, el árbol de expresiones se traduce a una declaración de SQL. ¿Cómo va el otro camino? ¿Cómo traducirías?

select * from books where bookname like '%The%' and year > 2008 

en un árbol de expresión en c #?

Respuesta popular

No sé si hay una forma más fácil, pero escribí un lexer y un analizador de expresiones SQL en un árbol de sintaxis abstracta personalizado (como no sabía sobre los árboles de expresión de .net en ese momento) y realmente no disfruté análisis de SQL.

La sintaxis no es muy fácil de analizar, ya que el orden es diferente según el contexto (p. Ej., No en NOT IN IS NOT ), los tokens están sobrecargados (el paréntesis para anular la precedencia del operador predeterminado contra los paréntesis para crear una lista como en WHERE x IN (1, 2) ) y así sucesivamente.

Obviamente, usar un generador de analizador en lugar de hacer su propio lexing y analizar haría las cosas más fáciles, pero no sé si hay algo más específico de SQL.

Por lo tanto, escribir el tuyo es definitivamente posible, aunque tedioso.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow