kopia lustrzana https://github.com/simonw/datasette
rodzic
d637ed4676
commit
97b1723dd0
|
@ -1,4 +1,5 @@
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from datasette.utils import table_column_details
|
||||||
|
|
||||||
|
|
||||||
async def init_internal_db(db):
|
async def init_internal_db(db):
|
||||||
|
@ -70,49 +71,70 @@ async def populate_schema_tables(internal_db, db):
|
||||||
"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
|
||||||
tables_to_insert = []
|
|
||||||
columns_to_delete = []
|
|
||||||
columns_to_insert = []
|
|
||||||
foreign_keys_to_delete = []
|
|
||||||
foreign_keys_to_insert = []
|
|
||||||
indexes_to_delete = []
|
|
||||||
indexes_to_insert = []
|
|
||||||
|
|
||||||
for table in tables:
|
def collect_info(conn):
|
||||||
table_name = table["name"]
|
tables_to_insert = []
|
||||||
tables_to_insert.append(
|
columns_to_delete = []
|
||||||
(database_name, table_name, table["rootpage"], table["sql"])
|
columns_to_insert = []
|
||||||
)
|
foreign_keys_to_delete = []
|
||||||
columns_to_delete.append((database_name, table_name))
|
foreign_keys_to_insert = []
|
||||||
columns = await db.table_column_details(table_name)
|
indexes_to_delete = []
|
||||||
columns_to_insert.extend(
|
indexes_to_insert = []
|
||||||
{
|
|
||||||
**{"database_name": database_name, "table_name": table_name},
|
for table in tables:
|
||||||
**column._asdict(),
|
table_name = table["name"]
|
||||||
}
|
tables_to_insert.append(
|
||||||
for column in columns
|
(database_name, table_name, table["rootpage"], table["sql"])
|
||||||
)
|
)
|
||||||
foreign_keys_to_delete.append((database_name, table_name))
|
columns_to_delete.append((database_name, table_name))
|
||||||
foreign_keys = (
|
columns = table_column_details(conn, table_name)
|
||||||
await db.execute(f"PRAGMA foreign_key_list([{table_name}])")
|
columns_to_insert.extend(
|
||||||
).rows
|
{
|
||||||
foreign_keys_to_insert.extend(
|
**{"database_name": database_name, "table_name": table_name},
|
||||||
{
|
**column._asdict(),
|
||||||
**{"database_name": database_name, "table_name": table_name},
|
}
|
||||||
**dict(foreign_key),
|
for column in columns
|
||||||
}
|
)
|
||||||
for foreign_key in foreign_keys
|
foreign_keys_to_delete.append((database_name, table_name))
|
||||||
)
|
foreign_keys = conn.execute(
|
||||||
indexes_to_delete.append((database_name, table_name))
|
f"PRAGMA foreign_key_list([{table_name}])"
|
||||||
indexes = (await db.execute(f"PRAGMA index_list([{table_name}])")).rows
|
).fetchall()
|
||||||
indexes_to_insert.extend(
|
foreign_keys_to_insert.extend(
|
||||||
{
|
{
|
||||||
**{"database_name": database_name, "table_name": table_name},
|
**{"database_name": database_name, "table_name": table_name},
|
||||||
**dict(index),
|
**dict(foreign_key),
|
||||||
}
|
}
|
||||||
for index in indexes
|
for foreign_key in foreign_keys
|
||||||
|
)
|
||||||
|
indexes_to_delete.append((database_name, table_name))
|
||||||
|
indexes = conn.execute(f"PRAGMA index_list([{table_name}])").fetchall()
|
||||||
|
indexes_to_insert.extend(
|
||||||
|
{
|
||||||
|
**{"database_name": database_name, "table_name": table_name},
|
||||||
|
**dict(index),
|
||||||
|
}
|
||||||
|
for index in indexes
|
||||||
|
)
|
||||||
|
return (
|
||||||
|
tables_to_insert,
|
||||||
|
columns_to_delete,
|
||||||
|
columns_to_insert,
|
||||||
|
foreign_keys_to_delete,
|
||||||
|
foreign_keys_to_insert,
|
||||||
|
indexes_to_delete,
|
||||||
|
indexes_to_insert,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
tables_to_insert,
|
||||||
|
columns_to_delete,
|
||||||
|
columns_to_insert,
|
||||||
|
foreign_keys_to_delete,
|
||||||
|
foreign_keys_to_insert,
|
||||||
|
indexes_to_delete,
|
||||||
|
indexes_to_insert,
|
||||||
|
) = await db.execute_fn(collect_info)
|
||||||
|
|
||||||
await internal_db.execute_write_many(
|
await internal_db.execute_write_many(
|
||||||
"""
|
"""
|
||||||
INSERT INTO tables (database_name, table_name, rootpage, sql)
|
INSERT INTO tables (database_name, table_name, rootpage, sql)
|
||||||
|
|
Ładowanie…
Reference in New Issue