Support generated columns #2596

This commit is contained in:
Kijin Sung 2025-09-09 17:18:31 +09:00
parent 5e4b48f19b
commit 40067c0b53
5 changed files with 73 additions and 16 deletions

View file

@ -0,0 +1,9 @@
<table name="generated">
<column name="id" type="bignumber" size="11" notnull="notnull" auto_increment="auto_increment" primary_key="primary_key" />
<column name="module_srl" type="number" notnull="notnull" index="idx_module_srl" />
<column name="document_srl" type="number" notnull="notnull" index="idx_document_srl" />
<column name="member_srl" type="number" notnull="notnull" index="idx_member_srl" />
<column name="gentest1" type="number" generated="always" default="document_srl + member_srl" stored="true" notnull="notnull" />
<column name="gentest2" type="number" generated="always" default="MAX(module_srl, document_srl)" stored="false" />
<column name="gentest3" type="varchar" size="40" notnull="notnull" generated="always" default="CONCAT(module_srl, '_', document_srl)" />
</table>

View file

@ -63,4 +63,14 @@ class DBTableParserTest extends \Codeception\Test\Unit
$this->assertStringContainsString('CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci', $sql);
$this->assertStringContainsString('ENGINE = InnoDB', $sql);
}
public function testGeneratedColumn()
{
$table = Rhymix\Framework\Parsers\DBTableParser::loadXML(\RX_BASEDIR . 'tests/_data/dbtable/generated.xml');
$sql = $table->getCreateQuery('rx_');
$this->assertStringContainsString('CREATE TABLE `rx_generated`', $sql);
$this->assertStringContainsString('`gentest1` BIGINT GENERATED ALWAYS AS (document_srl + member_srl) STORED NOT NULL,', $sql);
$this->assertStringContainsString('`gentest2` BIGINT GENERATED ALWAYS AS (MAX(module_srl, document_srl)),', $sql);
$this->assertStringContainsString('`gentest3` VARCHAR(40) GENERATED ALWAYS AS (CONCAT(module_srl, \'_\', document_srl)) NOT NULL,', $sql);
}
}