AzerothCore
Pages :

Control de versiones SQL

Tenemos dos tipos de versiones:

  • Versionado cronol贸gico, Para los archivos sql aceptados
  • Versionado por id, principalmente utilizado para sql pendientes

Versionado cronol贸gico

Utilizamos el viejo m茅todo MaNGOS para asegurarnos de que todos los archivos /data/sql/updates/ se importan en el orden correcto, evitando la doble importaci贸n o la omisi贸n de archivos. Para ello, utilizamos una convenci贸n espec铆fica para los nombres de los archivos y a帽adimos una cabecera SQL especial al principio de su contenido.

Nombres de archivos

El nombre del archivo no debe ser renombrado y debe mantenerse como el nombre que create_sql.sh ha creado para el archivo.

El nombre del archivo tendr谩 este aspecto: rev_XXXXXXXXXXXXXXXXXXX

Cabecera SQL

La cabecera SQL es una consulta especial que debe a帽adirse al principio del contenido de cada archivo de actualizaci贸n sql.

El formato es el siguiente:

ALTER TABLE version_db_[database] CHANGE COLUMN [previous_file_name] [this_file_name] bit;

Sustituyendo:

  • [database] con world, character o auth
  • [previous_file_name] con el nombre del 煤ltimo archivo (sin extensi贸n)
  • [this_file_name] con el nombre del nuevo archivo en s铆 (sin extensi贸n)

El siguiente es un ejemplo de la consulta del encabezado SQL (para la base de datos auth):

ALTER TABLE `version_db_auth` CHANGE COLUMN 2016_07_09_01 2016_07_10_00 bit;

Control de versiones por ID

Los archivos sql pendientes no pueden utilizar el sistema de protecci贸n descrito anteriormente porque no podemos saber previamente la fecha en que ser谩n aceptados. As铆 que estamos usando un versionado opcional (pero recomendado para los devs y especialmente para los pull requests).

Hemos introducido un campo dentro de las tablas version_db_* que es una cadena de clave primaria, y tambi茅n un campo required_rev que se puede utilizar para permitir la relaci贸n por versiones.

Por ejemplo, puede crear una versi贸n "X" que est茅 relacionada con una versi贸n "Y" que no sea necesariamente la anterior.

actualmente utilizamos este comando bash para evitar, en la medida de lo posible, las colisiones entre revisiones:

date +%s%N

si se produce una colisi贸n (extremadamente dif铆cil), se puede resolver f谩cilmente de forma manual sin embargo.

La consulta final ser谩:

INSERT INTO `version_db_auth` (`sql_rev`, `required_rev`) VALUES ('1472557015805232200','1472557004102672900');

o en caso de que no se requiera: required_rev:

INSERT INTO `version_db_auth` (`sql_rev`) VALUES ('1472557015805232200');

A帽adi茅ndolo en la primera l铆nea de su sql, genera un error en caso de doble importaci贸n; como por ejemplo para el versionado cronol贸gico.

Hay un script bash en las carpetas pending_* que crear谩 un sql con esta fila en la primera l铆nea para usted, adem谩s nombrar谩 el archivo que ser谩 reconocido por nuestro sistema de importaci贸n. Le sugerimos que lo utilice.

El sistema de importaci贸n pendiente

Como se ha dicho antes, tenemos un flujo de trabajo especial para PR para permitir la consistencia de los datos de la base de datos para los desarrolladores. Requiere que se hagan algunas cosas en el sql de su RP para que sea compatible con nuestro sistema de importaci贸n y le permita evitar la doble importaci贸n de las mismas consultas.

La forma de hacerlo se describe en el art铆culo C贸mo crear un pull request