Cambiar de CamelCase a under_score usando RegEx
Bueno, la idea de hacer esta expresión regular empezó cuando trataba migrar (por fases) la base de datos que usé para el sistema TEGZ el cual actualmente funciona con MySQL.
TEGZ está hecho usando Catalyst, DBIx-Class y MySQL, así que lo primero que hice fue editar lib/TEGZ/Model/tegzDB.pm la línea de conexión a la base de datos, de ‘dbi:mysql:tegz’ a ‘dbi:Pg:dbname=tegz’, habiendo creado las tablas en postgres en una base de datos llamada tegz. Ahora… esto me daba error, así que despues de darme golpes por un rato hice uso del comodin de preguntarle a un amigo (aqui entra miguel de www.tc.com.ve, el mismo que grunch hace referencia en este post) y me dice que el problema es que postgres recibe el nombre de la tabla sin ponerle comillas, y ahí hay un problema. a continuación visual.
Sin comillas a tabla con nombre usando camelCase… envia error.
Con comillas a tabla con nombre usando camelCase… funciona.
Así que me dí la tarea de cambiar los campos y nombres de tablas que tenía en camelCase a under_score para evitar ese problema y por recomendación de miguel, es posible que con alguna configuración de DBIx-Class me brincara esta “molestia”, pero preferí hacer el cambio de una vez por todas, para esto usé esta expresión regular usando VIM (the best editor ever
:% s#\([a-z]\)\([A-Z]\)#\1_\l\2#g
Explico la expresión por partes, :% indica que aplica a todo el documento, s#a#b# es una sentencia para sustitución, donde sustituye a por b, así que busca todo lo que corresponda a [a-z][A-Z] (el punto del camelCase) a esa primera letra encontrada, underscore, segunda letra mayuscula pasada a minuscula. reconoce la primera letra y segunda por la agrupación \(\) \(\) (()()) -> \1 \2 , la \l es para pasar a lowercase
Esto pasa, por ejemplo: idCedula a id_cedula. Así que cambié los modulos y la base de datos (hice un backup en plano y luego un restore con el cambio, todo fino
Pd: si se consigue con el caso de idTEG quedará id_tEG, ahí si no sé todavía como evitar ese caso (sin tener que romper con posibles encuentros con idFacturaEmpresaCualquierCosa)
PPd: Está pendiente el post que le seguía al anterior, solo he estado algo ocupado, ya le dedicaré tiempo, pero debo decir que me ha ido bien últimamente
.



Escribe un comentario