Skip to content

Commit 2ca3d7a

Browse files
Merge pull request #214 from ritishgumber/master
rename table column fix
2 parents d1ee901 + 9a7b7c5 commit 2ca3d7a

File tree

3 files changed

+58
-12
lines changed

3 files changed

+58
-12
lines changed

helpers/cloudTable.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ module.exports = {
534534
"name": "user",
535535
"_type": "column",
536536
"dataType": "Relation",
537-
"required": true,
537+
"required": false,
538538
"unique": false,
539539
"relatedTo": "User",
540540
"relationType": null,

services/app.js

+56-11
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,7 @@ module.exports = function() {
561561
tableProps = tableProps || {
562562
isEditableByClientKey: false
563563
}
564+
var updateColumnNameOfOldRecordsPromises=[]
564565

565566
try {
566567

@@ -683,6 +684,33 @@ module.exports = function() {
683684

684685
var collection = global.mongoClient.db(appId).collection("_Schema");
685686

687+
//get previous schema object of current table if old table
688+
var renameColumnObject={};
689+
if(!isNewTable)
690+
collection.findOne({name:tableName},function(err,doc){
691+
if(err)
692+
deferred.reject("Error : Failed to get the table. ");
693+
else if(!doc)
694+
deferred.reject("Error : Failed to get the table. ");
695+
else{
696+
697+
doc.columns.forEach(function(oldColumnObj,i){
698+
//check column id
699+
schema.forEach(function(newColumnObj,i){
700+
//match column id of each columns
701+
if(newColumnObj._id===oldColumnObj._id){
702+
if(newColumnObj.name!=oldColumnObj.name){
703+
//column name is updated update previous records.
704+
renameColumnObject[oldColumnObj.name]=newColumnObj.name;
705+
}
706+
}
707+
})
708+
})
709+
updateColumnNameOfOldRecordsPromises.push(_updateColumnNameOfOldRecords(tableName,appId,renameColumnObject));
710+
711+
}
712+
})
713+
686714
console.log('Collection Object Created.');
687715

688716
collection.findOneAndUpdate({
@@ -744,10 +772,16 @@ module.exports = function() {
744772

745773
//Index all text fields
746774
promises.push(global.mongoUtil.collection.deleteAndCreateTextIndexes(appId, tableName, cloneOldColumns, schema));
747-
748-
q.all(promises).then(function(res) {
749-
deferred.resolve(table);
750-
}, function(error) {
775+
//updateColumnNameOfOldRecordsPromises stores the promises for updating previous records.
776+
q.all(promises.concat(updateColumnNameOfOldRecordsPromises)).then(function(res) {
777+
//confirm all colums are updated
778+
q.all(updateColumnNameOfOldRecordsPromises).then(function(res) {
779+
deferred.resolve(table);
780+
}, function(error) {
781+
//TODO : Rollback.
782+
deferred.resolve(table);
783+
});
784+
}, function(error) {
751785
//TODO : Rollback.
752786
deferred.resolve(table);
753787
});
@@ -1076,6 +1110,22 @@ module.exports = function() {
10761110
};
10771111
};
10781112

1113+
function _updateColumnNameOfOldRecords(tableName,appId,renameColumnObject){
1114+
1115+
var deferred = q.defer();
1116+
1117+
var collection = global.mongoClient.db(appId).collection(tableName);
1118+
collection.updateMany( {}, { $rename: renameColumnObject },function(err,doc){
1119+
if(err)
1120+
deferred.reject()
1121+
else
1122+
deferred.resolve();
1123+
} );
1124+
1125+
return deferred.promise;
1126+
1127+
}
1128+
10791129
function _isBasicDataType(dataType) {
10801130
try {
10811131
var types = global.cloudBoostHelper.getBasicDataTypes();
@@ -1284,12 +1334,7 @@ function _checkValidDataType(columns, deafultDataType, tableType) {
12841334
if (columns[index].relationType != null || columns[index].required != false || columns[index].unique != false || columns[index].dataType != 'Object')
12851335
return false;
12861336
}
1287-
// //name for file table
1288-
// if (key === 'fileName') {
1289-
// if (columns[index].relationType != null || columns[index].required != true || columns[index].unique != false || columns[index].dataType != 'Text')
1290-
// return false;
1291-
// }
1292-
// //size for file table
1337+
12931338
if (key === 'size') {
12941339
if (columns[index].relationType != null || columns[index].required != true || columns[index].unique != false || columns[index].dataType != 'Number')
12951340
return false;
@@ -1312,7 +1357,7 @@ function _checkValidDataType(columns, deafultDataType, tableType) {
13121357

13131358
//user for event table
13141359
if (key === 'user') {
1315-
if (columns[index].relationType != null || columns[index].required != true || columns[index].unique != false || columns[index].dataType != 'Relation')
1360+
if (columns[index].relationType != null || columns[index].required != false || columns[index].unique != false || columns[index].dataType != 'Relation')
13161361
return false;
13171362
}
13181363

services/cloudObjects.js

+1
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ function _save(appId, collectionName, document, accessList, isMasterKey, reqType
286286
_validateSchema(appId, listOfDocs, accessList, isMasterKey).then(function(listOfDocs) {
287287
console.log("Schema checked");
288288

289+
289290
var mongoDocs = listOfDocs.map(function(doc){
290291
return Object.assign({},doc)
291292
})

0 commit comments

Comments
 (0)