Test su più fornitori DBMS
Domanda
Accetta questa query:
SELECT *
FROM MyTable
WHERE MyColumn = 'SomeValue'
ORDER BY SomeFakeQualifier.MyColumn DESC
Sembra che SqlServer ignori il qualificatore in questo caso. Se aggiungi un JOIN
, lo prenderà in considerazione.
Questo in realtà non è un problema, fino a quando non si desidera rendere vitali le query tra i fornitori di DBMS. Oracle, ad esempio, si lamenterà, giustamente, che il qualificatore non è valido.
Sì, utilizziamo un ORM che elimina molto di questo, ma abbiamo ancora bisogno di JDBC per alcune azioni (è la natura del nostro prodotto e il suo supporto per le query dinamiche). In effetti, è a causa di ciò che si è verificato questo problema: qualcuno ha copiato una query denominata JPA in una query fornita da JDBC, ma ha lasciato il nome dell'oggetto anziché il nome della tabella.
Quindi suppongo che la domanda sia: qualcun altro si è imbattuto in questo? In tal caso, qual è il modo migliore per testare il tuo codice per assicurarti che funzioni tra & Quot; principali tre & Quot; DBMS (SqlServer, Oracle, DB2)? Abbiamo un team di controllo qualità, ma sembra che ci dovrebbe essere un modo migliore per testare l'unità per queste idiosincrasie.
Nota, cerchiamo sempre di imporre la scrittura di ANSI SQL per evitare problemi, ma alcune cose, come il problema di cui sopra, possono sfuggire
Spero che abbia senso. Posso fornire più contesto se necessario.
TIA
Soluzione
La tua soluzione qui è in realtà test unitari delle tue query combinati con integrazione continua . Hai delle domande sotto forma di codice JDBC. È abbastanza facile scrivere unit test per connettersi ai database pertinenti ed eseguire le query in modo tale da almeno vedere se vengono eseguite, anche se non ti interessano i risultati, che è lo standard di cui stai parlando .
Probabilmente puoi estenderlo per misurare le prestazioni e / oi risultati, ma trovo che questi tipi di test siano estremamente fragili e tendano a rompersi molto, molto rapidamente poiché inevitabilmente si verificano più cambiamenti.