Prettier CREATE TABLE SQL for _internal

This commit is contained in:
Simon Willison 2020-12-22 15:55:43 -08:00
commit 90eba4c3ca

View file

@ -1,82 +1,95 @@
import textwrap
async def init_internal_db(db): async def init_internal_db(db):
await db.execute_write( await db.execute_write(
""" textwrap.dedent(
"""
CREATE TABLE databases ( CREATE TABLE 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, block=True,
) )
await db.execute_write( await db.execute_write(
""" textwrap.dedent(
"""
CREATE TABLE tables ( CREATE TABLE tables (
"database_name" TEXT, database_name TEXT,
"table_name" TEXT, table_name TEXT,
"rootpage" INTEGER, rootpage INTEGER,
"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, block=True,
) )
await db.execute_write( await db.execute_write(
""" textwrap.dedent(
"""
CREATE TABLE columns ( CREATE TABLE columns (
"database_name" TEXT, database_name TEXT,
"table_name" TEXT, table_name TEXT,
"cid" INTEGER, cid INTEGER,
"name" TEXT, name TEXT,
"type" TEXT, type TEXT,
"notnull" INTEGER, "notnull" INTEGER,
"default_value" TEXT, -- renamed from dflt_value default_value TEXT, -- renamed from dflt_value
"is_pk" INTEGER, -- renamed from pk is_pk INTEGER, -- renamed from pk
"hidden" INTEGER, hidden INTEGER,
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, block=True,
) )
await db.execute_write( await db.execute_write(
""" textwrap.dedent(
"""
CREATE TABLE indexes ( CREATE TABLE indexes (
"database_name" TEXT, database_name TEXT,
"table_name" TEXT, table_name TEXT,
"seq" INTEGER, seq INTEGER,
"name" TEXT, name TEXT,
"unique" INTEGER, "unique" INTEGER,
"origin" TEXT, origin TEXT,
"partial" INTEGER, partial INTEGER,
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, block=True,
) )
await db.execute_write( await db.execute_write(
""" textwrap.dedent(
"""
CREATE TABLE foreign_keys ( CREATE TABLE foreign_keys (
"database_name" TEXT, database_name TEXT,
"table_name" TEXT, table_name TEXT,
"id" INTEGER, id INTEGER,
"seq" INTEGER, seq INTEGER,
"table" TEXT, "table" TEXT,
"from" TEXT, "from" TEXT,
"to" TEXT, "to" TEXT,
"on_update" TEXT, on_update TEXT,
"on_delete" TEXT, on_delete TEXT,
"match" TEXT, match TEXT,
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)
) )
""", """
),
block=True, block=True,
) )
@ -84,14 +97,14 @@ async def init_internal_db(db):
async def populate_schema_tables(internal_db, db): async def populate_schema_tables(internal_db, db):
database_name = db.name database_name = db.name
await internal_db.execute_write( await internal_db.execute_write(
"delete from tables where database_name = ?", [database_name], block=True "DELETE FROM tables WHERE database_name = ?", [database_name], block=True
) )
tables = (await db.execute("select * from sqlite_master where type = 'table'")).rows tables = (await db.execute("select * from sqlite_master WHERE type = 'table'")).rows
for table in tables: for table in tables:
table_name = table["name"] table_name = table["name"]
await internal_db.execute_write( await internal_db.execute_write(
""" """
insert into tables (database_name, table_name, rootpage, sql) INSERT INTO tables (database_name, table_name, rootpage, sql)
values (?, ?, ?, ?) values (?, ?, ?, ?)
""", """,
[database_name, table_name, table["rootpage"], table["sql"]], [database_name, table_name, table["rootpage"], table["sql"]],
@ -99,7 +112,7 @@ async def populate_schema_tables(internal_db, db):
) )
# And the columns # And the columns
await internal_db.execute_write( await internal_db.execute_write(
"delete from columns where database_name = ? and table_name = ?", "DELETE FROM columns WHERE database_name = ? and table_name = ?",
[database_name, table_name], [database_name, table_name],
block=True, block=True,
) )
@ -111,7 +124,7 @@ async def populate_schema_tables(internal_db, db):
} }
await internal_db.execute_write( await internal_db.execute_write(
""" """
insert into columns ( INSERT INTO columns (
database_name, table_name, cid, name, type, "notnull", default_value, is_pk, hidden database_name, table_name, cid, name, type, "notnull", default_value, is_pk, hidden
) VALUES ( ) VALUES (
:database_name, :table_name, :cid, :name, :type, :notnull, :default_value, :is_pk, :hidden :database_name, :table_name, :cid, :name, :type, :notnull, :default_value, :is_pk, :hidden
@ -122,7 +135,7 @@ async def populate_schema_tables(internal_db, db):
) )
# And the foreign_keys # And the foreign_keys
await internal_db.execute_write( await internal_db.execute_write(
"delete from foreign_keys where database_name = ? and table_name = ?", "DELETE FROM foreign_keys WHERE database_name = ? and table_name = ?",
[database_name, table_name], [database_name, table_name],
block=True, block=True,
) )
@ -136,7 +149,7 @@ async def populate_schema_tables(internal_db, db):
} }
await internal_db.execute_write( await internal_db.execute_write(
""" """
insert into foreign_keys ( INSERT INTO foreign_keys (
database_name, table_name, "id", seq, "table", "from", "to", on_update, on_delete, match database_name, table_name, "id", seq, "table", "from", "to", on_update, on_delete, match
) VALUES ( ) VALUES (
:database_name, :table_name, :id, :seq, :table, :from, :to, :on_update, :on_delete, :match :database_name, :table_name, :id, :seq, :table, :from, :to, :on_update, :on_delete, :match
@ -147,7 +160,7 @@ async def populate_schema_tables(internal_db, db):
) )
# And the indexes # And the indexes
await internal_db.execute_write( await internal_db.execute_write(
"delete from indexes where database_name = ? and table_name = ?", "DELETE FROM indexes WHERE database_name = ? and table_name = ?",
[database_name, table_name], [database_name, table_name],
block=True, block=True,
) )
@ -159,7 +172,7 @@ async def populate_schema_tables(internal_db, db):
} }
await internal_db.execute_write( await internal_db.execute_write(
""" """
insert into indexes ( INSERT INTO indexes (
database_name, table_name, seq, name, "unique", origin, partial database_name, table_name, seq, name, "unique", origin, partial
) VALUES ( ) VALUES (
:database_name, :table_name, :seq, :name, :unique, :origin, :partial :database_name, :table_name, :seq, :name, :unique, :origin, :partial