package com.android_mvc.framework.db.schema;
/**
* SQLiteの1つのカラム定義を表すクラス。
* @author id:language_and_engineering
*
*/
public class RDBColumn
{
private String column_name;
private String type_name;
private boolean primary_key_flag = false;
private boolean not_null_flag = false;
/**
* カラム名をセット
*/
public RDBColumn nameIs(String column_name)
{
this.column_name = column_name;
return this;
}
/**
* カラムの型名をセット
*/
public RDBColumn typeIs(String type_name)
{
// TODO: type名をtypoする場合もあるだろう。型安全にするか,もしくはバリデーションするか。
this.type_name = type_name;
return this;
}
/**
* 連番の主キーとする。※not null指定は不要。
*/
public RDBColumn primaryKey()
{
this.primary_key_flag = true;
this.type_name = "integer";
return this;
}
/**
* not nullとする。
*/
public RDBColumn notNull()
{
this.not_null_flag = true;
return this;
}
/**
* 必要に応じて,カラムに関するコメントを記述。カラムの論理名など。
*/
public RDBColumn comment(String s)
{
// nop
return this;
}
/**
* 1カラム分をSQL化。正確に言うと,DDLの一部分。
*/
protected String toSQLString()
{
// SAMPLE:
// "id integer primary key autoincrement"
// "hoge text not null"
String sql = "";
sql += column_name + " " + type_name;
// 主キーの場合
if( primary_key_flag )
{
sql += " primary key autoincrement";
// http://www.dbonline.jp/sqlite/table/index6.html
}
else
{
if( not_null_flag )
{
sql += " not null";
}
}
return sql;
}
}