forked from LBRYCommunity/lbry-sdk
49 lines
1.3 KiB
Python
49 lines
1.3 KiB
Python
|
# pylint: disable=singleton-comparison
|
||
|
from sqlalchemy.future import select
|
||
|
|
||
|
from .constants import CLAIM_TYPE_CODES
|
||
|
from .queries import get_txos
|
||
|
from .query_context import progress, Event
|
||
|
from .tables import (
|
||
|
TXO, TXI,
|
||
|
Claim
|
||
|
)
|
||
|
|
||
|
|
||
|
def process_inputs(heights):
|
||
|
with progress(Event.INPUT_UPDATE) as p:
|
||
|
if p.ctx.is_sqlite:
|
||
|
address_query = select(TXO.c.address).where(TXI.c.txo_hash == TXO.c.txo_hash)
|
||
|
sql = (
|
||
|
TXI.update()
|
||
|
.values(address=address_query.scalar_subquery())
|
||
|
.where(TXI.c.address == None)
|
||
|
)
|
||
|
else:
|
||
|
sql = (
|
||
|
TXI.update()
|
||
|
.values({TXI.c.address: TXO.c.address})
|
||
|
.where((TXI.c.address == None) & (TXI.c.txo_hash == TXO.c.txo_hash))
|
||
|
)
|
||
|
p.start(1)
|
||
|
p.ctx.execute(sql)
|
||
|
|
||
|
|
||
|
def process_claims(heights):
|
||
|
|
||
|
with progress(Event.CLAIM_DELETE) as p:
|
||
|
p.start(1)
|
||
|
p.ctx.execute(Claim.delete())
|
||
|
|
||
|
with progress(Event.CLAIM_UPDATE) as p:
|
||
|
loader = p.ctx.get_bulk_loader()
|
||
|
for claim in get_txos(
|
||
|
txo_type__in=CLAIM_TYPE_CODES, is_spent=False,
|
||
|
height__gte=heights[0], height__lte=heights[1])[0]:
|
||
|
loader.add_claim(claim)
|
||
|
loader.save()
|
||
|
|
||
|
|
||
|
def process_supports(heights):
|
||
|
pass
|