mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Fixed an issue where changing a column name should reflect in all the constraints in table object dialog and ERD table dialog. #7476
This commit is contained in:
parent
5866da8194
commit
a946c70869
@ -68,7 +68,6 @@ class ExclusionColHeaderSchema extends BaseUISchema {
|
|||||||
return this.exColumnSchema.getNewData({
|
return this.exColumnSchema.getNewData({
|
||||||
is_exp: data.is_exp,
|
is_exp: data.is_exp,
|
||||||
column: data.is_exp ? data.expression : data.column,
|
column: data.is_exp ? data.expression : data.column,
|
||||||
column_cid: data.is_exp ? null : column?.cid,
|
|
||||||
col_type: data.is_exp ? null : column?.datatype,
|
col_type: data.is_exp ? null : column?.datatype,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -379,13 +378,13 @@ export default class ExclusionConstraintSchema extends BaseUISchema {
|
|||||||
if(obj.inTable && source[0] == 'columns') {
|
if(obj.inTable && source[0] == 'columns') {
|
||||||
if(actionObj.type == SCHEMA_STATE_ACTIONS.DELETE_ROW) {
|
if(actionObj.type == SCHEMA_STATE_ACTIONS.DELETE_ROW) {
|
||||||
let column = _.get(actionObj.oldState, actionObj.path.concat(actionObj.value));
|
let column = _.get(actionObj.oldState, actionObj.path.concat(actionObj.value));
|
||||||
currColumns = _.filter(currColumns, (cc)=>cc.column_cid != column.cid);
|
currColumns = _.filter(currColumns, (cc)=>cc.column != column.name);
|
||||||
} else if(actionObj.type == SCHEMA_STATE_ACTIONS.SET_VALUE) {
|
} else if(actionObj.type == SCHEMA_STATE_ACTIONS.SET_VALUE) {
|
||||||
let tabColPath = _.slice(actionObj.path, 0, -1);
|
let tabColPath =_.slice(actionObj.path, 0, -1);
|
||||||
let column = _.get(topState, tabColPath);
|
let column = _.get(actionObj.oldState, tabColPath);
|
||||||
let idx = _.findIndex(currColumns, (cc)=>cc.column_cid == column.cid);
|
let idx = _.findIndex(currColumns, (cc)=>cc.column == column.name);
|
||||||
if(idx > -1) {
|
if(idx > -1) {
|
||||||
currColumns[idx].column = column.name;
|
currColumns[idx].column = _.get(topState, tabColPath).name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,6 @@ class ForeignKeyHeaderSchema extends BaseUISchema {
|
|||||||
let references_table_name = _.find(this.refTables, (t)=>t.value==data.references || t.value == this.origData.references)?.label;
|
let references_table_name = _.find(this.refTables, (t)=>t.value==data.references || t.value == this.origData.references)?.label;
|
||||||
return {
|
return {
|
||||||
local_column: data.local_column,
|
local_column: data.local_column,
|
||||||
local_column_cid: _.find(this.fieldOptions.local_column, (c)=>c.value == data.local_column)?.cid,
|
|
||||||
referenced: data.referenced,
|
referenced: data.referenced,
|
||||||
references: data.references,
|
references: data.references,
|
||||||
references_table_name: references_table_name,
|
references_table_name: references_table_name,
|
||||||
@ -348,11 +347,11 @@ export default class ForeignKeySchema extends BaseUISchema {
|
|||||||
if(obj.inTable && source[0] == 'columns') {
|
if(obj.inTable && source[0] == 'columns') {
|
||||||
if(actionObj.type == SCHEMA_STATE_ACTIONS.DELETE_ROW) {
|
if(actionObj.type == SCHEMA_STATE_ACTIONS.DELETE_ROW) {
|
||||||
let column = _.get(actionObj.oldState, actionObj.path.concat(actionObj.value));
|
let column = _.get(actionObj.oldState, actionObj.path.concat(actionObj.value));
|
||||||
currColumns = _.filter(currColumns, (cc)=>cc.local_column_cid != column.cid);
|
currColumns = _.filter(currColumns, (cc)=>cc.local_column != column.name);
|
||||||
} else if(actionObj.type == SCHEMA_STATE_ACTIONS.SET_VALUE) {
|
} else if(actionObj.type == SCHEMA_STATE_ACTIONS.SET_VALUE) {
|
||||||
let tabColPath = _.slice(actionObj.path, 0, -1);
|
let tabColPath = _.slice(actionObj.path, 0, -1);
|
||||||
let column = _.get(actionObj.oldState, tabColPath);
|
let column = _.get(actionObj.oldState, tabColPath);
|
||||||
let idx = _.findIndex(currColumns, (cc)=>cc.local_column_cid == column.cid);
|
let idx = _.findIndex(currColumns, (cc)=>cc.local_column == column.name);
|
||||||
if(idx > -1) {
|
if(idx > -1) {
|
||||||
currColumns[idx].local_column = _.get(topState, tabColPath).name;
|
currColumns[idx].local_column = _.get(topState, tabColPath).name;
|
||||||
}
|
}
|
||||||
|
@ -86,13 +86,14 @@ export default class PrimaryKeySchema extends BaseUISchema {
|
|||||||
if(obj.inTable && source[0] == 'columns') {
|
if(obj.inTable && source[0] == 'columns') {
|
||||||
if(actionObj.type == SCHEMA_STATE_ACTIONS.DELETE_ROW) {
|
if(actionObj.type == SCHEMA_STATE_ACTIONS.DELETE_ROW) {
|
||||||
let oldColumn = _.get(actionObj.oldState, actionObj.path.concat(actionObj.value));
|
let oldColumn = _.get(actionObj.oldState, actionObj.path.concat(actionObj.value));
|
||||||
currColumns = _.filter(currColumns, (cc)=>cc.cid != oldColumn.cid);
|
currColumns = _.filter(currColumns, (cc)=>cc.column != oldColumn.name);
|
||||||
} else if(actionObj.type == SCHEMA_STATE_ACTIONS.SET_VALUE) {
|
} else if(actionObj.type == SCHEMA_STATE_ACTIONS.SET_VALUE) {
|
||||||
let tabColPath = _.slice(actionObj.path, 0, -1);
|
let tabColPath = _.slice(actionObj.path, 0, -1);
|
||||||
let oldCol = _.get(actionObj.oldState, tabColPath);
|
let oldCol = _.get(actionObj.oldState, tabColPath);
|
||||||
let idx = _.findIndex(currColumns, (cc)=>cc.cid == oldCol.cid);
|
let idx = _.findIndex(currColumns, (cc)=>cc.column == oldCol.name);
|
||||||
if(idx > -1) {
|
let updatedCol = _.get(topState, tabColPath);
|
||||||
currColumns[idx].column = _.get(topState, tabColPath).name;
|
if(idx > -1 && updatedCol.is_primary_key) {
|
||||||
|
currColumns[idx].column = updatedCol.name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,11 +88,11 @@ export default class UniqueConstraintSchema extends BaseUISchema {
|
|||||||
if(obj.inTable && source[0] == 'columns') {
|
if(obj.inTable && source[0] == 'columns') {
|
||||||
if(actionObj.type == SCHEMA_STATE_ACTIONS.DELETE_ROW) {
|
if(actionObj.type == SCHEMA_STATE_ACTIONS.DELETE_ROW) {
|
||||||
let oldColumn = _.get(actionObj.oldState, actionObj.path.concat(actionObj.value));
|
let oldColumn = _.get(actionObj.oldState, actionObj.path.concat(actionObj.value));
|
||||||
currColumns = _.filter(currColumns, (cc)=>cc.cid != oldColumn.cid);
|
currColumns = _.filter(currColumns, (cc)=>cc.column != oldColumn.name);
|
||||||
} else if(actionObj.type == SCHEMA_STATE_ACTIONS.SET_VALUE) {
|
} else if(actionObj.type == SCHEMA_STATE_ACTIONS.SET_VALUE) {
|
||||||
let tabColPath = _.slice(actionObj.path, 0, -1);
|
let tabColPath = _.slice(actionObj.path, 0, -1);
|
||||||
let oldCol = _.get(actionObj.oldState, tabColPath);
|
let oldCol = _.get(actionObj.oldState, tabColPath);
|
||||||
let idx = _.findIndex(currColumns, (cc)=>cc.cid == oldCol.cid);
|
let idx = _.findIndex(currColumns, (cc)=>cc.column == oldCol.name);
|
||||||
if(idx > -1) {
|
if(idx > -1) {
|
||||||
currColumns[idx].column = _.get(topState, tabColPath).name;
|
currColumns[idx].column = _.get(topState, tabColPath).name;
|
||||||
}
|
}
|
||||||
|
@ -448,7 +448,7 @@ export default class TableSchema extends BaseUISchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
changeColumnOptions(columns) {
|
changeColumnOptions(columns) {
|
||||||
let colOptions = (columns||[]).map((c)=>({label: c.name, value: c.name, image:'icon-column', cid:c.cid}));
|
let colOptions = (columns||[]).map((c)=>({label: c.name, value: c.name, image:'icon-column'}));
|
||||||
this.constraintsObj.changeColumnOptions(colOptions);
|
this.constraintsObj.changeColumnOptions(colOptions);
|
||||||
this.partitionKeysObj.changeColumnOptions(colOptions);
|
this.partitionKeysObj.changeColumnOptions(colOptions);
|
||||||
this.partitionsObj.changeColumnOptions(colOptions);
|
this.partitionsObj.changeColumnOptions(colOptions);
|
||||||
@ -682,12 +682,11 @@ export default class TableSchema extends BaseUISchema {
|
|||||||
let currPk = state.primary_key[0];
|
let currPk = state.primary_key[0];
|
||||||
/* If col is not PK, remove it */
|
/* If col is not PK, remove it */
|
||||||
if(!columnData.is_primary_key) {
|
if(!columnData.is_primary_key) {
|
||||||
currPk.columns = _.filter(currPk.columns, (c)=>c.cid !== columnData.cid);
|
currPk.columns = _.filter(currPk.columns, (c)=>c.column !== columnData.name);
|
||||||
} else {
|
} else {
|
||||||
currPk.columns = _.filter(currPk.columns, (c)=>c.cid !== columnData.cid);
|
currPk.columns = _.filter(currPk.columns, (c)=>c.column !== columnData.name);
|
||||||
currPk.columns.push({
|
currPk.columns.push({
|
||||||
column: columnData.name,
|
column: columnData.name,
|
||||||
cid: columnData.cid,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/* Remove the PK if all columns not PK */
|
/* Remove the PK if all columns not PK */
|
||||||
@ -700,7 +699,8 @@ export default class TableSchema extends BaseUISchema {
|
|||||||
/* Create PK if none */
|
/* Create PK if none */
|
||||||
return {primary_key: [
|
return {primary_key: [
|
||||||
obj.constraintsObj.primaryKeyObj.getNewData({
|
obj.constraintsObj.primaryKeyObj.getNewData({
|
||||||
columns: [{column: columnData.name, cid: columnData.cid}],
|
columns: [{column: columnData.name,
|
||||||
|
}],
|
||||||
})
|
})
|
||||||
]};
|
]};
|
||||||
}
|
}
|
||||||
|
@ -368,7 +368,7 @@ export default class ERDCore {
|
|||||||
fkTableNode.getData().foreign_key?.forEach((theFkRow)=>{
|
fkTableNode.getData().foreign_key?.forEach((theFkRow)=>{
|
||||||
for(let fkColumn of theFkRow.columns) {
|
for(let fkColumn of theFkRow.columns) {
|
||||||
if(fkColumn.references == tableNode.getID()) {
|
if(fkColumn.references == tableNode.getID()) {
|
||||||
let attnum = _.find(oldTableData.columns, (c)=>c.name==fkColumn.referenced).attnum;
|
let attnum = _.find(oldTableData.columns, (c)=>c.name==fkColumn.referenced)?.attnum;
|
||||||
fkColumn.referenced = _.find(tableData.columns, (colm)=>colm.attnum==attnum).name;
|
fkColumn.referenced = _.find(tableData.columns, (colm)=>colm.attnum==attnum).name;
|
||||||
fkColumn.references_table_name = tableData.name;
|
fkColumn.references_table_name = tableData.name;
|
||||||
}
|
}
|
||||||
@ -413,8 +413,8 @@ export default class ERDCore {
|
|||||||
let tableNodesDict = this.getModel().getNodesDict();
|
let tableNodesDict = this.getModel().getNodesDict();
|
||||||
let sourceNode = tableNodesDict[theFk.references];
|
let sourceNode = tableNodesDict[theFk.references];
|
||||||
|
|
||||||
let localAttnum = _.find(tableNode.getColumns(), (col)=>col.name==theFk.local_column).attnum;
|
let localAttnum = _.find(tableNode.getColumns(), (col)=>col.name==theFk.local_column)?.attnum;
|
||||||
let refAttnum = _.find(sourceNode.getColumns(), (col)=>col.name==theFk.referenced).attnum;
|
let refAttnum = _.find(sourceNode.getColumns(), (col)=>col.name==theFk.referenced)?.attnum;
|
||||||
const fkLink = Object.values(tableNode.getLinks()).find((link)=>{
|
const fkLink = Object.values(tableNode.getLinks()).find((link)=>{
|
||||||
const ldata = link.getData();
|
const ldata = link.getData();
|
||||||
return ldata.local_column_attnum == localAttnum
|
return ldata.local_column_attnum == localAttnum
|
||||||
|
@ -106,7 +106,6 @@ describe('ExclusionConstraintSchema', ()=>{
|
|||||||
is_exp: true,
|
is_exp: true,
|
||||||
column: 'abc',
|
column: 'abc',
|
||||||
col_type: null,
|
col_type: null,
|
||||||
column_cid: null,
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -126,14 +125,14 @@ describe('ExclusionConstraintSchema', ()=>{
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('depChange', ()=>{
|
it('depChange', ()=>{
|
||||||
let state = {columns: [{column: 'id', column_cid: 'c123'}]};
|
let state = {columns: [{column: 'id'}]};
|
||||||
|
|
||||||
schemaObj.top = new TableSchema({}, null);
|
schemaObj.top = new TableSchema({}, null);
|
||||||
expect(getFieldDepChange(schemaObj, 'columns')(state, ['columns', 0], null, {
|
expect(getFieldDepChange(schemaObj, 'columns')(state, ['columns', 0], null, {
|
||||||
type: SCHEMA_STATE_ACTIONS.DELETE_ROW,
|
type: SCHEMA_STATE_ACTIONS.DELETE_ROW,
|
||||||
oldState: {
|
oldState: {
|
||||||
columns: [
|
columns: [
|
||||||
{name: 'id', cid: 'c123'}
|
{name: 'id'}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
path: ['columns'],
|
path: ['columns'],
|
||||||
@ -144,19 +143,19 @@ describe('ExclusionConstraintSchema', ()=>{
|
|||||||
|
|
||||||
expect(getFieldDepChange(schemaObj, 'columns')(state, ['columns', 0], {
|
expect(getFieldDepChange(schemaObj, 'columns')(state, ['columns', 0], {
|
||||||
columns: [
|
columns: [
|
||||||
{name: 'id123', cid: 'c123'}
|
{name: 'id123'}
|
||||||
],
|
],
|
||||||
}, {
|
}, {
|
||||||
type: SCHEMA_STATE_ACTIONS.SET_VALUE,
|
type: SCHEMA_STATE_ACTIONS.SET_VALUE,
|
||||||
oldState: {
|
oldState: {
|
||||||
columns: [
|
columns: [
|
||||||
{name: 'id', cid: 'c123'}
|
{name: 'id'}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
path: ['columns', 0, 'name'],
|
path: ['columns', 0, 'name'],
|
||||||
value: 'id123',
|
value: 'id123',
|
||||||
})).toEqual({
|
})).toEqual({
|
||||||
columns: [{column: 'id123', column_cid: 'c123'}],
|
columns: [{column: 'id123'}],
|
||||||
});
|
});
|
||||||
|
|
||||||
state = {};
|
state = {};
|
||||||
|
@ -122,7 +122,7 @@ describe('PrimaryKeySchema', ()=>{
|
|||||||
|
|
||||||
expect(getFieldDepChange(schemaObj, 'columns')(state, ['columns', 0], {
|
expect(getFieldDepChange(schemaObj, 'columns')(state, ['columns', 0], {
|
||||||
columns: [
|
columns: [
|
||||||
{name: 'id123'}
|
{name: 'id123', is_primary_key: true}
|
||||||
],
|
],
|
||||||
}, {
|
}, {
|
||||||
type: SCHEMA_STATE_ACTIONS.SET_VALUE,
|
type: SCHEMA_STATE_ACTIONS.SET_VALUE,
|
||||||
|
Loading…
Reference in New Issue
Block a user