Project

General

Profile

1
selfDir_AkFFYJ := $(dir $(lastword $(MAKEFILE_LIST)))
2
root := $(selfDir_AkFFYJ)..
3
include $(root)/lib/common.Makefile
4

    
5

    
6
##### Vars/functions
7

    
8
# Make
9
SHELL := /bin/bash
10

    
11
##### General targets
12

    
13
all = vegbien.sql vegbien.my.sql util.sql py_util.sql
14

    
15
all: _always $(all) ;
16

    
17
clean: _always
18
	$(RM) $(all)
19

    
20
%/reinstall: _always %/uninstall %/install ;
21

    
22
##### Installation
23

    
24
schemas := temp util py_util
25
install: $(schemas:%=%/install) ;
26

    
27
schemasReversed := py_util util temp
28
uninstall: $(schemasReversed:%=%/uninstall) ;
29

    
30
psqlAsAdminVegbien := $(psqlAsAdmin) vegbien
31
psqlNoSearchPath := env no_search_path=1 ../bin/psql_script_vegbien
32
psql_verbose := env no_search_path=1 ../bin/psql_verbose_vegbien
33

    
34
# Must come before `%/install: vegbien.sql` to override it
35
%/install: %.sql _always
36
	-<$< $(psqlNoSearchPath)
37
# ignore errors if schema exists
38

    
39
# must come before `%/uninstall: vegbien.sql` to override it
40
%/uninstall: %.sql _always
41
	echo $(call rmSchemaCmd,$*)|$(psqlNoSearchPath)
42

    
43
#### public
44

    
45
schema_exists = $(shell $(psql_verbose) <<<'CREATE TEMP TABLE "$(1)".t ();'\
46
2>&1|grep -F 'cannot create temporary relation in non-temporary schema')
47

    
48
confirmRmPublicSchema = $(if $(schema_exists),$(call\
49
confirm,WARNING: This will delete the $(1) schema of your VegBIEN DB!,$(2)))
50

    
51
# Installs a version of the public schema
52
%/install: vegbien.sql _always
53
	echo $(call mkSchemaCmd,$*)\
54
"COMMENT ON SCHEMA \"$*\" IS 'Version: $* ($(date))';"|$(psqlNoSearchPath)
55
	# create a custom *_validation schema for *each* public schema, rather than
56
	# one for the most recently-created public schema. this allows validations
57
	# to continue to be run against a previous version of the DB while a new
58
	# version is being imported.
59
	<$< $(sed) -e 's/( )(validation)([,; ])/\1"$*_\2"\3/g'$(if\
60
$(filter public,$*),, -e 's/( )public([,; ])/\1"$*"\2/g')|$(psqlNoSearchPath)
61

    
62
%/uninstall: vegbien.sql _always
63
	$(call confirmRmPublicSchema,$*)
64
	echo $(call rmSchemaCmd,$*)|$(psqlNoSearchPath)
65

    
66
public/uninstall: validation/uninstall
67

    
68
# Replaces the current public schema with the given version
69
%/publish: _always
70
	@$(call confirmRmPublicSchema,public,To save it: make schemas/rotate)
71
	echo $(call rmSchemaCmd,public)'ALTER SCHEMA "$*" RENAME TO public; \
72
ALTER SCHEMA "$*_validation" RENAME TO public_validation;'\
73
|$(psqlNoSearchPath) --file - --single-transaction
74
	@echo $(emph)'In your shell, run:'$(endEmph)'unset version'
75

    
76
rename/%: _always
77
	echo 'ALTER SCHEMA public RENAME TO "$*";'|$(psqlNoSearchPath)
78
	$(MAKE) public/install
79

    
80
rotate: _always rename/$(version) ;
81

    
82
#### py_util
83

    
84
py_util/install: py_util.sql _always
85
	-<$< $(psqlAsAdminVegbien)
86
# ignore errors if schema exists
87

    
88
#### Others
89

    
90
# Needed on Ubuntu 12.04 (also other Linuxes?) because %/reinstall is ignored.
91
temp/reinstall: _always temp/uninstall temp/install ;
92

    
93
##### MySQL schema for ERD
94

    
95
repl = ../bin/repl
96

    
97
%.my.sql: %.sql ../lib/PostgreSQL-MySQL.csv filter_ERD.csv
98
	$(repl) <$(wordlist 1,2,$+)|$(repl) $(word 3,$+) >$@
99

    
100
##### DDL generation
101

    
102
pg_dump = env schema= ../bin/pg_dump_vegbien $(1) >$@
103

    
104
vegbien.sql:
105
	# include schemas that depend on `public` so they are restored along with it
106
	unset version dump_opts; $(call pg_dump,public --schema=validation)
107

    
108
py_util.sql:
109
	env owners=1 $(call pg_dump,py_util)
110

    
111
# Must come after %.my.sql so that gets matched first
112
%.sql:
113
	$(call pg_dump,$*)
(5-5/29)