Skip to content

Instantly share code, notes, and snippets.

@onori
Created July 24, 2013 18:19
Show Gist options
  • Save onori/6073083 to your computer and use it in GitHub Desktop.
Save onori/6073083 to your computer and use it in GitHub Desktop.
js、というかtitaniumとsqliteでなんやかんやのメモ。 IF NOT EXISTS ADD CULUMN をどうやったら上手く実装出来るかなー的な。
// ↓ こんなのあるんだってやつ ↓ //
/* テーブル情報を一括で取得 */
db.execute("PRAGMA table-info(table-name)");
/* テーブルのユーザーバージョンを取得 */
db.execute("PRAGMA user-version");
/**
* 以下実装例
*/
var main = function(){
const LATEST_TABLE_VERSION = 1; // テーブルの最新バージョンを定義しておく
/*
*テーブルのバージョン情報の比較
*バージョンが最新じゃなかったら、カラムの追加を行う
*/
if (LATEST_TABLE_VERSION != getUserVersion()) {
var colData = data; // 追加するカラムをオブジェクトでどっかに定義
for (var key in colData){
var fieldName = colData[key]["fieldName"];
var colSpec = colData[key]["colSpec"];
addField(fieldName, colSpec); // カラムを追加するかどうかの判定へ
}
setUserVersion(LATEST_TABLE_VERSION); // 最新バージョンへ更新
}
}();
/* テーブルバージョン情報の取得 */
function getUserVersion(){
db.connect();
var result = db.execute("PRAGMA user_version");
var version = result.field(0);
db.close();
return version;
}
/* テーブルバージョンを更新 */
function setUserVersion(latestVer){
db.connect();
db.execute("PRAGMA user_version = " + latestVer);
db.close();
}
/* カラムが存在していなければ新しく追加する */
function addField(fieldName, colSpec){
db.connect();
var fieldExists = false;
var resultSet = db.execute("PRAGMA table_info(offline)");
while (resultSet.isValidRow()) {
if(resultSet.field(1) == fieldName) {
fieldExists = true;
Ti.API.info(fieldName + "is exists");
}
resultSet.next();
} // end while
if(!fieldExists) {
// field does not exist, so add it
Ti.API.info(fieldName + " is make column!!")
db.execute('ALTER TABLE offline ADD COLUMN '+fieldName + ' ' + colSpec);
}
db.close();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment