kopia lustrzana https://github.com/simonw/datasette
Take advantage of execute_write_fn(transaction=True)
A bunch of places no longer need to do manual transaction handling thanks to this change. Refs #2277pull/2096/merge
rodzic
5e0e440f2c
commit
10f9ba1a00
|
@ -123,8 +123,7 @@ class Database:
|
||||||
|
|
||||||
async def execute_write(self, sql, params=None, block=True):
|
async def execute_write(self, sql, params=None, block=True):
|
||||||
def _inner(conn):
|
def _inner(conn):
|
||||||
with conn:
|
return conn.execute(sql, params or [])
|
||||||
return conn.execute(sql, params or [])
|
|
||||||
|
|
||||||
with trace("sql", database=self.name, sql=sql.strip(), params=params):
|
with trace("sql", database=self.name, sql=sql.strip(), params=params):
|
||||||
results = await self.execute_write_fn(_inner, block=block)
|
results = await self.execute_write_fn(_inner, block=block)
|
||||||
|
@ -132,8 +131,7 @@ class Database:
|
||||||
|
|
||||||
async def execute_write_script(self, sql, block=True):
|
async def execute_write_script(self, sql, block=True):
|
||||||
def _inner(conn):
|
def _inner(conn):
|
||||||
with conn:
|
return conn.executescript(sql)
|
||||||
return conn.executescript(sql)
|
|
||||||
|
|
||||||
with trace("sql", database=self.name, sql=sql.strip(), executescript=True):
|
with trace("sql", database=self.name, sql=sql.strip(), executescript=True):
|
||||||
results = await self.execute_write_fn(_inner, block=block)
|
results = await self.execute_write_fn(_inner, block=block)
|
||||||
|
@ -149,8 +147,7 @@ class Database:
|
||||||
count += 1
|
count += 1
|
||||||
yield param
|
yield param
|
||||||
|
|
||||||
with conn:
|
return conn.executemany(sql, count_params(params_seq)), count
|
||||||
return conn.executemany(sql, count_params(params_seq)), count
|
|
||||||
|
|
||||||
with trace(
|
with trace(
|
||||||
"sql", database=self.name, sql=sql.strip(), executemany=True
|
"sql", database=self.name, sql=sql.strip(), executemany=True
|
||||||
|
|
|
@ -69,20 +69,19 @@ async def populate_schema_tables(internal_db, db):
|
||||||
database_name = db.name
|
database_name = db.name
|
||||||
|
|
||||||
def delete_everything(conn):
|
def delete_everything(conn):
|
||||||
with conn:
|
conn.execute(
|
||||||
conn.execute(
|
"DELETE FROM catalog_tables WHERE database_name = ?", [database_name]
|
||||||
"DELETE FROM catalog_tables WHERE database_name = ?", [database_name]
|
)
|
||||||
)
|
conn.execute(
|
||||||
conn.execute(
|
"DELETE FROM catalog_columns WHERE database_name = ?", [database_name]
|
||||||
"DELETE FROM catalog_columns WHERE database_name = ?", [database_name]
|
)
|
||||||
)
|
conn.execute(
|
||||||
conn.execute(
|
"DELETE FROM catalog_foreign_keys WHERE database_name = ?",
|
||||||
"DELETE FROM catalog_foreign_keys WHERE database_name = ?",
|
[database_name],
|
||||||
[database_name],
|
)
|
||||||
)
|
conn.execute(
|
||||||
conn.execute(
|
"DELETE FROM catalog_indexes WHERE database_name = ?", [database_name]
|
||||||
"DELETE FROM catalog_indexes WHERE database_name = ?", [database_name]
|
)
|
||||||
)
|
|
||||||
|
|
||||||
await internal_db.execute_write_fn(delete_everything)
|
await internal_db.execute_write_fn(delete_everything)
|
||||||
|
|
||||||
|
|
|
@ -501,9 +501,8 @@ async def test_execute_write_has_correctly_prepared_connection(db):
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_execute_write_fn_block_false(db):
|
async def test_execute_write_fn_block_false(db):
|
||||||
def write_fn(conn):
|
def write_fn(conn):
|
||||||
with conn:
|
conn.execute("delete from roadside_attractions where pk = 1;")
|
||||||
conn.execute("delete from roadside_attractions where pk = 1;")
|
row = conn.execute("select count(*) from roadside_attractions").fetchone()
|
||||||
row = conn.execute("select count(*) from roadside_attractions").fetchone()
|
|
||||||
return row[0]
|
return row[0]
|
||||||
|
|
||||||
task_id = await db.execute_write_fn(write_fn, block=False)
|
task_id = await db.execute_write_fn(write_fn, block=False)
|
||||||
|
@ -513,9 +512,8 @@ async def test_execute_write_fn_block_false(db):
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_execute_write_fn_block_true(db):
|
async def test_execute_write_fn_block_true(db):
|
||||||
def write_fn(conn):
|
def write_fn(conn):
|
||||||
with conn:
|
conn.execute("delete from roadside_attractions where pk = 1;")
|
||||||
conn.execute("delete from roadside_attractions where pk = 1;")
|
row = conn.execute("select count(*) from roadside_attractions").fetchone()
|
||||||
row = conn.execute("select count(*) from roadside_attractions").fetchone()
|
|
||||||
return row[0]
|
return row[0]
|
||||||
|
|
||||||
new_count = await db.execute_write_fn(write_fn)
|
new_count = await db.execute_write_fn(write_fn)
|
||||||
|
|
Ładowanie…
Reference in New Issue