# Semana 9: almacenamiento físico, páginas con slots y buffer pool.
# Se usa dentro del contenedor del curso.
#
#   make          crea la base de datos chasqui_w09 con los datos de ejemplo,
#                 instala pageinspect, pg_buffercache y pg_freespacemap, y hace
#                 VACUUM (FREEZE, ANALYZE) para que las páginas queden en un
#                 estado conocido (el apunte de la semana explica por qué)
#   make test     la vuelve a crear y corre las pruebas (*.test.mjs)
#   make clean    borra chasqui_w09
#
# pages.sql, update.sql y buffers.sql se corren sobre chasqui_w09 con
#   psql -d chasqui_w09 -f pages.sql
# big.sql se corre aparte sobre chasqui_big (no cambia sus datos):
#   psql -d chasqui_big -f big.sql

DB = chasqui_w09
PSQL = psql -X -q -v ON_ERROR_STOP=1 -d $(DB)

.PHONY: all test clean

all:
	chasqui-load $(DB)
	$(PSQL) -c "CREATE EXTENSION IF NOT EXISTS pageinspect" \
	        -c "CREATE EXTENSION IF NOT EXISTS pg_buffercache" \
	        -c "CREATE EXTENSION IF NOT EXISTS pg_freespacemap" \
	        -c "VACUUM (FREEZE, ANALYZE)"

# Las pruebas cambian datos y vacían buffers: se corren una después de otra.
test: all
	PGDATABASE=$(DB) node --test --test-concurrency=1 --test-reporter=spec

clean:
	dropdb --if-exists $(DB)
