def raw_sql(ctx, sql): """Execute raw sql query""" engine = ctx.obj['engine'] database_url = ctx.obj['database_url'] metadata = ctx.obj['metadata'] from sqlalchemy.sql import text # init tables first init_tables(database_url, metadata) stmt = text(sql) with engine.connect() as conn: results = conn.execute(stmt).fetchall() click.echo(json.dumps(results))
def last_block(ctx): """Return the highest block stored in the database""" engine = ctx.obj['engine'] database_url = ctx.obj['database_url'] metadata = ctx.obj['metadata'] # init tables first init_tables(database_url, metadata) # configure session Session.configure(bind=engine) session = Session() click.echo(Block.highest_block(session))
def insert_blocks(ctx, blocks): """Insert blocks into the database""" engine = ctx.obj['engine'] database_url = ctx.obj['database_url'] metadata = ctx.obj['metadata'] # init tables first init_tables(database_url, metadata) # configure session Session.configure(bind=engine) session = Session() add_blocks(blocks, session, insert=True, merge_insert=False, insert_many=False)
def find_missing_blocks(ctx, url): """Return JSON array of block_nums from missing blocks""" engine = ctx.obj['engine'] database_url = ctx.obj['database_url'] metadata = ctx.obj['metadata'] rpc = SimpleDPayAPIClient(url) # init tables first init_tables(database_url, metadata) # configure session Session.configure(bind=engine) session = Session() last_chain_block = rpc.last_irreversible_block_num() click.echo( json.dumps( Block.find_missing(session, last_chain_block=last_chain_block)))
def bulk_add_blocks(ctx, blocks, chunksize): """Insert many blocks in the database""" engine = ctx.obj['engine'] database_url = ctx.obj['database_url'] metadata = ctx.obj['metadata'] # init tables first init_tables(database_url, metadata) # configure session Session.configure(bind=engine) session = Session() click.echo("SQL: 'SET SESSION innodb_lock_wait_timeout=150'", err=True) session.execute('SET SESSION innodb_lock_wait_timeout=150') try: for chunk in chunkify(blocks, chunksize): bulk_add(chunk, session) except Exception as e: raise e finally: session.close_all()
def task_init_db_if_required(database_url): init_tables(database_url, Base.metadata)
def init_db_tables(ctx): """Create any missing tables on the database""" database_url = ctx.obj['database_url'] metadata = ctx.obj['metadata'] init_tables(database_url, metadata)