Passed
Pull Request — main (#3)
by Adriano
02:14
created

cmd/csvqlctl/csvqlctl.go   A

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 59
dl 0
loc 85
c 0
b 0
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A csvqlctl.New 0 2 1
A csvqlctl.*csvQlCtl.Command 0 38 2
A csvqlctl.*csvQlCtl.runE 0 9 2
1
package csvqlctl
2
3
import (
4
	"adrianolaselva.github.io/csvql/internal/csvql"
5
	"github.com/spf13/cobra"
6
)
7
8
const (
9
	fileParam               = "file"
10
	fileShortParam          = "f"
11
	fileDelimiterParam      = "delimiter"
12
	fileShortDelimiterParam = "d"
13
	queryParam              = "query"
14
	queryShortParam         = "q"
15
	storageParam            = "storage"
16
	storageShortParam       = "s"
17
	exportParam             = "export"
18
	exportShortParam        = "e"
19
	typeParam               = "type"
20
	typeShortParam          = "t"
21
)
22
23
type CsvQlCtl interface {
24
	Command() (*cobra.Command, error)
25
	runE(cmd *cobra.Command, args []string) error
26
}
27
28
type csvQlCtl struct {
29
	rootCmd *cobra.Command
30
	params  csvql.CsvqlParams
31
}
32
33
func New() CsvQlCtl {
34
	return &csvQlCtl{}
35
}
36
37
func (c *csvQlCtl) Command() (*cobra.Command, error) {
38
	command := &cobra.Command{
39
		Use:     "run",
40
		Short:   "Load and run queries from csv file",
41
		Long:    `./csvql run -f test.csv -d ";"`,
42
		Example: `./csvql run -f test.csv -d ";"`,
43
		RunE:    c.runE,
44
	}
45
46
	command.
47
		PersistentFlags().
48
		StringVarP(&c.params.FileInput, fileParam, fileShortParam, "", "origin file in csv")
49
50
	command.
51
		PersistentFlags().
52
		StringVarP(&c.params.Delimiter, fileDelimiterParam, fileShortDelimiterParam, ",", "csv delimiter")
53
54
	command.
55
		PersistentFlags().
56
		StringVarP(&c.params.Query, queryParam, queryShortParam, "", "query param")
57
58
	command.
59
		PersistentFlags().
60
		StringVarP(&c.params.Export, exportParam, exportShortParam, "", "export path")
61
62
	command.
63
		PersistentFlags().
64
		StringVarP(&c.params.Type, typeParam, typeShortParam, "", "format type [`jsonl`,`csv`]")
65
66
	command.
67
		PersistentFlags().
68
		StringVarP(&c.params.DataSourceName, storageParam, storageShortParam, "", "sqlite file")
69
70
	if err := command.MarkPersistentFlagRequired(fileParam); err != nil {
71
		return nil, err
72
	}
73
74
	return command, nil
75
}
76
77
func (c *csvQlCtl) runE(cmd *cobra.Command, _ []string) error {
78
	cmd.SilenceUsage = true
79
	csvql, err := csvql.New(c.params)
80
	if err != nil {
81
		return err
82
	}
83
	defer csvql.Close()
84
85
	return csvql.Run()
86
}
87