func makeCacheKey(wl, nzDefaults []string) string { buf := strmangle.GetBuffer() for _, w := range wl { buf.WriteString(w) } if len(nzDefaults) != 0 { buf.WriteByte('.') } for _, nz := range nzDefaults { buf.WriteString(nz) } str := buf.String() strmangle.PutBuffer(buf) return str }
// Upsert attempts an insert using an executor, and does an update or ignore on conflict. func (o *FeaturepropPub) Upsert(exec boil.Executor, updateOnConflict bool, conflictColumns []string, updateColumns []string, whitelist ...string) error { if o == nil { return errors.New("chado: no featureprop_pub provided for upsert") } if err := o.doBeforeUpsertHooks(exec); err != nil { return err } nzDefaults := queries.NonZeroDefaultSet(featurepropPubColumnsWithDefault, o) // Build cache key in-line uglily - mysql vs postgres problems buf := strmangle.GetBuffer() if updateOnConflict { buf.WriteByte('t') } else { buf.WriteByte('f') } buf.WriteByte('.') for _, c := range conflictColumns { buf.WriteString(c) } buf.WriteByte('.') for _, c := range updateColumns { buf.WriteString(c) } buf.WriteByte('.') for _, c := range whitelist { buf.WriteString(c) } buf.WriteByte('.') for _, c := range nzDefaults { buf.WriteString(c) } key := buf.String() strmangle.PutBuffer(buf) featurepropPubUpsertCacheMut.RLock() cache, cached := featurepropPubUpsertCache[key] featurepropPubUpsertCacheMut.RUnlock() var err error if !cached { var ret []string whitelist, ret = strmangle.InsertColumnSet( featurepropPubColumns, featurepropPubColumnsWithDefault, featurepropPubColumnsWithoutDefault, nzDefaults, whitelist, ) update := strmangle.UpdateColumnSet( featurepropPubColumns, featurepropPubPrimaryKeyColumns, updateColumns, ) if len(update) == 0 { return errors.New("chado: unable to upsert featureprop_pub, could not build update column list") } conflict := conflictColumns if len(conflict) == 0 { conflict = make([]string, len(featurepropPubPrimaryKeyColumns)) copy(conflict, featurepropPubPrimaryKeyColumns) } cache.query = queries.BuildUpsertQueryPostgres(dialect, "\"featureprop_pub\"", updateOnConflict, ret, update, conflict, whitelist) cache.valueMapping, err = queries.BindMapping(featurepropPubType, featurepropPubMapping, whitelist) if err != nil { return err } if len(ret) != 0 { cache.retMapping, err = queries.BindMapping(featurepropPubType, featurepropPubMapping, ret) if err != nil { return err } } } value := reflect.Indirect(reflect.ValueOf(o)) vals := queries.ValuesFromMapping(value, cache.valueMapping) var returns []interface{} if len(cache.retMapping) != 0 { returns = queries.PtrsFromMapping(value, cache.retMapping) } if boil.DebugMode { fmt.Fprintln(boil.DebugWriter, cache.query) fmt.Fprintln(boil.DebugWriter, vals) } if len(cache.retMapping) != 0 { err = exec.QueryRow(cache.query, vals...).Scan(returns...) } else { _, err = exec.Exec(cache.query, vals...) } if err != nil { return errors.Wrap(err, "chado: unable to upsert for featureprop_pub") } if !cached { featurepropPubUpsertCacheMut.Lock() featurepropPubUpsertCache[key] = cache featurepropPubUpsertCacheMut.Unlock() } return o.doAfterUpsertHooks(exec) }
// Upsert attempts an insert using an executor, and does an update or ignore on conflict. func (o *AuthRolePermission) Upsert(exec boil.Executor, updateOnConflict bool, conflictColumns []string, updateColumns []string, whitelist ...string) error { if o == nil { return errors.New("chado: no auth_role_permission provided for upsert") } currTime := time.Now().In(boil.GetLocation()) if o.CreatedAt.Time.IsZero() { o.CreatedAt.Time = currTime o.CreatedAt.Valid = true } o.UpdatedAt.Time = currTime o.UpdatedAt.Valid = true if err := o.doBeforeUpsertHooks(exec); err != nil { return err } nzDefaults := queries.NonZeroDefaultSet(authRolePermissionColumnsWithDefault, o) // Build cache key in-line uglily - mysql vs postgres problems buf := strmangle.GetBuffer() if updateOnConflict { buf.WriteByte('t') } else { buf.WriteByte('f') } buf.WriteByte('.') for _, c := range conflictColumns { buf.WriteString(c) } buf.WriteByte('.') for _, c := range updateColumns { buf.WriteString(c) } buf.WriteByte('.') for _, c := range whitelist { buf.WriteString(c) } buf.WriteByte('.') for _, c := range nzDefaults { buf.WriteString(c) } key := buf.String() strmangle.PutBuffer(buf) authRolePermissionUpsertCacheMut.RLock() cache, cached := authRolePermissionUpsertCache[key] authRolePermissionUpsertCacheMut.RUnlock() var err error if !cached { var ret []string whitelist, ret = strmangle.InsertColumnSet( authRolePermissionColumns, authRolePermissionColumnsWithDefault, authRolePermissionColumnsWithoutDefault, nzDefaults, whitelist, ) update := strmangle.UpdateColumnSet( authRolePermissionColumns, authRolePermissionPrimaryKeyColumns, updateColumns, ) if len(update) == 0 { return errors.New("chado: unable to upsert auth_role_permission, could not build update column list") } conflict := conflictColumns if len(conflict) == 0 { conflict = make([]string, len(authRolePermissionPrimaryKeyColumns)) copy(conflict, authRolePermissionPrimaryKeyColumns) } cache.query = queries.BuildUpsertQueryPostgres(dialect, "\"auth_role_permission\"", updateOnConflict, ret, update, conflict, whitelist) cache.valueMapping, err = queries.BindMapping(authRolePermissionType, authRolePermissionMapping, whitelist) if err != nil { return err } if len(ret) != 0 { cache.retMapping, err = queries.BindMapping(authRolePermissionType, authRolePermissionMapping, ret) if err != nil { return err } } } value := reflect.Indirect(reflect.ValueOf(o)) vals := queries.ValuesFromMapping(value, cache.valueMapping) var returns []interface{} if len(cache.retMapping) != 0 { returns = queries.PtrsFromMapping(value, cache.retMapping) } if boil.DebugMode { fmt.Fprintln(boil.DebugWriter, cache.query) fmt.Fprintln(boil.DebugWriter, vals) } if len(cache.retMapping) != 0 { err = exec.QueryRow(cache.query, vals...).Scan(returns...) } else { _, err = exec.Exec(cache.query, vals...) } if err != nil { return errors.Wrap(err, "chado: unable to upsert for auth_role_permission") } if !cached { authRolePermissionUpsertCacheMut.Lock() authRolePermissionUpsertCache[key] = cache authRolePermissionUpsertCacheMut.Unlock() } return o.doAfterUpsertHooks(exec) }