111 lines
2.6 KiB
Go
111 lines
2.6 KiB
Go
|
// Copyright 2020 The Xorm Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package utils
|
||
|
|
||
|
import (
|
||
|
"sort"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func MapToSlices(m map[string]interface{}, exclude []string, trimmer func(string) string) ([]string, []interface{}) {
|
||
|
columns := make([]string, 0, len(m))
|
||
|
|
||
|
outer:
|
||
|
for colName := range m {
|
||
|
trimmed := trimmer(colName)
|
||
|
for _, excluded := range exclude {
|
||
|
if strings.EqualFold(excluded, trimmed) {
|
||
|
continue outer
|
||
|
}
|
||
|
}
|
||
|
columns = append(columns, colName)
|
||
|
}
|
||
|
sort.Strings(columns)
|
||
|
|
||
|
args := make([]interface{}, 0, len(columns))
|
||
|
for _, colName := range columns {
|
||
|
args = append(args, m[colName])
|
||
|
}
|
||
|
|
||
|
return columns, args
|
||
|
}
|
||
|
|
||
|
func MapStringToSlices(m map[string]string, exclude []string, trimmer func(string) string) ([]string, []interface{}) {
|
||
|
columns := make([]string, 0, len(m))
|
||
|
|
||
|
outer:
|
||
|
for colName := range m {
|
||
|
trimmed := trimmer(colName)
|
||
|
for _, excluded := range exclude {
|
||
|
if strings.EqualFold(excluded, trimmed) {
|
||
|
continue outer
|
||
|
}
|
||
|
}
|
||
|
columns = append(columns, colName)
|
||
|
}
|
||
|
sort.Strings(columns)
|
||
|
|
||
|
args := make([]interface{}, 0, len(columns))
|
||
|
for _, colName := range columns {
|
||
|
args = append(args, m[colName])
|
||
|
}
|
||
|
|
||
|
return columns, args
|
||
|
}
|
||
|
|
||
|
func MultipleMapToSlices(maps []map[string]interface{}, exclude []string, trimmer func(string) string) ([]string, [][]interface{}) {
|
||
|
columns := make([]string, 0, len(maps[0]))
|
||
|
|
||
|
outer:
|
||
|
for colName := range maps[0] {
|
||
|
trimmed := trimmer(colName)
|
||
|
for _, excluded := range exclude {
|
||
|
if strings.EqualFold(excluded, trimmed) {
|
||
|
continue outer
|
||
|
}
|
||
|
}
|
||
|
columns = append(columns, colName)
|
||
|
}
|
||
|
sort.Strings(columns)
|
||
|
|
||
|
argss := make([][]interface{}, 0, len(maps))
|
||
|
for _, m := range maps {
|
||
|
args := make([]interface{}, 0, len(m))
|
||
|
for _, colName := range columns {
|
||
|
args = append(args, m[colName])
|
||
|
}
|
||
|
argss = append(argss, args)
|
||
|
}
|
||
|
|
||
|
return columns, argss
|
||
|
}
|
||
|
|
||
|
func MultipleMapStringToSlices(maps []map[string]string, exclude []string, trimmer func(string) string) ([]string, [][]interface{}) {
|
||
|
columns := make([]string, 0, len(maps[0]))
|
||
|
|
||
|
outer:
|
||
|
for colName := range maps[0] {
|
||
|
trimmed := trimmer(colName)
|
||
|
for _, excluded := range exclude {
|
||
|
if strings.EqualFold(excluded, trimmed) {
|
||
|
continue outer
|
||
|
}
|
||
|
}
|
||
|
columns = append(columns, colName)
|
||
|
}
|
||
|
sort.Strings(columns)
|
||
|
|
||
|
argss := make([][]interface{}, 0, len(maps))
|
||
|
for _, m := range maps {
|
||
|
args := make([]interface{}, 0, len(m))
|
||
|
for _, colName := range columns {
|
||
|
args = append(args, m[colName])
|
||
|
}
|
||
|
argss = append(argss, args)
|
||
|
}
|
||
|
|
||
|
return columns, argss
|
||
|
}
|