La tabla sequences, ¿Cuales son las "razones de compatibilidad"?
Estaba analizando el script que usa el drupal para resolver la conexión a la base de datos y me encontre con la función que bloquea las tablas para obtener el id próximo... me llamo mucho la atención que el sistema mantenga una tabla que incluye el estado de los ids de las otras tablas. Me pregunto porqué bloquea la tabla "sequences", en vez de bloquear la tabla que requiere realmente bloquear, en otras palabras... porqué no bloque la tabla que necesita y obtiene el id directamente. No son muchas las cosas que a mi se me ocurren para hacer esto. Si alguien conoce la razón del porque se eligió esta solución me lo podria decir. Muchas gracias.
Dejo el script del drupal que realiza las acciones que cuento arriba:
/**
* Return a new unique ID in the given sequence.
*
* For compatibility reasons, Drupal does not use auto-numbered fields in its
* database tables. Instead, this function is used to return a new unique ID
* of the type requested. If necessary, a new sequence with the given name
* will be created.
*/
function db_next_id($name) {
$name = db_prefix_tables($name);
db_query('LOCK TABLES {sequences} WRITE');
$id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
db_query('UNLOCK TABLES');
return $id;
}
- Inicie sesión o regístrese para enviar comentarios







Entiendo lo usan para abstraer la conexión a bases de datos
Pues aún existen bases de datos que no pueden usar campos que se auto incrementente. Aunque en varias discusiones en Drupal.org, cuando alguien pregunta si debería o no usar campos que se auto incrementen en sus módulos la respuesta es que no debería haber problema.
Es parte de la idea de abstraer Drupal del gestor de bases de datos que se usa.
Pero hay muchos módulos que están pensados solo para MySQL, y en algunos casos MySQL y PosgreSQL, ambos gestores de bases de datos funcionan con campos que se auto incrementan y no usan las funciones de Drupal. Yo escribí un módulo que no dependía para nada de sequence y camina sin problemas, muchos lo han hecho.
El pequeño gran problema es que las secuencias están relacionadas con muchas de las principales tablas, como la de nodos y comentarios. Usar esta tabla le dá más trabajo a Drupal, eso es un hecho, y muchos han opinado a favor de usar campos que se auto incrementen, la mayoría de servidores de bases de datos modernos, o al menos los que más se usan, lo permiten.
Hasta donde sé el tema aún sigue en discusión.
Alexis Bellido
Aprende a usar Drupal en menos de 48 horas