commit 2b577b37ebf92d224ba8657506e0ef0e99f039de
parent 2033e803e9fad5b8326c2776b57bc331bee3e382
Author: Andrew Laack <andrew@laack.co>
Date: Mon, 4 May 2026 21:19:02 -0500
Uniqueness constraints, continue gracefully
Diffstat:
| M | main.go | | | 22 | ++++++++++++++++------ |
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/main.go b/main.go
@@ -13,8 +13,7 @@ import (
func index(currentUrl string) (string, []string) {
- u, err := url.Parse(currentUrl)
- baseUrl := fmt.Sprintf("%s://%s", u.Scheme, u.Host)
+ base, err := url.Parse(currentUrl)
if err != nil {
panic(err)
@@ -70,7 +69,14 @@ func index(currentUrl string) (string, []string) {
}
if strings.Contains(item, "://") == false {
// relative link
- geminiLinks = append(geminiLinks, baseUrl + item[0:indexOfSpace])
+
+ u, err := url.Parse(item[0:indexOfSpace])
+
+ if err != nil {
+ panic(err)
+ }
+
+ geminiLinks = append(geminiLinks, base.ResolveReference(u).String())
}
}
@@ -93,7 +99,7 @@ func main() {
defer db.Close()
- createDb := "CREATE TABLE IF NOT EXISTS link (source, destination);"
+ createDb := "CREATE TABLE IF NOT EXISTS link (source, destination, CONSTRAINT unq UNIQUE (source, destination));"
_, err = db.Exec(createDb)
@@ -102,7 +108,7 @@ func main() {
}
- currentUrl := "gemini://tlgs.one/known-hosts"
+ currentUrl := "gemini://blog.laack.co"
body, forwardGeminiLinks := index(currentUrl)
err = os.WriteFile("outputs/" + url.PathEscape(currentUrl), []byte(body), 0644)
@@ -121,10 +127,14 @@ func main() {
fmt.Printf("Inserting link %d into table\n", index)
if err != nil {
+ if strings.Compare(err.Error(), "UNIQUE constraint failed: link.source, link.destination") == 0 {
+ fmt.Println("Link already exists; continuing")
+ continue
+ }
+
panic(err)
}
}
tx.Commit()
-
}