Files
steampipe/pkg/db/db_common/cache_control.go

57 lines
1.6 KiB
Go

package db_common
import (
"context"
"fmt"
"time"
"github.com/jackc/pgx/v5"
"github.com/turbot/steampipe/v2/pkg/constants"
)
// SetCacheTtl set the cache ttl on the client
func SetCacheTtl(ctx context.Context, duration time.Duration, connection *pgx.Conn) error {
duration = duration.Truncate(time.Second)
seconds := fmt.Sprint(duration.Seconds())
return executeCacheTtlSetFunction(ctx, seconds, connection)
}
// CacheClear resets the max time on the cache
// anything below this is not accepted
func CacheClear(ctx context.Context, connection *pgx.Conn) error {
return executeCacheSetFunction(ctx, "clear", connection)
}
// SetCacheEnabled enables/disables the cache
func SetCacheEnabled(ctx context.Context, enabled bool, connection *pgx.Conn) error {
value := "off"
if enabled {
value = "on"
}
return executeCacheSetFunction(ctx, value, connection)
}
func executeCacheSetFunction(ctx context.Context, settingValue string, connection *pgx.Conn) error {
return ExecuteSystemClientCall(ctx, connection, func(ctx context.Context, tx pgx.Tx) error {
_, err := tx.Exec(ctx, fmt.Sprintf(
"select %s.%s('%s')",
constants.InternalSchema,
constants.FunctionCacheSet,
settingValue,
))
return err
})
}
func executeCacheTtlSetFunction(ctx context.Context, seconds string, connection *pgx.Conn) error {
return ExecuteSystemClientCall(ctx, connection, func(ctx context.Context, tx pgx.Tx) error {
_, err := tx.Exec(ctx, fmt.Sprintf(
"select %s.%s('%s')",
constants.InternalSchema,
constants.FunctionCacheSetTtl,
seconds,
))
return err
})
}