Sería útil tener algo como esto:
knex.schema.dropTable('users', true);
//OR
knex.schema.cascade().dropTable('users');
Generaría:
DROP TABLE users CASCADE;
Lo mismo para .truncate
+1
Bueno, esto es específico del dialecto. Lo que es aún peor es que, según la documentación de MySQL , la palabra clave CASCADE
está permitida pero no hace absolutamente nada. (Aparte, MySQL también ignora silenciosamente las restricciones CHECK
y esto me mordió en el pasado).
Creo que si incluimos esta funcionalidad (que me gustaría), debe haber una implementación alternativa para los dialectos que carecen de una implementación adecuada CASCADE
o, si no hay forma de implementarla con una alternativa y error debe ser arrojado.
Por ejemplo, en MySQL puede consultar INFORMATION_SCHEMA.KEY_COLUMN_USAGE
y crear un gráfico dirigido de la base de datos con nodos para cada combinación de table_name + '.' + column_name
y bordes desde REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
hasta TABLE_NAME.COLUMN_NAME
. Luego realiza una ordenación topológica en el gráfico y le da el orden de colocación. He hecho esto, y funciona bastante bien. Lo bueno de usar INFORMATION_SCHEMA
también es que la implementación debe ser portátil entre los dialectos de SQL. Si eso es cierto o no en la práctica es una historia completamente diferente.
Comentario más útil
Bueno, esto es específico del dialecto. Lo que es aún peor es que, según la documentación de MySQL , la palabra clave
CASCADE
está permitida pero no hace absolutamente nada. (Aparte, MySQL también ignora silenciosamente las restriccionesCHECK
y esto me mordió en el pasado).Creo que si incluimos esta funcionalidad (que me gustaría), debe haber una implementación alternativa para los dialectos que carecen de una implementación adecuada
CASCADE
o, si no hay forma de implementarla con una alternativa y error debe ser arrojado.Por ejemplo, en MySQL puede consultar
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
y crear un gráfico dirigido de la base de datos con nodos para cada combinación detable_name + '.' + column_name
y bordes desdeREFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
hastaTABLE_NAME.COLUMN_NAME
. Luego realiza una ordenación topológica en el gráfico y le da el orden de colocación. He hecho esto, y funciona bastante bien. Lo bueno de usarINFORMATION_SCHEMA
también es que la implementación debe ser portátil entre los dialectos de SQL. Si eso es cierto o no en la práctica es una historia completamente diferente.