[RFC]: Require a PlatformInterface in the DDL process* methods
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 68/100
Direção de pesquisa
Comece em src/Sql/Ddl com os métodos process* de CreateTable, AlterTable e DropTable, e leia AbstractSql::buildSqlString() e getSqlString() para confirmar que a plataforma é sempre non-null. Altere cada assinatura de ?PlatformInterface $adapterPlatform = null para PlatformInterface $adapterPlatform, mantendo o parâmetro em processCombinedby() e processStatementEnd() por compatibilidade posicional, e então verifique com mago analyze --ignore-baseline src/Sql que os 21 achados diminuem conforme o previsto e que a suíte de testes ainda passa.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Proposed Version
Next minor
Basic Information
The process* methods on CreateTable, AlterTable and DropTable take ?PlatformInterface $adapterPlatform = null, but use it unconditionally: they call quoteIdentifier(), quoteTrustedValue(), processExpression() and resolveTable(), none of which accept null. Their only caller, AbstractSql::buildSqlString(), always passes a non-null platform.
This accounts for 21 analyzer findings in src/Sql/Ddl:
possibly-null-argument(8) andpossible-method-access-on-null(6).less-specific-nested-return-statement(4) andinvalid-return-statement(1): calling a method on a possibly-null platform yieldsmixed, so the arrays these methods return lose their element types.unused-parameter(2):CreateTable::processCombinedby()andprocessStatementEnd()receive the platform but don't use it.
Background
AbstractSql::getSqlString() supplies a default platform before calling buildSqlString(), so no path reaches these methods with null.
Considerations
- These are
protectedmethods. Making the parameter required narrows it for callers, but subclasses that override with?PlatformInterface $adapterPlatform = nullremain compatible, since a child may widen a parameter. - A subclass that calls
parent::processX()without arguments, or withnull, would get anArgumentCountErrororTypeError. None of the driver packages do this.
Proposal(s)
Change the signature of each DDL process* method to PlatformInterface $adapterPlatform. Keep the parameter on processCombinedby() and processStatementEnd(), since buildSqlString() passes it positionally to every process* method.
Appendix/Additional Info
Finding counts are from mago analyze --ignore-baseline src/Sql once the docblock typing in #204 is applied.
- Linguagem predominante
- PHP
- Estrelas
- 18
- Forks
- 8
- Merge médio
- 6d 11h
- PRs com merge (30d)
- 14
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Sem modelo de pull request
- Sem guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de php-db/phpdb
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
RFC
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 66/100
Mantenedores costumam responder em até 1 dia
-
RFC
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 38/100
Mantenedores costumam responder em até 1 dia
-
RFC
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
Mantenedores costumam responder em até 1 dia
-
Sql's foreign-table guard raises TypeError when its table is a TableIdentifier or aliased arrayTalvez já em andamento @simon-mundy assumiu há 2 dias. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 50/100
Mantenedores costumam responder em até 1 dia
Todas as issues de php-db/phpdb
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
api-platform/core#8649 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 84/100
open-telemetry/opentelemetry-php#2071 ·
Mantenedores costumam responder em até 1 dia
-
bug No Code Attached Yet
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
joomla/joomla-cms#48587 ·
Mantenedores costumam responder em até 1 dia
-
priority:low type:docs
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
crazy-goat/rabbit-stream#662 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
FOSSBilling/FOSSBilling#4498 ·
Mantenedores costumam responder em até 1 dia