Dopo essere stato esposto a numerosi livelli di astrazione del database, sto iniziando a chiedermi quale sia il punto di ogni libreria che inventa il proprio diverso paradigma per accedere ai dati. Raccogliere un nuovo DAL è come imparare di nuovo una nuova lingua, quando di solito tutto ciò che voglio fare è convincere il livello a generare una query SQL che ho già scritto nella mia testa.
E questo senza nemmeno toccare la leggibilità dopo il fatto:
# 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')
Cosa c'è di sbagliato nella sintassi SQL standard? È stato creato per uno scopo specifico e si adatta perfettamente a quello scopo. Forse sono solo io, ma capisco lo snippet C molto più prontamente dei primi due. Le parole chiave rinominate e i trucchi di sintassi sono carini, ma IMO, quando si tratta di esso, non facilitano il recupero delle righe per il programmatore.
Questo probabilmente sembrava un lungo sfogo, ma qui c'è una vera domanda. Dal momento che ogni DAL sembra inventare un nuovo DSL per le query piuttosto che semplicemente analizzare il vero e proprio SQL, ci devono essere vantaggi dell'utilizzo di una sintassi diversa o carenze nella sintassi SQL standard che non capisco ci siano. Qualcuno potrebbe indicare cosa sto trascurando qui?