using System;
using System.Collections.Generic;
using System.Text;
namespace Apewer.Source
{
/// 数据库引擎支持 ORM 访问。
public interface IOrm : IDatabase
{
/// 初始化指定类型,以创建表或增加字段。
/// 要初始化的类型。
/// 错误信息。当成功时候返回空字符串。
public string Initialize(Type model);
/// 初始化指定类型,以创建表或增加字段。
/// 错误信息。当成功时候返回空字符串。
public string Initialize() where T : IRecord;
/// 插入记录。
/// 要插入的记录实体。
/// 错误信息。当成功时候返回空字符串。
public string Insert(IRecord record);
/// 更新记录。
/// 要插入的记录实体。
/// 错误信息。当成功时候返回空字符串。
public string Update(IRecord record);
/// 获取指定类型的主键,按 Flag 属性筛选。
/// 要查询的类型。
/// 要求目标记录具有的 Flag 属性,当指定 0 时忽略此要求。
public Result> Keys(Type model, long flag = 0);
/// 获取指定类型的主键,按 Flag 属性筛选。
/// 要查询的类型。
/// 要求目标记录具有的 Flag 属性,当指定 0 时忽略此要求。
public Result> Keys(long flag = 0) where T : IRecord;
/// 获取具有指定 Key 的记录,并要求记录具有指定的 Flag 属性。
/// 目标记录的类型。
/// 目标记录的主键。
/// 要求目标记录具有的 Flag 属性,当指定 0 时忽略此要求。
public Result Get(Type model, string key, long flag = 0);
/// 获取具有指定 Key 的记录,并要求记录具有指定的 Flag 属性。
/// 目标记录的主键。
/// 要求目标记录具有的 Flag 属性,当指定 0 时忽略此要求。
public Result Get(string key, long flag = 0) where T : IRecord;
/// 使用指定语句查询,获取查询结果。
/// 目标记录的类型。
/// 要执行的 SQL 语句。
public Result> Query(Type model, string sql);
/// 使用指定语句查询,获取查询结果。
/// 要执行的 SQL 语句。
public Result> Query(string sql) where T : IRecord;
/// 查询所有记录。
/// 目标记录的类型。
/// 要求目标记录具有的 Flag 属性,当指定 0 时忽略此要求。
public Result> Query(Type model, long flag = 0);
/// 查询所有记录。
/// 要求目标记录具有的 Flag 属性,当指定 0 时忽略此要求。
public Result> Query(long flag = 0) where T : IRecord;
}
}