From ab05743d4ee5273fd1182a0cec954b46cfbb49a3 Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Thu, 11 Dec 2025 10:00:25 -0700 Subject: [PATCH] lockless-fifo accepts sqlite --- cmd/pg-lockless-fifo-demo/README.md | 7 +++++ cmd/pg-lockless-fifo-demo/main.go | 46 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 cmd/pg-lockless-fifo-demo/README.md create mode 100644 cmd/pg-lockless-fifo-demo/main.go diff --git a/cmd/pg-lockless-fifo-demo/README.md b/cmd/pg-lockless-fifo-demo/README.md new file mode 100644 index 0000000..d94b6f0 --- /dev/null +++ b/cmd/pg-lockless-fifo-demo/README.md @@ -0,0 +1,7 @@ +https://trychroma.com/engineering/wal3 + +(generally with S3 but this is fine) + +1. GET (current_node, cksum) FROM head_pointer +1. INSERT node (previous_node) VALUES (head_pointer) RETURNING node.id +1. UPDATE head_pointer (current_node, cksum) VALUES (node.id, blockchain) IF head_pointer.cksum=cksum diff --git a/cmd/pg-lockless-fifo-demo/main.go b/cmd/pg-lockless-fifo-demo/main.go new file mode 100644 index 0000000..364e54b --- /dev/null +++ b/cmd/pg-lockless-fifo-demo/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "context" + "database/sql" + "flag" + "log" + "os" + "time" + + "pg/src/with" + + _ "github.com/lib/pq" + _ "modernc.org/sqlite" +) + +func main() { + if err := with.Context(run); err != nil { + panic(err) + } +} + +func run(ctx context.Context) error { + fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) + c := fs.String("c", "postgresql://pulsegres:pulsegres@localhost:15432", "conn string") + if err := fs.Parse(os.Args[1:]); err != nil { + panic(err) + } + + return with.PSQL(ctx, *c, func(pg *sql.DB) error { + go with.Every(ctx, 5*time.Second, func() { + row := pg.QueryRowContext(ctx, `SELECT 1`) + var n int + if err := row.Err(); err != nil { + log.Println("query err:", err) + } else if err := row.Scan(&n); err != nil { + log.Println("scan err:", err) + } else { + log.Println("ping...") + } + }) + + <-ctx.Done() + return nil + }) +}