Después de estar expuesto a numerosas capas de abstracción de bases de datos, empiezo a preguntarme cuál es el punto de que cada biblioteca invente su propio paradigma diferente para acceder a los datos. Elegir un nuevo DAL se siente como aprender un nuevo idioma nuevamente, cuando generalmente todo lo que quiero hacer es convencer a la capa para que genere una consulta SQL que ya he escrito en mi cabeza.
Y eso sin siquiera tocar la legibilidad después del hecho:
# Exhibit A: A typical DAL
rows = db(db.ips_x_users.ip_addr == '127.0.0.1')
.inner_join(db.ips_x_users.user_id == db.users.id)
.select(order=(db.ips_x_users.last_seen, 'desc'), limit=10)
# Exhibit B: Another typical DAL
rows = db.ips_x_users
.join(db.users, on=db.ips_x_users.user_id == db.users.id)
.filter(db.ips_x_users.ip_addr == '127.0.0.1')
.select(sort=~db.ips_x_users, limit=10)
# Exhibit C: A hypothetical DAL based on standard SQL syntax
rows = db('''SELECT * FROM ips_x_users
INNER JOIN users ON
(ips_x_users.user_id = users.id)
WHERE ips_x_users.ip_addr = ip
ORDER BY last_seen DESC LIMIT 10''', ip='127.0.0.1')
¿Qué hay de malo con la sintaxis SQL estándar? Fue creado para un propósito específico, y se adapta perfectamente a ese propósito. Tal vez solo soy yo, pero entiendo el fragmento C con mucha más facilidad que los dos primeros. Las palabras clave renombradas y los trucos de sintaxis son lindos, pero en mi opinión, cuando se trata de eso, no facilitan la recuperación de filas para el codificador.
Esto probablemente parecía una larga perorata, pero no es una pregunta real aquí. Dado que cada DAL parece inventar un nuevo DSL para consultas en lugar de simplemente analizar SQL probado y verdadero, debe haber beneficios de usar una sintaxis diferente o deficiencias en la sintaxis SQL estándar que no sé que existen. ¿Alguien podría señalar lo que estoy pasando por alto aquí?