Пример #1
0
    def fetchLargeValue(self, refKey):
        """
        Obtiene el valor de gran tamaño segun su clave de referencia.

        @param refKey Clave de referencia. Esta clave se suele obtener mediante FLManager::storeLargeValue
        @return Valor de gran tamaño almacenado
        """
        if refKey is None:
            return None
        if not refKey[0:3] == "RK@":
            return None
        q = FLSqlQuery()
        q.setSelect("contenido")
        q.setFrom("fllarge")
        q.setWhere(" refkey = '%s'" % refKey)
        if q.exec_() and q.first():
            v = q.value(0)
            del q
            # print(v)
            if v.find("{"):
                v = v[v.find("{") + 3:]
                v = v[:v.find("};") + 1]
                # v = v.replace("\t", "")
                v = v.replace("\n", "")
                # v = v.replace("\",", ",")
                # v = v.replace(",\"", ",")
                v = v.replace("\t", "    ")
                # v = v.replace("\n\"", "")
                # v = v.split(",")
            v = v.split('","')
            # print(v)
            return v
Пример #2
0
    def fetchLargeValue(self, refKey):
        """
        Obtiene el valor de gran tamaño segun su clave de referencia.

        @param refKey Clave de referencia. Esta clave se suele obtener mediante FLManager::storeLargeValue
        @return Valor de gran tamaño almacenado
        """
        if refKey is None:
            return None
        if not refKey[0:3] == "RK@":
            return None

        if self._prj.singleFLLarge():
            tableName = "fllarge"
        else:
            tableName = "fllarge_" + refKey.split("@")[1]

        if not self.existsTable(tableName):
            return None

        q = FLSqlQuery()
        q.setSelect("contenido")
        q.setFrom(tableName)
        q.setWhere(" refkey = '%s'" % refKey)
        if q.exec_() and q.first():
            v = q.value(0)
            del q
            # print(v)
            v = clearXPM(v)
            # print(v)
            return v
Пример #3
0
 def fetchLargeValue(self, refKey):
     if refKey == None:
         return None
     if not refKey[0:3] == "RK@":
         return None
     q = FLSqlQuery()
     q.setSelect("contenido")
     q.setFrom("fllarge")
     q.setWhere(" refkey = '%s'" % refKey)
     if q.exec_() and q.first():
         v = q.value(0)
         del q
         #print(v)
         if v.find("{"):
             v = v[v.find("{") + 3:]
             v = v[:v.find("};") + 1]
             #v = v.replace("\t", "")
             v = v.replace("\n", "")
             #v = v.replace("\",", ",")
             #v = v.replace(",\"", ",")
             v = v.replace("\t", "    ")
             #v = v.replace("\n\"", "")
             #v = v.split(",")
         v = v.split('","')
         #print(v)
         return v
Пример #4
0
    def readDBSettingEntry(self, key):
        q = FLSqlQuery()
        q.setSelect("valor")
        q.setFrom("flsettings")
        q.setWhere("flkey = '%s'" % key)
        q.setTablesList("flsettings")
        if q.exec() and q.first():
            return q.value(0)

        return None
Пример #5
0
    def storeLargeValue(self, mtd, largeValue):

        if largeValue[0:3] == "RK@" or not mtd:
            return None

        tableName = mtd.name()
        if self.isSystemTable(tableName):
            return None

        tableLarge = None

        if self._prj.singleFLLarge():
            tableLarge = "fllarge"
        else:
            tableLarge = "fllarge_%s" % tableName
            if not self.existsTable(tableLarge):
                mtdLarge = FLTableMetaData(tableLarge, tableLarge)
                fieldLarge = FLFieldMetaData("refkey", "refkey", False, True,
                                             "string", 100)
                mtdLarge.addFieldMD(fieldLarge)
                fieldLarge2 = FLFieldMetaData("sha", "sha", True, False,
                                              "string", 50)
                mtdLarge.addFieldMD(fieldLarge2)
                fieldLarge3 = FLFieldMetaData("contenido", "contenido", True,
                                              False, "stringlist")
                mtdLarge.addFieldMD(fieldLarge3)
                mtdAux = self.createTable(mtdLarge)
                mtd.insertChild(mtdLarge)
                if not mtdAux:
                    return None

        util = FLUtil()
        sha = str(util.sha1(largeValue))
        refKey = "RK@%s@%s" % (tableName, sha)
        q = FLSqlQuery()
        q.setSelect("refkey")
        q.setFrom("fllarge")
        q.setWhere(" refkey = '%s'" % refKey)
        if q.exec_() and q.first():
            if not q.value(0) == sha:
                sql = "UPDATE %s SET contenido = '%s' WHERE refkey ='%s'" % (
                    tableLarge, largeValue, refKey)
                if not util.execSql(sql, "Aux"):
                    print("FLManager::ERROR:StoreLargeValue.Update %s.%s" %
                          (tableLarge, refKey))
                    return None
        else:
            sql = "INSERT INTO %s (contenido,refkey) VALUES ('%s','%s')" % (
                tableLarge, largeValue, refKey)
            if not util.execSql(sql, "Aux"):
                print("FLManager::ERROR:StoreLargeValue.Insert %s.%s" %
                      (tableLarge, refKey))
                return None

        return refKey
Пример #6
0
 def nextSerialVal(self, table, field):
     q = FLSqlQuery()
     q.setSelect(u"nextval('" + table + "_" + field + "_seq')")
     q.setFrom("")
     q.setWhere("")
     if not q.exec():
         print("not exec sequence")
         return None
     if q.first():
         return q.value(0)
     else:
         return None
Пример #7
0
 def nextSerialVal(self, table, field):
     q = FLSqlQuery()
     q.setSelect("max(%s)" % field)
     q.setFrom(table)
     q.setWhere("1 = 1")
     if not q.exec_():  # FIXME: exec es palabra reservada
         print("not exec sequence")
         return None
     if q.first():
         return int(q.value(0)) + 1
     else:
         return None
Пример #8
0
 def nextSerialVal(self, table, field):
     q = FLSqlQuery()
     q.setSelect(u"nextval('" + table + "_" + field + "_seq')")
     q.setFrom("")
     q.setWhere("")
     if not q.exec():
         print("not exec sequence")
         return None
     if q.first():
         return q.value(0)
     else:
         return None
Пример #9
0
 def nextSerialVal(self, table, field):
     q = FLSqlQuery()
     q.setSelect("max(%s)" % field)
     q.setFrom(table)
     q.setWhere("1 = 1")
     if not q.exec_():  # FIXME: exec es palabra reservada
         self.logger.warn("not exec sequence")
         return None
     if q.first() and q.value(0) is not None:
         return int(q.value(0)) + 1
     else:
         return None
Пример #10
0
    def fetchLargeValue(self, refKey):
        if not refKey[0:3] == "RK@":
            return None
        q = FLSqlQuery()
        q.setSelect("contenido")
        q.setFrom("fllarge")
        q.setWhere(" refkey = '%s'" % refKey)
        if q.exec_() and q.first():
            v = q.value(0)
            del q
            return v

        return None
Пример #11
0
 def fetchLargeValue(self, refKey):
     if not refKey[0:3] == "RK@":
         return None
     q = FLSqlQuery()
     q.setSelect("contenido")
     q.setFrom("fllarge")
     q.setWhere(" refkey = '%s'" % refKey)
     if q.exec_() and q.first():
         v = q.value(0)
         del q
         return v
     
     return None
Пример #12
0
    def quickSqlSelect(self, f, s, w, connName="default"):
        """
        Versión rápida de sqlSelect. Ejecuta directamente la consulta sin realizar comprobaciones.
        Usar con precaución.
        """
        if not w:
            sql = "select " + s + " from " + f
        else:
            sql = "select " + s + " from " + f + " where " + w

        q = FLSqlQuery(None, connName)
        if not q.exec_(sql):
            return False

        return q.value(0) if q.first() else False
Пример #13
0
    def quickSqlSelect(self, f, s, w, connName="default"):
        """
        Versión rápida de sqlSelect. Ejecuta directamente la consulta sin realizar comprobaciones.
        Usar con precaución.
        """
        if not w:
            sql = "select " + s + " from " + f
        else:
            sql = "select " + s + " from " + f + " where " + w

        q = FLSqlQuery(None, connName)
        if not q.exec_(sql):
            return False

        return q.value(0) if q.first() else False
Пример #14
0
    def readDBSettingEntry(self, key):
        """
        Lee el valor de un setting en la tabla flsettings

        @param key. Clave identificadora del setting

        @return Valor del setting
        """
        q = FLSqlQuery()
        q.setSelect("valor")
        q.setFrom("flsettings")
        q.setWhere("flkey = '%s'" % key)
        q.setTablesList("flsettings")
        if q.exec_() and q.first():
            return q.value(0)

        return None
Пример #15
0
    def readDBSettingEntry(self, key):
        """
        Lee el valor de un setting en la tabla flsettings

        @param key. Clave identificadora del setting

        @return Valor del setting
        """
        q = FLSqlQuery()
        q.setSelect("valor")
        q.setFrom("flsettings")
        q.setWhere("flkey = '%s'" % key)
        q.setTablesList("flsettings")
        if q.exec_() and q.first():
            return q.value(0)

        return None
Пример #16
0
    def storeLargeValue(self, mtd, largeValue):
        """
        Utilizado para almacenar valores grandes de campos en tablas separadas indexadas
        por claves SHA del contenido del valor.

        Se utiliza para optimizar consultas que incluyen campos con valores grandes,
        como por ejemplo imágenes, para manejar en las consulta SQL la referencia al valor
        que es de tamaño constante en vez del valor en sí. Esto disminuye el tráfico al
        reducir considerablemente el tamaño de los registros obtenidos.

        Las consultas pueden utilizar una referencia y obtener su valor sólo cuando se
        necesita mediante FLManager::fetchLargeValue().


        @param mtd Metadatos de la tabla que contiene el campo
        @param largeValue Valor de gran tamaño del campo
        @return Clave de referencia al valor
        """

        if largeValue[0:3] == "RK@" or not mtd:
            return None

        tableName = mtd.name()
        if self.isSystemTable(tableName):
            return None

        tableLarge = None

        if self._prj.singleFLLarge():
            tableLarge = "fllarge"
        else:
            tableLarge = "fllarge_%s" % tableName
            if not self.existsTable(tableLarge):
                mtdLarge = FLTableMetaData(tableLarge, tableLarge)
                fieldLarge = FLFieldMetaData("refkey", "refkey", False, True,
                                             "string", 100)
                mtdLarge.addFieldMD(fieldLarge)
                fieldLarge2 = FLFieldMetaData("sha", "sha", True, False,
                                              "string", 50)
                mtdLarge.addFieldMD(fieldLarge2)
                fieldLarge3 = FLFieldMetaData("contenido", "contenido", True,
                                              False, "stringlist")
                mtdLarge.addFieldMD(fieldLarge3)
                mtdAux = self.createTable(mtdLarge)
                mtd.insertChild(mtdLarge)
                if not mtdAux:
                    return None

        util = FLUtil()
        sha = str(util.sha1(largeValue))
        refKey = "RK@%s@%s" % (tableName, sha)
        q = FLSqlQuery()
        q.setSelect("refkey")
        q.setFrom("fllarge")
        q.setWhere(" refkey = '%s'" % refKey)
        if q.exec_() and q.first():
            if not q.value(0) == sha:
                sql = "UPDATE %s SET contenido = '%s' WHERE refkey ='%s'" % (
                    tableLarge, largeValue, refKey)
                if not util.execSql(sql, "Aux"):
                    logger.warn(
                        "FLManager::ERROR:StoreLargeValue.Update %s.%s",
                        tableLarge, refKey)
                    return None
        else:
            sql = "INSERT INTO %s (contenido,refkey) VALUES ('%s','%s')" % (
                tableLarge, largeValue, refKey)
            if not util.execSql(sql, "Aux"):
                logger.warn("FLManager::ERROR:StoreLargeValue.Insert %s.%s",
                            tableLarge, refKey)
                return None

        return refKey