Knex: Opção em cascata ao soltar a mesa

Criado em 12 set. 2015  ·  3Comentários  ·  Fonte: knex/knex

Seria útil ter algo assim:

knex.schema.dropTable('users', true);

//OR

knex.schema.cascade().dropTable('users');

Geraria:

DROP TABLE users CASCADE;

Comentários muito úteis

Bem, isso é específico do dialeto. O que é ainda pior é que, de acordo com a documentação do MySQL , a palavra-chave CASCADE é permitida, mas não faz absolutamente nada. (Como um aparte, o MySQL também ignora silenciosamente as restrições CHECK e isso me mordeu no passado).

Acho que se incluirmos essa funcionalidade (o que eu gostaria), precisa haver uma implementação de fallback para dialetos que não tenham uma implementação CASCADE adequada ou, se não houver como implementá-la com um fallback, e erro deve ser lançado.

Por exemplo, no MySQL você pode consultar INFORMATION_SCHEMA.KEY_COLUMN_USAGE e construir um gráfico direcionado do banco de dados com nós para cada combinação table_name + '.' + column_name e arestas de REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME a TABLE_NAME.COLUMN_NAME . Em seguida, você executa uma classificação topológica no gráfico e fornece a ordem de descarte. Já fiz isso, e funciona muito bem. O bom de usar INFORMATION_SCHEMA também é que a implementação deve ser portátil em dialetos SQL. Se isso é verdade ou não na prática é uma história totalmente diferente.

Todos 3 comentários

O mesmo para .truncate

+1

Bem, isso é específico do dialeto. O que é ainda pior é que, de acordo com a documentação do MySQL , a palavra-chave CASCADE é permitida, mas não faz absolutamente nada. (Como um aparte, o MySQL também ignora silenciosamente as restrições CHECK e isso me mordeu no passado).

Acho que se incluirmos essa funcionalidade (o que eu gostaria), precisa haver uma implementação de fallback para dialetos que não tenham uma implementação CASCADE adequada ou, se não houver como implementá-la com um fallback, e erro deve ser lançado.

Por exemplo, no MySQL você pode consultar INFORMATION_SCHEMA.KEY_COLUMN_USAGE e construir um gráfico direcionado do banco de dados com nós para cada combinação table_name + '.' + column_name e arestas de REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME a TABLE_NAME.COLUMN_NAME . Em seguida, você executa uma classificação topológica no gráfico e fornece a ordem de descarte. Já fiz isso, e funciona muito bem. O bom de usar INFORMATION_SCHEMA também é que a implementação deve ser portátil em dialetos SQL. Se isso é verdade ou não na prática é uma história totalmente diferente.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

tjwebb picture tjwebb  ·  3Comentários

rarkins picture rarkins  ·  3Comentários

hyperh picture hyperh  ·  3Comentários

lanceschi picture lanceschi  ·  3Comentários

fsebbah picture fsebbah  ·  3Comentários