Nessuna descrizione
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

execute.go 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package factory
  2. import (
  3. "database/sql"
  4. "fmt"
  5. )
  6. // ExecuteDDL 执行DDL语句(创建、删除、更新表等)
  7. func (f *DBFactory) executeDDL(db *sql.DB, ddlSQL string) error {
  8. if db == nil {
  9. return fmt.Errorf("database connection is nil")
  10. }
  11. if ddlSQL == "" {
  12. return fmt.Errorf("DDL SQL statement is empty")
  13. }
  14. // 执行DDL语句
  15. _, err := db.Exec(ddlSQL)
  16. if err != nil {
  17. return fmt.Errorf("failed to execute DDL: %v", err)
  18. }
  19. return nil
  20. }
  21. // ExecuteDDLWithTx 在事务中执行DDL语句
  22. func (f *DBFactory) executeDDLWithTx(db *sql.DB, ddlSQL string) error {
  23. if db == nil {
  24. return fmt.Errorf("database connection is nil")
  25. }
  26. if ddlSQL == "" {
  27. return fmt.Errorf("DDL SQL statement is empty")
  28. }
  29. // 开始事务
  30. tx, err := db.Begin()
  31. if err != nil {
  32. return fmt.Errorf("failed to begin transaction: %v", err)
  33. }
  34. // 执行DDL语句
  35. _, err = tx.Exec(ddlSQL)
  36. if err != nil {
  37. // 回滚事务
  38. tx.Rollback()
  39. return fmt.Errorf("failed to execute DDL in transaction: %v", err)
  40. }
  41. // 提交事务
  42. if err := tx.Commit(); err != nil {
  43. return fmt.Errorf("failed to commit transaction: %v", err)
  44. }
  45. return nil
  46. }
  47. // ExecuteMultipleDDL 执行多个DDL语句
  48. func (f *DBFactory) executeMultipleDDL(db *sql.DB, ddlSQLs []string) error {
  49. if db == nil {
  50. return fmt.Errorf("database connection is nil")
  51. }
  52. if len(ddlSQLs) == 0 {
  53. return fmt.Errorf("DDL SQL statements are empty")
  54. }
  55. // 开始事务
  56. tx, err := db.Begin()
  57. if err != nil {
  58. return fmt.Errorf("failed to begin transaction: %v", err)
  59. }
  60. // 依次执行所有DDL语句
  61. for i, ddlSQL := range ddlSQLs {
  62. if ddlSQL == "" {
  63. tx.Rollback()
  64. return fmt.Errorf("DDL SQL statement at index %d is empty", i)
  65. }
  66. _, err = tx.Exec(ddlSQL)
  67. if err != nil {
  68. tx.Rollback()
  69. return fmt.Errorf("failed to execute DDL at index %d: %v", i, err)
  70. }
  71. }
  72. // 提交事务
  73. if err := tx.Commit(); err != nil {
  74. return fmt.Errorf("failed to commit transaction: %v", err)
  75. }
  76. return nil
  77. }