mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-05 09:41:40 +09:00
Support more index types in DB table parser
UNIQUE, SPATIAL, FULLTEXT
This commit is contained in:
parent
5f8ceafdf6
commit
9b776942e5
5 changed files with 25 additions and 8 deletions
|
|
@ -9,5 +9,5 @@ class Index
|
|||
{
|
||||
public $name;
|
||||
public $columns = array();
|
||||
public $is_unique = false;
|
||||
public $type = null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ class Table
|
|||
}
|
||||
$idxcolumns[] = '`' . $column_name . '`' . ($prefix_size > 0 ? "($prefix_size)" : '');
|
||||
}
|
||||
$idxtype = ($index->is_unique ? 'UNIQUE' : 'INDEX');
|
||||
$idxtype = $index->type ? ($index->type . ' INDEX') : 'INDEX';
|
||||
$idxdef = ' ' . $idxtype . ' `' . $index->name . '` (' . implode(', ', $idxcolumns) . ')';
|
||||
$columns[] = $idxdef;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -154,11 +154,19 @@ class DBTableParser extends BaseParser
|
|||
$index->columns[$idxcolumn] = 0;
|
||||
}
|
||||
}
|
||||
$index->is_unique = toBool($index_info['unique'] ?? '');
|
||||
|
||||
if (isset($index_info['type']) && $index_info['type'])
|
||||
{
|
||||
$index->type = strtoupper($index_info['type']);
|
||||
}
|
||||
elseif (toBool($index_info['unique']))
|
||||
{
|
||||
$index->type = 'UNIQUE';
|
||||
}
|
||||
if (isset($table->columns[$idxcolumn]) && is_object($table->columns[$idxcolumn]))
|
||||
{
|
||||
$table->columns[$idxcolumn]->is_indexed = true;
|
||||
$table->columns[$idxcolumn]->is_unique = $index->is_unique;
|
||||
$table->columns[$idxcolumn]->is_unique = $index->type === 'UNIQUE';
|
||||
}
|
||||
$table->indexes[$index->name] = $index;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,11 +4,14 @@
|
|||
<column name="document_srl" type="number" notnull="notnull" index="idx_document_srl" />
|
||||
<column name="comment_srl" type="number" notnull="notnull" index="idx_comment_srl" />
|
||||
<column name="description" type="bigtext" />
|
||||
<column name="geometry" type="multipolygon" />
|
||||
<column name="status" type="varchar" size="20" default="PUBLIC" />
|
||||
<column name="list_order" type="number" notnull="notnull" />
|
||||
<index name="idx_module_document_srl" columns="module_srl,document_srl" />
|
||||
<index name="idx_status" columns="status(6)" />
|
||||
<index name="unique_list_order" columns="list_order" unique="unique" />
|
||||
<index name="unique_list_order" column="list_order" unique="unique" />
|
||||
<index name="spatial_geometry" column="geometry" type="spatial" />
|
||||
<index name="fulltext_description" column="description" type="fulltext" />
|
||||
<constraint type="foreign key" column="module_srl" references="module.module_srl" ondelete="CASCADE" />
|
||||
<constraint type="check" condition="list_order < 0" />
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -17,11 +17,15 @@ class DBTableParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertEquals('number', $table->columns['module_srl']->xetype);
|
||||
$this->assertTrue($table->columns['module_srl']->is_indexed);
|
||||
$this->assertTrue($table->columns['list_order']->is_unique);
|
||||
$this->assertFalse($table->columns['geometry']->is_unique);
|
||||
|
||||
$this->assertEquals(6, count($table->indexes));
|
||||
$this->assertEquals(8, count($table->indexes));
|
||||
$this->assertEquals(['module_srl' => 0, 'document_srl' => 0], $table->indexes['idx_module_document_srl']->columns);
|
||||
$this->assertEquals(['status' => 6], $table->indexes['idx_status']->columns);
|
||||
$this->assertTrue($table->indexes['unique_list_order']->is_unique);
|
||||
$this->assertEquals('UNIQUE', $table->indexes['unique_list_order']->type);
|
||||
$this->assertEquals('SPATIAL', $table->indexes['spatial_geometry']->type);
|
||||
$this->assertEquals('FULLTEXT', $table->indexes['fulltext_description']->type);
|
||||
$this->assertNull($table->indexes['idx_comment_srl']->type);
|
||||
|
||||
$this->assertEquals(2, count($table->constraints));
|
||||
$this->assertEquals('FOREIGN KEY', $table->constraints[0]->type);
|
||||
|
|
@ -44,7 +48,9 @@ class DBTableParserTest extends \Codeception\TestCase\Test
|
|||
$this->assertContains('INDEX `idx_document_srl` (`document_srl`),', $sql);
|
||||
$this->assertContains('INDEX `idx_module_document_srl` (`module_srl`, `document_srl`),', $sql);
|
||||
$this->assertContains('INDEX `idx_status` (`status`(6)),', $sql);
|
||||
$this->assertContains('UNIQUE `unique_list_order` (`list_order`),', $sql);
|
||||
$this->assertContains('UNIQUE INDEX `unique_list_order` (`list_order`),', $sql);
|
||||
$this->assertContains('SPATIAL INDEX `spatial_geometry` (`geometry`),', $sql);
|
||||
$this->assertContains('FULLTEXT INDEX `fulltext_description` (`description`),', $sql);
|
||||
$this->assertContains('FOREIGN KEY (`module_srl`) REFERENCES `rx_module` (`module_srl`) ON DELETE CASCADE ON UPDATE RESTRICT', $sql);
|
||||
$this->assertContains('CHECK (list_order < 0)', $sql);
|
||||
$this->assertContains('CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci', $sql);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue