Exemplo n.º 1
0
    def __init__(self, bot: TTSBot, broadcast: bool, select: str, delete: str,
                 table_name: str, pkey_columns: tuple[str, ...]):
        self.bot = bot
        self.pool = bot.pool

        self.broadcast = broadcast
        self.select_query = select
        self.delete_query = delete
        self.pkey_columns = tuple(sql(pkey) for pkey in pkey_columns)
        self.default_id = 0 if len(
            pkey_columns) == 1 else (0, ) * len(pkey_columns)

        generic_insert_query = """
            INSERT INTO {}({{}})
            VALUES({{}})

            ON CONFLICT ({})
            {}
        """

        args = table_name, ", ".join(pkey_columns)
        self.multi_insert_query = generic_insert_query.format(
            *args, "DO UPDATE SET ({}) = ({})")
        self.single_insert_query = generic_insert_query.format(
            *args, "DO UPDATE SET {} = {}")
        self.ensure_row_query = generic_insert_query.format(
            *args, "DO NOTHING{}{}")

        self._not_fully_fetched: list[_DK] = []
        self._cache: dict[_DK, _CACHE_ITEM] = {}
        self.defaults: Optional[_CACHE_ITEM] = None
        self._write_tasks: defaultdict[_DK, WriteTask] = defaultdict(WriteTask)

        bot.add_listener(self.on_invalidate_cache)
    def __init__(self, bot: TTSBot):
        self.bot = bot
        self.pool = bot.pool
        bot.add_listener(self.on_invalidate_cache)

        self._do_not_cache: List[_DK] = []
        self._cache: Dict[_DK, Optional[asyncpg.Record]] = {}