2021-05-10 15:37:34 +00:00
package main
import (
"database/sql"
2022-01-24 08:43:06 +00:00
"errors"
2021-05-10 15:37:34 +00:00
)
2021-06-06 12:39:42 +00:00
func ( db * database ) cachePersistently ( key string , data [ ] byte ) error {
2021-07-13 15:23:10 +00:00
_ , err := db . exec ( "insert or replace into persistent_cache(key, data, date) values(@key, @data, @date)" , sql . Named ( "key" , key ) , sql . Named ( "data" , data ) , sql . Named ( "date" , utcNowString ( ) ) )
2021-05-10 15:37:34 +00:00
return err
}
2021-06-06 12:39:42 +00:00
func ( db * database ) retrievePersistentCache ( key string ) ( data [ ] byte , err error ) {
2021-06-14 14:29:22 +00:00
d , err , _ := db . pc . Do ( key , func ( ) ( interface { } , error ) {
2022-01-24 08:43:06 +00:00
if row , err := db . queryRow ( "select data from persistent_cache where key = @key" , sql . Named ( "key" , key ) ) ; err != nil {
2021-05-26 15:41:14 +00:00
return nil , err
} else {
err = row . Scan ( & data )
2022-01-24 08:43:06 +00:00
if errors . Is ( err , sql . ErrNoRows ) {
return nil , nil
}
2021-05-26 15:41:14 +00:00
return data , err
}
} )
if err != nil {
2021-05-10 15:37:34 +00:00
return nil , err
}
2022-01-24 08:43:06 +00:00
if d == nil {
return nil , nil
}
2021-05-26 15:41:14 +00:00
return d . ( [ ] byte ) , nil
2021-05-10 15:37:34 +00:00
}
2021-06-06 12:39:42 +00:00
func ( db * database ) clearPersistentCache ( pattern string ) error {
_ , err := db . exec ( "delete from persistent_cache where key like @pattern" , sql . Named ( "pattern" , pattern ) )
2021-05-10 15:37:34 +00:00
return err
}