From 38a32ddeb3ad019c6000b9122849d0f0ee7cd633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Jerman?= Date: Fri, 4 Feb 2022 10:51:39 +0100 Subject: [PATCH] Fix inconsistent NULL ordering with PGSQL <-> MySQL --- pkg/codegen/assets/store_rdbms.gen.go.tpl | 2 +- store/rdbms/apigw_filter.gen.go | 2 +- store/rdbms/apigw_route.gen.go | 2 +- store/rdbms/applications.gen.go | 2 +- store/rdbms/auth_clients.gen.go | 2 +- store/rdbms/automation_sessions.gen.go | 2 +- store/rdbms/automation_triggers.gen.go | 2 +- store/rdbms/automation_workflows.gen.go | 2 +- store/rdbms/compose_charts.gen.go | 2 +- store/rdbms/compose_modules.gen.go | 2 +- store/rdbms/compose_namespaces.gen.go | 2 +- store/rdbms/compose_pages.gen.go | 2 +- store/rdbms/federation_exposed_modules.gen.go | 2 +- store/rdbms/federation_module_mappings.gen.go | 2 +- store/rdbms/federation_nodes_sync.gen.go | 2 +- store/rdbms/federation_shared_modules.gen.go | 2 +- store/rdbms/queue_message.gen.go | 2 +- store/rdbms/rdbms.go | 5 ++++- store/rdbms/reminders.gen.go | 2 +- store/rdbms/reports.gen.go | 2 +- store/rdbms/resource_translation.gen.go | 2 +- store/rdbms/roles.gen.go | 2 +- store/rdbms/templates.gen.go | 2 +- store/rdbms/users.gen.go | 2 +- 24 files changed, 27 insertions(+), 24 deletions(-) diff --git a/pkg/codegen/assets/store_rdbms.gen.go.tpl b/pkg/codegen/assets/store_rdbms.gen.go.tpl index a31f7bae6..4d525f06c 100644 --- a/pkg/codegen/assets/store_rdbms.gen.go.tpl +++ b/pkg/codegen/assets/store_rdbms.gen.go.tpl @@ -116,7 +116,7 @@ func (s Store) {{ toggleExport .Search.Export "Search" $.Types.Plural }}(ctx con {{ else if $.Search.EnableSorting }} // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortable{{ export $.Types.Singular }}Columns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortable{{ export $.Types.Singular }}Columns(), s.Config().SqlSortHandler); err != nil { return err } {{ end }} diff --git a/store/rdbms/apigw_filter.gen.go b/store/rdbms/apigw_filter.gen.go index 3a4b87f96..92cd8cbb0 100644 --- a/store/rdbms/apigw_filter.gen.go +++ b/store/rdbms/apigw_filter.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchApigwFilters(ctx context.Context, f types.ApigwFilterFilter } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableApigwFilterColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableApigwFilterColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/apigw_route.gen.go b/store/rdbms/apigw_route.gen.go index 4994e3e2b..e3b39f056 100644 --- a/store/rdbms/apigw_route.gen.go +++ b/store/rdbms/apigw_route.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchApigwRoutes(ctx context.Context, f types.ApigwRouteFilter) } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableApigwRouteColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableApigwRouteColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/applications.gen.go b/store/rdbms/applications.gen.go index fd0a69bed..16b9ed87b 100644 --- a/store/rdbms/applications.gen.go +++ b/store/rdbms/applications.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchApplications(ctx context.Context, f types.ApplicationFilter } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableApplicationColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableApplicationColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/auth_clients.gen.go b/store/rdbms/auth_clients.gen.go index 2857fc062..db6b31f64 100644 --- a/store/rdbms/auth_clients.gen.go +++ b/store/rdbms/auth_clients.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchAuthClients(ctx context.Context, f types.AuthClientFilter) } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableAuthClientColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableAuthClientColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/automation_sessions.gen.go b/store/rdbms/automation_sessions.gen.go index 1c1fad91d..d35f5e165 100644 --- a/store/rdbms/automation_sessions.gen.go +++ b/store/rdbms/automation_sessions.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchAutomationSessions(ctx context.Context, f types.SessionFilt } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableAutomationSessionColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableAutomationSessionColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/automation_triggers.gen.go b/store/rdbms/automation_triggers.gen.go index 95feabda4..4f8357ec7 100644 --- a/store/rdbms/automation_triggers.gen.go +++ b/store/rdbms/automation_triggers.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchAutomationTriggers(ctx context.Context, f types.TriggerFilt } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableAutomationTriggerColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableAutomationTriggerColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/automation_workflows.gen.go b/store/rdbms/automation_workflows.gen.go index 67b365373..5ba90853d 100644 --- a/store/rdbms/automation_workflows.gen.go +++ b/store/rdbms/automation_workflows.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchAutomationWorkflows(ctx context.Context, f types.WorkflowFi } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableAutomationWorkflowColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableAutomationWorkflowColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/compose_charts.gen.go b/store/rdbms/compose_charts.gen.go index aedbe8a15..f0bb825a9 100644 --- a/store/rdbms/compose_charts.gen.go +++ b/store/rdbms/compose_charts.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchComposeCharts(ctx context.Context, f types.ChartFilter) (ty } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableComposeChartColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableComposeChartColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/compose_modules.gen.go b/store/rdbms/compose_modules.gen.go index 5aafc53dd..6f06a360b 100644 --- a/store/rdbms/compose_modules.gen.go +++ b/store/rdbms/compose_modules.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchComposeModules(ctx context.Context, f types.ModuleFilter) ( } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableComposeModuleColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableComposeModuleColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/compose_namespaces.gen.go b/store/rdbms/compose_namespaces.gen.go index 4463d32eb..6886ca74e 100644 --- a/store/rdbms/compose_namespaces.gen.go +++ b/store/rdbms/compose_namespaces.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchComposeNamespaces(ctx context.Context, f types.NamespaceFil } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableComposeNamespaceColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableComposeNamespaceColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/compose_pages.gen.go b/store/rdbms/compose_pages.gen.go index a00eb4f3b..fa484d575 100644 --- a/store/rdbms/compose_pages.gen.go +++ b/store/rdbms/compose_pages.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchComposePages(ctx context.Context, f types.PageFilter) (type } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableComposePageColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableComposePageColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/federation_exposed_modules.gen.go b/store/rdbms/federation_exposed_modules.gen.go index 7e91d025a..741d070f9 100644 --- a/store/rdbms/federation_exposed_modules.gen.go +++ b/store/rdbms/federation_exposed_modules.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchFederationExposedModules(ctx context.Context, f types.Expos } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableFederationExposedModuleColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableFederationExposedModuleColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/federation_module_mappings.gen.go b/store/rdbms/federation_module_mappings.gen.go index f52deb8d1..421948a3e 100644 --- a/store/rdbms/federation_module_mappings.gen.go +++ b/store/rdbms/federation_module_mappings.gen.go @@ -85,7 +85,7 @@ func (s Store) SearchFederationModuleMappings(ctx context.Context, f types.Modul } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableFederationModuleMappingColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableFederationModuleMappingColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/federation_nodes_sync.gen.go b/store/rdbms/federation_nodes_sync.gen.go index b390deabc..1c0e0d39b 100644 --- a/store/rdbms/federation_nodes_sync.gen.go +++ b/store/rdbms/federation_nodes_sync.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchFederationNodesSyncs(ctx context.Context, f types.NodeSyncF } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableFederationNodesSyncColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableFederationNodesSyncColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/federation_shared_modules.gen.go b/store/rdbms/federation_shared_modules.gen.go index 0284b031b..3f63e1322 100644 --- a/store/rdbms/federation_shared_modules.gen.go +++ b/store/rdbms/federation_shared_modules.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchFederationSharedModules(ctx context.Context, f types.Shared } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableFederationSharedModuleColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableFederationSharedModuleColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/queue_message.gen.go b/store/rdbms/queue_message.gen.go index 9e66c3eaa..4b8f1265c 100644 --- a/store/rdbms/queue_message.gen.go +++ b/store/rdbms/queue_message.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchQueueMessages(ctx context.Context, f types.QueueMessageFilt } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableQueueMessageColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableQueueMessageColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/rdbms.go b/store/rdbms/rdbms.go index 7dd4e46fd..2a72f249a 100644 --- a/store/rdbms/rdbms.go +++ b/store/rdbms/rdbms.go @@ -423,7 +423,7 @@ func BuildCursor(q squirrel.SelectBuilder, cursor *filter.PagingCursor) squirrel return q } -func setOrderBy(q squirrel.SelectBuilder, sort filter.SortExprSet, sortable map[string]string) (squirrel.SelectBuilder, error) { +func setOrderBy(q squirrel.SelectBuilder, sort filter.SortExprSet, sortable map[string]string, sortHandler func(exp string, desc bool) string) (squirrel.SelectBuilder, error) { var ( col string has bool @@ -445,6 +445,9 @@ func setOrderBy(q squirrel.SelectBuilder, sort filter.SortExprSet, sortable map[ if sort[i].Descending { sqlSort[i] += " DESC" } + + // Let DB specific sort handler determine the appropriate syntax + sqlSort[i] = sortHandler(sqlSort[i], sort[i].Descending) } return q.OrderBy(sqlSort...), nil diff --git a/store/rdbms/reminders.gen.go b/store/rdbms/reminders.gen.go index ea0e17e34..4be037980 100644 --- a/store/rdbms/reminders.gen.go +++ b/store/rdbms/reminders.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchReminders(ctx context.Context, f types.ReminderFilter) (typ } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableReminderColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableReminderColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/reports.gen.go b/store/rdbms/reports.gen.go index 300907bad..7d32245aa 100644 --- a/store/rdbms/reports.gen.go +++ b/store/rdbms/reports.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchReports(ctx context.Context, f types.ReportFilter) (types.R } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableReportColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableReportColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/resource_translation.gen.go b/store/rdbms/resource_translation.gen.go index 576ee6484..a484ec21d 100644 --- a/store/rdbms/resource_translation.gen.go +++ b/store/rdbms/resource_translation.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchResourceTranslations(ctx context.Context, f types.ResourceT } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableResourceTranslationColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableResourceTranslationColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/roles.gen.go b/store/rdbms/roles.gen.go index ba42dd870..eba29f9ab 100644 --- a/store/rdbms/roles.gen.go +++ b/store/rdbms/roles.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchRoles(ctx context.Context, f types.RoleFilter) (types.RoleS } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableRoleColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableRoleColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/templates.gen.go b/store/rdbms/templates.gen.go index b5d533116..193d37813 100644 --- a/store/rdbms/templates.gen.go +++ b/store/rdbms/templates.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchTemplates(ctx context.Context, f types.TemplateFilter) (typ } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableTemplateColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableTemplateColumns(), s.Config().SqlSortHandler); err != nil { return err } diff --git a/store/rdbms/users.gen.go b/store/rdbms/users.gen.go index 1857b347d..6da2ff7a2 100644 --- a/store/rdbms/users.gen.go +++ b/store/rdbms/users.gen.go @@ -73,7 +73,7 @@ func (s Store) SearchUsers(ctx context.Context, f types.UserFilter) (types.UserS } // Apply sorting expr from filter to query - if q, err = setOrderBy(q, sort, s.sortableUserColumns()); err != nil { + if q, err = setOrderBy(q, sort, s.sortableUserColumns(), s.Config().SqlSortHandler); err != nil { return err }