Fornire un meccanismo per query SQL parametricheLe librerie ODBC in genere offrono la possibilità di creare query parametrizzate che passano la query e i parametri al database separatamente. Questo elimina sostanzialmente il rischio di attacchi di iniezione SQL, ma è anche molto comodo dal punto di vista della programmazione. Poiché JMP ha query ODBC, dovrebbe anche avere query parametrizzate in modo da poter fare:
Execute SQL(database,
"Select * from Employees where Name like ? and Status=?",
"BobList",
{"Bob", "Active"}
);query parametriche di pyodbc:
https://github.com/mkleehammer/pyodbc/wiki/Getting-started#parameters
Le query parametriche dell'ecosistema .NET:
https://docs.microsoft.com/en-us/dotnet/api/system.data.odbc.odbccommand.parameters?redirectedfrom=MSDN&view=dotnet-plat-ext-5.0#System_Data_Odbc_OdbcCommand_Parameters
Automazione e scriptingRe: Fornire un meccanismo per query SQL parametrichePenso che potresti implementarlo usando query denominate: Create Named Query() ed Execute Named Query(). In realtà, queste funzioni userebbero le funzioni ODBC SQLPrepare(), SQLBindParameter() e SQLExecute(). La funzione Create Named Query() accetterebbe l'istruzione SQL e i parametri. Restituirebbe un oggetto query denominato. Execute Named Query() accetterebbe l'oggetto di connessione al database, l'oggetto query denominato e i valori dei parametri come input e restituirebbe i risultati SQL come una tabella dati (se necessario). L'oggetto di connessione al database potrebbe essere un input della funzione create anziché della funzione execute. Il vantaggio di questo approccio è che la creazione può avvenire all'inizializzazione dello script lasciando la parte in esecuzione separata, il che sarà probabilmente più efficiente.
Re: Fornire un meccanismo per query SQL parametricheMi piacerebbe avere qualcosa di simile, almeno per poter passare separatamente gli argomenti di connessione e query SQL, in modo da semplificare i test unitari. Ad esempio, quando si testa una funzione che contiene una query SQL, la connessione potrebbe essere facilmente sostituita con una tabella JMP locale.