summaryrefslogtreecommitdiffstats
path: root/vendor/xorm.io/xorm/session_insert.go
diff options
context:
space:
mode:
authorguillep2k <18600385+guillep2k@users.noreply.github.com>2020-01-20 12:45:14 -0300
committerAntoine GIRARD <sapk@users.noreply.github.com>2020-01-20 16:45:14 +0100
commitad1b6d439fe0e0875e54227e0bc23a74411f490e (patch)
tree8e16e25a913d167ebb772ad2e0e92cbba9c56b66 /vendor/xorm.io/xorm/session_insert.go
parent6d6f1d568ec36786b1020f4b43cbd872228c6633 (diff)
downloadgitea-ad1b6d439fe0e0875e54227e0bc23a74411f490e.tar.gz
gitea-ad1b6d439fe0e0875e54227e0bc23a74411f490e.zip
Add support for database schema in PostgreSQL (#8819)
* Add support for database schema * Require setting search_path for the db user * Add schema setting to admin/config.tmpl * Use a schema different from default for psql tests * Update postgres scripts to use custom schema * Update to xorm/core 0.7.3 and xorm/xorm c37aff9b3a * Fix migration test Co-authored-by: Antoine GIRARD <sapk@users.noreply.github.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'vendor/xorm.io/xorm/session_insert.go')
-rw-r--r--vendor/xorm.io/xorm/session_insert.go94
1 files changed, 33 insertions, 61 deletions
diff --git a/vendor/xorm.io/xorm/session_insert.go b/vendor/xorm.io/xorm/session_insert.go
index 1e19ce7a4e..5f8f7e1ee8 100644
--- a/vendor/xorm.io/xorm/session_insert.go
+++ b/vendor/xorm.io/xorm/session_insert.go
@@ -729,66 +729,7 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err
args = append(args, m[colName])
}
- w := builder.NewWriter()
- if session.statement.cond.IsValid() {
- if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (", session.engine.Quote(tableName))); err != nil {
- return 0, err
- }
-
- if err := writeStrings(w, append(columns, exprs.colNames...), "`", "`"); err != nil {
- return 0, err
- }
-
- if _, err := w.WriteString(") SELECT "); err != nil {
- return 0, err
- }
-
- if err := session.statement.writeArgs(w, args); err != nil {
- return 0, err
- }
-
- if len(exprs.args) > 0 {
- if _, err := w.WriteString(","); err != nil {
- return 0, err
- }
- if err := exprs.writeArgs(w); err != nil {
- return 0, err
- }
- }
-
- if _, err := w.WriteString(fmt.Sprintf(" FROM %s WHERE ", session.engine.Quote(tableName))); err != nil {
- return 0, err
- }
-
- if err := session.statement.cond.WriteTo(w); err != nil {
- return 0, err
- }
- } else {
- qm := strings.Repeat("?,", len(columns))
- qm = qm[:len(qm)-1]
-
- if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (`%s`) VALUES (%s)", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm)); err != nil {
- return 0, err
- }
- w.Append(args...)
- }
-
- sql := w.String()
- args = w.Args()
-
- if err := session.cacheInsert(tableName); err != nil {
- return 0, err
- }
-
- res, err := session.exec(sql, args...)
- if err != nil {
- return 0, err
- }
- affected, err := res.RowsAffected()
- if err != nil {
- return 0, err
- }
- return affected, nil
+ return session.insertMap(columns, args)
}
func (session *Session) insertMapString(m map[string]string) (int64, error) {
@@ -808,6 +749,7 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
columns = append(columns, k)
}
}
+
sort.Strings(columns)
var args = make([]interface{}, 0, len(m))
@@ -815,7 +757,18 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
args = append(args, m[colName])
}
+ return session.insertMap(columns, args)
+}
+
+func (session *Session) insertMap(columns []string, args []interface{}) (int64, error) {
+ tableName := session.statement.TableName()
+ if len(tableName) <= 0 {
+ return 0, ErrTableNotFound
+ }
+
+ exprs := session.statement.exprColumns
w := builder.NewWriter()
+ // if insert where
if session.statement.cond.IsValid() {
if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (", session.engine.Quote(tableName))); err != nil {
return 0, err
@@ -853,10 +806,29 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
qm := strings.Repeat("?,", len(columns))
qm = qm[:len(qm)-1]
- if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (`%s`) VALUES (%s)", session.engine.Quote(tableName), strings.Join(columns, "`,`"), qm)); err != nil {
+ if _, err := w.WriteString(fmt.Sprintf("INSERT INTO %s (", session.engine.Quote(tableName))); err != nil {
return 0, err
}
+
+ if err := writeStrings(w, append(columns, exprs.colNames...), "`", "`"); err != nil {
+ return 0, err
+ }
+ if _, err := w.WriteString(fmt.Sprintf(") VALUES (%s", qm)); err != nil {
+ return 0, err
+ }
+
w.Append(args...)
+ if len(exprs.args) > 0 {
+ if _, err := w.WriteString(","); err != nil {
+ return 0, err
+ }
+ if err := exprs.writeArgs(w); err != nil {
+ return 0, err
+ }
+ }
+ if _, err := w.WriteString(")"); err != nil {
+ return 0, err
+ }
}
sql := w.String()