@@ -17,18 +17,37 @@ import (
1717
1818type sqliteDB struct {
1919 db * sql.DB
20+
21+ writeSQLMetaStmt * sql.Stmt
22+ writePlanMetaStmt * sql.Stmt
2023}
2124
22- func NewSQLiteDB (dbPath string ) (DocDB , error ) {
25+ func NewSQLiteDB (dbPath string , useWAL bool ) (DocDB , error ) {
2326 dbPath = path .Join (dbPath , "ng-sqlite.db" )
2427 db , err := sql .Open ("sqlite3" , dbPath )
2528 if err != nil {
2629 log .Fatal ("failed to open sqlite db" , zap .String ("path" , dbPath ), zap .Error (err ))
2730 }
31+ if useWAL {
32+ _ , err := db .Exec ("PRAGMA journal_mode=WAL" )
33+ if err != nil {
34+ return nil , err
35+ }
36+ }
2837 d := & sqliteDB {db : db }
2938 if err := d .tryInitTables (); err != nil {
3039 return nil , err
3140 }
41+ writeSQLMetaSQL := `INSERT OR REPLACE INTO sql_digest (digest, sql_text, is_internal, created_at_ts) VALUES (?, ?, ?, ?)`
42+ d .writeSQLMetaStmt , err = d .db .Prepare (writeSQLMetaSQL )
43+ if err != nil {
44+ return nil , err
45+ }
46+ writePlanMetaSQL := `INSERT OR REPLACE INTO plan_digest (digest, plan_text, encoded_plan, created_at_ts) VALUES (?, ?, ?, ?)`
47+ d .writePlanMetaStmt , err = d .db .Prepare (writePlanMetaSQL )
48+ if err != nil {
49+ return nil , err
50+ }
3251 return d , nil
3352}
3453
@@ -89,13 +108,8 @@ func (d *sqliteDB) LoadConfig(ctx context.Context) (map[string]string, error) {
89108}
90109
91110func (d * sqliteDB ) WriteSQLMeta (ctx context.Context , meta * tipb.SQLMeta ) error {
92- sql := `INSERT OR REPLACE INTO sql_digest (digest, sql_text, is_internal, created_at_ts) VALUES (?, ?, ?, ?)`
93- stmt , err := d .db .PrepareContext (ctx , sql )
94- if err != nil {
95- return err
96- }
97111 now := time .Now ().Unix ()
98- _ , err = stmt .ExecContext (ctx , hex .EncodeToString (meta .SqlDigest ), meta .NormalizedSql , meta .IsInternalSql , now )
112+ _ , err := d . writeSQLMetaStmt .ExecContext (ctx , hex .EncodeToString (meta .SqlDigest ), meta .NormalizedSql , meta .IsInternalSql , now )
99113 return err
100114}
101115
@@ -117,13 +131,8 @@ func (d *sqliteDB) DeleteSQLMetaBeforeTs(ctx context.Context, ts int64) error {
117131}
118132
119133func (d * sqliteDB ) WritePlanMeta (ctx context.Context , meta * tipb.PlanMeta ) error {
120- sql := `INSERT OR REPLACE INTO plan_digest (digest, plan_text, encoded_plan, created_at_ts) VALUES (?, ?, ?, ?)`
121- stmt , err := d .db .PrepareContext (ctx , sql )
122- if err != nil {
123- return err
124- }
125134 now := time .Now ().Unix ()
126- _ , err = stmt .ExecContext (ctx , hex .EncodeToString (meta .PlanDigest ), meta .NormalizedPlan , meta .EncodedNormalizedPlan , now )
135+ _ , err := d . writePlanMetaStmt .ExecContext (ctx , hex .EncodeToString (meta .PlanDigest ), meta .NormalizedPlan , meta .EncodedNormalizedPlan , now )
127136 return err
128137}
129138
0 commit comments