def Mr_Proper(self): util = FLUtil() self.db_.dbAux().transaction() rx = QRegExp("^.*[\\d][\\d][\\d][\\d].[\\d][\\d].*[\\d][\\d]$") rx2 = QRegExp("^.*alteredtable[\\d][\\d][\\d][\\d].*$") qry = FLSqlQuery(None, self.db_.dbAux()) qry2 = FLSqlQuery(None, self.db_.dbAux()) steps = 0 item = "" rx3 = QRegExp("^.*\\d{6,9}$") listOldBks = rx3 in self.tables("") qry.exec_("select nombre from flfiles") util.createProgressDialog( util.tr("Borrando backups"), len(listOldBks) + qry.size() + 5) while qry.next(): item = qry.value(0) if item.find(rx) > -1 or item.find(rx2) > -1: util.setLabelText(util.tr("Borrando regisro %1").arg(item)) qry2.exec_("delete from flfiles where nombre = '%s'" % item) if item.find("alteredtable") > -1: if item.replace(".mtd", "") in self.tables(""): util.setLabelText( util.tr("Borrando tabla %1").arg(item)) qry2.exec_("drop table %s" % (item.replace(".mtd", ""))) steps = steps + 1 util.setProgress(steps) for item in listOldBks: if item in self.tables(""): util.setLabelText(util.tr("Borrando tabla %1").arg(item)) qry2.exec_("drop table %s" % item) steps = steps + 1 util.setProgress(steps) util.setLabelText(util.tr("Inicializando cachés")) steps = steps + 1 util.setProgress(steps) qry.exec_("delete from flmetadata") qry.exec_("delete from flvar") self.db_.manager().cleanupMetaData() self.db_.dbAux().commit() util.setLabelText(util.tr("Vacunando base de datos")) steps = steps + 1 util.setProgress(steps) qry2.exec_("vacuum") steps = steps + 1 util.setProgress(steps) util.destryProgressDialog()
def Mr_Proper(self): util = FLUtil() self.db_.dbAux().transaction() rx = QRegExp("^.*[\\d][\\d][\\d][\\d].[\\d][\\d].*[\\d][\\d]$") rx2 = QRegExp("^.*alteredtable[\\d][\\d][\\d][\\d].*$") qry = FLSqlQuery(None, self.db_.dbAux()) qry2 = FLSqlQuery(None, self.db_.dbAux()) steps = 0 item = "" rx3 = QRegExp("^.*\\d{6,9}$") listOldBks = rx3 in self.tables("") qry.exec_("select nombre from flfiles") util.createProgressDialog(util.tr("Borrando backups"), len(listOldBks) + qry.size() + 5) while qry.next(): item = qry.value(0) if item.find(rx) > -1 or item.find(rx2) > -1: util.setLabelText(util.tr("Borrando regisro %1").arg(item)) qry2.exec_("delete from flfiles where nombre = '%s'" % item) if item.find("alteredtable") > -1: if item.replace(".mtd", "") in self.tables(""): util.setLabelText( util.tr("Borrando tabla %1").arg(item)) qry2.exec_("drop table %s" % (item.replace(".mtd", ""))) steps = steps + 1 util.setProgress(steps) for item in listOldBks: if item in self.tables(""): util.setLabelText(util.tr("Borrando tabla %1").arg(item)) qry2.exec_("drop table %s" % item) steps = steps + 1 util.setProgress(steps) util.setLabelText(util.tr("Inicializando cachés")) steps = steps + 1 util.setProgress(steps) qry.exec_("delete from flmetadata") qry.exec_("delete from flvar") self.db_.manager().cleanupMetaData() self.db_.dbAux().commit() util.setLabelText(util.tr("Vacunando base de datos")) steps = steps + 1 util.setProgress(steps) qry2.exec_("vacuum") steps = steps + 1 util.setProgress(steps) util.destryProgressDialog()
def installACL(self, idacl): """ Crea un nuevo fichero "acl.xml" y lo almacena sustituyendo el anterior, en el caso de que exista. @param idacl Identificador del registro de la tabla "flacls" a utilizar para crear "acl.xml". """ util = FLUtil() doc = QDomDocument("ACL") root = doc.createElement("ACL") doc.appendChild(root) name = doc.createElement("name") root.appendChild(name) n = doc.createTextNode(idacl) name.appendChild(n) q = FLSqlQuery() q.setTablesList("flacs") q.setSelect("idac,tipo,nombre,iduser,idgroup,degroup,permiso") q.setFrom("flacs") q.setWhere("idacl='%s'" % idacl) q.setOrderBy("prioridad DESC, tipo") q.setForwarOnly(True) if q.exec_(): step = 0 progress = util.ProgressDialog( util.tr("Instalando control de acceso..."), None, q.size(), None, None, True) progress.setCaption(util.tr("Instalando ACL")) progress.setMinimumDuration(0) progress.setProgress(++step) while q.next(): self.makeRule(q, doc) progress.setProgress(++step) self.database().managerModules().setContent( "acl.xml", "sys", doc.toString())
def installACL(self, idacl): """ Crea un nuevo fichero "acl.xml" y lo almacena sustituyendo el anterior, en el caso de que exista. @param idacl Identificador del registro de la tabla "flacls" a utilizar para crear "acl.xml". """ util = FLUtil() doc = QDomDocument("ACL") root = doc.createElement("ACL") doc.appendChild(root) name = doc.createElement("name") root.appendChild(name) n = doc.createTextNode(idacl) name.appendChild(n) q = FLSqlQuery() q.setTablesList("flacs") q.setSelect("idac,tipo,nombre,iduser,idgroup,degroup,permiso") q.setFrom("flacs") q.setWhere("idacl='%s'" % idacl) q.setOrderBy("prioridad DESC, tipo") q.setForwarOnly(True) if q.exec_(): step = 0 progress = util.ProgressDialog( util.tr("Instalando control de acceso..."), None, q.size(), None, None, True) progress.setCaption(util.tr("Instalando ACL")) progress.setMinimumDuration(0) progress.setProgress(++step) while q.next(): self.makeRule(q, doc) progress.setProgress(++step) self.database().managerModules().setContent("acl.xml", "sys", doc.toString())
def constraintExists(self, name): sql = "SELECT constraint_name FROM information_schema.table_constraints where constraint_name='%s'" % name q = FLSqlQuery(None, self.db_.dbAux()) return (q.exec_(sql) and q.size() > 0)
def Mr_Proper(self): util = FLUtil() self.db_.dbAux().transaction() qry = FLSqlQuery(None, self.db_.dbAux()) qry2 = FLSqlQuery(None, self.db_.dbAux()) steps = 0 rx = QRegExp("^.*\\d{6,9}$") if rx in self.tables() is not False: listOldBks = rx in self.tables() else: listOldBks = [] qry.exec_("select nombre from flfiles where nombre similar to" "'%[[:digit:]][[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]]%:[[:digit:]][[:digit:]]%' or nombre similar to" "'%alteredtable[[:digit:]][[:digit:]][[:digit:]][[:digit:]]%' or (bloqueo='f' and nombre like '%.mtd')") util.createProgressDialog( util.tr("Borrando backups"), len(listOldBks) + qry.size() + 2) while qry.next(): item = qry.value(0) util.setLabelText(util.tr("Borrando registro %1").arg(item)) qry2.exec_("DELETE FROM flfiles WERE nombre ='%s'" % item) if item.find("alteredtable") > -1: if self.existsTable(item.replace(".mtd", "")): util.setLabelText(util.tr("Borrando tabla %1").arg(item)) qry2.exec_("DROP TABLE %s CASCADE" % item.replace(".mtd", "")) steps = steps + 1 util.setProgress(steps) for item in listOldBks: if self.existsTable(item): util.setLabelText(util.tr("Borrando tabla %s" % item)) qry2.exec_("DROP TABLE %s CASCADE" % item) steps = steps + 1 util.setProgress(steps) util.setLabelText(util.tr("Inicializando cachés")) steps = steps + 1 util.setProgress(steps) qry.exec_("DELETE FROM flmetadata") qry.exec_("DELETE FROM flvar") self.db_.manager().cleanupMetaData() # self.db_.driver().commit() util.destroyProgressDialog() steps = 0 qry.exec_("select tablename from pg_tables where schemaname='public'") util.createProgressDialog( util.tr("Comprobando base de datos"), qry.size()) while qry.next(): item = qry.value(0) util.setLabelText(util.tr("Comprobando tabla %s" % item)) mustAlter = self.mismatchedTable(item, item) if mustAlter: conte = self.db_.managerModules().content("%s.mtd" % item) if conte: msg = util.tr("La estructura de los metadatos de la tabla '%s' y su " "estructura interna en la base de datos no coinciden. " "Intentando regenerarla." % item) print(msg) self.alterTable2(conte, conte, None, True) steps = steps + 1 util.setProgress(steps) self.db_.dbAux().driver().transaction() steps = 0 sqlCursor = FLSqlCursor(None, True, self.db_.dbAux()) sqlQuery = FLSqlQuery(None, self.db_.dbAux()) if sqlQuery.exec_("select relname from pg_class where ( relkind = 'r' ) " "and ( relname !~ '^Inv' ) " "and ( relname !~ '^pg_' ) and ( relname !~ '^sql_' )"): util.setTotalSteps(sqlQuery.size()) while sqlQuery.next(): item = sqlQuery.value(0) steps = steps + 1 util.setProgress(steps) util.setLabelText(util.tr("Creando índices para %s" % item)) mtd = self.db_.manager().metadata(item) fL = mtd.fieldList() if not mtd or not fL: continue for it in fL: if not it or not it.type() == "pixmap": continue cur = FLSqlCursor(item, True, self.db_.dbAux()) cur.select(it.name() + " not like 'RK@%'") while cur.next(): v = cur.value(it.name()) if v is None: continue v = self.db_.manager().storeLargeValue(mtd, v) if v: buf = cur.primeUpdate() buf.setValue(it.name(), v) cur.update(False) sqlCursor.setName(item, True) # self.db_.dbAux().driver().commit() steps = 0 qry.exec_("select tablename from pg_tables where schemaname='public'") util.createProgressDialog( util.tr("Analizando base de datos"), qry.size()) while qry.next(): item = qry.value(0) util.setLabelText(util.tr("Analizando tabla %s" % item)) qry2.exec_("vacuum analyze %s" % item) steps = steps + 1 util.setProgress(steps) util.destroyProgressDialog()
def Mr_Proper(self): util = FLUtil() self.db_.dbAux().transaction() qry = FLSqlQuery(None, self.db_.dbAux()) qry2 = FLSqlQuery(None, self.db_.dbAux()) steps = 0 rx = QRegExp("^.*\\d{6,9}$") listOldBks = rx in self.tables("") qry.exec_( "select nombre from flfiles where nombre similar to" "'%[[:digit:]][[:digit:]][[:digit:]][[:digit:]]-[[:digit:]][[:digit:]]%:[[:digit:]][[:digit:]]%' or nombre similar to" "'%alteredtable[[:digit:]][[:digit:]][[:digit:]][[:digit:]]%' or (bloqueo='f' and nombre like '%.mtd')" ) util.createProgressDialog(util.tr("Borrando backups"), len(listOldBks) + qry.size() + 2) while qry.next(): item = qry.value(0) util.setLabelText(util.tr("Borrando registro %1").arg(item)) qry2.exec_("DELETE FROM flfiles WERE nombre ='%s'" % item) if item.find("alteredtable") > -1: if self.existsTable(item.replace(".mtd", "")): util.setLabelText(util.tr("Borrando tabla %1").arg(item)) qry2.exec_("DROP TABLE %s CASCADE" % item.replace(".mtd", "")) steps = steps + 1 util.setProgress(steps) for item in listOldBks: if self.existsTable(item): util.setLabelText(util.tr("Borrando tabla %1").arg(item)) qry2.exec_("DROP TABLE %s CASCADE" % item) steps = steps + 1 util.setProgress(steps) util.setLabelText(util.tr("Inicializando cachés")) steps = steps + 1 util.setProgress(steps) qry.exec_("DELETE FROM flmetadata") qry.exec_("DELETE FROM flvar") self.db_.manager().cleanupMetaData() self.db_.commit() util.destroyProgressDialog() steps = 0 qry.exec_("select tablename from pg_tables where schemaname='public'") util.createProgressDialog(util.tr("Comprobando base de datos"), qry.size()) while qry.next(): item = qry.value(0) util.setLabelText(util.tr("Comprobando tabla %1").arg(item)) mustAlter = self.mismatchedTable(item, item) if mustAlter: conte = self.db_.managerModules().content("%s.mtd" % item) if conte: msg = util.tr( "La estructura de los metadatos de la tabla '%1' y su " "estructura interna en la base de datos no coinciden. " "Intentando regenerarla.").arg(item) print(msg) self.alterTable2(conte, conte, None, True) steps = steps + 1 util.setProgress(steps) self.db_.dbAux().transaction() steps = 0 sqlCursor = FLSqlCursor(None, True, self.db_.dbAux()) sqlQuery = FLSqlQuery(None, self.db_.dbAux()) if sqlQuery.exec_( "select relname from pg_class where ( relkind = 'r' ) " "and ( relname !~ '^Inv' ) " "and ( relname !~ '^pg_' ) and ( relname !~ '^sql_' )"): util.setTotalSteps(sqlQuery.size()) while sqlQuery.next(): item = sqlQuery.value(0) steps = steps + 1 util.setProgress(steps) util.setLabelText(util.tr("Creando índices para %1").arg(item)) mtd = self.db_.manager().metadata(item) fL = mtd.fieldList() if not mtd or not fL: continue for it in fL: if not it or not it.type() == "pixmap": continue cur = FLSqlCursor(item, True, self.db_.dbAux()) cur.select("%s not like 'RK@%'" % it.name()) while cur.next(): v = cur.value(it.name()) if v is None: continue v = self.db_.manager().storeLargeValue(mtd, v) if v: buf = cur.primeUpdate() buf.setValue(it.name(), v) cur.update(False) sqlCursor.setName(item, True) self.db_.dbAux().commit() steps = 0 qry.exec_("select tablename from pg_tables where schemaname='public'") util.createProgressDialog(util.tr("Analizando base de datos"), qry.size()) while qry.next(): item = qry.value(0) util.setLabelText(util.tr("Analizando tabla %1").arg(item)) qry2.exec_("vacuum analyze %s" % item) steps = steps + 1 util.setProgress(steps) util.destroyProgressDialog()