123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // Copyright 2015 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 xorm
- import (
- tablib "github.com/agrison/go-tablib"
- )
- // NewDataset creates a new Dataset.
- func NewDataset(headers []string) *tablib.Dataset {
- return tablib.NewDataset(headers)
- }
- // NewDatasetWithData creates a new Dataset.
- func NewDatasetWithData(headers []string, data interface{}, mustMatch bool) (*tablib.Dataset, error) {
- if data == nil {
- return tablib.NewDatasetWithData(headers, nil), nil
- }
- n := len(headers)
- switch data.(type) {
- case [][]interface{}:
- return tablib.NewDatasetWithData(headers, data.([][]interface{})), nil
- case []map[string]interface{}:
- dataSlice := data.([]map[string]interface{})
- if len(dataSlice) > 0 {
- if len(dataSlice[0]) == 0 {
- return tablib.NewDatasetWithData(headers, make([][]interface{}, len(dataSlice))), nil
- } else {
- if n != len(dataSlice[0]) && mustMatch {
- return nil, ErrParamsType
- }
- mapHeaders := make(map[string]int, n)
- for i := 0; i < n; i++ {
- mapHeaders[headers[i]] = i
- }
- for k, _ := range dataSlice[0] {
- if _, ok := mapHeaders[k]; !ok {
- return nil, ErrParamsType
- }
- }
- d := tablib.NewDataset(headers)
- var row []interface{}
- for i, _ := range dataSlice {
- row = nil
- for j := 0; j < n; j++ {
- row = append(row, dataSlice[i][headers[j]])
- }
- d.Append(row)
- }
- return d, nil
- }
- } else {
- return tablib.NewDatasetWithData(headers, nil), nil
- }
- default:
- return nil, ErrParamsType
- }
- }
|