Хроники Yii3
617 subscribers
43 photos
1.7K links
Описание процесса разработки фреймворка из первых рук 😎

Обсуждение:
https://t.me/yii3ru

Сводка по всем пакетам:
https://www.yiiframework.com/status/3.0

Поддержать разработчиков:
https://opencollective.com/yiisoft
Download Telegram
⚡️ #yiisoftDb #yiisoftDbSqlite #yiisoftDbPgsql #yiisoftDbOracle #yiisoftDbMssql #yiisoftDbMysql

В DB-пакетах удалили трейт TestCommandTrait, заменив его на соответствующие тесты, доработали CI-конфигурации и readme, а также вынесли конфигурацию пространства имён для тестов в отдельный composer.dev.json:

- Yii DB (PR),
- Yii DB SQLite Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB Oracle Extension (PR, PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR).
🔥5
⚡️ #yiisoftDb #yiisoftDbMysql #yiisoftDbMssql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

Несколько изменений в DB-пакетах.

В .gitattributes отключили игнорирование тестов при экспорте файлов пакета:
- Yii DB (PR),
- Yii DB MySQL Extension (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).

Объединили composer.json и composer.dev.json в один файл:
- Yii DB (PR),
- Yii DB MySQL Extension (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).

В схему таблицы TableSchema добавили метод getComment():
- Yii DB (PR),
- Yii DB SQLite Extension (PR),
- Yii DB PostgreSQL Extension (PR, PR, PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB MSSQL Server Extension (PR).
👍3🔥3
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В Yii DB удалили неиспользуемый код (PR), а также заменили трейт TestBatchQueryResultTrait на абстрактный класс CommonBatchQueryResultTest:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
🔥2👍1
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В DB-пакетах заменили трейт TestQueryBuilderTrait на абстрактные классы AbstractQueryBuilderTest и CommonQueryBuilderTest, а также сделали небольшой рефакторинг:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
🔥4👍3
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

Выполнили рефакторинг для упрощения в тестах классов CommandProvider и CommandPDOProvider:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
👍2🔥2
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В DB-пакетах продолжается рефакторинг тестов. В этот раз заменили трейт TestColumnSchemaBuilderTrait на абстрактные классы CommonColumnSchemaBuilderTest и AbstractColumnSchemaBuilderProvider:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
👍3🔥2
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В DB-пакетах перенесли дублирующийся в пакетах метод Schema::normalizeRowKeyCase() в абстрактный класс Schema:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
🔥3
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В DB-пакетах перенесли дублирующийся в пакетах метод ConnectionPDO::initConnection() в абстрактный класс ConnectionPDO:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
👍3
⚡️ #yiisoftDb #yiisoftDbMysql

В ColumnSchemaBuilder удалили методы after(), first(), buildAfterString(), buildFirstString(), getAfter() и isFirst():
- Yii DB (PR),
- Yii DB MySQL Extension (PR).
👍5🔥1
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В DB-пакетах упростили код для команды insertEx и перенесли соответствующий метод в абстрактный класс Command:

- Yii DB (PR, PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
👍4🔥1
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В тестировании DB-пакетов удалили трейт TestSchemaTrait и класс IsOneOfAssert, вместо них добавили абстрактные классы AbstractSchemaTest и AbstractSchemaProvider и отрефакторили тестирование схемы:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
👍4🔥1
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В тестировании DB-пакетов заменили трейт TestQuoterTrait на новый абстрактный класс AbstractQuoterProvider и его реализации в каждом из пакетов:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
👍4🔥1
🔥6👍1
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

Перенесли всю оставшуюся функциональность из пространства имён Yiisoft\Db\TestSupport в тесты:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
🔥5👍1
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В DB-пакетах добавили тестов и исправили ошибку в Yii DB Oracle Extension, связанную с определением первичного ключа:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
👍4🔥1
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

Доработали метод DMLQueryBuilder::upsert() в Yii DB PostgreSQL Extension и добавили соответствующие тесты в DB-пакеты:

- Yii DB (PR),
- Yii DB MSSQL Server Extension (PR),
- Yii DB MySQL Extension (PR),
- Yii DB Oracle Extension (PR),
- Yii DB PostgreSQL Extension (PR),
- Yii DB SQLite Extension (PR).
👍3🔥1
⚡️ #yiisoftDb #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbOracle #yiisoftDbPgsql #yiisoftDbSqlite

В DB-пакетах исправили проблемы с определением типов колонок при построении upsert-запросов и добавили интеграционный тест на исполнение полученных запросов:

- Yii DB (PR, PR),
- Yii DB MSSQL Server Extension (PR, PR),
- Yii DB MySQL Extension (PR, PR),
- Yii DB Oracle Extension (PR, PR),
- Yii DB PostgreSQL Extension (PR, PR, PR),
- Yii DB SQLite Extension (PR, PR, PR).
👍3🔥1
#yiisoftDb #yiisoftDbOracle #yiisoftDbMssql #yiisoftDbMysql #yiisoftDbPgsql #yiisoftDbSqlite #ПервыйРелиз #МажорныйРелиз #Релиз

🎁 Yii DB 1.0
🎁 Yii DB Oracle Extension 1.0
🎁 Yii DB MSSQL Server Extension 1.0
🎁 Yii DB MySQL Extension 1.0
🎁 Yii DB PostgreSQL Extension 1.0
🎁 Yii DB SQLite Extension 1.0

Мы приготовили первый релиз  Yii Database и его драйверов.

Пакет не зависит от фреймворка и может работать с разными типами баз данных:  
MariaDB, MSSQL, MySQL, Oracle, PostgreSQL и SQLite. 
 
При помощи пакета можно делать запросы на создание, чтение, обновление и удаление записей в базе, а также выполнять свои запросы. 

$rows = (new Query($db)) 
    ->select(['id', 'email']) 
    ->from('{{%user}}') 
    ->where(['last_name' => 'Smith']) 
    ->limit(10) 
    ->all();


Пакет сделан гибким. Можно будет добавить поддержку новых баз данных.
 
Как обычно, покрытие тестами, типами и статанализом близко к абсолютному как в главном пакете, так и в драйверах.

Отдельные поздравления для @terabytesoftw и @darkdef_pr, которые сделали невозможное портировав пакет из DBAL Yii2, переработав и улучшив его  👏
🔥33👍92🍾2🎉1
#yiisoftDb #yiisoftDbPgsql #yiisoftDbMysql #yiisoftDbSqlite #yiisoftDbMssql #yiisoftDbOracle #МинорныйРелиз #Релиз

Минорные релизы Yii DB и адаптеров к основным СУБД с исправлением ошибок и несколькими улучшениями.


🎁 Yii Database 1.2

• Реализовано корректное экранирование имён общих табличных выражений (CTE).

• Выполнен рефакторинг классов Quoter и AbstractDMLQueryBuilder.

• Исправлены ошибки экранирования, выполняемого классом Quoter:

- для SQL содержащего имена таблиц с префиксами;

- в случае, когда используются различные кавычки для имён таблиц и имён столбцов;

- в случае, когда используется подзапрос с алиасом.

• В методе QueryBuilderInterface::batchInsert():

- исправлено приведение типа значения, если использовались строковые ключи в массиве значений
или имена колонок были указаны со скобками (например, {{%type}}.[[int_col]])

- исправлена ошибка, если порядок значений ассоциативного массива не совпадал с порядком колонок;

- изменён тип параметра $rows с iterable|Generator на iterable.

• Исправлена ошибка в методе QueryBuilderInterface::upsert(), возникающая в случае, если значение уникального столбца передано не первым значением.

protected-методы Command::getQueryBuilder() и Command::internalExecute() из адаптеров к конкретным СУБД были перенесены в AbstractPdoCommand.

• Метод TableSchemaInterface::compositeForeignKey() помечен устаревшим.

• Тип SchemaInterface::JSONB помечен устаревшим, вместо него предлагается использовать тип SchemaInterface::JSON.

• Debug-классы адаптированы к последним изменениям в Yii Debug.


🎁
Yii DB PostgreSQL Driver 1.2

• Выполнен рефакторинг классов JsonExpressionBuilder, ArrayExpressionBuilder и ColumnSchema.

• Исправлена конвертация для типов bit и varbit из строки для передачи в БД.

• Исправлено получение имени автоинкремента колонки.

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.


🎁 Yii DB MySQL Driver 1.1

• Оптимизирован метод QueryBuilderInterface::insert() для пустых значений, когда вставляются значения по умолчанию.

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.


🎁 Yii DB SQLite Driver 1.1

• Добавлена поддержка типа json.

• Исправлены ошибки с внешними ключами:

- когда таблица имеет несколько внешних ключей;

- если для внешних ключей не указаны колонки соответствия (используются первичные ключи).

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.


🎁 Yii DB MSSQL Server Driver 1.1

• Исправлена ошибка для рекурсивных общих табличных выражений (CTE).

• Исправлен тип колонки boolean с типа БД tinyint на более подходящий тип bit.

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.


🎁 Yii DB Oracle Driver 1.2

• Исправлена ошибка для рекурсивных общих табличных выражений (CTE).

• Улучшено определение типа колонки.

• Выполнен рефакторинг с адаптацией к изменениям в Yii DB 1.2.
🎉15👍21
#yiisoftDb #yiisoftDbPgsql #yiisoftDbMysql #yiisoftDbSqlite #yiisoftDbMssql #yiisoftDbOracle #МинорныйРелиз #Релиз

Минорные релизы Yii DB и адаптеров к основным СУБД с исправлением ошибок и несколькими улучшениями.


🎁 Yii Database 1.3

• В контекст лога добавлен тип сообщения.

• Разрешено использование метода DMLQueryBuilderInterface::batchInsert() без указания колонок.

• Добавлен метод DbStringHelper::isReadQuery().

• Исправлено: метод Query::count() возвращал некорректное значение, если результат больше PHP_INT_MAX.

• Исправлена ошибка, возникающая в методе AbstractCommand::getRawSql(), если используется параметр со Stringable значением.

• Исправлено приведение числа к строке в методе AbstractCommand::getRawSql().

• Исправлена ошибка при изменении префикса в AbstractConnection.

• Уточнены psalm-типы.

• Методы помечены устаревшими:
- AbstractSchema::normalizeRowKeyCase()
- SchemaInterface::getRawTableName()
- Quoter::getRawTableName()
- SchemaInterface::isReadQuery()

• Параметр $rawSql в методе AbstractCommand::internalExecute() помечен устаревшим.

• Оптимизация производительности и рефакторинг.

Подробный список изменений тут.


🎁
Yii DB PostgreSQL Driver 1.3

• Добавлена поддержка составных (structured) типов.

• Добавлена поддержка ограничений (constraints) в представлениях (table view).

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Исправлено: в редких кейсах при чтении индекса в индекс попадали поля, которых там быть не должно.

• Оптимизация производительности и рефакторинг.


🎁 Yii DB MySQL Driver 1.2

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Исправлена ошибка при использовании метода Command::insertWithReturningPks() с пустыми значениями.

• Оптимизация производительности и рефакторинг.


🎁 Yii DB SQLite Driver 1.2

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Оптимизация производительности и рефакторинг.


🎁 Yii DB MSSQL Server Driver 1.2

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Исправлены ошибки в методах Command::insertWithReturningPks() и DMLQueryBuilder::insertWithReturningPks(), возникающие в редких кейсах.

• Оптимизация производительности и рефакторинг.


🎁 Yii DB Oracle Driver 1.3

• Разрешено использование метода DMLQueryBuilderInterface::batchInsert() без указания колонок.

• Свойство Schema::$typeMap заменено на константу Schema::TYPE_MAP.

• Исправлена ошибка, возникающая при использовании Query без указания FROM.

• Исправлена ошибка при использовании метода Command::insertWithReturningPks() с таблицей без первичного ключа.

• Исправлено: метод Schema::getTableSequenceName() теперь возвращает null вместо пустой строки.

• Оптимизация производительности и рефакторинг.
👍5🔥2👾1