diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 462abb1..28dbbc7 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -6,7 +6,6 @@ on: - '.github/workflows/mssql.yml' - 'composer.json' - 'phpunit.xml.dist' - push: branches: ['master'] paths: @@ -15,18 +14,16 @@ on: - '.github/workflows/mssql.yml' - 'composer.json' - 'phpunit.xml.dist' - name: mssql - jobs: tests: + permissions: + contents: read + pull-requests: write name: PHP ${{ matrix.php }}-mssql-${{ matrix.mssql.server }} - env: extensions: pdo, pdo_sqlsrv-5.12 - runs-on: ${{ matrix.mssql.os || 'ubuntu-latest' }} - strategy: matrix: php: @@ -35,23 +32,19 @@ jobs: - 8.3 - 8.4 - 8.5 - mssql: + - server: 2017-latest + odbc-version: 17 + flag: "" + tools-path: "/opt/mssql-tools" + - server: 2019-latest + odbc-version: 18 + flag: "-C" + tools-path: "/opt/mssql-tools18" - server: 2022-latest odbc-version: 18 flag: "-C" - - include: - - php: 8.3 - mssql: - server: 2017-latest - os: ubuntu-20.04 - - php: 8.3 - mssql: - server: 2019-latest - odbc-version: 18 - flag: "-C" - + tools-path: "/opt/mssql-tools18" services: mssql: image: mcr.microsoft.com/mssql/server:${{ matrix.mssql.server }} @@ -61,20 +54,18 @@ jobs: MSSQL_PID: Developer ports: - 1433:1433 - options: --name=mssql --health-cmd="/opt/mssql-tools${{ matrix.mssql.odbc-version }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 - + options: --name=mssql --health-cmd="${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'SELECT 1'" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - name: Install ODBC driver. run: | - sudo curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list - sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 - + curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /usr/share/keyrings/microsoft-prod.gpg > /dev/null + curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list + sudo apt-get update + sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 || sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 - name: Checkout - uses: actions/checkout@v3 - + uses: actions/checkout@v6 - name: Create MS SQL Database - run: docker exec -i mssql /opt/mssql-tools${{ matrix.mssql.odbc-version }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' - + run: docker exec -i mssql ${{ matrix.mssql.tools-path }}/bin/sqlcmd ${{ matrix.mssql.flag }} -S localhost -U SA -P 'YourStrong!Passw0rd' -Q 'CREATE DATABASE yiitest' - name: Install PHP with extensions uses: shivammathur/setup-php@v2 with: @@ -83,10 +74,8 @@ jobs: ini-values: date.timezone='UTC' coverage: pcov tools: composer:v2, pecl - - name: Determine composer cache directory run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV - - name: Cache dependencies installed with composer uses: actions/cache@v4 with: @@ -94,13 +83,10 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- - - name: Update composer run: composer self-update - - name: Install dependencies with composer run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi - - name: Run tests with phpunit run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml --colors=always env: @@ -110,7 +96,6 @@ jobs: CYCLE_MSSQL_PORT: 1433 CYCLE_MSSQL_USER: SA CYCLE_MSSQL_PASSWORD: YourStrong!Passw0rd - - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index d03874d..eec5542 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -29,4 +29,4 @@ jobs: os: >- ['ubuntu-latest'] php: >- - ['8.1', '8.2', '8.3', '8.4'] + ['8.1', '8.2', '8.3', '8.4', '8.5'] diff --git a/docs/guide/en/PHP-8.5-MSSQL.md b/docs/guide/en/PHP-8.5-MSSQL.md new file mode 100644 index 0000000..e684454 --- /dev/null +++ b/docs/guide/en/PHP-8.5-MSSQL.md @@ -0,0 +1,204 @@ +# PHP 8.5 Implications for MSSQL Workflow (AI Source: Claude Sonnet 4.5 + - free try ) + +## Executive Summary + +**Do not add PHP 8.5 to the MSSQL workflow yet.** The current pdo_sqlsrv driver + (version 5.12) does not support PHP 8.5, and the workflow will fail during + PHP extension installation. + +## Critical Blocker: Driver Incompatibility + +### Current Situation + +The pdo_sqlsrv 5.12.0 extension specified in the workflow does not compile +against PHP 8.5.0 due to internal PHP API changes. This means any attempt to +add PHP 8.5 to the test matrix will result in immediate workflow failures. + +### Driver Support Status + +| PHP Version | pdo_sqlsrv 5.12 Support | +|-------------|------------------------| +| 8.1 | ✅ Fully Supported | +| 8.2 | ✅ Fully Supported | +| 8.3 | ✅ Fully Supported | +| 8.4 | ⚠️ Unofficial/Limited | +| 8.5 | ❌ Not Supported | + +## What Needs to Happen First + +Before PHP 8.5 can be added to the workflow: + +1. **Microsoft must release a new pdo_sqlsrv driver version** (likely 5.13 or 6.0) +2. **The new driver must be available via PECL** for installation through + shivammathur/setup-php +3. **The workflow's extension configuration must be updated** to reference the + new driver version + +## Timeline Expectations + +Based on historical patterns with previous PHP releases: + +- **Expected delay**: 2-6 months after PHP 8.5 official release +- **PHP 8.4 precedent**: As of late 2024/early 2025, PHP 8.4 still lacks full + official MSSQL driver support +- **Recommendation**: Monitor the Microsoft msphpsql repository for announcements + +## Recommended Action Plan + +### Phase 1: Monitoring (Current) + +Monitor these resources for updates: + +- [Microsoft msphpsql GitHub](https://github.com/microsoft/msphpsql) - Official + driver repository +- [PECL pdo_sqlsrv page](https://pecl.php.net/package/pdo_sqlsrv) - Release + announcements +- PHP 8.5 release notes and compatibility matrices + +### Phase 2: Early Testing (When Driver Available) + +Once a compatible driver is released: + +```yaml +strategy: + matrix: + php: + - 8.1 + - 8.2 + - 8.3 + - 8.4 + - 8.5 +``` + +Update the extensions configuration: + +```yaml +env: + extensions: pdo, pdo_sqlsrv-5.13 # Or whatever the new version is +``` + +Consider using `continue-on-error: true` initially for PHP 8.5 jobs: + +```yaml +- name: Run tests with phpunit + continue-on-error: ${{ matrix.php == '8.5' }} + run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml + --colors=always +``` + +### Phase 3: Full Integration + +After confirming stability: + +- Remove `continue-on-error` flag +- Make PHP 8.5 a required test in the CI pipeline + +## Potential Failure Points + +If you add PHP 8.5 prematurely, expect failures at: + +1. **Extension Installation Step** + ``` + shivammathur/setup-php@v2 + ``` + Error: Unable to install pdo_sqlsrv-5.12 for PHP 8.5 + +2. **Compilation Errors** + The driver may attempt to compile but fail due to API incompatibilities + +3. **Runtime Errors** + Even if installation succeeds, runtime incompatibilities may cause test failures + +## PHP 8.5 Features to Be Aware Of + +While waiting for driver support, note these PHP 8.5 changes that could impact + your codebase: + +- **Pipe operator**: New functional programming syntax +- **Clone with syntax**: Enhanced object cloning +- **Deprecations**: Non-canonical scalar type casts +- **Other improvements**: Property hooks, asymmetric visibility + +These changes are unlikely to directly affect database operations but may impact + application code. + +## Testing Strategy + +When driver support becomes available: + +1. **Create a separate test branch** with PHP 8.5 added to the matrix +2. **Run the full test suite** against all MSSQL versions (2017, 2019, 2022) +3. **Check for deprecation warnings** in test output +4. **Verify compatibility** with all PHP versions in the matrix +5. **Monitor for performance regressions** + +## Current Workflow Status + +The workflow currently tests: + +- **PHP versions**: 8.1, 8.2, 8.3, 8.4 +- **MSSQL versions**: 2017 (ODBC 17), 2019 (ODBC 18), 2022 (ODBC 18) +- **Driver version**: pdo_sqlsrv-5.12 + +This configuration is stable and should remain unchanged until driver +compatibility is confirmed. + +## Conclusion + +**Action Required**: None at this time. Continue monitoring for pdo_sqlsrv +driver updates. + +**Do Not**: Add PHP 8.5 to the test matrix until Microsoft releases a compatible +driver version. + +**Next Steps**: Watch the Microsoft msphpsql GitHub repository for release +announcements and update this document when new information becomes available. + +--- + +**Last Updated**: 21st January 2026 +**Status**: Awaiting pdo_sqlsrv driver support for PHP 8.5 + +## Actions checkout can also be upgraded to version 6? + +**What's New in v6** +Version 6 includes Node.js 24 support and persists credentials to a separate +file PHP, along with worktree support improvements. + +**Upgrade Path** +You can upgrade safely from v3 → v4 → v5 → v6, or jump directly to v6. The +action maintains backwards compatibility for basic usage. + +**Updated Workflow** +Here's your workflow with the checkout action upgraded to v6: + +yaml- name: Checkout + uses: actions/checkout@v4 # Can be upgraded to @v6 + +Should become: +yaml- name: Checkout + uses: actions/checkout@v6 + +**Should You Upgrade?** +Yes, you should upgrade for several reasons: + +**Security updates - Newer versions include security patches** +Node.js 24 support - Better performance and compatibility + +**Bug fixes - Various improvements and stability enhancements** +Future-proofing - v3 is quite old and may eventually be deprecated + +Migration Considerations +The upgrade from v3 to v6 should be seamless for your use case since you're +using the basic checkout without special parameters. + +**However, it's good practice to:** + +1. Test the workflow in a feature branch first +2. Review the changelog for any breaking changes +3. Consider pinning to a specific commit SHA for maximum stability in production +(e.g., actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8) + +For your workflow, the simple version upgrade is perfectly fine and recommended! +Claude is AI and can make mistakes. Please double-check cited sources. \ No newline at end of file diff --git a/docs/guide/en/README.md b/docs/guide/en/README.md index e44a7ff..03a2469 100644 --- a/docs/guide/en/README.md +++ b/docs/guide/en/README.md @@ -2,3 +2,4 @@ - [EntityReader class](entity-reader.md) - [EntityWriter](entity-writer.md) +- [MSSQL Workflow Implications](PHP-8.5-MSSQL.md) diff --git a/docs/guide/es/PHP-8.5-MSSQL.md b/docs/guide/es/PHP-8.5-MSSQL.md new file mode 100644 index 0000000..8afca09 --- /dev/null +++ b/docs/guide/es/PHP-8.5-MSSQL.md @@ -0,0 +1,131 @@ +Implicaciones de PHP 8.5 para el Flujo de Trabajo de MSSQL (Fuente IA: Claude Sonnet 4.5 - prueba gratuita) +Resumen Ejecutivo +No agregue PHP 8.5 al flujo de trabajo de MSSQL todavía. El controlador pdo_sqlsrv actual (versión 5.12) no es compatible con PHP 8.5, y el flujo de trabajo fallará durante la instalación de extensiones de PHP. +Bloqueador Crítico: Incompatibilidad del Controlador +Situación Actual +La extensión pdo_sqlsrv 5.12.0 especificada en el flujo de trabajo no se compila con PHP 8.5.0 debido a cambios internos en la API de PHP. Esto significa que cualquier intento de agregar PHP 8.5 a la matriz de pruebas resultará en fallas inmediatas del flujo de trabajo. +Estado de Compatibilidad del Controlador +Versión de PHPCompatibilidad pdo_sqlsrv 5.128.1✅ Totalmente Compatible8.2✅ Totalmente Compatible8.3✅ Totalmente Compatible8.4⚠️ No Oficial/Limitado8.5❌ No Compatible +Qué Debe Suceder Primero +Antes de que PHP 8.5 pueda agregarse al flujo de trabajo: + +Microsoft debe lanzar una nueva versión del controlador pdo_sqlsrv (probablemente 5.13 o 6.0) +El nuevo controlador debe estar disponible a través de PECL para instalación mediante shivammathur/setup-php +La configuración de extensiones del flujo de trabajo debe actualizarse para hacer referencia a la nueva versión del controlador + +Expectativas de Cronograma +Basado en patrones históricos con versiones anteriores de PHP: + +Retraso esperado: 2-6 meses después del lanzamiento oficial de PHP 8.5 +Precedente de PHP 8.4: A finales de 2024/principios de 2025, PHP 8.4 todavía carece de soporte oficial completo del controlador MSSQL +Recomendación: Monitorear el repositorio msphpsql de Microsoft para anuncios + +Plan de Acción Recomendado +Fase 1: Monitoreo (Actual) +Monitorear estos recursos para actualizaciones: + +GitHub msphpsql de Microsoft - Repositorio oficial del controlador +Página PECL pdo_sqlsrv - Anuncios de lanzamiento +Notas de lanzamiento de PHP 8.5 y matrices de compatibilidad + +Fase 2: Pruebas Tempranas (Cuando el Controlador Esté Disponible) +Una vez que se lance un controlador compatible: +yamlstrategy: + matrix: + php: + - 8.1 + - 8.2 + - 8.3 + - 8.4 + - 8.5 +Actualizar la configuración de extensiones: +yamlenv: + extensions: pdo, pdo_sqlsrv-5.13 # O la nueva versión que sea +Considerar usar continue-on-error: true inicialmente para trabajos de PHP 8.5: +yaml- name: Run tests with phpunit + continue-on-error: ${{ matrix.php == '8.5' }} + run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml + --colors=always +``` + +### Fase 3: Integración Completa + +Después de confirmar la estabilidad: + +- Eliminar la bandera `continue-on-error` +- Hacer de PHP 8.5 una prueba requerida en el pipeline de CI + +## Puntos de Falla Potenciales + +Si agrega PHP 8.5 prematuramente, espere fallas en: + +1. **Paso de Instalación de Extensión** +``` + shivammathur/setup-php@v2 +Error: No se puede instalar pdo_sqlsrv-5.12 para PHP 8.5 + +Errores de Compilación +El controlador puede intentar compilar pero fallar debido a incompatibilidades de API +Errores en Tiempo de Ejecución +Incluso si la instalación tiene éxito, las incompatibilidades en tiempo de ejecución pueden causar fallas en las pruebas + +Características de PHP 8.5 a Tener en Cuenta +Mientras espera el soporte del controlador, tenga en cuenta estos cambios de PHP 8.5 que podrían impactar su código base: + +Operador pipe: Nueva sintaxis de programación funcional +Sintaxis clone with: Clonación de objetos mejorada +Deprecaciones: Conversiones de tipo escalar no canónicas +Otras mejoras: Hooks de propiedades, visibilidad asimétrica + +Estos cambios probablemente no afectarán directamente las operaciones de base de datos, pero pueden impactar el código de la aplicación. +Estrategia de Pruebas +Cuando el soporte del controlador esté disponible: + +Crear una rama de prueba separada con PHP 8.5 agregado a la matriz +Ejecutar el conjunto completo de pruebas contra todas las versiones de MSSQL (2017, 2019, 2022) +Verificar advertencias de deprecación en la salida de pruebas +Verificar compatibilidad con todas las versiones de PHP en la matriz +Monitorear regresiones de rendimiento + +Estado Actual del Flujo de Trabajo +El flujo de trabajo actualmente prueba: + +Versiones de PHP: 8.1, 8.2, 8.3, 8.4 +Versiones de MSSQL: 2017 (ODBC 17), 2019 (ODBC 18), 2022 (ODBC 18) +Versión del controlador: pdo_sqlsrv-5.12 + +Esta configuración es estable y debe permanecer sin cambios hasta que se confirme la compatibilidad del controlador. +Conclusión +Acción Requerida: Ninguna en este momento. Continuar monitoreando para actualizaciones del controlador pdo_sqlsrv. +No Hacer: Agregar PHP 8.5 a la matriz de pruebas hasta que Microsoft lance una versión compatible del controlador. +Próximos Pasos: Vigilar el repositorio GitHub msphpsql de Microsoft para anuncios de lanzamiento y actualizar este documento cuando nueva información esté disponible. + +Última Actualización: 21 de enero de 2026 +Estado: Esperando soporte del controlador pdo_sqlsrv para PHP 8.5 +¿También se puede actualizar Actions checkout a la versión 6? +Novedades en v6 +La versión 6 incluye soporte para Node.js 24 y persiste credenciales en un archivo PHP separado, junto con mejoras en el soporte de worktree. +Ruta de Actualización +Puede actualizar de manera segura de v3 → v4 → v5 → v6, o saltar directamente a v6. La acción mantiene compatibilidad hacia atrás para uso básico. +Flujo de Trabajo Actualizado +Aquí está su flujo de trabajo con la acción checkout actualizada a v6: +yaml- name: Checkout +uses: actions/checkout@v4 # Puede actualizarse a @v6 +Debe convertirse en: +yaml- name: Checkout +uses: actions/checkout@v6 +¿Debería Actualizar? +Sí, debería actualizar por varias razones: +Actualizaciones de seguridad - Las versiones más nuevas incluyen parches de seguridad +Soporte para Node.js 24 - Mejor rendimiento y compatibilidad +Corrección de errores - Varias mejoras y mejoras de estabilidad +Preparación para el futuro - v3 es bastante antigua y eventualmente puede quedar obsoleta +Consideraciones de Migración +La actualización de v3 a v6 debería ser sin problemas para su caso de uso, ya que está usando el checkout básico sin parámetros especiales. +Sin embargo, es una buena práctica: + +Probar el flujo de trabajo en una rama de características primero +Revisar el registro de cambios para cualquier cambio importante +Considerar fijar a un SHA de commit específico para máxima estabilidad en producción (por ejemplo, actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8) + +¡Para su flujo de trabajo, la simple actualización de versión está perfectamente bien y es recomendada! diff --git a/docs/guide/es/README.md b/docs/guide/es/README.md index a6bf01d..9a939a0 100644 --- a/docs/guide/es/README.md +++ b/docs/guide/es/README.md @@ -2,3 +2,4 @@ - [EntityReader](entity-reader.md) - [EntityWriter](entity-writer.md) +- [MSSQL Workflow Implications](PHP-8.5-MSSQL.md) diff --git a/docs/guide/pt-BR/PHP-8.5-MSSQL.md b/docs/guide/pt-BR/PHP-8.5-MSSQL.md new file mode 100644 index 0000000..0725994 --- /dev/null +++ b/docs/guide/pt-BR/PHP-8.5-MSSQL.md @@ -0,0 +1,133 @@ +Implicações do PHP 8.5 para o Fluxo de Trabalho MSSQL (Fonte IA: Claude Sonnet 4.5 - teste gratuito) +Resumo Executivo +Não adicione o PHP 8.5 ao fluxo de trabalho MSSQL ainda. O driver pdo_sqlsrv atual (versão 5.12) não é compatível com PHP 8.5, e o fluxo de trabalho falhará durante a instalação de extensões do PHP. +Bloqueador Crítico: Incompatibilidade do Driver +Situação Atual +A extensão pdo_sqlsrv 5.12.0 especificada no fluxo de trabalho não compila com PHP 8.5.0 devido a mudanças internas na API do PHP. Isso significa que qualquer tentativa de adicionar PHP 8.5 à matriz de testes resultará em falhas imediatas do fluxo de trabalho. +Status de Compatibilidade do Driver +Versão do PHPCompatibilidade pdo_sqlsrv 5.128.1✅ Totalmente Compatível8.2✅ Totalmente Compatível8.3✅ Totalmente Compatível8.4⚠️ Não Oficial/Limitado8.5❌ Não Compatível +O Que Precisa Acontecer Primeiro +Antes que o PHP 8.5 possa ser adicionado ao fluxo de trabalho: + +A Microsoft deve lançar uma nova versão do driver pdo_sqlsrv (provavelmente 5.13 ou 6.0) +O novo driver deve estar disponível via PECL para instalação através do shivammathur/setup-php +A configuração de extensões do fluxo de trabalho deve ser atualizada para referenciar a nova versão do driver + +Expectativas de Cronograma +Baseado em padrões históricos com versões anteriores do PHP: + +Atraso esperado: 2-6 meses após o lançamento oficial do PHP 8.5 +Precedente do PHP 8.4: No final de 2024/início de 2025, o PHP 8.4 ainda não possui suporte oficial completo do driver MSSQL +Recomendação: Monitorar o repositório msphpsql da Microsoft para anúncios + +Plano de Ação Recomendado +Fase 1: Monitoramento (Atual) +Monitorar estes recursos para atualizações: + +GitHub msphpsql da Microsoft - Repositório oficial do driver +Página PECL pdo_sqlsrv - Anúncios de lançamento +Notas de lançamento do PHP 8.5 e matrizes de compatibilidade + +Fase 2: Testes Iniciais (Quando o Driver Estiver Disponível) +Uma vez que um driver compatível seja lançado: +yamlstrategy: + matrix: + php: + - 8.1 + - 8.2 + - 8.3 + - 8.4 + - 8.5 +Atualizar a configuração de extensões: +yamlenv: + extensions: pdo, pdo_sqlsrv-5.13 # Ou qualquer que seja a nova versão +Considerar usar continue-on-error: true inicialmente para jobs do PHP 8.5: +yaml- name: Run tests with phpunit + continue-on-error: ${{ matrix.php == '8.5' }} + run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml + --colors=always +``` + +### Fase 3: Integração Completa + +Após confirmar a estabilidade: + +- Remover a flag `continue-on-error` +- Tornar o PHP 8.5 um teste obrigatório no pipeline de CI + +## Pontos de Falha Potenciais + +Se você adicionar o PHP 8.5 prematuramente, espere falhas em: + +1. **Etapa de Instalação de Extensão** +``` + shivammathur/setup-php@v2 +Erro: Não é possível instalar pdo_sqlsrv-5.12 para PHP 8.5 + +Erros de Compilação +O driver pode tentar compilar, mas falhar devido a incompatibilidades de API +Erros em Tempo de Execução +Mesmo que a instalação seja bem-sucedida, incompatibilidades em tempo de execução podem causar falhas nos testes + +Recursos do PHP 8.5 a Serem Observados +Enquanto aguarda o suporte do driver, observe estas mudanças do PHP 8.5 que podem impactar sua base de código: + +Operador pipe: Nova sintaxe de programação funcional +Sintaxe clone with: Clonagem de objetos aprimorada +Depreciações: Conversões de tipo escalar não canônicas +Outras melhorias: Hooks de propriedades, visibilidade assimétrica + +Essas mudanças provavelmente não afetarão diretamente as operações de banco de dados, mas podem impactar o código da aplicação. +Estratégia de Testes +Quando o suporte do driver estiver disponível: + +Criar um branch de teste separado com PHP 8.5 adicionado à matriz +Executar a suíte completa de testes contra todas as versões do MSSQL (2017, 2019, 2022) +Verificar avisos de depreciação na saída dos testes +Verificar compatibilidade com todas as versões do PHP na matriz +Monitorar regressões de desempenho + +Status Atual do Fluxo de Trabalho +O fluxo de trabalho atualmente testa: + +Versões do PHP: 8.1, 8.2, 8.3, 8.4 +Versões do MSSQL: 2017 (ODBC 17), 2019 (ODBC 18), 2022 (ODBC 18) +Versão do driver: pdo_sqlsrv-5.12 + +Esta configuração é estável e deve permanecer inalterada até que a compatibilidade do driver seja confirmada. +Conclusão +Ação Necessária: Nenhuma neste momento. Continuar monitorando para atualizações do driver pdo_sqlsrv. +Não Fazer: Adicionar PHP 8.5 à matriz de testes até que a Microsoft lance uma versão compatível do driver. +Próximos Passos: Acompanhar o repositório GitHub msphpsql da Microsoft para anúncios de lançamento e atualizar este documento quando novas informações estiverem disponíveis. + +Última Atualização: 21 de janeiro de 2026 +Status: Aguardando suporte do driver pdo_sqlsrv para PHP 8.5 +O Actions checkout também pode ser atualizado para a versão 6? +Novidades na v6 +A versão 6 inclui suporte ao Node.js 24 e persiste credenciais em um arquivo PHP separado, juntamente com melhorias no suporte a worktree. +Caminho de Atualização +Você pode atualizar com segurança de v3 → v4 → v5 → v6, ou pular diretamente para v6. A action mantém compatibilidade retroativa para uso básico. +Fluxo de Trabalho Atualizado +Aqui está seu fluxo de trabalho com a action checkout atualizada para v6: +yaml- name: Checkout +uses: actions/checkout@v4 # Pode ser atualizado para @v6 +Deve se tornar: +yaml- name: Checkout +uses: actions/checkout@v6 +Você Deveria Atualizar? +Sim, você deveria atualizar por várias razões: +Atualizações de segurança - Versões mais novas incluem patches de segurança +Suporte ao Node.js 24 - Melhor desempenho e compatibilidade +Correções de bugs - Várias melhorias e aprimoramentos de estabilidade +Preparação para o futuro - v3 é bastante antiga e pode eventualmente ser descontinuada +Considerações de Migração +A atualização de v3 para v6 deve ser tranquila para o seu caso de uso, já que você está usando o checkout básico sem parâmetros especiais. +No entanto, é uma boa prática: + +Testar o fluxo de trabalho em um branch de feature primeiro +Revisar o changelog para quaisquer mudanças disruptivas +Considerar fixar em um SHA de commit específico para máxima estabilidade em produção (por exemplo, actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8) + +Para o seu fluxo de trabalho, a simples atualização de versão está perfeitamente adequada e é recomendada! + +Se você precisar do arquivo YAML completo e corrigido do fluxo de trabalho, por favor compartilhe seu arquivo de fluxo de trabalho atual e fornecerei a versão totalmente corrigida com todas as correções aplicadas.Claude is AI and can make mistakes. Please double-check responses. diff --git a/docs/guide/pt-BR/README.md b/docs/guide/pt-BR/README.md index a6bf01d..9a939a0 100644 --- a/docs/guide/pt-BR/README.md +++ b/docs/guide/pt-BR/README.md @@ -2,3 +2,4 @@ - [EntityReader](entity-reader.md) - [EntityWriter](entity-writer.md) +- [MSSQL Workflow Implications](PHP-8.5-MSSQL.md) diff --git a/docs/guide/ru/PHP-8.5-MSSQL.md b/docs/guide/ru/PHP-8.5-MSSQL.md new file mode 100644 index 0000000..841f608 --- /dev/null +++ b/docs/guide/ru/PHP-8.5-MSSQL.md @@ -0,0 +1,193 @@ +# Последствия использования PHP 8.5 для рабочего процесса MSSQL (Источник ИИ: Claude Sonnet 4.5 - бесплатная пробная версия) + +## Краткое резюме + +**Не добавляйте PHP 8.5 в рабочий процесс MSSQL пока.** Текущий драйвер pdo_sqlsrv (версия 5.12) не поддерживает PHP 8.5, и рабочий процесс завершится ошибкой во время установки расширений PHP. + +## Критический блокер: несовместимость драйвера + +### Текущая ситуация + +Расширение pdo_sqlsrv 5.12.0, указанное в рабочем процессе, не компилируется с PHP 8.5.0 из-за изменений во внутреннем API PHP. Это означает, что любая попытка добавить PHP 8.5 в тестовую матрицу приведет к немедленному сбою рабочего процесса. + +### Статус поддержки драйвера + +| Версия PHP | Поддержка pdo_sqlsrv 5.12 | +|------------|---------------------------| +| 8.1 | ✅ Полная поддержка | +| 8.2 | ✅ Полная поддержка | +| 8.3 | ✅ Полная поддержка | +| 8.4 | ⚠️ Неофициальная/Ограниченная | +| 8.5 | ❌ Не поддерживается | + +## Что должно произойти в первую очередь + +Прежде чем PHP 8.5 можно будет добавить в рабочий процесс: + +1. **Microsoft должна выпустить новую версию драйвера pdo_sqlsrv** (вероятно, 5.13 или 6.0) +2. **Новый драйвер должен быть доступен через PECL** для установки через shivammathur/setup-php +3. **Конфигурация расширений рабочего процесса должна быть обновлена** для ссылки на новую версию драйвера + +## Ожидания по срокам + +На основе исторических закономерностей с предыдущими релизами PHP: + +- **Ожидаемая задержка**: 2-6 месяцев после официального выпуска PHP 8.5 +- **Прецедент PHP 8.4**: По состоянию на конец 2024/начало 2025 года PHP 8.4 все еще не имеет полной официальной поддержки драйвера MSSQL +- **Рекомендация**: Следите за репозиторием Microsoft msphpsql для объявлений + +## Рекомендуемый план действий + +### Фаза 1: Мониторинг (Текущая) + +Отслеживайте обновления в следующих ресурсах: + +- [Microsoft msphpsql GitHub](https://github.com/microsoft/msphpsql) - Официальный репозиторий драйвера +- [Страница PECL pdo_sqlsrv](https://pecl.php.net/package/pdo_sqlsrv) - Объявления о релизах +- Примечания к выпуску PHP 8.5 и матрицы совместимости + +### Фаза 2: Раннее тестирование (Когда драйвер станет доступен) + +После выпуска совместимого драйвера: + +```yaml +strategy: + matrix: + php: + - 8.1 + - 8.2 + - 8.3 + - 8.4 + - 8.5 +``` + +Обновите конфигурацию расширений: + +```yaml +env: + extensions: pdo, pdo_sqlsrv-5.13 # Или какая бы ни была новая версия +``` + +Рассмотрите возможность использования `continue-on-error: true` первоначально для заданий PHP 8.5: + +```yaml +- name: Run tests with phpunit + continue-on-error: ${{ matrix.php == '8.5' }} + run: vendor/bin/phpunit --testsuite=Mssql --coverage-clover=coverage.xml + --colors=always +``` + +### Фаза 3: Полная интеграция + +После подтверждения стабильности: + +- Удалите флаг `continue-on-error` +- Сделайте PHP 8.5 обязательным тестом в конвейере CI + +## Потенциальные точки отказа + +Если вы добавите PHP 8.5 преждевременно, ожидайте сбоев на следующих этапах: + +1. **Этап установки расширений** + ``` + shivammathur/setup-php@v2 + ``` + Ошибка: Невозможно установить pdo_sqlsrv-5.12 для PHP 8.5 + +2. **Ошибки компиляции** + Драйвер может попытаться скомпилироваться, но потерпит неудачу из-за несовместимости API + +3. **Ошибки времени выполнения** + Даже если установка пройдет успешно, несовместимость во время выполнения может привести к сбою тестов + +## Функции PHP 8.5, которые следует учитывать + +Ожидая поддержки драйвера, обратите внимание на эти изменения PHP 8.5, которые могут повлиять на вашу кодовую базу: + +- **Оператор pipe**: Новый синтаксис функционального программирования +- **Синтаксис clone with**: Улучшенное клонирование объектов +- **Устаревшие функции**: Неканонические приведения скалярных типов +- **Другие улучшения**: Хуки свойств, асимметричная видимость + +Эти изменения вряд ли напрямую повлияют на операции с базой данных, но могут повлиять на код приложения. + +## Стратегия тестирования + +Когда поддержка драйвера станет доступной: + +1. **Создайте отдельную тестовую ветку** с PHP 8.5, добавленным в матрицу +2. **Запустите полный набор тестов** для всех версий MSSQL (2017, 2019, 2022) +3. **Проверьте предупреждения об устаревании** в выводе тестов +4. **Проверьте совместимость** со всеми версиями PHP в матрице +5. **Отслеживайте регрессии производительности** + +## Текущий статус рабочего процесса + +Рабочий процесс в настоящее время тестирует: + +- **Версии PHP**: 8.1, 8.2, 8.3, 8.4 +- **Версии MSSQL**: 2017 (ODBC 17), 2019 (ODBC 18), 2022 (ODBC 18) +- **Версия драйвера**: pdo_sqlsrv-5.12 + +Эта конфигурация стабильна и должна оставаться неизменной до подтверждения совместимости драйвера. + +## Заключение + +**Требуемое действие**: В настоящее время никакого. Продолжайте мониторинг обновлений драйвера pdo_sqlsrv. + +**Не делайте**: Не добавляйте PHP 8.5 в тестовую матрицу, пока Microsoft не выпустит совместимую версию драйвера. + +**Следующие шаги**: Следите за репозиторием Microsoft msphpsql на GitHub для объявлений о релизах и обновляйте этот документ, когда станет доступна новая информация. + +--- + +**Последнее обновление**: 21 января 2026 г. +**Статус**: Ожидание поддержки драйвера pdo_sqlsrv для PHP 8.5 + +## Можно ли также обновить actions checkout до версии 6? + +**Что нового в v6** +Версия 6 включает поддержку Node.js 24 и сохраняет учетные данные в отдельный файл PHP, а также улучшения поддержки worktree. + +**Путь обновления** +Вы можете безопасно обновиться с v3 → v4 → v5 → v6 или перейти сразу на v6. Действие поддерживает обратную совместимость для базового использования. + +**Обновленный рабочий процесс** +Вот ваш рабочий процесс с действием checkout, обновленным до v6: + +```yaml +- name: Checkout + uses: actions/checkout@v4 # Можно обновить до @v6 +``` + +Должно стать: + +```yaml +- name: Checkout + uses: actions/checkout@v6 +``` + +**Стоит ли обновляться?** +Да, вам следует обновиться по нескольким причинам: + +**Обновления безопасности** - Новые версии включают исправления безопасности +**Поддержка Node.js 24** - Лучшая производительность и совместимость + +**Исправления ошибок** - Различные улучшения и повышение стабильности +**Подготовка к будущему** - v3 довольно старая и может в конечном итоге устареть + +## Соображения при миграции + +Обновление с v3 до v6 должно быть безболезненным для вашего случая использования, поскольку вы используете базовый checkout без специальных параметров. + +**Однако рекомендуется:** + +1. Сначала протестировать рабочий процесс в функциональной ветке +2. Просмотреть changelog на наличие критических изменений +3. Рассмотреть возможность закрепления на конкретном SHA коммита для максимальной стабильности в продакшене (например, actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8) + +Для вашего рабочего процесса простое обновление версии вполне приемлемо и рекомендуется! + +--- + +Claude - это ИИ и может делать ошибки. Пожалуйста, перепроверяйте цитируемые источники. diff --git a/docs/guide/ru/README.md b/docs/guide/ru/README.md index a6bf01d..9a939a0 100644 --- a/docs/guide/ru/README.md +++ b/docs/guide/ru/README.md @@ -2,3 +2,4 @@ - [EntityReader](entity-reader.md) - [EntityWriter](entity-writer.md) +- [MSSQL Workflow Implications](PHP-8.5-MSSQL.md) diff --git a/rector.php b/rector.php index 54537c2..c49ca30 100644 --- a/rector.php +++ b/rector.php @@ -5,13 +5,13 @@ use Rector\CodeQuality\Rector\Class_\InlineConstructorDefaultToPropertyRector; use Rector\Config\RectorConfig; use Rector\Php74\Rector\Closure\ClosureToArrowFunctionRector; -use Rector\Php81\Rector\Property\ReadOnlyPropertyRector; use Rector\Php81\Rector\FuncCall\NullToStrictStringFuncCallArgRector; +use Rector\Php81\Rector\Property\ReadOnlyPropertyRector; return RectorConfig::configure() ->withPaths([ - __DIR__ . '/src', - __DIR__ . '/tests', + __DIR__.'/src', + __DIR__.'/tests', ]) ->withPhpSets(php81: true) ->withRules([ diff --git a/src/Reader/Cache/CachedCount.php b/src/Reader/Cache/CachedCount.php index 6aec74b..e4b3e2c 100644 --- a/src/Reader/Cache/CachedCount.php +++ b/src/Reader/Cache/CachedCount.php @@ -17,6 +17,7 @@ public function __construct(private ?Countable $collection) {} /** * @psalm-internal Yiisoft\Data\Cycle\Reader + * * @psalm-return non-negative-int */ public function getCount(): int @@ -31,10 +32,12 @@ private function cacheCount(): int { /** * @psalm-suppress PossiblyNullReference + * * @psalm-var non-negative-int */ $this->count = $this->collection->count(); $this->collection = null; + return $this->count; } } diff --git a/src/Reader/EntityReader.php b/src/Reader/EntityReader.php index 8d3d34e..8271a03 100644 --- a/src/Reader/EntityReader.php +++ b/src/Reader/EntityReader.php @@ -10,15 +10,15 @@ use Cycle\ORM\Select\QueryBuilder; use Generator; use InvalidArgumentException; +use Override; use Yiisoft\Data\Cycle\Exception\NotSupportedFilterException; +use Yiisoft\Data\Cycle\Reader\Cache\CachedCollection; +use Yiisoft\Data\Cycle\Reader\Cache\CachedCount; use Yiisoft\Data\Cycle\Reader\FilterHandler\LikeHandler\LikeHandlerFactory; use Yiisoft\Data\Reader\DataReaderInterface; use Yiisoft\Data\Reader\Filter\All; use Yiisoft\Data\Reader\FilterInterface; use Yiisoft\Data\Reader\Sort; -use Yiisoft\Data\Cycle\Reader\Cache\CachedCollection; -use Yiisoft\Data\Cycle\Reader\Cache\CachedCount; -use Override; use function array_key_exists; use function is_int; @@ -105,6 +105,7 @@ public function withLimit(?int $limit): static $new->limit = $limit; $new->itemsCache = new CachedCollection(); } + return $new; } @@ -119,6 +120,7 @@ public function withOffset(int $offset): static $new->offset = $offset; $new->itemsCache = new CachedCollection(); } + return $new; } @@ -134,6 +136,7 @@ public function withSort(?Sort $sort): static $new->itemsCache = new CachedCollection(); $new->oneItemCache = new CachedCollection(); } + return $new; } @@ -151,6 +154,7 @@ public function withFilter(FilterInterface $filter): static /** @psalm-suppress ImpureMethodCall */ $new->resetCountCache(); } + return $new; } @@ -167,6 +171,7 @@ public function read(): iterable $query = $this->buildSelectQuery(); $this->itemsCache->setCollection($query->fetchAll()); } + return $this->itemsCache->getCollection(); } @@ -186,7 +191,7 @@ public function readOne(): array|object|null } /** - * Get Iterator without caching + * Get Iterator without caching. */ #[Override] public function getIterator(): Generator @@ -197,6 +202,7 @@ public function getIterator(): Generator public function getSql(): string { $query = $this->buildSelectQuery(); + return (string) ($query instanceof Select ? $query->buildQuery() : $query); } @@ -270,7 +276,7 @@ private function normalizeSortingCriteria(array $criteria): array if (is_int($direction)) { $direction = match ($direction) { SORT_DESC => 'DESC', - default => 'ASC', + default => 'ASC', }; } $criteria[$field] = $direction; diff --git a/src/Writer/EntityWriter.php b/src/Writer/EntityWriter.php index d6bc72e..c20df2e 100644 --- a/src/Writer/EntityWriter.php +++ b/src/Writer/EntityWriter.php @@ -5,9 +5,9 @@ namespace Yiisoft\Data\Cycle\Writer; use Cycle\ORM\EntityManagerInterface; +use Override; use Throwable; use Yiisoft\Data\Writer\DataWriterInterface; -use Override; final class EntityWriter implements DataWriterInterface { diff --git a/tests/Feature/Base/Reader/BaseEntityReaderTestCase.php b/tests/Feature/Base/Reader/BaseEntityReaderTestCase.php index a03c679..4b42b1f 100644 --- a/tests/Feature/Base/Reader/BaseEntityReaderTestCase.php +++ b/tests/Feature/Base/Reader/BaseEntityReaderTestCase.php @@ -20,9 +20,9 @@ use Yiisoft\Data\Reader\Sort; use Yiisoft\Data\Tests\Common\FixtureTrait; +use function count; use function iterator_to_array; use function preg_replace; -use function count; use function sprintf; abstract class BaseEntityReaderTestCase extends TestCase @@ -189,7 +189,7 @@ public static function dataGetSql(): array { return [ 'base' => [ - << ['connection' => static::$DRIVER ?? 'sqlite'], - 'sqlite' => ['connection' => 'sqlite'], + 'sqlite' => ['connection' => 'sqlite'], ]; $connections = [ 'sqlite' => new SQLiteDriverConfig( @@ -220,27 +220,27 @@ private function createOrm(): ORMInterface } /** - * Cycle ORM Schema + * Cycle ORM Schema. */ private function createSchema(): SchemaInterface { return new Schema([ 'user' => [ - SchemaInterface::MAPPER => StdMapper::class, - SchemaInterface::DATABASE => 'default', - SchemaInterface::TABLE => 'user', + SchemaInterface::MAPPER => StdMapper::class, + SchemaInterface::DATABASE => 'default', + SchemaInterface::TABLE => 'user', SchemaInterface::PRIMARY_KEY => 'id', - SchemaInterface::COLUMNS => [ + SchemaInterface::COLUMNS => [ // property => column - 'id' => 'id', - 'number' => 'number', - 'email' => 'email', + 'id' => 'id', + 'number' => 'number', + 'email' => 'email', 'balance' => 'balance', 'born_at' => 'born_at', ], SchemaInterface::TYPECAST => [ - 'id' => 'int', - 'number' => 'int', + 'id' => 'int', + 'number' => 'int', 'balance' => 'float', 'born_at' => 'datetime', ], diff --git a/tests/Feature/Mssql/Reader/EntityReaderTest.php b/tests/Feature/Mssql/Reader/EntityReaderTest.php index b525cee..ac047f6 100644 --- a/tests/Feature/Mssql/Reader/EntityReaderTest.php +++ b/tests/Feature/Mssql/Reader/EntityReaderTest.php @@ -14,7 +14,7 @@ public static function dataGetSql(): array { return [ 'base' => [ - << [ - <<