diff --git a/pkg/codegen/assets/store_rdbms.gen.go.tpl b/pkg/codegen/assets/store_rdbms.gen.go.tpl index 6c9ce2259..2723592be 100644 --- a/pkg/codegen/assets/store_rdbms.gen.go.tpl +++ b/pkg/codegen/assets/store_rdbms.gen.go.tpl @@ -523,7 +523,7 @@ func (s Store) execUpsert{{ export $.Types.Plural }}(ctx context.Context, set st set, {{ range $.RDBMS.Columns }} {{- if or .IsPrimaryKey -}} - {{ printf "%q" .Column }}, + s.preprocessColumn({{ printf "%q" .Column }}, {{ printf "%q" .LookupFilterPreprocess }}), {{ end }} {{- end }} ) diff --git a/store/rdbms/applications.gen.go b/store/rdbms/applications.gen.go index d137fbf7b..22bd454e5 100644 --- a/store/rdbms/applications.gen.go +++ b/store/rdbms/applications.gen.go @@ -408,7 +408,7 @@ func (s Store) execUpsertApplications(ctx context.Context, set store.Payload) er s.config, s.applicationTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/attachments.gen.go b/store/rdbms/attachments.gen.go index dc8497a7e..789e2d7ae 100644 --- a/store/rdbms/attachments.gen.go +++ b/store/rdbms/attachments.gen.go @@ -222,7 +222,7 @@ func (s Store) execUpsertAttachments(ctx context.Context, set store.Payload) err s.config, s.attachmentTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/compose_attachments.gen.go b/store/rdbms/compose_attachments.gen.go index ea833852f..5d8294b4e 100644 --- a/store/rdbms/compose_attachments.gen.go +++ b/store/rdbms/compose_attachments.gen.go @@ -222,7 +222,7 @@ func (s Store) execUpsertComposeAttachments(ctx context.Context, set store.Paylo s.config, s.composeAttachmentTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/compose_charts.gen.go b/store/rdbms/compose_charts.gen.go index 8b95eca04..96d0d006f 100644 --- a/store/rdbms/compose_charts.gen.go +++ b/store/rdbms/compose_charts.gen.go @@ -418,7 +418,7 @@ func (s Store) execUpsertComposeCharts(ctx context.Context, set store.Payload) e s.config, s.composeChartTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/compose_module_fields.gen.go b/store/rdbms/compose_module_fields.gen.go index f6e68b91e..3df4f7dfe 100644 --- a/store/rdbms/compose_module_fields.gen.go +++ b/store/rdbms/compose_module_fields.gen.go @@ -213,7 +213,7 @@ func (s Store) execUpsertComposeModuleFields(ctx context.Context, set store.Payl s.config, s.composeModuleFieldTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/compose_modules.gen.go b/store/rdbms/compose_modules.gen.go index e806e2892..ba00b7574 100644 --- a/store/rdbms/compose_modules.gen.go +++ b/store/rdbms/compose_modules.gen.go @@ -428,7 +428,7 @@ func (s Store) execUpsertComposeModules(ctx context.Context, set store.Payload) s.config, s.composeModuleTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/compose_namespaces.gen.go b/store/rdbms/compose_namespaces.gen.go index 235ce4730..8d917de9a 100644 --- a/store/rdbms/compose_namespaces.gen.go +++ b/store/rdbms/compose_namespaces.gen.go @@ -417,7 +417,7 @@ func (s Store) execUpsertComposeNamespaces(ctx context.Context, set store.Payloa s.config, s.composeNamespaceTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/compose_pages.gen.go b/store/rdbms/compose_pages.gen.go index 1ab4166da..f6c31102d 100644 --- a/store/rdbms/compose_pages.gen.go +++ b/store/rdbms/compose_pages.gen.go @@ -428,7 +428,7 @@ func (s Store) execUpsertComposePages(ctx context.Context, set store.Payload) er s.config, s.composePageTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/compose_record_values.gen.go b/store/rdbms/compose_record_values.gen.go index e780d20c4..0da88a7b0 100644 --- a/store/rdbms/compose_record_values.gen.go +++ b/store/rdbms/compose_record_values.gen.go @@ -205,9 +205,9 @@ func (s Store) execUpsertComposeRecordValues(ctx context.Context, set store.Payl s.config, s.composeRecordValueTable(), set, - "record_id", - "name", - "place", + s.preprocessColumn("record_id", ""), + s.preprocessColumn("name", ""), + s.preprocessColumn("place", ""), ) if err != nil { diff --git a/store/rdbms/compose_records.gen.go b/store/rdbms/compose_records.gen.go index f7ec366b5..9537348d1 100644 --- a/store/rdbms/compose_records.gen.go +++ b/store/rdbms/compose_records.gen.go @@ -342,7 +342,7 @@ func (s Store) execUpsertComposeRecords(ctx context.Context, set store.Payload) s.config, s.composeRecordTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/credentials.gen.go b/store/rdbms/credentials.gen.go index 182170c99..3de17d880 100644 --- a/store/rdbms/credentials.gen.go +++ b/store/rdbms/credentials.gen.go @@ -212,7 +212,7 @@ func (s Store) execUpsertCredentials(ctx context.Context, set store.Payload) err s.config, s.credentialsTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/labels.gen.go b/store/rdbms/labels.gen.go index 543e6a950..bf97a8899 100644 --- a/store/rdbms/labels.gen.go +++ b/store/rdbms/labels.gen.go @@ -214,9 +214,9 @@ func (s Store) execUpsertLabels(ctx context.Context, set store.Payload) error { s.config, s.labelTable(), set, - "kind", - "rel_resource", - "name", + s.preprocessColumn("kind", ""), + s.preprocessColumn("rel_resource", ""), + s.preprocessColumn("name", "lower"), ) if err != nil { diff --git a/store/rdbms/messaging_attachments.gen.go b/store/rdbms/messaging_attachments.gen.go index 9c476460e..abda14d8c 100644 --- a/store/rdbms/messaging_attachments.gen.go +++ b/store/rdbms/messaging_attachments.gen.go @@ -222,7 +222,7 @@ func (s Store) execUpsertMessagingAttachments(ctx context.Context, set store.Pay s.config, s.messagingAttachmentTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/messaging_channel_members.gen.go b/store/rdbms/messaging_channel_members.gen.go index c516ecafa..a4d31ce83 100644 --- a/store/rdbms/messaging_channel_members.gen.go +++ b/store/rdbms/messaging_channel_members.gen.go @@ -204,8 +204,8 @@ func (s Store) execUpsertMessagingChannelMembers(ctx context.Context, set store. s.config, s.messagingChannelMemberTable(), set, - "rel_channel", - "rel_user", + s.preprocessColumn("rel_channel", ""), + s.preprocessColumn("rel_user", ""), ) if err != nil { diff --git a/store/rdbms/messaging_channels.gen.go b/store/rdbms/messaging_channels.gen.go index 04c272bc9..3f9391a80 100644 --- a/store/rdbms/messaging_channels.gen.go +++ b/store/rdbms/messaging_channels.gen.go @@ -408,7 +408,7 @@ func (s Store) execUpsertMessagingChannels(ctx context.Context, set store.Payloa s.config, s.messagingChannelTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/messaging_flags.gen.go b/store/rdbms/messaging_flags.gen.go index 679c8e6e4..807e94e01 100644 --- a/store/rdbms/messaging_flags.gen.go +++ b/store/rdbms/messaging_flags.gen.go @@ -210,7 +210,7 @@ func (s Store) execUpsertMessagingFlags(ctx context.Context, set store.Payload) s.config, s.messagingFlagTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/messaging_mentions.gen.go b/store/rdbms/messaging_mentions.gen.go index 192313f63..cbab353c2 100644 --- a/store/rdbms/messaging_mentions.gen.go +++ b/store/rdbms/messaging_mentions.gen.go @@ -212,7 +212,7 @@ func (s Store) execUpsertMessagingMentions(ctx context.Context, set store.Payloa s.config, s.messagingMentionTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/messaging_message_attachments.gen.go b/store/rdbms/messaging_message_attachments.gen.go index 005c0b6cd..81b7986fc 100644 --- a/store/rdbms/messaging_message_attachments.gen.go +++ b/store/rdbms/messaging_message_attachments.gen.go @@ -188,7 +188,7 @@ func (s Store) execUpsertMessagingMessageAttachments(ctx context.Context, set st s.config, s.messagingMessageAttachmentTable(), set, - "rel_message", + s.preprocessColumn("rel_message", ""), ) if err != nil { diff --git a/store/rdbms/messaging_messages.gen.go b/store/rdbms/messaging_messages.gen.go index d343f298d..8e1e53959 100644 --- a/store/rdbms/messaging_messages.gen.go +++ b/store/rdbms/messaging_messages.gen.go @@ -212,7 +212,7 @@ func (s Store) execUpsertMessagingMessages(ctx context.Context, set store.Payloa s.config, s.messagingMessageTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/messaging_unread.gen.go b/store/rdbms/messaging_unread.gen.go index e15a053a4..0f0608859 100644 --- a/store/rdbms/messaging_unread.gen.go +++ b/store/rdbms/messaging_unread.gen.go @@ -183,9 +183,9 @@ func (s Store) execUpsertMessagingUnreads(ctx context.Context, set store.Payload s.config, s.messagingUnreadTable(), set, - "rel_channel", - "rel_reply_to", - "rel_user", + s.preprocessColumn("rel_channel", ""), + s.preprocessColumn("rel_reply_to", ""), + s.preprocessColumn("rel_user", ""), ) if err != nil { diff --git a/store/rdbms/rbac_rules.gen.go b/store/rdbms/rbac_rules.gen.go index 8c578ebd0..da82568a1 100644 --- a/store/rdbms/rbac_rules.gen.go +++ b/store/rdbms/rbac_rules.gen.go @@ -202,9 +202,9 @@ func (s Store) execUpsertRbacRules(ctx context.Context, set store.Payload) error s.config, s.rbacRuleTable(), set, - "rel_role", - "resource", - "operation", + s.preprocessColumn("rel_role", ""), + s.preprocessColumn("resource", ""), + s.preprocessColumn("operation", ""), ) if err != nil { diff --git a/store/rdbms/rdbms_schema.go b/store/rdbms/rdbms_schema.go index 59c89760f..eda34930b 100644 --- a/store/rdbms/rdbms_schema.go +++ b/store/rdbms/rdbms_schema.go @@ -228,7 +228,7 @@ func (Schema) Labels() *Table { ColumnDef("name", ColumnTypeVarchar, ColumnTypeLength(resourceLength)), ColumnDef("value", ColumnTypeText), - PrimaryKey(IColumn("kind", "rel_resource", "name")), + AddIndex("unique_kind_res_name", IColumn("kind", "rel_resource"), IExpr("LOWER(name)")), ) } diff --git a/store/rdbms/reminders.gen.go b/store/rdbms/reminders.gen.go index be5e8abb5..46a17a196 100644 --- a/store/rdbms/reminders.gen.go +++ b/store/rdbms/reminders.gen.go @@ -408,7 +408,7 @@ func (s Store) execUpsertReminders(ctx context.Context, set store.Payload) error s.config, s.reminderTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/role_members.gen.go b/store/rdbms/role_members.gen.go index c2989db35..5d1be361f 100644 --- a/store/rdbms/role_members.gen.go +++ b/store/rdbms/role_members.gen.go @@ -201,8 +201,8 @@ func (s Store) execUpsertRoleMembers(ctx context.Context, set store.Payload) err s.config, s.roleMemberTable(), set, - "rel_user", - "rel_role", + s.preprocessColumn("rel_user", ""), + s.preprocessColumn("rel_role", ""), ) if err != nil { diff --git a/store/rdbms/roles.gen.go b/store/rdbms/roles.gen.go index 5bb34438e..aba9ff5a5 100644 --- a/store/rdbms/roles.gen.go +++ b/store/rdbms/roles.gen.go @@ -432,7 +432,7 @@ func (s Store) execUpsertRoles(ctx context.Context, set store.Payload) error { s.config, s.roleTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/rdbms/settings.gen.go b/store/rdbms/settings.gen.go index 94c20430d..66228327a 100644 --- a/store/rdbms/settings.gen.go +++ b/store/rdbms/settings.gen.go @@ -92,7 +92,7 @@ func (s Store) QuerySettings( // LookupSettingByNameOwnedBy searches for settings by name and owner func (s Store) LookupSettingByNameOwnedBy(ctx context.Context, name string, owned_by uint64) (*types.SettingValue, error) { return s.execLookupSetting(ctx, squirrel.Eq{ - s.preprocessColumn("st.name", ""): store.PreprocessValue(name, ""), + s.preprocessColumn("st.name", "lower"): store.PreprocessValue(name, "lower"), s.preprocessColumn("st.rel_owner", ""): store.PreprocessValue(owned_by, ""), }) } @@ -130,7 +130,7 @@ func (s Store) partialSettingUpdate(ctx context.Context, onlyColumns []string, r err = s.execUpdateSettings( ctx, squirrel.Eq{ - s.preprocessColumn("st.name", ""): store.PreprocessValue(res.Name, ""), s.preprocessColumn("st.rel_owner", ""): store.PreprocessValue(res.OwnedBy, ""), + s.preprocessColumn("st.name", "lower"): store.PreprocessValue(res.Name, "lower"), s.preprocessColumn("st.rel_owner", ""): store.PreprocessValue(res.OwnedBy, ""), }, s.internalSettingEncoder(res).Skip("name", "rel_owner").Only(onlyColumns...)) if err != nil { @@ -163,7 +163,7 @@ func (s Store) DeleteSetting(ctx context.Context, rr ...*types.SettingValue) (er for _, res := range rr { err = s.execDeleteSettings(ctx, squirrel.Eq{ - s.preprocessColumn("st.name", ""): store.PreprocessValue(res.Name, ""), s.preprocessColumn("st.rel_owner", ""): store.PreprocessValue(res.OwnedBy, ""), + s.preprocessColumn("st.name", "lower"): store.PreprocessValue(res.Name, "lower"), s.preprocessColumn("st.rel_owner", ""): store.PreprocessValue(res.OwnedBy, ""), }) if err != nil { return err @@ -176,7 +176,7 @@ func (s Store) DeleteSetting(ctx context.Context, rr ...*types.SettingValue) (er // DeleteSettingByNameOwnedBy Deletes row from the settings table func (s Store) DeleteSettingByNameOwnedBy(ctx context.Context, name string, ownedBy uint64) error { return s.execDeleteSettings(ctx, squirrel.Eq{ - s.preprocessColumn("st.name", ""): store.PreprocessValue(name, ""), + s.preprocessColumn("st.name", "lower"): store.PreprocessValue(name, "lower"), s.preprocessColumn("st.rel_owner", ""): store.PreprocessValue(ownedBy, ""), }) } @@ -222,8 +222,8 @@ func (s Store) execUpsertSettings(ctx context.Context, set store.Payload) error s.config, s.settingTable(), set, - "name", - "rel_owner", + s.preprocessColumn("name", "lower"), + s.preprocessColumn("rel_owner", ""), ) if err != nil { diff --git a/store/rdbms/users.gen.go b/store/rdbms/users.gen.go index e98754781..c2a7e3037 100644 --- a/store/rdbms/users.gen.go +++ b/store/rdbms/users.gen.go @@ -441,7 +441,7 @@ func (s Store) execUpsertUsers(ctx context.Context, set store.Payload) error { s.config, s.userTable(), set, - "id", + s.preprocessColumn("id", ""), ) if err != nil { diff --git a/store/settings.yaml b/store/settings.yaml index 783193280..6d97da901 100644 --- a/store/settings.yaml +++ b/store/settings.yaml @@ -6,7 +6,7 @@ types: filterType: types.SettingsFilter fields: - - { field: Name, isPrimaryKey: true } + - { field: Name, isPrimaryKey: true, lookupFilterPreprocessor: lower } - { field: OwnedBy, isPrimaryKey: true } - { field: Value } - { field: UpdatedBy } diff --git a/store/tests/settings_test.go b/store/tests/settings_test.go index 4d745943f..a7ca56962 100644 --- a/store/tests/settings_test.go +++ b/store/tests/settings_test.go @@ -61,15 +61,37 @@ func testSettings(t *testing.T, s store.Settings) { }) t.Run("update", func(t *testing.T) { - t.Skip("Should pass(afaik) but doesn't") - req, setting := truncAndCreate(t) - setting.Name = "new-name" + setting.Value = []byte(`42`) req.NoError(s.UpdateSetting(ctx, setting)) fetched, err := s.LookupSettingByNameOwnedBy(ctx, setting.Name, setting.OwnedBy) req.NoError(err) - req.Equal("new-name", fetched.Name) + req.Equal(string(`42`), string(fetched.Value)) + }) + + t.Run("upsert", func(t *testing.T) { + req := require.New(t) + req.NoError(s.TruncateSettings(ctx)) + + t.Run("new", func(t *testing.T) { + req := require.New(t) + req.NoError(s.UpsertSetting(ctx, &types.SettingValue{Name: "foo", Value: []byte(`"foo"`)})) + v, err := s.LookupSettingByNameOwnedBy(ctx, "foo", 0) + req.NoError(err) + req.NotNil(v) + req.Equal(string(`"foo"`), string(v.Value)) + }) + + t.Run("existing", func(t *testing.T) { + req.NoError(s.CreateSetting(ctx, &types.SettingValue{Name: "baz", Value: []byte(`"created"`)})) + req.NoError(s.UpsertSetting(ctx, &types.SettingValue{Name: "baz", Value: []byte(`"updated"`)})) + v, err := s.LookupSettingByNameOwnedBy(ctx, "baz", 0) + req.NoError(err) + req.NotNil(v) + req.Equal(string(`"updated"`), string(v.Value)) + }) + }) t.Run("delete", func(t *testing.T) {