Source code for etcdb.execute.dml.delete

"""
Implement DELETE query.
"""
from etcdb.eval_expr import eval_expr
from etcdb.execute.dml.insert import get_table_columns
from etcdb.execute.dml.select import list_table, get_row_by_primary_key
from etcdb.lock import WriteLock


def _delete_key(etcd_client, key):
    etcd_client.delete(key)


[docs]def execute_delete(etcd_client, tree, db): """Execute DELETE query""" lock = WriteLock(etcd_client, db, tree.table) lock.acquire() try: affected_rows = 0 table_columns = get_table_columns(etcd_client, db, tree.table) for primary_key in list_table(etcd_client, db, tree.table): table_row = get_row_by_primary_key(etcd_client, db, tree.table, primary_key) key = "/{db}/{tbl}/{pk}".format( db=db, tbl=tree.table, pk=primary_key ) if tree.where: expr = tree.where if eval_expr((table_columns, table_row), expr)[1]: _delete_key(etcd_client, key) affected_rows += 1 else: _delete_key(etcd_client, key) affected_rows += 1 return affected_rows finally: lock.release()