Skip to content

Import from SQL dump#23

Merged
Brayden merged 2 commits intomainfrom
bwilmoth/import-sql-dump
Oct 14, 2024
Merged

Import from SQL dump#23
Brayden merged 2 commits intomainfrom
bwilmoth/import-sql-dump

Conversation

@Brayden
Copy link
Member

@Brayden Brayden commented Oct 14, 2024

Purpose

Give users the ability to hydrate the database from a .sql file dump.

NOTE: This currently only works for smaller files, or migrations. There will likely be a future addition where you can upload larger files and have them processed, but that will likely take some additional architecture setup.

Tasks

  • Provide an endpoint for providing a .sql file to parse and execute queries against

Verify

sqldump.sql

SQLite format 3�
-- Table: sqlite_sequence
CREATE TABLE sqlite_sequence(name,seq);

INSERT INTO sqlite_sequence VALUES ('users', 5);
INSERT INTO sqlite_sequence VALUES ('orders', 5);


-- Table: users
CREATE TABLE users (user_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL);

INSERT INTO users VALUES (1, 'Alice', '[email protected]');
INSERT INTO users VALUES (2, 'Bob', '[email protected]');
INSERT INTO users VALUES (3, 'Charlie', '[email protected]');


-- Table: orders
CREATE TABLE orders (order_id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, order_date TEXT NOT NULL, amount REAL NOT NULL, FOREIGN KEY (user_id) REFERENCES users (user_id));

INSERT INTO orders VALUES (1, 1, '2024-10-01', 50.75);
INSERT INTO orders VALUES (2, 1, '2024-10-03', 30);
INSERT INTO orders VALUES (3, 2, '2024-10-05', 99.99);
INSERT INTO orders VALUES (4, 3, '2024-10-06', 20.49);
INSERT INTO orders VALUES (5, 1, '2024-12-01', 50.75);

cURL

curl --location 'https://starbasedb.YOUR-ID-HERE.workers.dev/import/dump' \
--header 'Authorization: Bearer ABC123' \
--form 'sqlFile=@"./Desktop/sqldump.sql"'

Response

{
    "result": {
        "message": "SQL dump import completed. 12 statements succeeded, 1 failed.",
        "details": [
            {
                "statement": "CREATE TABLE sqlite_sequence(name,seq);",
                "success": false,
                "error": "object name reserved for internal use: sqlite_sequence: SQLITE_ERROR"
            },
            {
                "statement": "INSERT INTO sqlite_sequence VALUES ('users', 5);",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO sqlite_sequence VALUES ('orders', 5);",
                "success": true,
                "result": {}
            },
            {
                "statement": "CREATE TABLE users (user_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL);",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO users VALUES (1, 'Alice', '[email protected]');",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO users VALUES (2, 'Bob', '[email protected]');",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO users VALUES (3, 'Charlie', '[email protected]');",
                "success": true,
                "result": {}
            },
            {
                "statement": "CREATE TABLE orders (order_id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, order_date TEXT NOT NULL, amount REAL NOT NULL, FOREIGN KEY (user_id) REFERENCES users (user_id));",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO orders VALUES (1, 1, '2024-10-01', 50.75);",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO orders VALUES (2, 1, '2024-10-03', 30);",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO orders VALUES (3, 2, '2024-10-05', 99.99);",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO orders VALUES (4, 3, '2024-10-06', 20.49);",
                "success": true,
                "result": {}
            },
            {
                "statement": "INSERT INTO orders VALUES (5, 1, '2024-12-01', 50.75);",
                "success": true,
                "result": {}
            }
        ]
    }
}

Before

After

@Brayden Brayden self-assigned this Oct 14, 2024
@Brayden Brayden added the enhancement New feature or request label Oct 14, 2024
@Brayden Brayden merged commit 438ec16 into main Oct 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant