Knex: Option cascade lors de la suppression de la table

Créé le 12 sept. 2015  ·  3Commentaires  ·  Source: knex/knex

Ce serait pratique d'avoir quelque chose comme ça :

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

//OR

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

Génèrerait :

DROP TABLE users CASCADE;

Commentaire le plus utile

Eh bien, c'est spécifique au dialecte. Ce qui est encore pire, c'est que selon la documentation MySQL , le mot-clé CASCADE est autorisé mais ne fait absolument rien. (En passant, MySQL ignore aussi silencieusement les contraintes CHECK et cela m'a mordu dans le passé).

Je pense que si nous incluons cette fonctionnalité (ce que j'aimerais), il doit y avoir une implémentation de secours pour les dialectes qui n'ont pas une implémentation appropriée CASCADE ou, s'il n'y a aucun moyen de l'implémenter avec une solution de secours et une erreur devrait être jeté.

Par exemple, dans MySQL, vous pouvez interroger INFORMATION_SCHEMA.KEY_COLUMN_USAGE et construire un graphe orienté de la base de données avec des nœuds pour chaque combinaison table_name + '.' + column_name et des arêtes de REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME à TABLE_NAME.COLUMN_NAME . Vous effectuez ensuite un tri topologique sur le graphe et celui-ci vous donne l'ordre de dépôt. Je l'ai fait, et ça marche plutôt bien. La bonne chose à propos de l'utilisation INFORMATION_SCHEMA est également que l'implémentation doit être portable dans tous les dialectes SQL. Que cela soit vrai ou non dans la pratique est une toute autre histoire.

Tous les 3 commentaires

Idem pour .truncate

+1

Eh bien, c'est spécifique au dialecte. Ce qui est encore pire, c'est que selon la documentation MySQL , le mot-clé CASCADE est autorisé mais ne fait absolument rien. (En passant, MySQL ignore aussi silencieusement les contraintes CHECK et cela m'a mordu dans le passé).

Je pense que si nous incluons cette fonctionnalité (ce que j'aimerais), il doit y avoir une implémentation de secours pour les dialectes qui n'ont pas une implémentation appropriée CASCADE ou, s'il n'y a aucun moyen de l'implémenter avec une solution de secours et une erreur devrait être jeté.

Par exemple, dans MySQL, vous pouvez interroger INFORMATION_SCHEMA.KEY_COLUMN_USAGE et construire un graphe orienté de la base de données avec des nœuds pour chaque combinaison table_name + '.' + column_name et des arêtes de REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME à TABLE_NAME.COLUMN_NAME . Vous effectuez ensuite un tri topologique sur le graphe et celui-ci vous donne l'ordre de dépôt. Je l'ai fait, et ça marche plutôt bien. La bonne chose à propos de l'utilisation INFORMATION_SCHEMA est également que l'implémentation doit être portable dans tous les dialectes SQL. Que cela soit vrai ou non dans la pratique est une toute autre histoire.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

olaferlandsen picture olaferlandsen  ·  3Commentaires

arconus picture arconus  ·  3Commentaires

koskimas picture koskimas  ·  3Commentaires

fsebbah picture fsebbah  ·  3Commentaires

rarkins picture rarkins  ·  3Commentaires