/*
* tycj_orm - 仓颉语言 ORM 框架
* 版本 1.0.0
*
* 功能特性:
* - 参数化查询:防止 SQL 注入,使用 ? 占位符
* - 连接池管理:复用数据库连接,提升性能
* - 多数据源支持:支持主从、读写分离
* - 事务传播:嵌套事务、事务回滚
* - AI 增强查询:自然语言转 SQL(NL2SQL)
* - SQL 方言支持:MySQL、PostgreSQL、SQLite
* - 实体映射:JPA 风格的实体注解
* - 查询构建器:链式 API 构建 SQL
*
* 模块导出:
* - ORM 配置:OrmConfig, OrmContext
* - 数据源:DataSource, DatabaseConfig, Connection, PreparedStatement
* - 连接池:ConnectionPool, PoolConfig, ConnectionPoolFactory
* - 查询构建:SqlBuilder, SelectBuilder, InsertBuilder, UpdateBuilder, DeleteBuilder, ConditionBuilder
* - 实体映射:Entity, Table, Id, Column, EntityMetadata
* - 事务管理:TransactionManager, TransactionTemplate, TransactionDefinition, IsolationLevel, Propagation
* - 驱动管理:Driver, DriverManager, Dialect
*/
package tybb2026::tycj_orm
import std.collection.*
/** 模块版本号 */
public let VERSION: String = "1.0.0"
/** 模块名称 */
public let MODULE_NAME: String = "tycj_orm"
// ============================================================================
// ORM 配置类
// ============================================================================
/**
* ORM 配置类
* 用于配置 ORM 框架的全局行为
*/
public class OrmConfig {
/** 是否打印 SQL 语句 */
public var showSql: Bool = false
/** 是否格式化 SQL */
public var formatSql: Bool = false
/** 数据库方言 */
public var dialect: String = "mysql"
/** 连接池最大大小 */
public var maxPoolSize: Int64 = 10
/** 连接超时时间(毫秒) */
public var connectionTimeout: Int64 = 30000
/** 空闲连接超时时间(毫秒) */
public var idleTimeout: Int64 = 600000
/** 是否启用 AI 增强功能 */
public var aiEnabled: Bool = false
/**
* 获取默认配置
* @return 默认 ORM 配置
*/
public static func default(): OrmConfig {
return OrmConfig()
}
/**
* 设置是否打印 SQL
* @param show 是否打印
* @return 当前配置对象(链式调用)
*/
public func setShowSql(show: Bool): OrmConfig {
this.showSql = show
return this
}
/**
* 设置是否格式化 SQL
* @param format 是否格式化
* @return 当前配置对象(链式调用)
*/
public func setFormatSql(format: Bool): OrmConfig {
this.formatSql = format
return this
}
/**
* 设置数据库方言
* @param dialect 方言名称(mysql/postgresql/sqlite)
* @return 当前配置对象(链式调用)
*/
public func setDialect(dialect: String): OrmConfig {
this.dialect = dialect
return this
}
/**
* 设置连接池最大大小
* @param size 最大连接数
* @return 当前配置对象(链式调用)
*/
public func setMaxPoolSize(size: Int64): OrmConfig {
this.maxPoolSize = size
return this
}
/**
* 启用 AI 增强功能
* @return 当前配置对象(链式调用)
*/
public func enableAi(): OrmConfig {
this.aiEnabled = true
return this
}
}
// ============================================================================
// ORM 上下文
// ============================================================================
/**
* ORM 上下文类
* 管理 ORM 框架的全局状态,包括配置和数据源
*/
public class OrmContext {
private static var config: OrmConfig = OrmConfig.default()
private static var dataSource: Option<DataSource> = None
private static var initialized: Bool = false
/**
* 初始化 ORM 上下文
* @param cfg ORM 配置
*/
public static func initialize(cfg: OrmConfig): Unit {
config = cfg
initialized = true
println("[${MODULE_NAME}] ORM 上下文已初始化")
}
/**
* 设置数据源
* @param ds 数据源实例
*/
public static func setDataSource(ds: DataSource): Unit {
dataSource = Some(ds)
}
/**
* 获取当前数据源
* @return 数据源选项
*/
public static func getDataSource(): Option<DataSource> {
return dataSource
}
/**
* 获取当前配置
* @return ORM 配置
*/
public static func getConfig(): OrmConfig {
return config
}
/**
* 检查是否已初始化
* @return 是否已初始化
*/
public static func isInitialized(): Bool {
return initialized
}
/**
* 重置上下文(主要用于测试)
*/
public static func reset(): Unit {
config = OrmConfig.default()
dataSource = None
initialized = false
}
}
// ============================================================================
// 连接池配置
// ============================================================================
/**
* 连接池配置类
* 用于配置数据库连接池的参数
* @deprecated 请使用 PoolConfig 替代
*/
public class ConnectionPoolConfig {
/** 最大活跃连接数 */
public var maxActive: Int64 = 10
/** 最大空闲连接数 */
public var maxIdle: Int64 = 5
/** 最小空闲连接数 */
public var minIdle: Int64 = 1
/** 最大等待时间(毫秒) */
public var maxWaitMillis: Int64 = 30000
/** 连接验证查询 */
public var validationQuery: String = "SELECT 1"
/** 借用时验证 */
public var testOnBorrow: Bool = true
/** 归还时验证 */
public var testOnReturn: Bool = false
/** 空闲时验证 */
public var testWhileIdle: Bool = true
/**
* 获取默认配置
* @return 默认连接池配置
*/
public static func default(): ConnectionPoolConfig {
return ConnectionPoolConfig()
}
/**
* 转换为 PoolConfig
* @return PoolConfig 实例
*/
public func toPoolConfig(): PoolConfig {
let config = PoolConfig()
config.minPoolSize = this.minIdle
config.maxPoolSize = this.maxActive
config.connectionTimeout = this.maxWaitMillis
config.connectionTestQuery = this.validationQuery
config
}
}
// ============================================================================
// AI 增强查询接口
// ============================================================================
/**
* AI 查询顾问接口
* 提供自然语言转 SQL、查询解释、索引建议等功能
*/
public interface AiQueryAdvisor {
/**
* 将自然语言问题转换为 SQL
* @param question 自然语言问题
* @param schema 数据库结构信息
* @return 生成的 SQL 语句
*/
func naturalLanguageToSql(question: String, schema: String): String
/**
* 解释 SQL 查询
* @param sql SQL 语句
* @return 查询解释
*/
func explainQuery(sql: String): String
/**
* 建议索引
* @param table 表名
* @param queryPattern 查询模式
* @return 索引建议 SQL
*/
func suggestIndex(table: String, queryPattern: String): String
}
/**
* 默认 AI 查询顾问实现
* 提供基础的 AI 查询功能(示例实现)
*/
public class DefaultAiQueryAdvisor <: AiQueryAdvisor {
private var llmClient: Option<Any> = None // 实际应为 LlmClient
public init() {}
public func naturalLanguageToSql(question: String, schema: String): String {
// AI 增强:将自然语言转换为 SQL
// 实际实现需要调用 LLM API
println("[${MODULE_NAME}] AI NL2SQL: question='${question}'")
return "SELECT * FROM users WHERE 1=0"
}
public func explainQuery(sql: String): String {
println("[${MODULE_NAME}] AI Explain: ${sql}")
return "Query explanation placeholder"
}
public func suggestIndex(table: String, queryPattern: String): String {
println("[${MODULE_NAME}] AI Index Suggestion: table='${table}'")
return "CREATE INDEX idx_suggested ON ${table}(id)"
}
}