Fix inconsistent NULL ordering with PGSQL <-> MySQL
This commit is contained in:
@@ -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 }}
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Generated
+1
-1
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user