refactor: remove unnecessary prepared statement allocation (#6374)
This commit is contained in:
		
							parent
							
								
									c1ea730367
								
							
						
					
					
						commit
						7a76c042e6
					
				
							
								
								
									
										48
									
								
								gorm.go
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								gorm.go
									
									
									
									
									
								
							| @ -187,15 +187,9 @@ func Open(dialector Dialector, opts ...Option) (db *DB, err error) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	preparedStmt := &PreparedStmtDB{ |  | ||||||
| 		ConnPool:    db.ConnPool, |  | ||||||
| 		Stmts:       make(map[string]*Stmt), |  | ||||||
| 		Mux:         &sync.RWMutex{}, |  | ||||||
| 		PreparedSQL: make([]string, 0, 100), |  | ||||||
| 	} |  | ||||||
| 	db.cacheStore.Store(preparedStmtDBKey, preparedStmt) |  | ||||||
| 
 |  | ||||||
| 	if config.PrepareStmt { | 	if config.PrepareStmt { | ||||||
|  | 		preparedStmt := NewPreparedStmtDB(db.ConnPool) | ||||||
|  | 		db.cacheStore.Store(preparedStmtDBKey, preparedStmt) | ||||||
| 		db.ConnPool = preparedStmt | 		db.ConnPool = preparedStmt | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -256,24 +250,30 @@ func (db *DB) Session(config *Session) *DB { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if config.PrepareStmt { | 	if config.PrepareStmt { | ||||||
|  | 		var preparedStmt *PreparedStmtDB | ||||||
|  | 
 | ||||||
| 		if v, ok := db.cacheStore.Load(preparedStmtDBKey); ok { | 		if v, ok := db.cacheStore.Load(preparedStmtDBKey); ok { | ||||||
| 			preparedStmt := v.(*PreparedStmtDB) | 			preparedStmt = v.(*PreparedStmtDB) | ||||||
| 			switch t := tx.Statement.ConnPool.(type) { | 		} else { | ||||||
| 			case Tx: | 			preparedStmt = NewPreparedStmtDB(db.ConnPool) | ||||||
| 				tx.Statement.ConnPool = &PreparedStmtTX{ | 			db.cacheStore.Store(preparedStmtDBKey, preparedStmt) | ||||||
| 					Tx:             t, |  | ||||||
| 					PreparedStmtDB: preparedStmt, |  | ||||||
| 				} |  | ||||||
| 			default: |  | ||||||
| 				tx.Statement.ConnPool = &PreparedStmtDB{ |  | ||||||
| 					ConnPool: db.Config.ConnPool, |  | ||||||
| 					Mux:      preparedStmt.Mux, |  | ||||||
| 					Stmts:    preparedStmt.Stmts, |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			txConfig.ConnPool = tx.Statement.ConnPool |  | ||||||
| 			txConfig.PrepareStmt = true |  | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		switch t := tx.Statement.ConnPool.(type) { | ||||||
|  | 		case Tx: | ||||||
|  | 			tx.Statement.ConnPool = &PreparedStmtTX{ | ||||||
|  | 				Tx:             t, | ||||||
|  | 				PreparedStmtDB: preparedStmt, | ||||||
|  | 			} | ||||||
|  | 		default: | ||||||
|  | 			tx.Statement.ConnPool = &PreparedStmtDB{ | ||||||
|  | 				ConnPool: db.Config.ConnPool, | ||||||
|  | 				Mux:      preparedStmt.Mux, | ||||||
|  | 				Stmts:    preparedStmt.Stmts, | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		txConfig.ConnPool = tx.Statement.ConnPool | ||||||
|  | 		txConfig.PrepareStmt = true | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if config.SkipHooks { | 	if config.SkipHooks { | ||||||
|  | |||||||
| @ -21,6 +21,15 @@ type PreparedStmtDB struct { | |||||||
| 	ConnPool | 	ConnPool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func NewPreparedStmtDB(connPool ConnPool) *PreparedStmtDB { | ||||||
|  | 	return &PreparedStmtDB{ | ||||||
|  | 		ConnPool:    connPool, | ||||||
|  | 		Stmts:       make(map[string]*Stmt), | ||||||
|  | 		Mux:         &sync.RWMutex{}, | ||||||
|  | 		PreparedSQL: make([]string, 0, 100), | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (db *PreparedStmtDB) GetDBConn() (*sql.DB, error) { | func (db *PreparedStmtDB) GetDBConn() (*sql.DB, error) { | ||||||
| 	if dbConnector, ok := db.ConnPool.(GetDBConnector); ok && dbConnector != nil { | 	if dbConnector, ok := db.ConnPool.(GetDBConnector); ok && dbConnector != nil { | ||||||
| 		return dbConnector.GetDBConn() | 		return dbConnector.GetDBConn() | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Lev Zakharov
						Lev Zakharov