3
0

Fix RDBMS store upsert + labels & settings

This commit is contained in:
Denis Arh 2020-12-01 15:44:58 +01:00
parent 22785ad10b
commit 66c5501d4f
30 changed files with 70 additions and 48 deletions

View File

@ -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 }}
)

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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)")),
)
}

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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 }

View File

@ -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) {