exports.GetCoinFromTicker = function(ticker, callback)
{
    return new Promise(async (ok, cancel) => {
        try {
            const rows = await g_constants.dbTables['coins'].Select('ROWID AS id, *', 'ticker="'+escape(ticker)+'"', '');
            if (!rows || !rows.length || !rows[0].name) throw new Error('Coin ticker ('+escape(ticker)+') not found!');
            return ok(rows[0]);
        }
        catch(e) {
            return cancel(e);
        }
    });
}
The software constructs all or part of an SQL command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended SQL command when it is sent to a downstream component.