yiisoft / db

Yii Database Library
https://www.yiiframework.com/
BSD 3-Clause "New" or "Revised" License
134 stars 36 forks source link

Table foreign keys load two times as arrays and as objects #734

Open Tigrov opened 1 year ago

Tigrov commented 1 year ago

Current implementation loads table foreign keys two times as arrays and as objects.

PostgreSQL https://github.com/yiisoft/db-pgsql/tree/535975396d865da6cb15ed7bee5648c27a9b7360/src/Schema.php#L499 as arrays https://github.com/yiisoft/db-pgsql/tree/535975396d865da6cb15ed7bee5648c27a9b7360/src/Schema.php#L894 as objects

MySQL https://github.com/yiisoft/db-mysql/blob/4dd4e13502a0f047627c398854fc733a41054370/src/Schema.php#L265 as arrays https://github.com/yiisoft/db-mysql/blob/4dd4e13502a0f047627c398854fc733a41054370/src/Schema.php#L618 as objects

SQLite https://github.com/yiisoft/db-sqlite/blob/b172ec9c11f31a5618a80e8cc6e3b298f423eb26/src/Schema.php#L381 as arrays https://github.com/yiisoft/db-sqlite/blob/b172ec9c11f31a5618a80e8cc6e3b298f423eb26/src/Schema.php#L201 as objects

Should they be loaded once?

Q A
Version 1.1.0
PHP version any
Operating system any
vjik commented 1 year ago

Perhaps the solution could be use AbstractSchema::getTableMetadata() into Schema::findConstraints() of each DB specific package?

Tigrov commented 1 year ago

Yes, it looks like this. And use ForeignKeyConstraint[] instead of associative arrays.

vjik commented 1 year ago

@darkdef @terabytesoftw What do you think?

Tigrov commented 1 year ago

Perhaps the solution could be use AbstractSchema::getTableMetadata() into Schema::findConstraints() of each DB specific package?

Or AbstractSchema::getTableForeignKeys()

Tigrov commented 1 year ago

Suggestion to use one way to get foreign keys Schema::getTableForeignKeys() and do not store them in TableSchemaInterface as for indexes