mirror of
https://github.com/strapi/strapi.git
synced 2025-12-28 07:33:17 +00:00
use NULL as default order + better handle migration
This commit is contained in:
parent
83c29436ca
commit
59417498ab
@ -509,18 +509,20 @@ const createEntityManager = (db) => {
|
||||
currentRelsToDelete.sort((a, b) => b[orderColumnName] - a[orderColumnName]);
|
||||
|
||||
for (const relToDelete of currentRelsToDelete) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: relToDelete[joinColumn.name],
|
||||
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
if (relToDelete[orderColumnName] !== null) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: relToDelete[joinColumn.name],
|
||||
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -762,19 +764,21 @@ const createEntityManager = (db) => {
|
||||
|
||||
const updateInverseOrderPromises = [];
|
||||
for (const relToDelete of relsToDelete) {
|
||||
const updatePromise = this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[inverseOrderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
|
||||
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
updateInverseOrderPromises.push(updatePromise);
|
||||
if (relToDelete[inverseOrderColumnName] !== null) {
|
||||
const updatePromise = this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[inverseOrderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
|
||||
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
updateInverseOrderPromises.push(updatePromise);
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(updateInverseOrderPromises);
|
||||
@ -825,18 +829,20 @@ const createEntityManager = (db) => {
|
||||
relsToDelete.sort((a, b) => b[orderColumnName] - a[orderColumnName]);
|
||||
|
||||
for (const relToDelete of relsToDelete) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: id,
|
||||
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
if (relToDelete[orderColumnName] !== null) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: id,
|
||||
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -844,19 +850,21 @@ const createEntityManager = (db) => {
|
||||
if (isBidirectional(attribute) && isManyToAny(attribute)) {
|
||||
const updateInverseOrderPromises = [];
|
||||
for (const relToDelete of relsToDelete) {
|
||||
const updatePromise = this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[inverseOrderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
|
||||
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
updateInverseOrderPromises.push(updatePromise);
|
||||
if (relToDelete[inverseOrderColumnName] !== null) {
|
||||
const updatePromise = this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[inverseOrderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
|
||||
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
updateInverseOrderPromises.push(updatePromise);
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(updateInverseOrderPromises);
|
||||
@ -900,28 +908,31 @@ const createEntityManager = (db) => {
|
||||
// const currentRel = currentMovingRelsMap[relToAddOrMove.id]?.[0];
|
||||
const currentRel = currentMovingRelsMap[relToAddOrMove.id]?.[0];
|
||||
if (currentRel && isAnyToMany(attribute)) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', currentRel[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: id,
|
||||
[orderColumnName]: { $gt: currentRel[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
const currentOrderIsNull = currentRel[orderColumnName] === null;
|
||||
if (!currentOrderIsNull) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', currentRel[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: id,
|
||||
[orderColumnName]: { $gt: currentRel[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
|
||||
currentMovingRels.forEach((rel) => {
|
||||
if (rel[orderColumnName] > currentRel[orderColumnName]) {
|
||||
rel[orderColumnName] -= 1;
|
||||
}
|
||||
});
|
||||
currentMovingRels.forEach((rel) => {
|
||||
if (rel[orderColumnName] > currentRel[orderColumnName]) {
|
||||
rel[orderColumnName] -= 1;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: max,
|
||||
[orderColumnName]: currentOrderIsNull ? max + 1 : max,
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: id,
|
||||
@ -988,19 +999,21 @@ const createEntityManager = (db) => {
|
||||
relsToDelete.sort((a, b) => b[orderColumnName] - a[orderColumnName]);
|
||||
|
||||
for (const relToDelete of relsToDelete) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: id,
|
||||
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
// manque le pivot ici
|
||||
.execute();
|
||||
if (relToDelete[orderColumnName] !== null) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: id,
|
||||
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
// manque le pivot ici
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1008,19 +1021,21 @@ const createEntityManager = (db) => {
|
||||
if (isBidirectional(attribute) && isManyToAny(attribute)) {
|
||||
const updateInverseOrderPromises = [];
|
||||
for (const relToDelete of relsToDelete) {
|
||||
const updatePromise = this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[inverseOrderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
|
||||
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
updateInverseOrderPromises.push(updatePromise);
|
||||
if (relToDelete[inverseOrderColumnName] !== null) {
|
||||
const updatePromise = this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[inverseOrderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
|
||||
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
updateInverseOrderPromises.push(updatePromise);
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(updateInverseOrderPromises);
|
||||
@ -1106,18 +1121,20 @@ const createEntityManager = (db) => {
|
||||
currentRelsToDelete.sort((a, b) => b[orderColumnName] - a[orderColumnName]);
|
||||
|
||||
for (const relToDelete of currentRelsToDelete) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: relToDelete[joinColumn.name],
|
||||
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
if (relToDelete[orderColumnName] !== null) {
|
||||
await this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[orderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[orderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[joinColumn.name]: relToDelete[joinColumn.name],
|
||||
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1270,19 +1287,21 @@ const createEntityManager = (db) => {
|
||||
|
||||
const updateInverseOrderPromises = [];
|
||||
for (const relToDelete of relsToDelete) {
|
||||
const updatePromise = this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[inverseOrderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
|
||||
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
updateInverseOrderPromises.push(updatePromise);
|
||||
if (relToDelete[inverseOrderColumnName] !== null) {
|
||||
const updatePromise = this.createQueryBuilder(joinTable.name)
|
||||
.update({
|
||||
[inverseOrderColumnName]: db
|
||||
.getConnection()
|
||||
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
|
||||
})
|
||||
.where({
|
||||
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
|
||||
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
|
||||
})
|
||||
.where(joinTable.on || {})
|
||||
.execute();
|
||||
updateInverseOrderPromises.push(updatePromise);
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(updateInverseOrderPromises);
|
||||
|
||||
@ -481,7 +481,7 @@ const createJoinTable = (metadata, { attributeName, attribute, meta }) => {
|
||||
type: 'integer',
|
||||
column: {
|
||||
unsigned: true,
|
||||
defaultTo: 0,
|
||||
defaultTo: null,
|
||||
},
|
||||
};
|
||||
metadataSchema.indexes.push({
|
||||
@ -498,7 +498,7 @@ const createJoinTable = (metadata, { attributeName, attribute, meta }) => {
|
||||
type: 'integer',
|
||||
column: {
|
||||
unsigned: true,
|
||||
defaultTo: 0,
|
||||
defaultTo: null,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user