Terminado

Escribir un shell linux para reemplazar textos en archivos

Publicado el 09 Diciembre, 2019 en Programación y Tecnología

Sobre este proyecto

Abierto

Estoy migrando un servidor linux debian 8 a un debian 10 y por supuesto las versiones de php y postgresql son superiores. Estaba utilizando postgresql 9.4 y migre a postgresql 12. El problema es que en psql 12 sacaron un atributo invisible de las tablas llamado OIDS.



El asunto es el siguiente:

En muchos programas php (mas de 100) tengo generalmente la misma secuencia:
1) un statement que dice: insert into tabla (campo1,campo2,..CampoX) values (variable, variable, .----, Variable)
2) Una variable que almacena el resultado del insert (un result set pero siempre vacio)
3) Una sentencia php: $oid=pg_getlastoid(resultado 2)
4) Por ultimo obtiene el id de la tabla buscando por el $oid (select id from tabla where oid=$oid)

Con este cambio de version de pgsql el pg_getlastoid devuelve vacio por consecuencia el punto 4 devuelve vacio y el programa rompe por todos lados.

La solución que tengo es:

1) Al statement insert hay que agregarle al final de la sentencia antes del punto y coma la siguiente palabra "RETURNING *" (todos arrancan con insert into y terminan con );
2) La linea 2 queda igual pero habria que obtener el nombre de la variable que almacena el resultado
3) La linea 3 habria que eliminarla
4) La linea 4 tiene que tener el nombre de la variable que almacena el resultado y deberia llamar a la variable de la linea 2 y agregarle [0]. Ejemplo:

Archivo original:
1) $q="insert into pais (p_nombre) values ($nompais);";
2) $descriptor=PgDoQuery($q);
3) $oid=pg_getlastoid($descriptor);
4) $pais_id=UserQuery("select id from pais where oid=$oid",0);

Como deberia quedar luego de correr el shell:
1) $q="insert into pais (p_nombre) values ($nompais) RETURNING *;";
2) $descriptor=PgDoQuery($q);
3) $pais_id=$descriptor[0];

Por logica los programas son muchisimos los que hay que eliminar y el shell deberia recorrer supongo con un find todos los -type f que contengan -name "*.php"

ACTUALIZACION: Puede ser que entre las lineas 1 y 4 haya lineas extras sin texto (espacios en blanco), por lo que habria que eliminar tambien esas lineas en blanco. Tambien puede ser que las lineas 1 y 2 esten unificadas, es decir que el $q ya este dentro del $descriptor, lo que hay que buscar es el PgDoQuery y ver si llama a una variable o a un texto

Categoría Programación y Tecnología
Subcategoría Otros
Tamaño del proyecto Pequeño
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo Tengo las especificaciones
Disponibilidad requerida Según se necesite
Experiencia en este tipo de proyectos Sí (He administrado este tipo de proyectos anteriormente)

Plazo de Entrega: 11 Diciembre, 2019

Habilidades necesarias