diff --git a/client/.gitignore b/client/.gitignore index 4e31250..5e7f944 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -9,3 +9,4 @@ cdb_geocoder_client--0.0.1.sql cdb_geocoder_client--0.1.0.sql cdb_geocoder_client--0.2.0.sql cdb_geocoder_client--0.3.0.sql +cdb_dataservices_client.control diff --git a/client/Makefile b/client/Makefile index 36f37fd..4374deb 100644 --- a/client/Makefile +++ b/client/Makefile @@ -1,27 +1,30 @@ # Makefile to generate the extension out of separate sql source files. # Once a version is released, it is not meant to be changed. E.g: once version 0.0.1 is out, it SHALL NOT be changed. EXTENSION = cdb_dataservices_client -EXTVERSION = $(shell grep default_version $(EXTENSION).control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/") +EXTVERSION = 0.29.0 # The new version to be generated from templates -SED = sed -ERB = erb -REPLACEMENTS = -i 's/$(EXTVERSION)/$(NEW_VERSION)/g' -NEW_EXTENSION_ARTIFACT = $(EXTENSION)--$(EXTVERSION).sql -AWK = awk +SED ?= sed +ERB ?= erb +AWK ?= awk # Parallel support macros -PG_CONFIG = pg_config +PG_CONFIG ?= pg_config PG_PARALLEL := $(shell $(PG_CONFIG) --version | ($(AWK) '{$$2*=1000; if ($$2 >= 9600) print 1; else print 0;}' 2> /dev/null || echo 0)) # PG12 compatibility PG_VERSION := $(shell $(PG_CONFIG) --version | $(AWK) '{split($$2,a,"."); print a[1]}') PG_12_GE := $(shell [ $(PG_VERSION) -ge 12 ] && echo true) PLPYTHONU := plpythonu +POSTGIS := postgis ifeq ($(PG_12_GE), true) PLPYTHONU := plpython3u +POSTGIS := postgis, postgis_raster endif +REPLACEMENTS = -e 's/@@EXTVERSION@@/$(EXTVERSION)/g' -e 's/@@plpythonu@@/$(PLPYTHONU)/g' -e 's/@@postgis@@/$(POSTGIS)/g' +NEW_EXTENSION_ARTIFACT = $(EXTENSION)--$(EXTVERSION).sql + # OLD_VERSIONS = $(wildcard old_versions/*.sql) # DATA = $(NEW_EXTENSION_ARTIFACT) \ # $(OLD_VERSIONS) \ @@ -51,7 +54,6 @@ TEMPLATE_FILES = $(wildcard $(TEMPLATE_DIR)/*.erb) GENERATED_SQL_FILES = $(patsubst $(TEMPLATE_DIR)/%.erb, $(SOURCES_DATA_DIR)/%.sql, $(TEMPLATE_FILES)) # postgres build stuff -PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) @@ -62,25 +64,15 @@ SOURCES_DATA = $(wildcard $(SOURCES_DATA_DIR)/*.sql) $(GENERATED_SQL_FILES) $(NEW_EXTENSION_ARTIFACT): $(SOURCES_DATA) rm -f $@ - cat $(SOURCES_DATA_DIR)/*.sql | \ - $(SED) -e 's/@@plpythonu@@/$(PLPYTHONU)/g' >> $@ -ifeq ($(PG_PARALLEL), 0) -# Remove PARALLEL in aggregates and functions - $(eval TMPFILE := $(shell mktemp /tmp/$(basename $0).XXXXXXXX)) - $(SED) -e 's/PARALLEL \= [A-Z]*,/''/g' \ - -e 's/PARALLEL [A-Z]*/''/g' $@ > $(TMPFILE) - mv $(TMPFILE) $@ -endif + cat $(SOURCES_DATA_DIR)/*.sql >> $@ .PHONY: all all: $(DATA) .PHONY: release -release: $(EXTENSION).control $(SOURCES_DATA) +release: $(SOURCES_DATA) test -n "$(NEW_VERSION)" # $$NEW_VERSION VARIABLE MISSING. Eg. make release NEW_VERSION=0.x.0 git mv *.sql old_versions - $(SED) $(REPLACEMENTS) $(EXTENSION).control - git add $(EXTENSION).control cat $(SOURCES_DATA_DIR)/*.sql > $(EXTENSION)--$(NEW_VERSION).sql git add $(EXTENSION)--$(NEW_VERSION).sql $(ERB) version=$(NEW_VERSION) upgrade_downgrade_template.erb > $(EXTENSION)--$(EXTVERSION)--$(NEW_VERSION).sql @@ -96,70 +88,29 @@ devclean: rm -f $(NEW_EXTENSION_ARTIFACT) rm -f $(GENERATED_SQL_FILES) -clean: restore_copies - -# If needed remove PARALLEL tags from the release files -release_remove_parallel_deploy: -ifeq ($(PG_PARALLEL), 0) +# Replace variables (and PARALLEL tags if necessary) and deploy files +.PHONY: replace_variables_and_deploy +replace_variables_and_deploy: $(NEW_EXTENSION_ARTIFACT) + mkdir -p '$(DESTDIR)$(datadir)/extension/'; \ for n in $(wildcard old_versions/*.sql *.sql); do \ $(eval TMPFILE := $(shell mktemp /tmp/XXXXXXXXXX)) \ - $(SED) -e 's/PARALLEL \= [A-Z]*,/''/g' -e 's/PARALLEL [A-Z]*/''/g' $$n > $(TMPFILE); \ - mv $(TMPFILE) $$n; \ + if [ "$(PG_PARALLEL)" -eq "0" ]; then \ + $(SED) -e 's/PARALLEL \= [A-Z]*,/''/g' -e 's/PARALLEL [A-Z]*/''/g' $$n > $(TMPFILE); \ + mv $(TMPFILE) $$n; \ + fi; \ + $(SED) $(REPLACEMENTS) $$n > $(TMPFILE); \ + mv $(TMPFILE) '$(DESTDIR)$(datadir)/extension/'$$(basename $$n); \ done -endif -restore_copies: - # tests - for f in $(basename $(wildcard test/sql/*.copy)); do \ - cat $${f}.copy > $${f}; \ - done - for f in $(basename $(wildcard test/expected/*.copy)); do \ - cat $${f}.copy > $${f}; \ - done - rm -f test/sql/*.copy; - rm -f test/expected/*.copy; - # data - for f in $(basename $(wildcard sql/*.copy)); do \ - cat $${f}.copy > $${f}; \ - done - rm -f sql/*.copy; - # old_versions - for f in $(basename $(wildcard old_versions/*.copy)); do \ - cat $${f}.copy > $${f}; \ - done - rm -f old_versions/*.copy; - # current scripts - for f in $(basename $(wildcard *.copy)); do \ - cat $${f}.copy > $${f}; \ - done - rm -f *.copy; - -# Replacing variables defined within test files -replace_variables: restore_copies - # tests - for f in $(sort $(wildcard test/sql/*test.sql)); do \ - sed --in-place=.copy -e 's/@@plpythonu@@/$(PLPYTHONU)/g' $${f}; \ - done - for f in $(sort $(wildcard test/expected/*test.out)); do \ - sed --in-place=.copy -e 's/@@plpythonu@@/$(PLPYTHONU)/g' $${f}; \ - done - # data - for f in $(wildcard sql/*.sql); do \ - sed --in-place=.copy -e 's/@@plpythonu@@/$(PLPYTHONU)/g' $${f}; \ - done - # old_versions - for f in $(wildcard old_versions/*.sql); do \ - sed --in-place=.copy -e 's/@@plpythonu@@/$(PLPYTHONU)/g' $${f}; \ - done - # current scripts - for f in $(wildcard *.sql); do \ - sed --in-place=.copy -e 's/@@plpythonu@@/$(PLPYTHONU)/g' $${f}; \ - done - sed --in-place=.copy -e 's/@@plpythonu@@/$(PLPYTHONU)/g' $(EXTENSION).control; +.PHONY: $(EXTENSION).control +$(EXTENSION).control: + $(SED) $(REPLACEMENTS) $(EXTENSION).control.in > $(EXTENSION).control # Install the current release into the PostgreSQL extensions directory -deploy: release_remove_parallel_deploy +.PHONY: deploy +deploy: replace_variables_and_deploy $(EXTENSION).control $(INSTALL_DATA) $(EXTENSION).control '$(DESTDIR)$(datadir)/extension/' - $(INSTALL_DATA) old_versions/*.sql *.sql '$(DESTDIR)$(datadir)/extension/' -install: replace_variables deploy +.PHONY: install +install: deploy + @echo "Install overriden" diff --git a/client/README.md b/client/README.md index 3e6eb83..2de504a 100644 --- a/client/README.md +++ b/client/README.md @@ -37,7 +37,7 @@ psql -U postgres cartodb_dev_user_fe3b850a-01c0-48f9-8a26-a82f09e9b53f_db and then: ```sql -CREATE EXTENSION cdb_dataservices_client; +CREATE EXTENSION cdb_dataservices_client CASCADE; ``` The extension creation in the user's db requires **superuser** privileges. diff --git a/client/cdb_dataservices_client.control b/client/cdb_dataservices_client.control.in similarity index 52% rename from client/cdb_dataservices_client.control rename to client/cdb_dataservices_client.control.in index ebf1daf..93434ec 100644 --- a/client/cdb_dataservices_client.control +++ b/client/cdb_dataservices_client.control.in @@ -1,5 +1,5 @@ comment = 'CartoDB dataservices client API extension' -default_version = '0.29.0' -requires = 'plproxy, cartodb' +default_version = '@@EXTVERSION@@' +requires = 'plproxy, cartodb, @@plpythonu@@, @@postgis@@' superuser = true schema = cdb_dataservices_client diff --git a/client/old_versions/cdb_dataservices_client--0.22.0--0.23.0.sql b/client/old_versions/cdb_dataservices_client--0.22.0--0.23.0.sql old mode 100755 new mode 100644 diff --git a/client/old_versions/cdb_dataservices_client--0.23.0--0.22.0.sql b/client/old_versions/cdb_dataservices_client--0.23.0--0.22.0.sql old mode 100755 new mode 100644 diff --git a/client/sql/05_utils.sql b/client/sql/05_utils.sql index 582a5d0..e6bfa78 100644 --- a/client/sql/05_utils.sql +++ b/client/sql/05_utils.sql @@ -18,16 +18,3 @@ $func$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION cdb_dataservices_client.cdb_jsonb_array_casttext(jsonb) RETURNS text[] AS $f$ SELECT array_agg(x) || ARRAY[]::text[] FROM jsonb_array_elements_text($1) t(x); $f$ LANGUAGE sql IMMUTABLE; - - --- PG12_DEPRECATED --- Create geomval if it doesn't exist (in postgis 3+ it only exists in postgis_raster) -DO $$ -BEGIN - IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'geomval') THEN - CREATE TYPE cdb_dataservices_client.geomval AS ( - geom geometry, - val double precision - ); - END IF; -END$$; \ No newline at end of file diff --git a/client/test/expected/00_installation_test.out b/client/test/expected/00_installation_test.out index fb6acde..99a2360 100644 --- a/client/test/expected/00_installation_test.out +++ b/client/test/expected/00_installation_test.out @@ -1,30 +1,17 @@ -- Only show warning or error messages in the tests output -SET client_min_messages TO WARNING; --- Install dependencies -CREATE EXTENSION postgis; -CREATE EXTENSION @@plpythonu@@; -CREATE EXTENSION cartodb; -CREATE EXTENSION plproxy; --- Install the extension -CREATE EXTENSION cdb_dataservices_client; --- Mock the server connection to point to this very test db -SELECT cartodb.cdb_conf_setconf('geocoder_server_config', '{"connection_str": "dbname=contrib_regression host=127.0.0.1 user=postgres"}'); +\set ECHO none cdb_conf_setconf ------------------ (1 row) --- Mock the user configuration -SELECT cartodb.cdb_conf_setconf('user_config', '{"is_organization": false, "entity_name": "test_user"}'); cdb_conf_setconf ------------------ (1 row) --- Mock the server schema -CREATE SCHEMA cdb_dataservices_server; --- Create a test user to check permissions -DROP ROLE IF EXISTS test_regular_user; -CREATE ROLE test_regular_user; -GRANT publicuser TO test_regular_user; -ALTER ROLE test_regular_user SET search_path TO public,cartodb,cdb_dataservices_client; +CREATE SCHEMA +DROP ROLE +CREATE ROLE +GRANT ROLE +ALTER ROLE diff --git a/client/test/sql/00_installation_test.sql b/client/test/sql/00_installation_test.sql index 89afd26..2f95cd9 100644 --- a/client/test/sql/00_installation_test.sql +++ b/client/test/sql/00_installation_test.sql @@ -1,13 +1,13 @@ -- Only show warning or error messages in the tests output +\set ECHO none +\set QUIET on SET client_min_messages TO WARNING; --- Install dependencies -CREATE EXTENSION postgis; -CREATE EXTENSION @@plpythonu@@; -CREATE EXTENSION cartodb; -CREATE EXTENSION plproxy; -- Install the extension -CREATE EXTENSION cdb_dataservices_client; +CREATE EXTENSION cdb_dataservices_client CASCADE; + +\unset ECHO +\unset QUIET -- Mock the server connection to point to this very test db SELECT cartodb.cdb_conf_setconf('geocoder_server_config', '{"connection_str": "dbname=contrib_regression host=127.0.0.1 user=postgres"}');