Няма описание
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.

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