/** * Este arquivo é parte do Biblivre3. * * Biblivre3 é um software livre; você pode redistribuí-lo e/ou * modificá-lo dentro dos termos da Licença Pública Geral GNU como * publicada pela Fundação do Software Livre (FSF); na versão 3 da * Licença, ou (caso queira) qualquer versão posterior. * * Este programa é distribuído na esperança de que possa ser útil, * mas SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de * MERCANTIBILIDADE OU ADEQUAÇÃO PARA UM FIM PARTICULAR. Veja a * Licença Pública Geral GNU para maiores detalhes. * * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto * com este programa, Se não, veja em <http://www.gnu.org/licenses/>. * * @author Alberto Wagner <alberto@biblivre.org.br> * @author Danniel Willian <danniel@biblivre.org.br> * */ package mercury; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.HashMap; public class UpgraderDAO extends DAO { public HashMap<String, Boolean> getInstalledVersions() { Connection con = null; HashMap<String, Boolean> versions = new HashMap<String, Boolean>(); try { con = getDataSource().getConnection(); String sql = "SELECT * FROM versions;"; PreparedStatement pst = con.prepareStatement(sql); ResultSet rs = pst.executeQuery(); while (rs.next()) { versions.put(rs.getString("installed_versions"), true); } } catch (Exception e) { log.error(e.getMessage(), e); } finally { closeConnection(con); } return versions; } public void insertVersion(String version) { Connection con = null; try { con = getDataSource().getConnection(); String sql = "INSERT INTO versions (installed_versions) VALUES (?);"; PreparedStatement pst = con.prepareStatement(sql); pst.setString(1, version); pst.executeUpdate(); } catch (Exception e) { log.error(e.getMessage(), e); } finally { closeConnection(con); } } public boolean v3_0_1_fixHoldingsDatabase() { Connection con = null; try { con = getDataSource().getConnection(); StringBuilder sqlHolding = new StringBuilder(); sqlHolding.append("UPDATE cataloging_holdings SET database = B.database "); sqlHolding.append("FROM cataloging_biblio B "); sqlHolding.append("WHERE cataloging_holdings.record_serial = B.record_serial "); sqlHolding.append("AND cataloging_holdings.database <> B.database "); final PreparedStatement pstHolding = con.prepareStatement(sqlHolding.toString()); pstHolding.executeUpdate(); return true; } catch (Exception e) { log.error(e.getMessage(), e); } finally { closeConnection(con); } return false; } public boolean v3_0_4_fixAuthoritiesSequence() { Connection con = null; try { con = getDataSource().getConnection(); final String sql = "SELECT coalesce(max(record_serial), 1) FROM cataloging_authorities;"; final PreparedStatement pst = con.prepareStatement(sql); final ResultSet rs = pst.executeQuery(); int lastSerial = 0; if (rs != null && rs.next()) { lastSerial = rs.getInt(1); } final String sql2 = "SELECT setval('authorities_record_serial_seq', ?, true);"; final PreparedStatement pst2 = con.prepareStatement(sql2); pst2.setInt(1, lastSerial + 1); pst2.executeQuery(); return true; } catch (Exception e) { log.error(e.getMessage(), e); } finally { closeConnection(con); } return false; } public boolean v3_0_9_removeInvalidLogins() { Connection con = null; try { con = getDataSource().getConnection(); final String sql = "DELETE FROM logins WHERE loginid not in (SELECT loginid FROM users WHERE loginid is not null) and lower(loginname) <> 'admin';"; final PreparedStatement pst = con.prepareStatement(sql); pst.executeUpdate(); return true; } catch (Exception e) { log.error(e.getMessage(), e); } finally { closeConnection(con); } return false; } }