export_content.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "github.com/spf13/cobra"
  6. "gopkg.in/yaml.v2"
  7. )
  8. var cmdExportContent = &cobra.Command{
  9. Use: "content",
  10. Short: "Export the database contents",
  11. Long: "Export the whole list of Kurz URLs in the database",
  12. Run: exportContentHandler,
  13. }
  14. func init() {
  15. cmdExport.AddCommand(cmdExportContent)
  16. }
  17. func exportContentLoader(db *sql.DB) ([]MapEntry, error) {
  18. stmt, err := db.Prepare(`
  19. SELECT Hash, url, Date1, Date2, Date3, RefCount
  20. FROM map
  21. ORDER BY url`)
  22. if err != nil {
  23. panic(err.Error())
  24. }
  25. defer stmt.Close()
  26. rows, err := stmt.Query()
  27. if err != nil {
  28. return nil, err
  29. }
  30. defer rows.Close()
  31. entry := MapEntry{}
  32. var entries []MapEntry
  33. for rows.Next() {
  34. err = rows.Scan(&entry.Hash, &entry.Url, &entry.Date1, &entry.Date2, &entry.Date3, &entry.RefCount)
  35. if err != nil {
  36. return nil, err
  37. }
  38. entries = append(entries, entry)
  39. }
  40. return entries, nil
  41. }
  42. func exportContentHandler(cmd *cobra.Command, args []string) {
  43. dbDriver, dbDsn := parseDbCred()
  44. db, err := dbDial(dbDriver, dbDsn)
  45. if err != nil {
  46. panic(err)
  47. }
  48. defer db.Close()
  49. entries, err := exportContentLoader(db)
  50. if err != nil {
  51. panic(err.Error())
  52. }
  53. y, err := yaml.Marshal(&entries)
  54. if err != nil {
  55. panic(err.Error())
  56. }
  57. fmt.Println(string(y))
  58. }