Skip to content

feat(database): PTC Object 手动建表、版本迁移、PostgreSQL Schema 支持#667

Merged
Bkm016 merged 1 commit intoTabooLib:dev/6.2.3from
FxRayHughes:feat/ptc-object-ignore-field
Feb 15, 2026
Merged

feat(database): PTC Object 手动建表、版本迁移、PostgreSQL Schema 支持#667
Bkm016 merged 1 commit intoTabooLib:dev/6.2.3from
FxRayHughes:feat/ptc-object-ignore-field

Conversation

@FxRayHughes
Copy link
Contributor

改动概述

在已有的 @Ignore 注解基础上,继续增强 PTC Object ORM 模块,新增三项功能:

1. 手动建表 (manualTable)

跳过框架自动建表,执行用户提供的 SQL 语句创建表结构。

val homeTable by mapper<PlayerHome>(dbFile("data.db")) {
    manualTable(
        """CREATE TABLE IF NOT EXISTS player_home (
            username VARCHAR(64) PRIMARY KEY,
            world VARCHAR(64)
        )"""
    )
}

2. 版本迁移 (migration)

通过 _ptc_meta 表跟踪版本号,按版本执行迁移 SQL。

val homeTable by mapper<PlayerHome>(dbFile("data.db")) {
    migration {
        version(1,
            "ALTER TABLE player_home ADD COLUMN x DOUBLE DEFAULT 0",
            "ALTER TABLE player_home ADD COLUMN y DOUBLE DEFAULT 0"
        )
        version(2,
            "ALTER TABLE player_home ADD COLUMN z DOUBLE DEFAULT 0"
        )
    }
}

3. PostgreSQL Schema 支持

@TableName 新增 schema 参数,建表前自动 CREATE SCHEMA IF NOT EXISTS

@TableName("player_home", schema = "game")
data class PlayerHome(
    @Id val username: String,
    var world: String,
)

修改文件

  • Annotations.kt@TableName 新增 schema 参数
  • AnalyzedClassMember.ktresolveTableName() 支持 schema 前缀
  • MapperDelegate.ktMapperConfig 新增 manualTable() / migration()
  • MigrationConfig.kt — 新建迁移配置类
  • Container.ktinit() 支持手动建表和版本迁移
  • ContainerPostgreSQL.kt — 建表前自动创建 Schema
  • ExecutableSource.kt — 修复 PostgreSQL 索引名含 schema 点号的语法错误

- @TableName 新增 schema 参数,支持 PostgreSQL 自定义 Schema
- resolveTableName() 支持 schema.tableName 格式
- 新增 manualTable() 跳过自动建表,执行用户提供的 SQL
- 新增 migration {} 版本迁移机制,通过 _ptc_meta 表跟踪版本号
- ContainerPostgreSQL 建表前自动 CREATE SCHEMA IF NOT EXISTS
- 修复 PostgreSQL 索引名含 schema 点号导致的语法错误
@Bkm016 Bkm016 merged commit 1db8596 into TabooLib:dev/6.2.3 Feb 15, 2026
0 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Comments