| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package factory
-
- import (
- "database/sql"
- "fmt"
- )
-
- // ExecuteDDL 执行DDL语句(创建、删除、更新表等)
- func (f *DBFactory) ExecuteDDL(db *sql.DB, ddlSQL string) error {
- if db == nil {
- return fmt.Errorf("database connection is nil")
- }
-
- if ddlSQL == "" {
- return fmt.Errorf("DDL SQL statement is empty")
- }
-
- // 执行DDL语句
- _, err := db.Exec(ddlSQL)
- if err != nil {
- return fmt.Errorf("failed to execute DDL: %v", err)
- }
-
- return nil
- }
-
- // ExecuteDDLWithTx 在事务中执行DDL语句
- func (f *DBFactory) ExecuteDDLWithTx(db *sql.DB, ddlSQL string) error {
- if db == nil {
- return fmt.Errorf("database connection is nil")
- }
-
- if ddlSQL == "" {
- return fmt.Errorf("DDL SQL statement is empty")
- }
-
- // 开始事务
- tx, err := db.Begin()
- if err != nil {
- return fmt.Errorf("failed to begin transaction: %v", err)
- }
-
- // 执行DDL语句
- _, err = tx.Exec(ddlSQL)
- if err != nil {
- // 回滚事务
- tx.Rollback()
- return fmt.Errorf("failed to execute DDL in transaction: %v", err)
- }
-
- // 提交事务
- if err := tx.Commit(); err != nil {
- return fmt.Errorf("failed to commit transaction: %v", err)
- }
-
- return nil
- }
-
- // ExecuteMultipleDDL 执行多个DDL语句
- func (f *DBFactory) ExecuteMultipleDDL(db *sql.DB, ddlSQLs []string) error {
- if db == nil {
- return fmt.Errorf("database connection is nil")
- }
-
- if len(ddlSQLs) == 0 {
- return fmt.Errorf("DDL SQL statements are empty")
- }
-
- // 开始事务
- tx, err := db.Begin()
- if err != nil {
- return fmt.Errorf("failed to begin transaction: %v", err)
- }
-
- // 依次执行所有DDL语句
- for i, ddlSQL := range ddlSQLs {
- if ddlSQL == "" {
- tx.Rollback()
- return fmt.Errorf("DDL SQL statement at index %d is empty", i)
- }
-
- _, err = tx.Exec(ddlSQL)
- if err != nil {
- tx.Rollback()
- return fmt.Errorf("failed to execute DDL at index %d: %v", i, err)
- }
- }
-
- // 提交事务
- if err := tx.Commit(); err != nil {
- return fmt.Errorf("failed to commit transaction: %v", err)
- }
-
- return nil
- }
-
- // 快捷方法 - 对外暴露的DDL执行方法
-
- // QuickExecuteDDL 快捷执行DDL语句
- func QuickExecuteDDL(db *sql.DB, ddlSQL string) error {
- factory := &DBFactory{}
- return factory.ExecuteDDL(db, ddlSQL)
- }
-
- // QuickExecuteDDLWithTx 快捷在事务中执行DDL语句
- func QuickExecuteDDLWithTx(db *sql.DB, ddlSQL string) error {
- factory := &DBFactory{}
- return factory.ExecuteDDLWithTx(db, ddlSQL)
- }
-
- // QuickExecuteMultipleDDL 快捷执行多个DDL语句
- func QuickExecuteMultipleDDL(db *sql.DB, ddlSQLs []string) error {
- factory := &DBFactory{}
- return factory.ExecuteMultipleDDL(db, ddlSQLs)
- }
|