Dopo essere stato esposto a numerosi livelli di astrazione del database, comincio a chiedermi quale sia il significato di ogni libreria che inventa il proprio paradigma per accedere ai dati. Raccogliere un nuovo DAL è come imparare una nuova lingua da capo, quando di solito tutto ciò che voglio fare è convincere il livello ad emettere 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 tale scopo. Forse sono solo io, ma capisco lo snippet C molto più facilmente dei primi due. Le parole chiave e gli accorgimenti di sintassi rinominati sono carini, ma IMO, quando arriva fino a questo punto, non rendono più facile il recupero delle righe per il coder.
Probabilmente è sembrato un lungo rant, ma qui è una vera domanda. Dal momento che ogni DAL sembra inventare una nuova DSL per le query piuttosto che analizzare solo SQL provato e true, è necessario che i vantaggi dell'uso della sintassi diversa o delle deficienze nella sintassi SQL standard di cui non mi rendo conto siano presenti. Qualcuno potrebbe per favore indicare cosa sto trascurando qui?