func (d *Database) SetTranslations(tx *sqlx.Tx, field string, translations []struct { Lang_Isocode string Text string }) (err error) { // Check if translation entry exists for this database and this lang var transID int for _, tr := range translations { err = tx.QueryRow("SELECT count(database_id) FROM database_tr WHERE database_id = $1 AND lang_isocode = $2", d.Id, tr.Lang_Isocode).Scan(&transID) if transID == 0 { _, err = tx.Exec("INSERT INTO database_tr (database_id, lang_isocode, description, geographical_limit, bibliography, context_description, source_description, source_relation, copyright, subject) VALUES ($1, $2, '', '', '', '', '', '', '', '')", d.Id, tr.Lang_Isocode) if err != nil { err = errors.New("database::SetTranslations: " + err.Error()) } } if tr.Text != "" { _, err = tx.Exec("UPDATE database_tr SET "+field+" = $1 WHERE database_id = $2 and lang_isocode = $3", tr.Text, d.Id, tr.Lang_Isocode) } } if err != nil { err = errors.New("database::SetTranslations: " + err.Error()) } return }
func (b *Base) InsertIntoTable(tx *sqlx.Tx, data map[string]interface{}) (sql.Result, error) { if b.table == "" { return nil, errors.New("Table must not be empty.") } tx, wrapInSingleTransaction, err := b.newTransactionIfNeeded(tx) if tx == nil { return nil, errors.New("Transaction struct must not be empty.") } if err != nil { return nil, err } keys := make([]string, 0) dollarMarks := make([]string, 0) values := make([]interface{}, 0) loopCounter := 1 for key, value := range data { keys = append(keys, key) dollarMarks = append(dollarMarks, fmt.Sprintf("$%v", loopCounter)) values = append(values, value) loopCounter++ } query := fmt.Sprintf( "INSERT INTO %v (%v) VALUES (%v)", b.table, strings.Join(keys, ","), strings.Join(dollarMarks, ",")) result := &InsertResult{} result.rowsAffected = 1 if b.hasID { query = query + " RETURNING id" var lastInsertId int64 err = tx.QueryRow(query, values...).Scan(&lastInsertId) if err != nil { return nil, err } result.lastInsertId = lastInsertId } else { _, err := tx.Exec(query, values...) if err != nil { return nil, err } } if wrapInSingleTransaction == true { err = tx.Commit() } return result, err }
// SetTranslation set translations ! func (u *Shapefile) SetTranslations(tx *sqlx.Tx, field string, translations []struct { Lang_Isocode string Text string }) (err error) { // Check if translation entry exists for this shapefile and this lang var transID int for _, tr := range translations { err = tx.QueryRow("SELECT count(shapefile_id) FROM shapefile_tr WHERE shapefile_id = $1 AND lang_isocode = $2", u.Id, tr.Lang_Isocode).Scan(&transID) if transID == 0 { _, err = tx.Exec("INSERT INTO shapefile_tr (shapefile_id, lang_isocode, name, attribution, copyright, description) VALUES ($1, $2, '', '', '', '')", u.Id, tr.Lang_Isocode) if err != nil { return } } if tr.Text != "" { _, err = tx.Exec("UPDATE shapefile_tr SET "+field+" = $1 WHERE shapefile_id = $2 and lang_isocode = $3", tr.Text, u.Id, tr.Lang_Isocode) } } return }