func updateOrCreateModel(model models.Model, db *pgx.ConnPool, tx *pgx.Tx, isNew, isRemove bool, where string, fields ...string) error { if isNew { model.BeforeCreate() } if isRemove { model.BeforeDelete() } model.BeforeSave() fieldNames, fieldValues := model.Fields(fields...) var query string = SqlUpdate(model.TableName(), fieldNames) if isNew { query = SqlInsert(model.TableName(), fieldNames) } where = fmt.Sprintf(" WHERE %[1]s = ? %[2]s RETURNING %[1]s", model.PrimaryName(), where) if isNew { where = fmt.Sprintf(" RETURNING %s", model.PrimaryName()) } else { fieldValues = append(fieldValues, model.PrimaryValue()) } query = FormateToPQuery(query + where) var err error if tx != nil { err = tx.QueryRow(query, fieldValues...).Scan(model.Maps()[model.PrimaryName()]) } else { err = db.QueryRow(query, fieldValues...).Scan(model.Maps()[model.PrimaryName()]) } if err != nil { return err } return nil }