@@ -3,15 +3,11 @@ package sqlite
3
3
import (
4
4
"database/sql"
5
5
"encoding/json"
6
- "fmt"
7
6
8
7
_ "github.com/mattn/go-sqlite3"
9
8
"github.com/operator-framework/operator-registry/pkg/registry"
10
- "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
11
- "k8s.io/apimachinery/pkg/runtime"
12
9
)
13
10
14
-
15
11
type SQLLoader struct {
16
12
db * sql.DB
17
13
}
@@ -78,7 +74,7 @@ func NewSQLLiteLoader(outFilename string) (*SQLLoader, error) {
78
74
return & SQLLoader {db }, nil
79
75
}
80
76
81
- func (s * SQLLoader ) AddOperatorBundle (bundleObjs [] * unstructured. Unstructured ) error {
77
+ func (s * SQLLoader ) AddOperatorBundle (bundle * registry. Bundle ) error {
82
78
tx , err := s .db .Begin ()
83
79
if err != nil {
84
80
return err
@@ -90,7 +86,7 @@ func (s *SQLLoader) AddOperatorBundle(bundleObjs []*unstructured.Unstructured) e
90
86
}
91
87
defer stmt .Close ()
92
88
93
- csvName , csvBytes , bundleBytes , err := s . serializeBundle ( bundleObjs )
89
+ csvName , csvBytes , bundleBytes , err := bundle . Serialize ( )
94
90
if err != nil {
95
91
return err
96
92
}
@@ -161,12 +157,12 @@ func (s *SQLLoader) AddPackageChannels(manifest registry.PackageManifest) error
161
157
defer addReplaces .Close ()
162
158
163
159
for _ , c := range manifest .Channels {
164
- res , err := addChannelEntry .Exec (c .Name , manifest .PackageName , c .CurrentCSVName , 0 );
160
+ res , err := addChannelEntry .Exec (c .Name , manifest .PackageName , c .CurrentCSVName , 0 )
165
161
if err != nil {
166
162
return err
167
163
}
168
164
currentID , err := res .LastInsertId ()
169
- if err != nil {
165
+ if err != nil {
170
166
return err
171
167
}
172
168
@@ -193,7 +189,7 @@ func (s *SQLLoader) AddPackageChannels(manifest registry.PackageManifest) error
193
189
return err
194
190
}
195
191
replacedID , err := replacedChannelEntry .LastInsertId ()
196
- if err != nil {
192
+ if err != nil {
197
193
return err
198
194
}
199
195
addReplaces .Exec (replacedID , currentID )
@@ -212,18 +208,20 @@ func (s *SQLLoader) AddProvidedApis() error {
212
208
return err
213
209
}
214
210
addApi , err := tx .Prepare ("insert or replace into api(groupOrName,version,kind) values(?,?,?)" )
215
- if err != nil {
211
+ if err != nil {
216
212
return err
217
213
}
218
214
defer addApi .Close ()
219
215
220
216
addApiProvider , err := tx .Prepare ("insert into api_provider(groupOrName,version,kind,channel_entry_id) values(?,?,?,?)" )
221
- if err != nil {
217
+ if err != nil {
222
218
return err
223
219
}
224
220
defer addApiProvider .Close ()
225
221
226
- getChannelEntryProvidedAPIs ,err := tx .Prepare (`
222
+
223
+ // get CRD provided APIs
224
+ getChannelEntryProvidedAPIs , err := tx .Prepare (`
227
225
SELECT DISTINCT channel_entry.entry_id, json_extract(json_each.value, '$.name', '$.version', '$.kind')
228
226
FROM channel_entry INNER JOIN operatorbundle,json_each(operatorbundle.csv, '$.spec.customresourcedefinitions.owned')
229
227
ON channel_entry.operatorbundle_name = operatorbundle.name` )
@@ -233,58 +231,63 @@ func (s *SQLLoader) AddProvidedApis() error {
233
231
defer getChannelEntryProvidedAPIs .Close ()
234
232
235
233
rows , err := getChannelEntryProvidedAPIs .Query ()
236
- if err != nil {
234
+ if err != nil {
237
235
return err
238
236
}
239
237
for rows .Next () {
240
238
var channelId sql.NullInt64
241
239
var gvkSQL sql.NullString
242
240
243
- if err := rows .Scan (& channelId , & gvkSQL ); err != nil {
241
+ if err := rows .Scan (& channelId , & gvkSQL ); err != nil {
244
242
return err
245
243
}
246
244
apigvk := []string {}
247
- if err := json .Unmarshal ([]byte (gvkSQL .String ), & apigvk ); err != nil {
245
+ if err := json .Unmarshal ([]byte (gvkSQL .String ), & apigvk ); err != nil {
246
+ return err
247
+ }
248
+ if _ , err := addApi .Exec (apigvk [0 ], apigvk [1 ], apigvk [2 ]); err != nil {
249
+ return err
250
+ }
251
+ if _ , err := addApiProvider .Exec (apigvk [0 ], apigvk [1 ], apigvk [2 ], channelId .Int64 ); err != nil {
248
252
return err
249
253
}
250
- if _ , err := addApi .Exec (apigvk [0 ], apigvk [1 ], apigvk [2 ]); err != nil {
251
- return err
252
- }
253
- if _ , err := addApiProvider .Exec (apigvk [0 ], apigvk [1 ], apigvk [2 ], channelId .Int64 ); err != nil {
254
- return err
255
- }
256
254
}
257
255
258
- return tx .Commit ()
259
- }
256
+ getChannelEntryProvidedAPIsAPIservice , err := tx .Prepare (`
257
+ SELECT DISTINCT channel_entry.entry_id, json_extract(json_each.value, '$.group', '$.version', '$.kind')
258
+ FROM channel_entry INNER JOIN operatorbundle,json_each(operatorbundle.csv, '$.spec.apiservicedefinitions.owned')
259
+ ON channel_entry.operatorbundle_name = operatorbundle.name` )
260
+ if err != nil {
261
+ return err
262
+ }
263
+ defer getChannelEntryProvidedAPIsAPIservice .Close ()
260
264
261
- func (s * SQLLoader ) Close () {
262
- s .db .Close ()
263
- }
265
+ rows , err = getChannelEntryProvidedAPIsAPIservice .Query ()
266
+ if err != nil {
267
+ return err
268
+ }
269
+ for rows .Next () {
270
+ var channelId sql.NullInt64
271
+ var gvkSQL sql.NullString
264
272
265
- func (s * SQLLoader ) serializeBundle (bundleObjs []* unstructured.Unstructured ) (csvName string , csvBytes []byte , bundleBytes []byte , err error ) {
266
- csvCount := 0
267
- for _ , obj := range bundleObjs {
268
- objBytes , err := runtime .Encode (unstructured .UnstructuredJSONScheme , obj )
269
- if err != nil {
270
- return "" , nil , nil , err
273
+ if err := rows .Scan (& channelId , & gvkSQL ); err != nil {
274
+ return err
271
275
}
272
- bundleBytes = append (bundleBytes , objBytes ... )
273
-
274
- if obj .GetObjectKind ().GroupVersionKind ().Kind == "ClusterServiceVersion" {
275
- csvName = obj .GetName ()
276
- csvBytes , err = runtime .Encode (unstructured .UnstructuredJSONScheme , obj )
277
- if err != nil {
278
- return "" , nil , nil , err
279
- }
280
- csvCount += 1
281
- if csvCount > 1 {
282
- return "" , nil , nil , fmt .Errorf ("two csvs found in one bundle" )
283
- }
276
+ apigvk := []string {}
277
+ if err := json .Unmarshal ([]byte (gvkSQL .String ), & apigvk ); err != nil {
278
+ return err
279
+ }
280
+ if _ , err := addApi .Exec (apigvk [0 ], apigvk [1 ], apigvk [2 ]); err != nil {
281
+ return err
282
+ }
283
+ if _ , err := addApiProvider .Exec (apigvk [0 ], apigvk [1 ], apigvk [2 ], channelId .Int64 ); err != nil {
284
+ return err
284
285
}
285
286
}
286
287
287
- return csvName , csvBytes , bundleBytes , nil
288
+ return tx . Commit ()
288
289
}
289
290
290
-
291
+ func (s * SQLLoader ) Close () {
292
+ s .db .Close ()
293
+ }
0 commit comments