Skip to content

Commit 9380e10

Browse files
committed
update sqldef, which now provides getFullVersion()
1 parent 3b4d15c commit 9380e10

File tree

8 files changed

+62
-37
lines changed

8 files changed

+62
-37
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ format:
1313
go fmt .
1414
.PHONEY: format
1515

16-
update:
16+
deps:
1717
go get -u -t .
1818
go mod tidy
1919
.PHONY: update

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ The Go source (`sqldef-wasm.go`) compiles to WebAssembly and exposes a `diff` fu
1616

1717
```sh
1818
# Build the WASM file
19-
make sqldef.wasm
19+
make
2020

2121
# Start local dev server at http://localhost:6543
2222
make dev
2323

2424
# Update Go dependencies
25-
make update
25+
make deps
2626

2727
# Format and lint
2828
make format

app.mjs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { sqldef, getVersion } from "./sqldef_browser.mjs";
1+
import { sqldef, getFullVersion } from "./sqldef_browser.mjs";
22

33
const dbType = document.getElementById("dbType");
44
const enableDrop = document.getElementById("enableDrop");
@@ -8,6 +8,7 @@ const outputUp = document.getElementById("outputUp");
88
const errorUp = document.getElementById("errorUp");
99
const outputDown = document.getElementById("outputDown");
1010
const errorDown = document.getElementById("errorDown");
11+
const versionEl = document.getElementById("version");
1112

1213
const schemaExamples = {
1314
mysql: {
@@ -200,9 +201,6 @@ runDiff();
200201

201202
// Display version info
202203
(async () => {
203-
const version = await getVersion();
204-
const versionEl = document.getElementById("version");
205-
if (versionEl) {
206-
versionEl.textContent = `powered by sqldef v${version}`;
207-
}
204+
const version = await getFullVersion();
205+
versionEl.textContent = `powered by sqldef v${version}`;
208206
})();

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.25
44

55
toolchain go1.25.5
66

7-
require github.com/sqldef/sqldef/v3 v3.8.4
7+
require github.com/sqldef/sqldef/v3 v3.8.6
88

99
require (
1010
github.com/goccy/go-yaml v1.19.0 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
1010
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
1111
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1212
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
13-
github.com/sqldef/sqldef/v3 v3.8.4 h1:iETP45XJFnlqLDrEv4DY4MoPJ1+dPqgBpUupdIrB2uo=
14-
github.com/sqldef/sqldef/v3 v3.8.4/go.mod h1:yrTNAMDgx+NNL1Iu7X6eOVA3zxJ7vSt3apkdn1RDHAI=
13+
github.com/sqldef/sqldef/v3 v3.8.6 h1:21vikbKlUROnOImEM6Uz88Y6v1MBMtsATEAFehx6ii0=
14+
github.com/sqldef/sqldef/v3 v3.8.6/go.mod h1:elKPijJ6Pouu/S0sn+hSHHcfGERBKvtAAUoewAKjBr8=
1515
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
1616
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
1717
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=

sqldef-wasm.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ import (
1414
"github.com/sqldef/sqldef/v3/schema"
1515
)
1616

17-
// diff function (mode: string, desiredDDLs: string, currentDDLs: string, enableDrop: bool, callback: (err: string | null, result: string | null): void)
17+
// sqldefDiff (mode: string, desiredDDLs: string, currentDDLs: string, enableDrop: bool, callback: (err: string | null, result: string | null) -> void) -> bool
1818
func sqldefDiff(this js.Value, args []js.Value) any {
19+
if len(args) != 5 {
20+
panic(fmt.Sprintf("expected 5 arguments, got %d", len(args)))
21+
}
22+
1923
mode := args[0].String()
2024
desiredDDLs := args[1].String()
2125
currentDDLs := args[2].String()
@@ -61,19 +65,19 @@ func sqldefDiff(this js.Value, args []js.Value) any {
6165
}
6266
}
6367

68+
// sqldefGetFullVersion () -> string
69+
func sqldefGetFullVersion(this js.Value, args []js.Value) any {
70+
return sqldef.GetFullVersion()
71+
}
72+
6473
func main() {
6574
c := make(chan bool)
6675

6776
exports := map[string]any{
6877
"diff": js.FuncOf(sqldefDiff),
69-
"getVersion": js.FuncOf(func(this js.Value, args []js.Value) any {
70-
return sqldef.GetVersion()
71-
}),
72-
"getRevision": js.FuncOf(func(this js.Value, args []js.Value) any {
73-
return sqldef.GetRevision()
74-
}),
78+
"getFullVersion": js.FuncOf(sqldefGetFullVersion),
7579
}
7680
js.Global().Set("_SQLDEF", js.ValueOf(exports))
7781

78-
<-c
82+
<-c // block forever
7983
}

sqldef.wasm

50.9 KB
Binary file not shown.

sqldef_browser.mjs

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,58 @@ if (typeof Go === "undefined") {
66
}
77

88
let SQLDEF = null;
9+
let isLoading = false;
910

1011
const getInstance = async () => {
12+
while (isLoading) {
13+
await new Promise((resolve) => setTimeout(resolve));
14+
}
15+
1116
if (SQLDEF) {
1217
return SQLDEF;
1318
}
1419

15-
const response = await fetch("sqldef.wasm");
16-
const wasmBinary = await response.arrayBuffer();
17-
const go = new Go();
18-
const result = await WebAssembly.instantiate(wasmBinary, go.importObject);
19-
go.run(result.instance); // defines globalThis._SQLDEF
20-
SQLDEF = globalThis._SQLDEF;
20+
isLoading = true;
21+
try {
22+
const t0 = performance.now();
23+
const response = await fetch("sqldef.wasm");
24+
const t1 = performance.now();
25+
const wasmBinary = await response.arrayBuffer();
26+
const t2 = performance.now();
27+
const go = new Go();
28+
const result = await WebAssembly.instantiate(wasmBinary, go.importObject);
29+
go.run(result.instance); // defines globalThis._SQLDEF
30+
const t3 = performance.now();
31+
32+
console.debug(
33+
"sqldef.wasm loading time: fetch: %dms, instantiate: %dms, start: %dms",
34+
t1 - t0,
35+
t2 - t1,
36+
t3 - t2
37+
);
38+
39+
SQLDEF = globalThis._SQLDEF;
40+
} finally {
41+
isLoading = false;
42+
}
43+
2144
return SQLDEF;
2245
};
2346

24-
export async function sqldef(dbType, desiredDDLs, currentDDLs, enableDrop = false) {
47+
export async function sqldef(
48+
dbType,
49+
desiredDDLs,
50+
currentDDLs,
51+
enableDrop = false
52+
) {
2553
if (typeof WebAssembly === "undefined") {
2654
throw new Error("WebAssembly is not supported in your browser");
2755
}
2856

29-
const SQLDEF = await getInstance();
57+
const sqldef = await getInstance();
3058

3159
return new Promise((resolve, reject) => {
32-
SQLDEF.diff(dbType, desiredDDLs, currentDDLs, enableDrop, (err, ret) => {
60+
sqldef.diff(dbType, desiredDDLs, currentDDLs, enableDrop, (err, ret) => {
3361
if (err) {
3462
return reject(new Error(err));
3563
}
@@ -38,12 +66,7 @@ export async function sqldef(dbType, desiredDDLs, currentDDLs, enableDrop = fals
3866
});
3967
}
4068

41-
export async function getVersion() {
42-
const SQLDEF = await getInstance();
43-
return SQLDEF.getVersion();
44-
}
45-
46-
export async function getRevision() {
47-
const SQLDEF = await getInstance();
48-
return SQLDEF.getRevision();
69+
export async function getFullVersion() {
70+
const sqldef = await getInstance();
71+
return sqldef.getFullVersion();
4972
}

0 commit comments

Comments
 (0)