diff --git a/staging/operator-registry/pkg/sqlite/query.go b/staging/operator-registry/pkg/sqlite/query.go index fb24204941..1a45d9895e 100644 --- a/staging/operator-registry/pkg/sqlite/query.go +++ b/staging/operator-registry/pkg/sqlite/query.go @@ -991,12 +991,12 @@ tip (depth) AS ( GROUP BY all_entry.operatorbundle_name, all_entry.package_name, all_entry.channel_name ), merged_properties (bundle_name, merged) AS ( - SELECT operatorbundle_name, json_group_array(json_object('type', properties.type, 'value', properties.value)) + SELECT operatorbundle_name, json_group_array(json_object('type', CAST(properties.type AS TEXT), 'value', CAST(properties.value AS TEXT))) FROM properties GROUP BY operatorbundle_name ), merged_dependencies (bundle_name, merged) AS ( - SELECT operatorbundle_name, json_group_array(json_object('type', dependencies.type, 'value', CAST(dependencies.value AS TEXT))) + SELECT operatorbundle_name, json_group_array(json_object('type', CAST(dependencies.type AS TEXT), 'value', CAST(dependencies.value AS TEXT))) FROM dependencies GROUP BY operatorbundle_name ) diff --git a/staging/operator-registry/pkg/sqlite/query_sql_test.go b/staging/operator-registry/pkg/sqlite/query_sql_test.go index 73a19db705..ff33a91a99 100644 --- a/staging/operator-registry/pkg/sqlite/query_sql_test.go +++ b/staging/operator-registry/pkg/sqlite/query_sql_test.go @@ -155,6 +155,37 @@ func TestListBundlesQuery(t *testing.T) { require.False(rows.Next()) }, }, + { + Name: "properties and depdendencies columns may be stored as sqlite type blob", + OmitManfests: true, + Setup: func(t *testing.T, db *sql.DB) { + for _, stmt := range []string{ + `insert into package (name, default_channel) values ("package", "channel")`, + `insert into channel (name, package_name, head_operatorbundle_name) values ("channel", "package", "bundle")`, + `insert into operatorbundle (name, bundle) values ("bundle-a", "{}")`, + `insert into channel_entry (package_name, channel_name, operatorbundle_name, entry_id, depth) values ("package", "channel", "bundle-a", 1, 0)`, + `insert into properties (type, value, operatorbundle_name) values (CAST("blob_ptype" AS BLOB), CAST("blob_pvalue" AS BLOB), "bundle-a")`, + `insert into dependencies (type, value, operatorbundle_name) values (CAST("blob_dtype" AS BLOB), CAST("blob_dvalue" AS BLOB), "bundle-a")`, + } { + if _, err := db.Exec(stmt); err != nil { + t.Fatalf("unexpected error executing setup statements: %v", err) + } + } + + }, + Expect: func(t *testing.T, rows *sql.Rows) { + require := require.New(t) + require.True(rows.Next()) + var ( + props, deps sql.NullString + c interface{} + ) + require.NoError(rows.Scan(&c, &c, &c, &c, &c, &c, &c, &c, &c, &c, &deps, &props)) + require.Equal(sql.NullString{Valid: true, String: `[{"type":"blob_ptype","value":"blob_pvalue"}]`}, props) + require.Equal(sql.NullString{Valid: true, String: `[{"type":"blob_dtype","value":"blob_dvalue"}]`}, deps) + require.False(rows.Next()) + }, + }, { Name: "manifests not omitted with bundlepath", OmitManfests: true, diff --git a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/query.go b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/query.go index fb24204941..1a45d9895e 100644 --- a/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/query.go +++ b/vendor/github.com/operator-framework/operator-registry/pkg/sqlite/query.go @@ -991,12 +991,12 @@ tip (depth) AS ( GROUP BY all_entry.operatorbundle_name, all_entry.package_name, all_entry.channel_name ), merged_properties (bundle_name, merged) AS ( - SELECT operatorbundle_name, json_group_array(json_object('type', properties.type, 'value', properties.value)) + SELECT operatorbundle_name, json_group_array(json_object('type', CAST(properties.type AS TEXT), 'value', CAST(properties.value AS TEXT))) FROM properties GROUP BY operatorbundle_name ), merged_dependencies (bundle_name, merged) AS ( - SELECT operatorbundle_name, json_group_array(json_object('type', dependencies.type, 'value', CAST(dependencies.value AS TEXT))) + SELECT operatorbundle_name, json_group_array(json_object('type', CAST(dependencies.type AS TEXT), 'value', CAST(dependencies.value AS TEXT))) FROM dependencies GROUP BY operatorbundle_name )