cache.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package cache
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. )
  7. // The cache directory defaults to os.UserCacheDir(). This location can be
  8. // overridden by the SQLCCACHE environment variable.
  9. //
  10. // Currently the cache stores two types of data: plugins and query analysis
  11. func Dir() (string, error) {
  12. cache := os.Getenv("SQLCCACHE")
  13. if cache != "" {
  14. return cache, nil
  15. }
  16. cacheHome, err := os.UserCacheDir()
  17. if err != nil {
  18. return "", err
  19. }
  20. return filepath.Join(cacheHome, "sqlc"), nil
  21. }
  22. func PluginsDir() (string, error) {
  23. cacheRoot, err := Dir()
  24. if err != nil {
  25. return "", err
  26. }
  27. dir := filepath.Join(cacheRoot, "plugins")
  28. if err := os.MkdirAll(dir, 0755); err != nil && !os.IsExist(err) {
  29. return "", fmt.Errorf("failed to create %s directory: %w", dir, err)
  30. }
  31. return dir, nil
  32. }
  33. func AnalysisDir() (string, error) {
  34. cacheRoot, err := Dir()
  35. if err != nil {
  36. return "", err
  37. }
  38. dir := filepath.Join(cacheRoot, "query_analysis")
  39. if err := os.MkdirAll(dir, 0755); err != nil && !os.IsExist(err) {
  40. return "", fmt.Errorf("failed to create %s directory: %w", dir, err)
  41. }
  42. return dir, nil
  43. }