// 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 }