@@ -2,37 +2,40 @@ package ingest
2
2
3
3
import (
4
4
"fmt"
5
+ "github.com/microsoft/go-sqlcmd/internal/container"
5
6
"github.com/microsoft/go-sqlcmd/internal/uri"
6
7
"github.com/microsoft/go-sqlcmd/pkg/mssqlcontainer/ingest/extract"
7
8
"github.com/microsoft/go-sqlcmd/pkg/mssqlcontainer/ingest/location"
8
9
"github.com/microsoft/go-sqlcmd/pkg/mssqlcontainer/ingest/mechanism"
9
10
"path/filepath"
11
+ "strings"
10
12
)
11
13
12
14
type ingest struct {
13
15
uri uri.Uri
14
16
location location.Location
17
+ controller * container.Controller
15
18
mechanism mechanism.Mechanism
16
19
options mechanism.BringOnlineOptions
17
20
extractor extract.Extractor
18
21
containerId string
19
22
query func (text string )
20
23
}
21
24
22
- func (i ingest ) IsExtractionNeeded () bool {
23
- i .extractor = extract .NewExtractor (i .uri .FileExtension ())
25
+ func (i * ingest ) IsExtractionNeeded () bool {
26
+ i .extractor = extract .NewExtractor (i .uri .FileExtension (), i . controller )
24
27
if i .extractor == nil {
25
28
return false
26
29
} else {
27
30
return true
28
31
}
29
32
}
30
33
31
- func (i ingest ) IsRemoteUrl () bool {
34
+ func (i * ingest ) IsRemoteUrl () bool {
32
35
return ! i .location .IsLocal ()
33
36
}
34
37
35
- func (i ingest ) IsValidScheme () bool {
38
+ func (i * ingest ) IsValidScheme () bool {
36
39
for _ , s := range i .location .ValidSchemes () {
37
40
if s == i .uri .Scheme () {
38
41
return true
@@ -41,17 +44,25 @@ func (i ingest) IsValidScheme() bool {
41
44
return false
42
45
}
43
46
44
- func (i ingest ) CopyToLocation () string {
45
- return i .mechanism .CopyToLocation ()
46
- }
47
+ func (i * ingest ) CopyToContainer (containerId string ) {
48
+ destFolder := "/var/opt/mssql/backup"
49
+ if i .mechanism != nil {
50
+ destFolder = i .mechanism .CopyToLocation ()
51
+ }
52
+ if i .location == nil {
53
+ panic ("location is nil, did you call NewIngest()?" )
54
+ }
47
55
48
- func (i ingest ) CopyToContainer (containerId string ) {
49
56
i .containerId = containerId
50
- i .location .CopyToContainer (containerId , i . CopyToLocation () )
57
+ i .location .CopyToContainer (containerId , destFolder )
51
58
i .options .Filename = i .uri .Filename ()
59
+
60
+ if i .options .Filename == "" {
61
+ panic ("filename is empty" )
62
+ }
52
63
}
53
64
54
- func (i ingest ) Extract () {
65
+ func (i * ingest ) Extract () {
55
66
if i .extractor == nil {
56
67
panic ("extractor is nil" )
57
68
}
@@ -61,30 +72,42 @@ func (i ingest) Extract() {
61
72
}
62
73
63
74
i .options .Filename , i .options .LdfFilename =
64
- i .extractor .Extract (i .uri .ActualUrl (), i . CopyToLocation () )
75
+ i .extractor .Extract (i .uri .Filename (), "/var/opt/mssql/data" )
65
76
66
77
if i .mechanism == nil {
67
- ext := filepath .Ext (i .options .Filename )
68
- i .mechanism = mechanism .NewMechanismByFileExt (ext )
78
+ fmt .Println ("FOO: " + i .options .Filename )
79
+ ext := strings .TrimLeft (filepath .Ext (i .options .Filename ), "." )
80
+ i .mechanism = mechanism .NewMechanismByFileExt (ext , i .controller )
69
81
}
82
+ fmt .Println ("FOO: " + i .mechanism .Name ())
83
+
70
84
}
71
85
72
- func (i ingest ) BringOnline (query func (string ), username string , password string ) {
86
+ func (i * ingest ) BringOnline (query func (string ), username string , password string ) {
87
+ if i .options .Filename == "" {
88
+ panic ("filename is empty, did you call CopyToContainer()?" )
89
+ }
90
+
91
+ i .query = query
73
92
i .options .Username = username
74
93
i .options .Password = password
75
- i .mechanism .BringOnline (i .uri .GetDbNameAsIdentifier (), i .containerId , query , i .options )
94
+ i .mechanism .BringOnline (i .uri .GetDbNameAsIdentifier (), i .containerId , i . query , i .options )
76
95
i .setDefaultDatabase (username )
77
96
}
78
97
79
- func (i ingest ) setDefaultDatabase (username string ) {
98
+ func (i * ingest ) setDefaultDatabase (username string ) {
99
+ if i .query == nil {
100
+ panic ("query is nil, did you call BringOnline()?" )
101
+ }
102
+
80
103
alterDefaultDb := fmt .Sprintf (
81
104
"ALTER LOGIN [%s] WITH DEFAULT_DATABASE = [%s]" ,
82
105
username ,
83
106
i .uri .GetDbNameAsNonIdentifier ())
84
107
i .query (alterDefaultDb )
85
108
}
86
109
87
- func (i ingest ) IsValidFileExtension () bool {
110
+ func (i * ingest ) IsValidFileExtension () bool {
88
111
for _ , m := range mechanism .FileTypes () {
89
112
if m == i .uri .FileExtension () {
90
113
return true
@@ -98,19 +121,19 @@ func (i ingest) IsValidFileExtension() bool {
98
121
return false
99
122
}
100
123
101
- func (i ingest ) SourceFileExists () bool {
124
+ func (i * ingest ) SourceFileExists () bool {
102
125
return i .location .Exists ()
103
126
}
104
127
105
- func (i ingest ) UserProvidedFileExt () string {
128
+ func (i * ingest ) UserProvidedFileExt () string {
106
129
return i .uri .FileExtension ()
107
130
}
108
131
109
- func (i ingest ) ValidSchemes () []string {
132
+ func (i * ingest ) ValidSchemes () []string {
110
133
return i .location .ValidSchemes ()
111
134
}
112
135
113
- func (i ingest ) ValidFileExtensions () []string {
136
+ func (i * ingest ) ValidFileExtensions () []string {
114
137
extensions := []string {}
115
138
116
139
for _ , m := range mechanism .FileTypes () {
0 commit comments