view libervia/backend/memory/migration/versions/129ac51807e4_create_virtual_table_for_full_text_.py @ 4242:8acf46ed7f36

frontends: remote control implementation: This is the frontends common part of remote control implementation. It handle the creation of WebRTC session, and management of inputs. For now the reception use freedesktop.org Desktop portal, and works mostly with Wayland based Desktop Environments. rel 436
author Goffi <goffi@goffi.org>
date Sat, 11 May 2024 13:52:43 +0200
parents 4b842c1fb686
children 0d7bb4df2343
line wrap: on
line source

"""create virtual table for Full-Text Search

Revision ID: 129ac51807e4
Revises: 8974efc51d22
Create Date: 2021-08-13 19:13:54.112538

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '129ac51807e4'
down_revision = '8974efc51d22'
branch_labels = None
depends_on = None


def upgrade():
    queries = [
        "CREATE VIRTUAL TABLE pubsub_items_fts "
        "USING fts5(data, content=pubsub_items, content_rowid=id)",
        "CREATE TRIGGER pubsub_items_fts_sync_ins AFTER INSERT ON pubsub_items BEGIN"
        "  INSERT INTO pubsub_items_fts(rowid, data) VALUES (new.id, new.data);"
        "END",
        "CREATE TRIGGER pubsub_items_fts_sync_del AFTER DELETE ON pubsub_items BEGIN"
        "  INSERT INTO pubsub_items_fts(pubsub_items_fts, rowid, data) "
        "VALUES('delete', old.id, old.data);"
        "END",
        "CREATE TRIGGER pubsub_items_fts_sync_upd AFTER UPDATE ON pubsub_items BEGIN"
        "  INSERT INTO pubsub_items_fts(pubsub_items_fts, rowid, data) VALUES"
        "('delete', old.id, old.data);"
        "  INSERT INTO pubsub_items_fts(rowid, data) VALUES(new.id, new.data);"
        "END",
        "INSERT INTO pubsub_items_fts(rowid, data) SELECT id, data from pubsub_items"
    ]
    for q in queries:
        op.execute(sa.DDL(q))


def downgrade():
    queries = [
        "DROP TRIGGER IF EXISTS pubsub_items_fts_sync_ins",
        "DROP TRIGGER IF EXISTS pubsub_items_fts_sync_del",
        "DROP TRIGGER IF EXISTS pubsub_items_fts_sync_upd",
        "DROP TABLE IF EXISTS pubsub_items_fts",
    ]
    for q in queries:
        op.execute(sa.DDL(q))