[#4500] added the field name as part of the `@request.data.*` relations join

This commit is contained in:
Gani Georgiev 2024-03-06 15:44:13 +02:00
parent eff09852a4
commit 3551dea44a
3 changed files with 35 additions and 28 deletions

View File

@ -4,6 +4,8 @@
- Fixed `OnAfterApiError` debug log `nil` error reference ([#4498](https://github.com/pocketbase/pocketbase/issues/4498)). - Fixed `OnAfterApiError` debug log `nil` error reference ([#4498](https://github.com/pocketbase/pocketbase/issues/4498)).
- Added the field name as part of the `@request.data.someRelField.*` join to handle the case when a collection has 2 or more relation fields pointing to the same place ([#4500](https://github.com/pocketbase/pocketbase/issues/4500)).
- Updated Go deps and bumped the min Go version in the GitHub release action to Go 1.22.1 since it comes with [some security fixes](https://github.com/golang/go/issues?q=milestone%3AGo1.22.1). - Updated Go deps and bumped the min Go version in the GitHub release action to Go 1.22.1 since it comes with [some security fixes](https://github.com/golang/go/issues?q=milestone%3AGo1.22.1).

View File

@ -305,30 +305,33 @@ func (r *runner) processRequestInfoRelationField(dataField *schema.SchemaField)
} }
r.activeCollectionName = dataRelCollection.Name r.activeCollectionName = dataRelCollection.Name
r.activeTableAlias = inflector.Columnify("__data_" + dataRelCollection.Name) r.activeTableAlias = inflector.Columnify("__data_" + dataRelCollection.Name + "_" + dataField.Name)
// join the data rel collection to the main collection // join the data rel collection to the main collection
r.resolver.registerJoin( r.resolver.registerJoin(
inflector.Columnify(r.activeCollectionName), r.activeCollectionName,
r.activeTableAlias, r.activeTableAlias,
dbx.In( dbx.In(
fmt.Sprintf("[[%s.id]]", inflector.Columnify(r.activeTableAlias)), fmt.Sprintf("[[%s.id]]", r.activeTableAlias),
list.ToInterfaceSlice(dataRelIds)..., list.ToInterfaceSlice(dataRelIds)...,
), ),
) )
if options.MaxSelect == nil || *options.MaxSelect != 1 { if options.IsMultiple() {
r.withMultiMatch = true r.withMultiMatch = true
} }
// join the data rel collection to the multi-match subquery // join the data rel collection to the multi-match subquery
r.multiMatchActiveTableAlias = inflector.Columnify("__data_mm_" + dataRelCollection.Name) r.multiMatchActiveTableAlias = inflector.Columnify("__data_mm_" + dataRelCollection.Name + "_" + dataField.Name)
r.multiMatch.joins = append( r.multiMatch.joins = append(
r.multiMatch.joins, r.multiMatch.joins,
&join{ &join{
tableName: inflector.Columnify(r.activeCollectionName), tableName: r.activeCollectionName,
tableAlias: r.multiMatchActiveTableAlias, tableAlias: r.multiMatchActiveTableAlias,
on: dbx.In(r.multiMatchActiveTableAlias+".id", list.ToInterfaceSlice(dataRelIds)...), on: dbx.In(
fmt.Sprintf("[[%s.id]]", r.multiMatchActiveTableAlias),
list.ToInterfaceSlice(dataRelIds)...,
),
}, },
) )

File diff suppressed because one or more lines are too long