| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- 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
- }
|