// getContract returns the Contract object, creating a database record if needed.
func (a *AccountFeed) getContract(criteria core.Contract) (core.Contract, error) {
	existing := new(core.Contract)
	err := meddler.QueryRow(a.tx, existing,
		"SELECT * FROM contract WHERE ib_contract_id = $1 AND "+
			"iso_4217_code = $2 AND symbol_id = $3 AND local_symbol_id = $4 AND "+
			"security_type_id = $5 AND primary_exchange_id = $6",
		criteria.IbContractId, criteria.Iso4217Code, criteria.SymbolId,
		criteria.LocalSymbolId, criteria.SecurityTypeId, criteria.PrimaryExchangeId)
	if err != nil && err != sql.ErrNoRows {
		return *existing, err
	}

	if existing.Id != 0 {
		return *existing, nil
	}

	criteria.Created = a.created
	err = meddler.Insert(a.tx, "contract", &criteria)
	return criteria, err
}