Task Brief
Date: 2026-04-14
GitHub Issue: #65
Status: AWAITING IMPLEMENTATION
Description
Implement "Rename Table" support in the FluentSQL DDL API. This allows developers to generate ALTER TABLE ... RENAME TO (or equivalent) SQL strings in a database-agnostic way using the Schema entry point.
Context
The "Rename Table" feature (ESP-047 / ESP-031) is a documented but unimplemented DDL capability. Adding this feature aligns the code with the user guides and completes a key vertical in the DDL infrastructure, supporting Firebird, PostgreSQL, MySQL, MSSQL, and SQLite.
Scope
- Define
IFluentDDLAlterTableRenameTableDef and IFluentDDLAlterTableRenameTableBuilder in FluentSQL.Interfaces.pas.
- Add
AlterTableRename(const AOldName, ANewName: string): IFluentDDLAlterTableRenameTableBuilder to IFluentSchema and TFluentSchema.
- Implement
TFluentDDLAlterTableRenameTableBuilder in FluentSQL.DDL.pas.
- Add
AlterTableRenameTable method to IFluentDDLSerialize and TFluentDDLSerializeAbstract.
- Implement dialect-specific overrides in:
FluentSQL.DDL.Serialize.Firebird.pas
FluentSQL.DDL.Serialize.PostgreSQL.pas
FluentSQL.DDL.Serialize.MySQL.pas
FluentSQL.DDL.Serialize.MSSQL.pas (using sp_rename)
FluentSQL.DDL.Serialize.SQLite.pas
- Add unit tests in
test.ddl.pas for all dialects and validation cases.
Out of scope
- Renaming multiple tables in one call.
- Support for dialects beyond the core 5 (PG, FB, MySQL, MSSQL, SQLite).
- Execution of the generated SQL.
Acceptance criteria
Likely impacted files
Source/Core/FluentSQL.Interfaces.pas
Source/Core/FluentSQL.DDL.pas
Source/Core/FluentSQL.DDL.SerializeAbstract.pas
Source/Drivers/FluentSQL.DDL.Serialize.Firebird.pas
Source/Drivers/FluentSQL.DDL.Serialize.PostgreSQL.pas
Source/Drivers/FluentSQL.DDL.Serialize.MySQL.pas
Source/Drivers/FluentSQL.DDL.Serialize.MSSQL.pas
Source/Drivers/FluentSQL.DDL.Serialize.SQLite.pas
Test Delphi/test.ddl.pas
Task Brief
Date: 2026-04-14
GitHub Issue: #65
Status: AWAITING IMPLEMENTATION
Description
Implement "Rename Table" support in the FluentSQL DDL API. This allows developers to generate
ALTER TABLE ... RENAME TO(or equivalent) SQL strings in a database-agnostic way using theSchemaentry point.Context
The "Rename Table" feature (ESP-047 / ESP-031) is a documented but unimplemented DDL capability. Adding this feature aligns the code with the user guides and completes a key vertical in the DDL infrastructure, supporting Firebird, PostgreSQL, MySQL, MSSQL, and SQLite.
Scope
IFluentDDLAlterTableRenameTableDefandIFluentDDLAlterTableRenameTableBuilderinFluentSQL.Interfaces.pas.AlterTableRename(const AOldName, ANewName: string): IFluentDDLAlterTableRenameTableBuildertoIFluentSchemaandTFluentSchema.TFluentDDLAlterTableRenameTableBuilderinFluentSQL.DDL.pas.AlterTableRenameTablemethod toIFluentDDLSerializeandTFluentDDLSerializeAbstract.FluentSQL.DDL.Serialize.Firebird.pasFluentSQL.DDL.Serialize.PostgreSQL.pasFluentSQL.DDL.Serialize.MySQL.pasFluentSQL.DDL.Serialize.MSSQL.pas(usingsp_rename)FluentSQL.DDL.Serialize.SQLite.pastest.ddl.pasfor all dialects and validation cases.Out of scope
Acceptance criteria
Schema(dbnPostgreSQL).AlterTableRename('A', 'B').AsStringreturns'ALTER TABLE "A" RENAME TO "B"'.Schema(dbnFirebird).AlterTableRename('A', 'B').AsStringreturns'ALTER TABLE "A" TO "B"'.Schema(dbnMySQL).AlterTableRename('A', 'B').AsStringreturns'ALTER TABLEARENAME TOB'.Schema(dbnMSSQL).AlterTableRename('A', 'B').AsStringreturnsEXEC sp_rename 'A', 'B'.Schema(dbnSQLite).AlterTableRename('A', 'B').AsStringreturns'ALTER TABLE "A" RENAME TO "B"'.EArgumentExceptionif names are empty or identical afterTrim.TTestDDLAlterTableRenameTablefixture PASS.Likely impacted files
Source/Core/FluentSQL.Interfaces.pasSource/Core/FluentSQL.DDL.pasSource/Core/FluentSQL.DDL.SerializeAbstract.pasSource/Drivers/FluentSQL.DDL.Serialize.Firebird.pasSource/Drivers/FluentSQL.DDL.Serialize.PostgreSQL.pasSource/Drivers/FluentSQL.DDL.Serialize.MySQL.pasSource/Drivers/FluentSQL.DDL.Serialize.MSSQL.pasSource/Drivers/FluentSQL.DDL.Serialize.SQLite.pasTest Delphi/test.ddl.pas