懒人记时 代码仓库
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 

63 行
2.4 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AppTime
{
/**
* 初始化数据库
*/
class InitDB
{
private DB db;
public InitDB()
{
db = DB.Instance;
}
public void Start()
{
// 创建数据表
db.Execute("CREATE TABLE IF NOT EXISTS \"app\" (\"id\" INTEGER NOT NULL, \"process\" text NOT NULL," +
"\"text\" TEXT NOT NULL DEFAULT process, " +
"\"tagId\" INTEGER NOT NULL DEFAULT(0), " +
"PRIMARY KEY(\"id\") ) WITHOUT ROWID");
db.Execute("CREATE TABLE IF NOT EXISTS \"period\" ( \"timeStart\" DATETIME NOT NULL, \"timeEnd\" DATETIME NOT NULL, " +
"\"winId\" INTEGER NOT NULL," +
"PRIMARY KEY(\"timeStart\")," +
"UNIQUE(\"timeStart\" ASC) )WITHOUT ROWID");
db.Execute("CREATE TABLE IF NOT EXISTS \"tag\" ( \"id\" INTEGER NOT NULL, \"text\" TEXT NOT NULL," +
"PRIMARY KEY(\"id\"), UNIQUE(\"id\" ASC), UNIQUE(\"text\" ASC) ) WITHOUT ROWID");
db.Execute("CREATE TABLE IF NOT EXISTS \"win\" (\"id\" INTEGER NOT NULL," +
"\"appId\" INTEGER NOT NULL, \"text\" TEXT NOT NULL, " +
"\"tagId\" INTEGER NOT NULL DEFAULT(0), " +
"PRIMARY KEY(\"id\") ) WITHOUT ROWID");
// 创建索引
long existIndex = (long)db.ExecuteData("SELECT count(*) FROM sqlite_master WHERE type=\"table\" AND name =\'is_index\'")[0][0];
// 判断是否已经存在索引
if (existIndex == 0)
{
db.Execute("CREATE UNIQUE INDEX \"ix_app\" ON \"app\"( \"process\" ASC )");
db.Execute("CREATE INDEX \"ix_app_tagId\" ON \"app\" ( \"tagId\" ASC )");
db.Execute("CREATE UNIQUE INDEX \"ix_period\" ON \"period\" ( \"timeStart\" ASC, \"timeEnd\" ASC )");
db.Execute("CREATE UNIQUE INDEX \"ix_win\" ON \"win\" ( \"appId\" ASC, \"text\" ASC )");
db.Execute("CREATE INDEX \"ix_win_tagId\" ON \"win\" (\"tagId\" ASC )");
// 此表仅用于标识索引已经创建完成
db.Execute("CREATE TABLE IF NOT EXISTS \"is_index\"( \"id\" INTEGER NOT NULL, PRIMARY KEY(\"id\"))");
}
}
}
}