tursodatabase / libsql-shell-go

7 stars 7 forks source link

Enhance .dump and .schema #143

Closed athoscouto closed 11 months ago

athoscouto commented 12 months ago

Description

Changes .dump and .schema commands to support triggers, multiple indexes, multiple tables, and so on.

Related Issues

Visual reference

Before:

→  .schema
CREATE TRIGGER a AFTER INSERT ON q BEGIN     
SELECT 1;                                    
END                                          
CREATE INDEX bar ON t (t)                    
CREATE UNIQUE INDEX foo ON t (t)             
CREATE TABLE q (t text)                      
CREATE TRIGGER q AFTER INSERT ON t BEGIN     
SELECT 1;                                    
END                                          
CREATE TABLE t (t text)                      
CREATE TRIGGER t AFTER INSERT ON t BEGIN     
SELECT 1;                                    
END                                          
→  .dump
PRAGMA foreign_keys=OFF;
CREATE TABLE t (t text)CREATE TRIGGER t AFTER INSERT ON t BEGIN
SELECT 1;
ENDCREATE TRIGGER q AFTER INSERT ON t BEGIN
SELECT 1;
END;
INSERT INTO t VALUES ('x');
CREATE UNIQUE INDEX foo ON t (t)CREATE INDEX bar ON t (t);
CREATE TABLE q (t text)CREATE TRIGGER a AFTER INSERT ON q BEGIN
SELECT 1;
END;
INSERT INTO q VALUES ('x');

After:

→  .schema
CREATE TABLE q (t text);
CREATE TRIGGER a AFTER INSERT ON q BEGIN
SELECT 1;
END;
CREATE TABLE t (t text);
CREATE TRIGGER t AFTER INSERT ON t BEGIN
SELECT 1;
END;
CREATE UNIQUE INDEX foo ON t (t);
CREATE INDEX bar ON t (t);
CREATE TRIGGER q AFTER INSERT ON t BEGIN
SELECT 1;
END;
→  .dump
PRAGMA foreign_keys=OFF;
CREATE TABLE t (t text);
INSERT INTO t VALUES ('x');
CREATE TRIGGER t AFTER INSERT ON t BEGIN
SELECT 1;
END;
CREATE UNIQUE INDEX foo ON t (t);
CREATE INDEX bar ON t (t);
CREATE TRIGGER q AFTER INSERT ON t BEGIN
SELECT 1;
END;
CREATE TABLE q (t text);
INSERT INTO q VALUES ('x');
CREATE TRIGGER a AFTER INSERT ON q BEGIN
SELECT 1;
END;