mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
parent
9e094b7c9d
commit
2e4ba71b53
4 changed files with 18 additions and 43 deletions
|
|
@ -95,7 +95,10 @@ class Database:
|
||||||
)
|
)
|
||||||
|
|
||||||
async def execute_write(self, sql, params=None, executescript=False, block=False):
|
async def execute_write(self, sql, params=None, executescript=False, block=False):
|
||||||
assert not (executescript and params), "Cannot use params with executescript=True"
|
assert not (
|
||||||
|
executescript and params
|
||||||
|
), "Cannot use params with executescript=True"
|
||||||
|
|
||||||
def _inner(conn):
|
def _inner(conn):
|
||||||
with conn:
|
with conn:
|
||||||
if executescript:
|
if executescript:
|
||||||
|
|
|
||||||
|
|
@ -2,22 +2,14 @@ import textwrap
|
||||||
|
|
||||||
|
|
||||||
async def init_internal_db(db):
|
async def init_internal_db(db):
|
||||||
await db.execute_write(
|
create_tables_sql = textwrap.dedent(
|
||||||
textwrap.dedent(
|
"""
|
||||||
"""
|
|
||||||
CREATE TABLE IF NOT EXISTS databases (
|
CREATE TABLE IF NOT EXISTS databases (
|
||||||
database_name TEXT PRIMARY KEY,
|
database_name TEXT PRIMARY KEY,
|
||||||
path TEXT,
|
path TEXT,
|
||||||
is_memory INTEGER,
|
is_memory INTEGER,
|
||||||
schema_version INTEGER
|
schema_version INTEGER
|
||||||
)
|
);
|
||||||
"""
|
|
||||||
),
|
|
||||||
block=True,
|
|
||||||
)
|
|
||||||
await db.execute_write(
|
|
||||||
textwrap.dedent(
|
|
||||||
"""
|
|
||||||
CREATE TABLE IF NOT EXISTS tables (
|
CREATE TABLE IF NOT EXISTS tables (
|
||||||
database_name TEXT,
|
database_name TEXT,
|
||||||
table_name TEXT,
|
table_name TEXT,
|
||||||
|
|
@ -25,14 +17,7 @@ async def init_internal_db(db):
|
||||||
sql TEXT,
|
sql TEXT,
|
||||||
PRIMARY KEY (database_name, table_name),
|
PRIMARY KEY (database_name, table_name),
|
||||||
FOREIGN KEY (database_name) REFERENCES databases(database_name)
|
FOREIGN KEY (database_name) REFERENCES databases(database_name)
|
||||||
)
|
);
|
||||||
"""
|
|
||||||
),
|
|
||||||
block=True,
|
|
||||||
)
|
|
||||||
await db.execute_write(
|
|
||||||
textwrap.dedent(
|
|
||||||
"""
|
|
||||||
CREATE TABLE IF NOT EXISTS columns (
|
CREATE TABLE IF NOT EXISTS columns (
|
||||||
database_name TEXT,
|
database_name TEXT,
|
||||||
table_name TEXT,
|
table_name TEXT,
|
||||||
|
|
@ -46,14 +31,7 @@ async def init_internal_db(db):
|
||||||
PRIMARY KEY (database_name, table_name, name),
|
PRIMARY KEY (database_name, table_name, name),
|
||||||
FOREIGN KEY (database_name) REFERENCES databases(database_name),
|
FOREIGN KEY (database_name) REFERENCES databases(database_name),
|
||||||
FOREIGN KEY (database_name, table_name) REFERENCES tables(database_name, table_name)
|
FOREIGN KEY (database_name, table_name) REFERENCES tables(database_name, table_name)
|
||||||
)
|
);
|
||||||
"""
|
|
||||||
),
|
|
||||||
block=True,
|
|
||||||
)
|
|
||||||
await db.execute_write(
|
|
||||||
textwrap.dedent(
|
|
||||||
"""
|
|
||||||
CREATE TABLE IF NOT EXISTS indexes (
|
CREATE TABLE IF NOT EXISTS indexes (
|
||||||
database_name TEXT,
|
database_name TEXT,
|
||||||
table_name TEXT,
|
table_name TEXT,
|
||||||
|
|
@ -65,14 +43,7 @@ async def init_internal_db(db):
|
||||||
PRIMARY KEY (database_name, table_name, name),
|
PRIMARY KEY (database_name, table_name, name),
|
||||||
FOREIGN KEY (database_name) REFERENCES databases(database_name),
|
FOREIGN KEY (database_name) REFERENCES databases(database_name),
|
||||||
FOREIGN KEY (database_name, table_name) REFERENCES tables(database_name, table_name)
|
FOREIGN KEY (database_name, table_name) REFERENCES tables(database_name, table_name)
|
||||||
)
|
);
|
||||||
"""
|
|
||||||
),
|
|
||||||
block=True,
|
|
||||||
)
|
|
||||||
await db.execute_write(
|
|
||||||
textwrap.dedent(
|
|
||||||
"""
|
|
||||||
CREATE TABLE IF NOT EXISTS foreign_keys (
|
CREATE TABLE IF NOT EXISTS foreign_keys (
|
||||||
database_name TEXT,
|
database_name TEXT,
|
||||||
table_name TEXT,
|
table_name TEXT,
|
||||||
|
|
@ -87,11 +58,10 @@ async def init_internal_db(db):
|
||||||
PRIMARY KEY (database_name, table_name, id, seq),
|
PRIMARY KEY (database_name, table_name, id, seq),
|
||||||
FOREIGN KEY (database_name) REFERENCES databases(database_name),
|
FOREIGN KEY (database_name) REFERENCES databases(database_name),
|
||||||
FOREIGN KEY (database_name, table_name) REFERENCES tables(database_name, table_name)
|
FOREIGN KEY (database_name, table_name) REFERENCES tables(database_name, table_name)
|
||||||
)
|
);
|
||||||
"""
|
"""
|
||||||
),
|
).strip()
|
||||||
block=True,
|
await db.execute_write(create_tables_sql, block=True, executescript=True)
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
async def populate_schema_tables(internal_db, db):
|
async def populate_schema_tables(internal_db, db):
|
||||||
|
|
|
||||||
|
|
@ -950,7 +950,9 @@ def test_trace(trace_debug):
|
||||||
"select ",
|
"select ",
|
||||||
)
|
)
|
||||||
for prefix in expected:
|
for prefix in expected:
|
||||||
assert any(sql.startswith(prefix) for sql in sqls)
|
assert any(
|
||||||
|
sql.startswith(prefix) for sql in sqls
|
||||||
|
), "No trace beginning with: {}".format(prefix)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
|
|
||||||
|
|
@ -401,7 +401,7 @@ async def test_execute_write_executescript(db):
|
||||||
await db.execute_write(
|
await db.execute_write(
|
||||||
"create table foo (id integer primary key); create table bar (id integer primary key); ",
|
"create table foo (id integer primary key); create table bar (id integer primary key); ",
|
||||||
executescript=True,
|
executescript=True,
|
||||||
block=True
|
block=True,
|
||||||
)
|
)
|
||||||
table_names = await db.table_names()
|
table_names = await db.table_names()
|
||||||
assert {"foo", "bar"}.issubset(table_names)
|
assert {"foo", "bar"}.issubset(table_names)
|
||||||
|
|
@ -413,7 +413,7 @@ async def test_execute_write_executescript_not_allowed_with_params(db):
|
||||||
await db.execute_write(
|
await db.execute_write(
|
||||||
"update roadside_attractions set name = ? where pk = ?",
|
"update roadside_attractions set name = ? where pk = ?",
|
||||||
["Mystery!", 1],
|
["Mystery!", 1],
|
||||||
executescript=True
|
executescript=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue