package com.android_mvc.framework.db.schema;
import com.android_mvc.framework.common.FWUtil;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
/**
* AP側のスキーマ定義を表現するための抽象クラス。
* @author id:language_and_engineering
*
*/
public abstract class AbstractSchemaDefinition
{
private SQLiteDatabase db;
/**
* AP側でテーブル構造を定義する。
* なお,実行したDDL文は整形されてログ出力される。
*/
protected abstract void define_tables();
/**
* もし必要なら,AP側で初期データを投入する。
* SQLを直に書いてもよいし,ORMを使ってもよい。
* 前者の場合はSQLiteDatabaseを使用。後者だとContextが必要。
*/
public abstract void init_db_data(SQLiteDatabase db, Context context);
/**
* FW側で全テーブルの作成処理を実行する。
*/
public void createAll(SQLiteDatabase db)
{
this.db = db;
// TODO:本当はトランザクション内で処理したいのだが,
// SQLiteではテーブルレベルのDDLをトランザクションで完全に処理することはできない。
// http://old.nabble.com/DDL-statements-in-transactions-td17785928.html
//TxnScope upper_scope = null;
//new TxnScope( db, upper_scope ){
// @Override
// protected void handleDB()
// {
FWUtil.d("テーブル構造の初期化を開始");
define_tables();
FWUtil.d("テーブル構造の初期化を完了");
// }
//}.execute();
}
/**
* DBを取得。
*/
public SQLiteDatabase getDB()
{
return db;
}
}