func FindModel(model models.Model, db *pgx.ConnPool, tx *pgx.Tx, where string, fields ...string) error { fieldNames, fieldValues := model.Fields(fields...) query := SqlSelect(model.TableName(), fieldNames) where = fmt.Sprintf(" WHERE %s = ? %s", model.PrimaryName(), where) query = FormateToPQuery(query + where) args := []interface{}{model.PrimaryValue()} var err error if tx != nil { err = tx.QueryRow(query, args...).Scan(fieldValues...) } else { err = db.QueryRow(query, args...).Scan(fieldValues...) } if err == pgx.ErrNoRows { return models.ErrNotFound } if err != nil { return err } return nil }
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 }
func poolPrepareUseAndDeallocate(pool *pgx.ConnPool, actionNum int) error { psName := fmt.Sprintf("poolPreparedStatement%d", actionNum) _, err := pool.Prepare(psName, "select $1::text") if err != nil { return err } var s string err = pool.QueryRow(psName, "hello").Scan(&s) if err != nil { return err } if s != "hello" { return fmt.Errorf("Prepared statement did not return expected value: %v", s) } return pool.Deallocate(psName) }