func insert(db *sqlx.DB, stmt string, params interface{}) (int, error) { rows, err := db.NamedQuery(stmt, params) if err != nil { return 0, err } defer rows.Close() if rows.Next() { var id int err := rows.Scan(&id) return id, err } return 0, errors.New("No serial value returned for insert: " + stmt + ", error: " + rows.Err().Error()) }
// InsertEvent takes a DB connect and inserts a new EventEntry func InsertEvent(db *sqlx.DB, event *models.Event) (*models.Event, error) { rows, err := db.NamedQuery(db.Rebind(` INSERT INTO events (title, slug, start_time, end_time, organizer_id, location_id, rsvps) VALUES (:title, :slug, :start_time, :end_time, :organizer_id, :location_id, :rsvps) RETURNING id`), event) if err != nil { return nil, err } if rows.Next() { rows.Scan(&event.ID) } return event, nil }
// InsertLocation inserts a new Location object into the DB func InsertLocation(db *sqlx.DB, location *models.Location) (*models.Location, error) { rows, err := db.NamedQuery(db.Rebind(` INSERT INTO locations (name, slug, address, lat_lng) VALUES (:name, :slug, :address, :lat_lng) RETURNING id `), location) if err != nil { return nil, err } if rows.Next() { rows.Scan(&location.ID) } return location, nil }
// InsertVehicle adds a vehicle to the database func InsertVehicle(db *sqlx.DB, v *muni.Vehicle) error { rows, err := db.NamedQuery(` INSERT INTO vehicles ( route_tag, vehicle_id, time_received, heading, dir_tag, lat, lng, leading_vehicle_id, predictable, secs_since_report, speed_km_hr ) VALUES ( :route_tag, :vehicle_id, :time_received, :heading, :dir_tag, :lat, :lng, :leading_vehicle_id, :predictable, :secs_since_report, :speed_km_hr );`, v) if err != nil { return err } rows.Close() return nil }
// Execute takes a database instance, SQL statement, and parameters and executes the query // returning the resulting rows. func Execute(db *sqlx.DB, sql string, params map[string]interface{}) (*Iterator, error) { var ( err error rows *sqlx.Rows ) // Execute the query. if params != nil && len(params) > 0 { rows, err = db.NamedQuery(sql, params) } else { rows, err = db.Queryx(sql) } if err != nil { return nil, err } return &Iterator{ rows: rows, }, nil }