Describe the feature

// globally mode, all DB operations will create prepared statements and cache them
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  PrepareStmt: true,
})
// disable in session
tx := db.Session(&Session{PrepareStmt: false})

Motivation

Enable globally for performance reason, but in some case we need to disabled for manually build SQL query, this may cause memory leak.

Related Issues

Comment From: ghost

英语不是很好:sob:,这里直接中文回复了, 感觉这里不好改,因为 false 本身就是 bool 类型的 零值 ,这就导致用 false 去判断会出现问题,想过改成 *bool 类型,但是这样属于破坏性变化了。这里可以试着全局关闭,局部打开的方式不知道是否可以?

Comment From: yinheli

确实是的,改动会稍大,可能破坏原有API

Comment From: ghost

确实是的,改动会稍大,可能破坏原有API

可以看下这个文档 https://gorm.io/zh_CN/docs/session.html#%E9%A2%84%E7%BC%96%E8%AF%91

// returns prepared statements manager
stmtManger, ok := tx.ConnPool.(*PreparedStmtDB)

// 关闭 *当前会话* 的预编译模式
stmtManger.Close()