Hola Esteban,
cierto, lo ideal seria tener una variable del motor que indicara explicitamente cual es el delimitador que usa, en dicho caso no habria chances de error… pero hasta donde se, no existe o al menos no tengo conocimiento, por lo que lc_messages parecio la mejor opcion.
A mi me pareció raro tener que reescribir todo el método "parsear" en la clase heredada simplemente para poder asignar 2 variables, que aparte son de clase. Quedaría código duplicado sin sentido. Pero es de menor importancia, ya que se puede hacer.
Es un punto, quizas hay que refactorizar esa parte para que sea mas granular y con solo hacer una redefinicion para anular la asignacion incorrecta alcance.
Entiendo que no te guste no poder asignar el delimitador desde afuera… pero pensa que si trabajaras con 2 o mas motores distintos, al momento de enviar a parsear el error tendrias que estar decidiendo segun el tipo de motor cual es el delimitador correcto a pasarle a las clases, o no hacer nada y dejar que use el declarado en el parser especifico. Esa clase de acoplamiento, no parece logica cuando existen objetos creados especificamente para manejar esas situaciones, si fuera un parser generico de erorres… seria otra cosa.
Lo más complicado es la imposibilidad de capturar los state 42601, ya que el objetivo general del parseo de mensajes de error de la base de datos, creo yo, es generar un mensaje que el usuario pueda leer ocultando el lenguaje del motor.
Por otro lado entiendo que la propuesta de toba es la de recuperar info contextual mediante una conexión paralela y que precisamente acá no aplica, pero vuelvo al tema anterior, los errores de sintaxis son comunes (no solo por falta de parámetros) y seria interesante poder manejar todas las excepciones del mismo lugar.
Entiendo también, que no este en los planes que esto suceda, entonces pregunto: Cual es la razón por la que se especifico al método “consultar” de la clase “toba_db” que no use el parser? Es posible extender la clase para redefinir ese comportamiento?
Sigo insistiendo, un error de sintaxis no deberia pasar el testeo basico de la operacion, no es algo que este fuera de nuestras manos durante el desarrollo, como si lo puede ser que una secuencia haya quedado desactualizada en produccion debido a un mal manejo con la bd, son cuestiones fundamentalmente distintas.
No se si no sucedera, creo que es algo que requiere mas analisis tanto para un lado como para el otro… pero si sucede, ciertamente no va a ser por los errores de sintaxis, ese no es un buen argumento en lo absoluto. El porque se decidio que fuera asi, deberia consultarlo con la persona que lo hizo en su momento, quizas haya sido que a su criterio no era necesario o sino capaz tuvo algun inconveniente tecnico.
En cuanto tenga alguna novedad, te aviso.
Saludos