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