Skip to content

Commit 3a93ac5

Browse files
committed
db: only strict schemas
1 parent ef91bb4 commit 3a93ac5

File tree

250 files changed

+6721
-13733
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

250 files changed

+6721
-13733
lines changed

cmd/chai/commands/app.go

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ func NewApp() *cli.App {
1919
app.EnableBashCompletion = true
2020

2121
app.Commands = []*cli.Command{
22-
NewInsertCommand(),
2322
NewVersionCommand(),
2423
NewDumpCommand(),
2524
NewRestoreCommand(),

cmd/chai/commands/insert.go

-127
This file was deleted.

cmd/chai/dbutil/dump.go

+27-5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package dbutil
33
import (
44
"fmt"
55
"io"
6+
"strings"
67

78
"github.com/chaisql/chai"
89
"go.uber.org/multierr"
@@ -57,14 +58,35 @@ func dumpTable(tx *chai.Tx, w io.Writer, query, tableName string) error {
5758
defer res.Close()
5859

5960
// Inserts statements.
60-
insert := fmt.Sprintf("INSERT INTO %s VALUES", tableName)
6161
return res.Iterate(func(r *chai.Row) error {
62-
data, err := r.MarshalJSON()
62+
cols, err := r.Columns()
6363
if err != nil {
6464
return err
6565
}
6666

67-
if _, err := fmt.Fprintf(w, "%s %s;\n", insert, string(data)); err != nil {
67+
m := make(map[string]interface{}, len(cols))
68+
err = r.MapScan(m)
69+
if err != nil {
70+
return err
71+
}
72+
73+
var sb strings.Builder
74+
75+
for i, c := range cols {
76+
if i > 0 {
77+
sb.WriteString(", ")
78+
}
79+
80+
v := m[c]
81+
if v == nil {
82+
sb.WriteString("NULL")
83+
continue
84+
}
85+
86+
fmt.Fprintf(&sb, "%v", v)
87+
}
88+
89+
if _, err := fmt.Fprintf(w, "INSERT INTO %s VALUES (%s);\n", tableName, sb.String()); err != nil {
6890
return err
6991
}
7092

@@ -105,8 +127,8 @@ func dumpSchema(tx *chai.Tx, w io.Writer, query string, tableName string) error
105127
// Indexes statements.
106128
res, err := tx.Query(`
107129
SELECT sql FROM __chai_catalog WHERE
108-
type = 'index' AND owner.table_name = ? OR
109-
type = 'sequence' AND owner IS NULL
130+
type = 'index' AND owner_table_name = ? OR
131+
type = 'sequence' AND owner_table_name IS NULL
110132
`, tableName)
111133
if err != nil {
112134
return err

cmd/chai/dbutil/dump_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func TestDump(t *testing.T) {
5353
writeToBuf("\n")
5454
}
5555

56-
q := fmt.Sprintf("CREATE TABLE %s (a INTEGER, b ANY, c ANY, ...);", table)
56+
q := fmt.Sprintf("CREATE TABLE %s (a INTEGER, b INTEGER, c INTEGER);", table)
5757
err = db.Exec(q)
5858
assert.NoError(t, err)
5959
writeToBuf(q + "\n")
@@ -68,17 +68,17 @@ func TestDump(t *testing.T) {
6868
assert.NoError(t, err)
6969
writeToBuf(q + "\n")
7070

71-
q = fmt.Sprintf(`INSERT INTO %s VALUES {"a": %d, "b": %d, "c": %d};`, table, 1, 2, 3)
71+
q = fmt.Sprintf(`INSERT INTO %s VALUES (%d, %d, %d);`, table, 1, 2, 3)
7272
err = db.Exec(q)
7373
assert.NoError(t, err)
7474
writeToBuf(q + "\n")
7575

76-
q = fmt.Sprintf(`INSERT INTO %s VALUES {"a": %d, "b": %d, "c": %d};`, table, 2, 2, 2)
76+
q = fmt.Sprintf(`INSERT INTO %s VALUES (%d, %d, %d);`, table, 2, 2, 2)
7777
err = db.Exec(q)
7878
assert.NoError(t, err)
7979
writeToBuf(q + "\n")
8080

81-
q = fmt.Sprintf(`INSERT INTO %s VALUES {"a": %d, "b": %d, "c": %d};`, table, 3, 2, 1)
81+
q = fmt.Sprintf(`INSERT INTO %s VALUES (%d, %d, %d);`, table, 3, 2, 1)
8282
err = db.Exec(q)
8383
assert.NoError(t, err)
8484
writeToBuf(q + "\n")

cmd/chai/dbutil/exec_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func TestExecSQL(t *testing.T) {
1818

1919
var got bytes.Buffer
2020
err = ExecSQL(context.Background(), db, strings.NewReader(`
21-
CREATE TABLE test(a, ...);
21+
CREATE TABLE test(a INT, b INT);
2222
CREATE INDEX idx_a ON test (a);
2323
INSERT INTO test (a, b) VALUES (1, 2), (2, 2), (3, 2);
2424
SELECT * FROM test;

cmd/chai/dbutil/insert.go

-111
This file was deleted.

0 commit comments

Comments
 (0)