package utils import ( "errors" "fmt" ) type Driver string const ( DM Driver = "dm" MySql Driver = "mysql" ) var supportDriverMap = map[string]Driver{ "mysql": MySql, "dm": DM, } func GroupUnitFunc(driver string, column, delimiter, tableAlia string) (sqlStr string) { dbDriver, _ := getDriverInstance(driver) if delimiter == "" { delimiter = "," } if column == "" { column = "[UNKNOWN COLUMN]" } if tableAlia != "" { column = fmt.Sprintf("%s.%s", tableAlia, column) } switch dbDriver { case MySql: sqlStr = fmt.Sprintf("GROUP_CONCAT(%s SEPARATOR '%s')", column, delimiter) case DM: sqlStr = fmt.Sprintf("LISTAGG(%s, '%s') WITHIN GROUP (ORDER BY %s)", column, delimiter, column) default: sqlStr = fmt.Sprintf("GROUP_CONCAT(%s SEPARATOR '%s')", column, delimiter) // 默认使用 MySQL 的语法 } return sqlStr } func getDriverInstance(driver string) (dbDriver Driver, err error) { if driver == "" { dbDriver = supportDriverMap[DbDriverName] } if currentDriver, ok := supportDriverMap[driver]; !ok { err = errors.New("不支持的数据库驱动类型") return } else { dbDriver = currentDriver } return } func NeedDateOrTimeFormat(driver string) bool { var dbDriver Driver if driver == "" { dbDriver = supportDriverMap[DbDriverName] } else { dbDriver, _ = getDriverInstance(driver) } if dbDriver == DM { return true } return false }