#titanium #titanium-mobile #appcelerator #titanium-alloy
#титан #titanium-мобильный #ускоритель приложений #titanium-alloy
Вопрос:
Я собираюсь выпустить обновление приложения для iPhone, которое я написал на Titanium Alloy. Я добавил новый столбец в базу данных, поэтому я написал для него миграцию. Миграция вверх достаточно проста, просто изменяя таблицу, чтобы добавить новый столбец. Однако миграция вниз вызывает некоторые опасения, поскольку она включает в себя создание временной базы данных, хранение необходимых мне данных, а затем удаление существующей базы данных и создание новой с сохраненными данными, чтобы сохранить столбец remove.
Как мне проверить, что этот код правильный и будет работать?
Вот мои миграции:
migration.up = function(migrator) {
migrator.db.execute('ALTER TABLE ' migrator.table ' ADD COLUMN is_sample BOOLEAN;');
};
migration.down = function(migrator) {
var db = migrator.db;
var table = migrator.table;
db.execute('CREATE TEMPORARY TABLE beers_backup(alloy_id,name,brewery,rating,percent,establishment,location,notes,date,date_string,beer_image,latitude,longitude,favourite);');
db.execute('INSERT INTO beers_backup SELECT alloy_id,name,brewery,rating,percent,establishment,location,notes,date,date_string,beer_image,latitude,longitude,favourite FROM ' table ';');
migrator.dropTable();
migrator.createTable({
columns: {
"name": "text",
"brewery": "text",
"rating": "integer",
"percent": "integer",
"establishment": "text",
"location": "text",
"notes": "text",
"date": "text",
"date_string": "text",
"beer_image": "text",
"latitude": "integer",
"longitude": "integer",
"favourite": "boolean"
},
});
db.execute('INSERT INTO ' table ' SELECT alloy_id,name,brewery,rating,percent,establishment,location,notes,date,date_string,beer_image,latitude,longitude,favourite FROM beers_backup;');
db.execute('DROP TABLE beers_backup;');
};
Комментарии:
1. Я предполагаю, что у вас нет предыдущей сборки приложения?
2. К сожалению, нет, но я мог бы откатить приложение с помощью контроля версий и создать сборку, если это то, что мне нужно сделать?
Ответ №1:
Все должно быть в порядке, если ваш первый файл миграции (тот, который вы создали при создании модели) совпадает с нисходящей миграцией здесь.
Вот так:
migration.up = function(migrator){
migrator.createTable({
columns: {
"name": "text",
"brewery": "text",
"rating": "integer",
"percent": "integer",
"establishment": "text",
"location": "text",
"notes": "text",
"date": "text",
"date_string": "text",
"beer_image": "text",
"latitude": "integer",
"longitude": "integer",
"favourite": "boolean"
}
});
};
migration.down = function(migrator) {
migrator.droptTable();
};
Этот файл миграции должен иметь временную метку, меньшую, чем та, которую вы указали в исходном вопросе.