Skip to content

Commit 400809a

Browse files
committed
added: main.go implementation for the main driver
1 parent e008bdc commit 400809a

File tree

5 files changed

+139
-61
lines changed

5 files changed

+139
-61
lines changed

.idea/workspace.xml

+70-55
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ all: |build_deps test_deps build test
44

55
build_deps:
66
go get github.com/lib/pq
7+
go get github.com/iancoleman/strcase
78

89
test_deps:
910
go get -u github.com/onsi/ginkgo/ginkgo
1011
go get -u github.com/onsi/gomega/...
11-
@go get github.com/vektra/mockery/.../
12+
go get github.com/vektra/mockery/.../
1213

1314
build:
1415
go build -o ./bin/csv-2-postgresql ./csv-2-postgresql

bin/csv-2-postgresql

734 KB
Binary file not shown.

csv-2-postgresql/main.go

+66-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@ import (
44
"database/sql"
55
"flag"
66
"fmt"
7+
"github.com/iancoleman/strcase"
8+
"github.com/kmacmcfarlane/csv-2-postgresql-go/csv"
79
"github.com/kmacmcfarlane/csv-2-postgresql-go/postgresql"
10+
"io"
811
"os"
12+
"path/filepath"
13+
"strings"
914
)
1015

1116
func main() {
@@ -19,7 +24,14 @@ func main() {
1924
}
2025

2126
inputFile := args[0]
22-
databaseName := args[1]
27+
28+
29+
var databaseName string
30+
if len(args) == 2 {
31+
databaseName = args[1]
32+
} else {
33+
databaseName = "test"
34+
}
2335

2436
// Connect to DB
2537
connectionString := fmt.Sprintf("user=postgres dbname=%s sslmode=verify-full", databaseName)
@@ -34,10 +46,62 @@ func main() {
3446

3547
sqlWrapper := postgresql.NewSQLWrapper(db)
3648

49+
dbWriter := postgresql.NewWriter(sqlWrapper)
50+
3751
// Parse schema of input
52+
file, err := os.Open(inputFile)
53+
54+
if nil != err {
55+
panic(fmt.Sprintf("error opening file for reading: %s", err.Error()))
56+
}
57+
58+
var parser Parser = csv.NewParser(file)
59+
60+
schema, err := parser.ParseSchema()
61+
62+
if nil != err {
63+
panic(fmt.Sprintf("error parsing csv file: %s", err.Error()))
64+
}
65+
66+
// Create table
67+
_, filenameAlone := filepath.Split(file.Name())
68+
tableName := strcase.ToSnake(filenameAlone)
69+
70+
err = dbWriter.CreateTable(tableName, schema)
71+
72+
if nil != err {
73+
panic(fmt.Sprintf("error creating db table: %s", err.Error()))
74+
}
75+
76+
fmt.Printf("created table '%s' in database %s", tableName, databaseName)
3877

3978
// Insert data to database
40-
79+
for {
80+
81+
record, err := parser.Read()
82+
83+
if nil != err {
84+
85+
if io.EOF == err {
86+
break
87+
}
88+
89+
fmt.Printf("error parsing record: %s", strings.Join(record, ", "))
90+
fmt.Printf("error: %s", err.Error())
91+
}
92+
93+
err = dbWriter.Insert(record, schema, tableName)
94+
95+
if nil != err {
96+
97+
fmt.Printf("error inserting record: %s", strings.Join(record, ", "))
98+
fmt.Printf("error: %s", err.Error())
99+
}
100+
}
101+
102+
println("import ")
103+
104+
os.Exit(0)
41105
}
42106

43107
func usage(){

postgresql/writer.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ func (w Writer) Insert(values []string, schema schema.Schema, tableName string)
7474
}
7575
}
7676

77-
statementTemplate := `INSERT INTO "%s" VALUES (%s);`
78-
79-
statement := fmt.Sprintf(statementTemplate, tableName, sb.String())
77+
statement := fmt.Sprintf(`INSERT INTO "%s" VALUES (%s);`, tableName, sb.String())
8078

8179
_, err = w.db.Exec(statement, values)
8280

0 commit comments

Comments
 (0)