initdata.go 1009 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package models
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io/fs"
  6. "log/slog"
  7. "strings"
  8. )
  9. import (
  10. "gorm.io/gorm"
  11. )
  12. import (
  13. "resource-server/static"
  14. )
  15. func initTable(sqlFilePath string) error {
  16. slog.Info("initTable ...", "file", sqlFilePath)
  17. file, err := static.GetSqlFile(sqlFilePath)
  18. if err != nil {
  19. return fmt.Errorf("error opening SQL file: %w", err)
  20. }
  21. defer func(file fs.File) {
  22. err := file.Close()
  23. if err != nil {
  24. slog.Error("error closing SQL file:", err)
  25. }
  26. }(file)
  27. scanner := bufio.NewScanner(file)
  28. err = DB.Transaction(func(tx *gorm.DB) error {
  29. for scanner.Scan() {
  30. line := strings.TrimSpace(scanner.Text())
  31. result := tx.Exec(line)
  32. if result.Error != nil {
  33. return fmt.Errorf("error executing INSERT statement: %s\tError: %w", line, result.Error)
  34. }
  35. }
  36. if err := scanner.Err(); err != nil {
  37. return fmt.Errorf("error reading SQL file: %w", err)
  38. }
  39. return nil
  40. })
  41. if err != nil {
  42. return err
  43. }
  44. slog.Info("Processed SQL file: %s.\n", sqlFilePath)
  45. return nil
  46. }