default:
	go run *.go || (go get ./... && go run *.go)

watch:
	(watchexec -e sql -- make schema-const) & \
	(watchexec -e sql -- sqlc generate) & \
	(watchexec -w sqlc.yaml -- sqlc generate) & \
	(watchexec -e go -c -r -- go test ./... -count 1) & \
	wait
	# SQL Watcher done

# Puts the schema in a constant in go so it can be used to create the table directly
schema-const:
	echo "// Code generated by Makefile. DO NOT EDIT." > internal/schema.go
	echo "package internal\n" >> internal/schema.go
	echo "const Schema = \`" >> internal/schema.go
	cat db/schema.sql >> internal/schema.go
	echo "\`" >> internal/schema.go


.PHONY: bench
bench:
	make cleanup
	make schema-const
	sqlc generate
	cd bench && go run main.go

cleanup:
	rm -f bench/bench.db*
