Esempio n. 1
0
    async def update(self, where, params, data):

        # Without INDEX we can do only INSERT
        # With INDEX we will do UPDATE
        if 'index' not in params.keys():
            return await self.insert(where, params, data)

        data = fixed_dump(data)

        # FIXME
        query = "update {table} set {key}=jsonb_set({key}, '{{{index}}}', '{data}'::jsonb) ".format(  # nosec
            table=self.table,
            key=self.__key_name__,
            data=data.replace("'", ""),
            index=params['index']
        )
        del params['index']

        query += ' where {where} RETURNING jsonb_array_length({key}) as r'.format(
            key=self.__key_name__,
            where=self.sql.prepare_where(where, params)
        )

        result = await self.sql.execute(query, params)
        result = int(result.replace('UPDATE ', ''))
        return result
Esempio n. 2
0
    async def insert(self, where, params, data):

        data = fixed_dump(data)
        query = "update {table} set {key}=jsonb_set({key}, concat('{{',"
        query += " jsonb_array_length({key}),'}}')::text[], '{data}'::jsonb) "
        query = query.format(
            table=self.table,
            key=self.__key_name__,
            data=data.replace("'", ""),
        )

        query += ' where {where} RETURNING jsonb_array_length({key}) as r'.format(
            key=self.__key_name__, where=self.sql.prepare_where(where, params))

        result = await self.sql.execute(query, params)
        result = int(result.replace('UPDATE ', ''))
        if result == 0:
            raise Exception('{"status": "No object updated"}')
        return result
Esempio n. 3
0
def _encoder(value):
    val = bytes(fixed_dump(value).encode('utf-8'))
    val = b'\x01' + val
    return val