mirror of
https://github.com/simonw/datasette.git
synced 2026-09-28 12:54:10 +02:00
Alter table API can now rename tables, refs #2788
Refs https://github.com/simonw/datasette/pull/2789#issuecomment-4771774289
This commit is contained in:
parent
87354cf94e
commit
4b219be8bd
3 changed files with 110 additions and 13 deletions
|
|
@ -1,4 +1,5 @@
|
|||
from datasette.app import Datasette
|
||||
from datasette.events import RenameTableEvent
|
||||
from datasette.utils import sqlite3
|
||||
from .utils import last_event
|
||||
import pytest
|
||||
|
|
@ -898,6 +899,58 @@ async def test_alter_table_operations(ds_write):
|
|||
assert event.after_schema == data["schema"]
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_alter_table_rename_table(ds_write):
|
||||
token = write_token(ds_write, permissions=["at"])
|
||||
db = ds_write.get_database("data")
|
||||
before_schema = await db.execute_fn(
|
||||
lambda conn: conn.execute(
|
||||
"select sql from sqlite_master where type = 'table' and name = 'docs'"
|
||||
).fetchone()[0]
|
||||
)
|
||||
|
||||
response = await ds_write.client.post(
|
||||
"/data/docs/-/alter",
|
||||
json={
|
||||
"operations": [
|
||||
{"op": "rename_table", "args": {"to": "documents"}},
|
||||
]
|
||||
},
|
||||
headers=_headers(token),
|
||||
)
|
||||
|
||||
assert response.status_code == 200, response.text
|
||||
data = response.json()
|
||||
assert data["ok"] is True
|
||||
assert data["database"] == "data"
|
||||
assert data["table"] == "documents"
|
||||
assert data["table_url"].endswith("/data/documents")
|
||||
assert data["table_api_url"].endswith("/data/documents.json")
|
||||
assert data["altered"] is True
|
||||
assert data["operations_applied"] == 1
|
||||
assert data["before_schema"] == before_schema
|
||||
assert 'CREATE TABLE "documents"' in data["schema"]
|
||||
|
||||
tables = (
|
||||
await db.execute(
|
||||
"select name from sqlite_master where type = 'table' order by name"
|
||||
)
|
||||
).dicts()
|
||||
table_names = [table["name"] for table in tables]
|
||||
assert "docs" not in table_names
|
||||
assert "documents" in table_names
|
||||
|
||||
rename_events = [
|
||||
event
|
||||
for event in ds_write._tracked_events
|
||||
if isinstance(event, RenameTableEvent)
|
||||
]
|
||||
assert len(rename_events) == 1
|
||||
assert rename_events[0].database == "data"
|
||||
assert rename_events[0].old_table == "docs"
|
||||
assert rename_events[0].new_table == "documents"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_alter_table_foreign_key_operations(ds_write):
|
||||
token = write_token(ds_write, permissions=["at"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue