app/helpers/msip/sql_helper.rb in msip-2.2.0.alfa3 vs app/helpers/msip/sql_helper.rb in msip-2.2.0.beta1
- old
+ new
@@ -1,86 +1,107 @@
+# frozen_string_literal: true
module Msip
module SqlHelper
-
- # Pone cotejación dada a una columna tipo varchar (longitud long)
+ # Pone cotejación dada a una columna tipo varchar (longitud long)
def cambiar_cotejacion(tabla, columna, long, cotejacion)
- execute <<-SQL
- ALTER TABLE #{tabla.to_s}
- ALTER COLUMN #{columna.to_s} SET DATA TYPE
- VARCHAR(#{long.to_i}) COLLATE "#{cotejacion.to_s}";
+ ActiveRecord::Base.connection.execute(<<-SQL.squish)
+ ALTER TABLE #{tabla}
+ ALTER COLUMN #{columna} SET DATA TYPE#{" "}
+ VARCHAR(#{long.to_i}) COLLATE "#{cotejacion}";
SQL
end
module_function :cambiar_cotejacion
alias_method :cambiaCotejacion, :cambiar_cotejacion
module_function :cambiaCotejacion
-
def ejecuta_sql(sql, eco = false)
- if eco
- puts "ejecuta_sql: #{sql}"
+ if eco
+ Rails.logger.debug { "ejecuta_sql: #{sql}" }
end
- Msip::Persona.connection.execute <<-SQL
+ Msip::Persona.connection.execute(<<-SQL.squish)
#{sql}
SQL
end
module_function :ejecuta_sql
-
- # Cambia convención para sexo
+ # Cambia convención para sexo
def cambiar_convencion_sexo(convencion_final)
- if !Msip::Persona::CONVENCIONES_SEXO.keys.include?(convencion_final)
- puts "Conveción desconocida: #{convecion_final}"
- exit 1
+ unless Msip::Persona::CONVENCIONES_SEXO.keys.include?(convencion_final)
+ Rails.logger.debug { "Conveción desconocida: #{convecion_final}" }
+ exit(1)
end
- convencion_inicial = Msip::Persona::convencion_sexo_abreviada
+ convencion_inicial = Msip::Persona.convencion_sexo_abreviada
if convencion_inicial == convencion_final
return
end
- if convencion_final != 'FMS' && convencion_final != 'MHS'
- puts "Se espera cambio a convencion desconocida #{convencion_final}"
+
+ if convencion_final != "FMS" && convencion_final != "MHS"
+ Rails.logger.debug { "Se espera cambio a convencion desconocida #{convencion_final}" }
return
end
- ejecuta_sql("ALTER TABLE msip_persona DROP CONSTRAINT persona_sexo_check",
- true);
+ ejecuta_sql(
+ "ALTER TABLE msip_persona DROP CONSTRAINT persona_sexo_check",
+ true,
+ )
# Orden importa por ahora soporta bien FMS -> MHS y MHS->FMS
- if convencion_inicial=='FMS' && convencion_final == 'MHS'
- ejecuta_sql("UPDATE msip_persona SET sexo='H'"\
- " WHERE sexo='M';", true)
- ejecuta_sql("UPDATE msip_persona SET sexo='M'"\
- " WHERE sexo='F';", true)
- ejecuta_sql("UPDATE msip_persona SET sexo='S'"\
- " WHERE sexo='S';", true)
- elsif convencion_inicial=='MHS' && convencion_final == 'FMS'
- ejecuta_sql("UPDATE msip_persona SET sexo='F'"\
- " WHERE sexo='M';", true)
- ejecuta_sql("UPDATE msip_persona SET sexo='M'"\
- " WHERE sexo='H';", true)
- ejecuta_sql("UPDATE msip_persona SET sexo='S'"\
- " WHERE sexo='S';", true)
+ if convencion_inicial == "FMS" && convencion_final == "MHS"
+ ejecuta_sql(
+ "UPDATE msip_persona SET sexo='H'"\
+ " WHERE sexo='M';",
+ true,
+ )
+ ejecuta_sql(
+ "UPDATE msip_persona SET sexo='M'"\
+ " WHERE sexo='F';",
+ true,
+ )
+ ejecuta_sql(
+ "UPDATE msip_persona SET sexo='S'"\
+ " WHERE sexo='S';",
+ true,
+ )
+ elsif convencion_inicial == "MHS" && convencion_final == "FMS"
+ ejecuta_sql(
+ "UPDATE msip_persona SET sexo='F'"\
+ " WHERE sexo='M';",
+ true,
+ )
+ ejecuta_sql(
+ "UPDATE msip_persona SET sexo='M'"\
+ " WHERE sexo='H';",
+ true,
+ )
+ ejecuta_sql(
+ "UPDATE msip_persona SET sexo='S'"\
+ " WHERE sexo='S';",
+ true,
+ )
end
- ejecuta_sql("ALTER TABLE msip_persona ADD CONSTRAINT persona_sexo_check "\
- " CHECK (LENGTH(sexo)=1 "\
- " AND '#{convencion_final}' LIKE '%' || sexo || '%');", true)
+ ejecuta_sql(
+ "ALTER TABLE msip_persona ADD CONSTRAINT persona_sexo_check "\
+ " CHECK (LENGTH(sexo)=1 "\
+ " AND '#{convencion_final}' LIKE '%' || sexo || '%');",
+ true,
+ )
end
module_function :cambiar_convencion_sexo
-
##
# Agrega una nueva tabla al listado $t
#
- # @param string &$t Listado de tablas separadas por ,
- # @param string $nt Nueva tabla por agregar si falta
+ # @param t [Array<String>] Listado de tablas separadas por ,
+ # @param nt [String] Nueva tabla por agregar si falta
#
- # @return string cadena t completada para asegurar tabla
- #/
+ # @return [String] cadena t completada para asegurar tabla
+ # /
def agregar_tabla(t, nt)
- at = t.split(',').map(&:strip)
- if (!at.include? nt.strip)
+ at = t.split(",").map(&:strip)
+ unless at.include?(nt.strip)
at << nt
end
t = at.join(",")
end
module_function :agregar_tabla
@@ -89,89 +110,88 @@
module_function :agrega_tabla
##
# Agrega condición a WHERE en un SELECT de SQL
#
- # @param unknown &$db Conexión a base de datos
- # @param string &$w cadena con WHERE que se completa
- # @param string $n nombre de campo
- # @param string $v valor esperado
- # @param string $opcmp operador de comparación por usar.
- # @param string $con con
+ # @param [Object] db Conexión a base de datos
+ # @param [String] w cadena con WHERE que se completa
+ # @param [String] n nombre de campo
+ # @param [String] v valor esperado
+ # @param [String] opcmp operador de comparación por usar.
+ # @param [String] con con
#
# @return string cadena w completada con nueva condición
- def ampliar_where(w, n, v, opcmp = '=', con='AND')
- if (!v || v === '' || $v === ' ')
+ def ampliar_where(w, n, v, opcmp = "=", con = "AND")
+ if !v || v === "" || $v === " "
return
end
- if (w != "")
+
+ if w != ""
w += " #{con}"
end
w += " " + n + opcmp + Sivel2Gen::Caso.connection.quote(v)
end
module_function :ampliar_where
-
alias_method :consulta_and, :ampliar_where
module_function :consulta_and
##
- # Como la función anterior sólo que el valor no lo pone entre
+ # Como la función anterior sólo que el valor no lo pone entre
# apostrofes y supone que ya viene escapado el valor $v
#
- # @param string &$w cadena con WHERE que se completa
- # @param string $n nombre de campo
- # @param string $v valor esperado
- # @param string $opcmp operador de comparación por usar.
- # @param string $con con
+ # @param w [String] cadena con WHERE que se completa
+ # @param n [String] nombre de campo
+ # @param v [String] valor esperado
+ # @param opcmp [String] operador de comparación por usar.
+ # @param con [String] conector
#
- # @return string cadena w completada con nueva condición
- #/
- def ampliar_where_sinap(w, n, v, opcmp = '=', con = "AND")
- if (w != "")
+ # @return [String] cadena w completada con nueva condición
+ # /
+ def ampliar_where_sinap(w, n, v, opcmp = "=", con = "AND")
+ if w != ""
w += " " + con
end
w += " " + n + opcmp + v
end
module_function :ampliar_where_sinap
alias_method :consulta_and_sinap, :ampliar_where_sinap
module_function :consulta_and_sinap
-
# Escapa la cadena c para usarla en consulta SQL
def escapar(c)
Sivel2Gen::Caso.connection.quote_string(c)
end
module_function :escapar
alias_method :cadena_escapa, :escapar
module_function :cadena_escapa
# Escapa el parámetro p (supone que es usable la variable global params)
- def escapar_param(params, p, poromision = '')
- if (p.is_a? String) || (p.is_a? Symbol) then
- params[p] ? escapar(params[p]) : ''
- elsif (p.is_a? Array) && p.length == 1 then
- params[p[0]] ? espacar_cadena(params[p[0]]) : ''
- elsif (p.is_a? Array) && p.length > 1 && params[p[0]] then
+ def escapar_param(params, p, poromision = "")
+ if p.is_a?(String) || p.is_a?(Symbol)
+ params[p] ? escapar(params[p]) : ""
+ elsif p.is_a?(Array) && p.length == 1
+ params[p[0]] ? espacar_cadena(params[p[0]]) : ""
+ elsif p.is_a?(Array) && p.length > 1 && params[p[0]]
n = params[p[0]]
i = 1
- while i < (p.length - 2) do
- if n[p[i]] then
+ while i < (p.length - 2)
+ if n[p[i]]
n = n[p[i]]
else
- return ''
+ return ""
end
i += 1
end
- if n[p[i]] then
- return escapar(n[p[i]])
+ if n[p[i]]
+ escapar(n[p[i]])
else
- return poromision
+ poromision
end
else
- return poromision
+ poromision
end
end
module_function :escapar_param
alias_method :param_escapa, :escapar_param
@@ -179,92 +199,213 @@
# Vuelve a habilitar un centro poblado
# e.g MORALES desapareció de DIVIPOLA 2018 y volvió a aprecer en
# DIVIPOLA 2020
def rehabilita_centropoblado(
- id, municipio_id, id_clalocal, nombre, observacion, fechacreacion)
+ id, municipio_id, id_clalocal, nombre, observacion, fechacreacion
+ )
- #byebug
+ # byebug
if Msip::Clase.where(id: id).count > 0
c = Msip::Clase.find(id)
- if c.id_municipio != municipio_id || c.id_clalocal != id_clalocal ||
+ if c.id_municipio != municipio_id || c.id_clalocal != id_clalocal ||
c.nombre != nombre
- puts "Se espera que centro poblado #{id} fuera #{nombre} "\
- " en municipio #{municipio_id} con id_clalocal #{id_clalocal}"
- exit 1
+ Rails.logger.debug do
+ "Se espera que centro poblado #{id} fuera #{nombre} "\
+ " en municipio #{municipio_id} con id_clalocal #{id_clalocal}"
+ end
+ exit(1)
end
c.fechadeshabilitacion = nil
- c.observaciones << ((c.observaciones.to_s == '' ? '' : '. ') + observacion)
+ c.observaciones << ((c.observaciones.to_s == "" ? "" : ". ") + observacion)
c.save!
else
c = Msip::Clase.new(
- id: id,
+ id: id,
id_municipio: municipio_id,
id_clalocal: id_clalocal,
nombre: nombre,
observaciones: observacion,
fechacreacion: fechacreacion,
created_at: fechacreacion,
- updated_at: fechacreacion
+ updated_at: fechacreacion,
)
end
end
module_function :rehabilita_centropoblado
- # Decide si existe una funcón f en base PostgreSQL
+ # Decide si existe una función f en base PostgreSQL
def existe_función_pg?(f)
c = "SELECT EXISTS("\
- "SELECT * FROM pg_proc WHERE proname = '#{f}'"\
+ "SELECT * FROM pg_proc "\
+ "WHERE proname = #{ActiveRecord::Base.connection.quote(f)}"\
");"
- r=execute(c)
- return r[0]['exists']
+ r = ActiveRecord::Base.connection.execute(c)
+ r[0]["exists"]
end
module_function :existe_función_pg?
- # Renombra una función en base PostgreSQL
- # @param nomini Nombre inicial
- # @param nomfin Nombre final
- def renombrar_función_pg(nomini, nomfin)
- execute("ALTER FUNCTION #{nomini} RENAME TO #{nomfin};")
+ # Decide si existe un índice i en base PostgreSQL
+ # https://stackoverflow.com/questions/45983169/checking-for-existence-of-index-in-postgresql
+ def existe_índice_pg?(f)
+ r = ActiveRecord::Base.connection.execute(<<~SQL.squish)
+ SELECT EXISTS (SELECT i.relname AS index_name
+ FROM pg_class i, pg_index ix
+ WHERE i.oid = ix.indexrelid
+ AND i.relname = #{ActiveRecord::Base.connection.quote(f)}
+ );
+ SQL
+ r[0]["exists"]
end
- module_function :renombrar_función_pg
+ module_function :existe_índice_pg?
-
# Decide si existe una restricción r en base PostgreSQL
def existe_restricción_pg?(r)
c = "SELECT EXISTS("\
- "SELECT * FROM pg_constraint WHERE conname = '#{r}'"\
+ "SELECT * FROM pg_constraint "\
+ "WHERE conname = #{ActiveRecord::Base.connection.quote(r)}"\
");"
- r=execute(c)
- return r[0]['exists']
+ r = ActiveRecord::Base.connection.execute(c)
+ r[0]["exists"]
end
module_function :existe_restricción_pg?
+ # Decide si existe una restricción r en una tabla t en una base PostgreSQL
+ def existe_restricción_en_tabla_pg?(r, t)
+ c = "SELECT EXISTS("\
+ "SELECT * FROM pg_constraint "\
+ "WHERE conname = #{ActiveRecord::Base.connection.quote(r)}"\
+ " AND conrelid=(SELECT oid FROM pg_class "\
+ " WHERE relname = #{ActiveRecord::Base.connection.quote(t)})"\
+ ");"
+ r = ActiveRecord::Base.connection.execute(c)
+ r[0]["exists"]
+ end
+ module_function :existe_restricción_en_tabla_pg?
+
+ # Decide si existe una secuencia s en base PostgreSQL
+ def existe_secuencia_pg?(s)
+ reversible do |_dir|
+ c = "SELECT EXISTS("\
+ "SELECT * FROM pg_class c WHERE c.relkind = 'S' "\
+ "AND c.relname = #{ActiveRecord::Base.connection.quote(s)}"\
+ ");"
+ r = ActiveRecord::Base.connection.execute(c)
+ r[0]["exists"]
+ end
+ end
+ module_function :existe_secuencia_pg?
+
+ # Renombra una función en base PostgreSQL
+ # @param nomini Nombre inicial
+ # @param nomfin Nombre final
+ def renombrar_función_pg(nomini, nomfin)
+ reversible do |dir|
+ dir.up do
+ ActiveRecord::Base.connection.execute(
+ "ALTER FUNCTION #{nomini} RENAME TO #{nomfin};",
+ )
+ end
+ dir.down do
+ ActiveRecord::Base.connection.execute(
+ "ALTER FUNCTION #{nomfin} RENAME TO #{nomini};",
+ )
+ end
+ end
+ end
+ module_function :renombrar_función_pg
+
+ # Renombra un índice en base PostgreSQL
+ # @param nomini Nombre inicial
+ # @param nomfin Nombre final
+ def renombrar_índice_pg(nomini, nomfin)
+ reversible do |dir|
+ dir.up do
+ ActiveRecord::Base.connection.execute(
+ "ALTER INDEX #{nomini} RENAME TO #{nomfin};",
+ )
+ end
+ dir.down do
+ ActiveRecord::Base.connection.execute(
+ "ALTER INDEX #{nomfin} RENAME TO #{nomini};",
+ )
+ end
+ end
+ end
+ module_function :renombrar_índice_pg
+
# Renombra una restricción en base PostgreSQL
# @param tabla Tabla con la restricción
# @param nomini Nombre inicial de restricción
# @param nomfin Nombre final
def renombrar_restricción_pg(tabla, nomini, nomfin)
- execute("ALTER TABLE #{tabla} "\
- "RENAME CONSTRAINT #{nomini} TO #{nomfin};")
+ reversible do |dir|
+ dir.up do
+ ActiveRecord::Base.connection.execute("ALTER TABLE #{tabla} "\
+ "RENAME CONSTRAINT #{nomini} TO #{nomfin};")
+ end
+ dir.down do
+ ActiveRecord::Base.connection.execute("ALTER TABLE #{tabla} "\
+ "RENAME CONSTRAINT #{nomfin} TO #{nomini};")
+ end
+ end
end
module_function :renombrar_restricción_pg
+ # Renombra una secuencia en base PostgreSQL
+ # @param nomini Nombre inicial
+ # @param nomfin Nombre final
+ def renombrar_secuencia_pg(nomini, nomfin)
+ reversible do |dir|
+ dir.up do
+ ActiveRecord::Base.connection.execute(
+ "ALTER SEQUENCE #{nomini} RENAME TO #{nomfin};",
+ )
+ end
+ dir.down do
+ ActiveRecord::Base.connection.execute(
+ "ALTER SEQUENCE #{nomfin} RENAME TO #{nomini};",
+ )
+ end
+ end
+ end
+ module_function :renombrar_secuencia_pg
+
# Renombra una vista en base PostgreSQL
# @param nomini Nombre inicial
# @param nomfin Nombre final
def renombrar_vista_pg(nomini, nomfin)
- execute("ALTER VIEW #{nomini} RENAME TO #{nomfin};")
+ reversible do |dir|
+ dir.up do
+ ActiveRecord::Base.connection.execute(
+ "ALTER VIEW #{nomini} RENAME TO #{nomfin};",
+ )
+ end
+ dir.down do
+ ActiveRecord::Base.connection.execute(
+ "ALTER VIEW #{nomfin} RENAME TO #{nomini};",
+ )
+ end
+ end
end
module_function :renombrar_vista_pg
# Renombra una vista materializada en base PostgreSQL
# @param nomini Nombre inicial
# @param nomfin Nombre final
def renombrar_vistamat_pg(nomini, nomfin)
- execute("ALTER MATERIALIZED VIEW #{nomini} RENAME TO #{nomfin};")
+ reversible do |dir|
+ dir.up do
+ ActiveRecord::Base.connection.execute(
+ "ALTER MATERIALIZED VIEW #{nomini} RENAME TO #{nomfin};",
+ )
+ end
+ dir.down do
+ ActiveRecord::Base.connection.execute(
+ "ALTER MATERIALIZED VIEW #{nomfin} RENAME TO #{nomini};",
+ )
+ end
+ end
end
module_function :renombrar_vistamat_pg
-
-
end
end