@@ -729,66 +729,7 @@ func (session *Session) insertMapInterface(m map[string]interface{}) (int64, err
729729 args = append (args , m [colName ])
730730 }
731731
732- w := builder .NewWriter ()
733- if session .statement .cond .IsValid () {
734- if _ , err := w .WriteString (fmt .Sprintf ("INSERT INTO %s (" , session .engine .Quote (tableName ))); err != nil {
735- return 0 , err
736- }
737-
738- if err := writeStrings (w , append (columns , exprs .colNames ... ), "`" , "`" ); err != nil {
739- return 0 , err
740- }
741-
742- if _ , err := w .WriteString (") SELECT " ); err != nil {
743- return 0 , err
744- }
745-
746- if err := session .statement .writeArgs (w , args ); err != nil {
747- return 0 , err
748- }
749-
750- if len (exprs .args ) > 0 {
751- if _ , err := w .WriteString ("," ); err != nil {
752- return 0 , err
753- }
754- if err := exprs .writeArgs (w ); err != nil {
755- return 0 , err
756- }
757- }
758-
759- if _ , err := w .WriteString (fmt .Sprintf (" FROM %s WHERE " , session .engine .Quote (tableName ))); err != nil {
760- return 0 , err
761- }
762-
763- if err := session .statement .cond .WriteTo (w ); err != nil {
764- return 0 , err
765- }
766- } else {
767- qm := strings .Repeat ("?," , len (columns ))
768- qm = qm [:len (qm )- 1 ]
769-
770- if _ , err := w .WriteString (fmt .Sprintf ("INSERT INTO %s (`%s`) VALUES (%s)" , session .engine .Quote (tableName ), strings .Join (columns , "`,`" ), qm )); err != nil {
771- return 0 , err
772- }
773- w .Append (args ... )
774- }
775-
776- sql := w .String ()
777- args = w .Args ()
778-
779- if err := session .cacheInsert (tableName ); err != nil {
780- return 0 , err
781- }
782-
783- res , err := session .exec (sql , args ... )
784- if err != nil {
785- return 0 , err
786- }
787- affected , err := res .RowsAffected ()
788- if err != nil {
789- return 0 , err
790- }
791- return affected , nil
732+ return session .insertMap (columns , args )
792733}
793734
794735func (session * Session ) insertMapString (m map [string ]string ) (int64 , error ) {
@@ -808,14 +749,26 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
808749 columns = append (columns , k )
809750 }
810751 }
752+
811753 sort .Strings (columns )
812754
813755 var args = make ([]interface {}, 0 , len (m ))
814756 for _ , colName := range columns {
815757 args = append (args , m [colName ])
816758 }
817759
760+ return session .insertMap (columns , args )
761+ }
762+
763+ func (session * Session ) insertMap (columns []string , args []interface {}) (int64 , error ) {
764+ tableName := session .statement .TableName ()
765+ if len (tableName ) <= 0 {
766+ return 0 , ErrTableNotFound
767+ }
768+
769+ exprs := session .statement .exprColumns
818770 w := builder .NewWriter ()
771+ // if insert where
819772 if session .statement .cond .IsValid () {
820773 if _ , err := w .WriteString (fmt .Sprintf ("INSERT INTO %s (" , session .engine .Quote (tableName ))); err != nil {
821774 return 0 , err
@@ -853,10 +806,29 @@ func (session *Session) insertMapString(m map[string]string) (int64, error) {
853806 qm := strings .Repeat ("?," , len (columns ))
854807 qm = qm [:len (qm )- 1 ]
855808
856- if _ , err := w .WriteString (fmt .Sprintf ("INSERT INTO %s (`%s`) VALUES (%s) " , session .engine .Quote (tableName ), strings . Join ( columns , "`,`" ), qm )); err != nil {
809+ if _ , err := w .WriteString (fmt .Sprintf ("INSERT INTO %s (" , session .engine .Quote (tableName ))); err != nil {
857810 return 0 , err
858811 }
812+
813+ if err := writeStrings (w , append (columns , exprs .colNames ... ), "`" , "`" ); err != nil {
814+ return 0 , err
815+ }
816+ if _ , err := w .WriteString (fmt .Sprintf (") VALUES (%s" , qm )); err != nil {
817+ return 0 , err
818+ }
819+
859820 w .Append (args ... )
821+ if len (exprs .args ) > 0 {
822+ if _ , err := w .WriteString ("," ); err != nil {
823+ return 0 , err
824+ }
825+ if err := exprs .writeArgs (w ); err != nil {
826+ return 0 , err
827+ }
828+ }
829+ if _ , err := w .WriteString (")" ); err != nil {
830+ return 0 , err
831+ }
860832 }
861833
862834 sql := w .String ()
0 commit comments