Skip to content

Commit

Permalink
fix(db-postgres): build indexes for relationships (#8446)
Browse files Browse the repository at this point in the history
Fixes #8413 for 2.0, builds
indexes for `_rels` tables by default.
Does not port `unique: true` from
#8432 because could be a
breaking change if someone has incosistent unique data in the database.
  • Loading branch information
r1tsuu authored Oct 10, 2024
1 parent e4bc281 commit d05e3b0
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions packages/db-postgres/src/schema/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import toSnakeCase from 'to-snake-case'

import type { GenericColumns, GenericTable, IDType, PostgresAdapter } from '../types'

import { createIndex } from './createIndex'
import { createTableName } from './createTableName'
import { parentIDColumnMap } from './parentIDColumnMap'
import { setColumnID } from './setColumnID'
Expand Down Expand Up @@ -339,16 +340,28 @@ export const buildTable = ({
if (relatedCollectionCustomIDType === 'number') colType = 'numeric'
if (relatedCollectionCustomIDType === 'text') colType = 'varchar'

relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](
`${formattedRelationTo}_id`,
)
const colName = `${relationTo}ID`

relationshipColumns[colName] = parentIDColumnMap[colType](`${formattedRelationTo}_id`)

relationExtraConfig[`${relationTo}IdFk`] = (cols) =>
foreignKey({
name: `${relationshipsTableName}_${toSnakeCase(relationTo)}_fk`,
columns: [cols[`${relationTo}ID`]],
columns: [cols[colName]],
foreignColumns: [adapter.tables[formattedRelationTo].id],
}).onDelete('cascade')

const indexName = [colName]

if (hasLocalizedRelationshipField) {
indexName.push('locale')
}

relationExtraConfig[`${relationTo}IdIdx`] = createIndex({
name: indexName,
columnName: `${formattedRelationTo}_id`,
tableName: relationshipsTableName,
})
})

relationshipsTable = adapter.pgSchema.table(
Expand Down

0 comments on commit d05e3b0

Please sign in to comment.