diff --git a/Makefile b/Makefile index 7569fd6ce..900554fc2 100644 --- a/Makefile +++ b/Makefile @@ -13,10 +13,16 @@ include Makefile.global all: extension + +#build columnar only +columnar: + $(MAKE) -C src/backend/columnar all # build extension -extension: $(citus_top_builddir)/src/include/citus_version.h +extension: $(citus_top_builddir)/src/include/citus_version.h columnar $(MAKE) -C src/backend/distributed/ all -install-extension: extension +install-columnar: columnar + $(MAKE) -C src/backend/columnar install +install-extension: extension install-columnar $(MAKE) -C src/backend/distributed/ install install-headers: extension $(MKDIR_P) '$(DESTDIR)$(includedir_server)/distributed/' @@ -27,6 +33,7 @@ install-headers: extension clean-extension: $(MAKE) -C src/backend/distributed/ clean + $(MAKE) -C src/backend/columnar/ clean clean-full: $(MAKE) -C src/backend/distributed/ clean-full .PHONY: extension install-extension clean-extension clean-full @@ -35,6 +42,7 @@ install: install-extension install-headers install-downgrades: $(MAKE) -C src/backend/distributed/ install-downgrades install-all: install-headers + $(MAKE) -C src/backend/columnar/ install-all $(MAKE) -C src/backend/distributed/ install-all clean: clean-extension diff --git a/src/backend/columnar/Makefile b/src/backend/columnar/Makefile new file mode 100644 index 000000000..abda9c90d --- /dev/null +++ b/src/backend/columnar/Makefile @@ -0,0 +1,17 @@ +citus_subdir = src/backend/columnar +citus_top_builddir = ../../.. +safestringlib_srcdir = $(citus_abs_top_srcdir)/vendor/safestringlib +SUBDIRS = . safeclib +SUBDIRS += +ENSURE_SUBDIRS_EXIST := $(shell mkdir -p $(SUBDIRS)) +OBJS += \ + $(patsubst $(citus_abs_srcdir)/%.c,%.o,$(foreach dir,$(SUBDIRS), $(sort $(wildcard $(citus_abs_srcdir)/$(dir)/*.c)))) + +MODULE_big = citus_columnar + +PG_CPPFLAGS += -I$(libpq_srcdir) -I$(safestringlib_srcdir)/include + +include $(citus_top_builddir)/Makefile.global + +.PHONY: install-all +install-all: install diff --git a/src/backend/columnar/columnar.c b/src/backend/columnar/columnar.c index 35a6f6da9..85ec06d00 100644 --- a/src/backend/columnar/columnar.c +++ b/src/backend/columnar/columnar.c @@ -22,6 +22,7 @@ #include "citus_version.h" #include "columnar/columnar.h" +#include "columnar/columnar_tableam.h" /* Default values for option parameters */ #define DEFAULT_STRIPE_ROW_COUNT 150000 @@ -53,6 +54,14 @@ static const struct config_enum_entry columnar_compression_options[] = { NULL, 0, false } }; +void +columnar_init(void) +{ + columnar_init_gucs(); + columnar_tableam_init(); +} + + void columnar_init_gucs() { diff --git a/src/backend/columnar/columnar_debug.c b/src/backend/columnar/columnar_debug.c index f72ec5f8f..220d259fe 100644 --- a/src/backend/columnar/columnar_debug.c +++ b/src/backend/columnar/columnar_debug.c @@ -11,7 +11,6 @@ #include "postgres.h" #include "funcapi.h" -#include "pg_config.h" #include "access/nbtree.h" #include "access/table.h" #include "catalog/pg_am.h" diff --git a/src/backend/columnar/mod.c b/src/backend/columnar/mod.c index f2679f326..c5112a5f4 100644 --- a/src/backend/columnar/mod.c +++ b/src/backend/columnar/mod.c @@ -18,13 +18,15 @@ #include "citus_version.h" #include "columnar/columnar.h" -#include "columnar/mod.h" - #include "columnar/columnar_tableam.h" + +PG_MODULE_MAGIC; + +void _PG_init(void); + void -columnar_init(void) +_PG_init(void) { - columnar_init_gucs(); - columnar_tableam_init(); + columnar_init(); } diff --git a/src/backend/columnar/safeclib b/src/backend/columnar/safeclib new file mode 120000 index 000000000..c4da5b7ad --- /dev/null +++ b/src/backend/columnar/safeclib @@ -0,0 +1 @@ +../../../vendor/safestringlib/safeclib/ \ No newline at end of file diff --git a/src/backend/distributed/Makefile b/src/backend/distributed/Makefile index a2ffcc142..30d733ba9 100644 --- a/src/backend/distributed/Makefile +++ b/src/backend/distributed/Makefile @@ -30,9 +30,11 @@ ENSURE_SUBDIRS_EXIST := $(shell mkdir -p $(SUBDIRS)) # That patsubst rule searches all directories listed in SUBDIRS for .c # files, and adds the corresponding .o files to OBJS -OBJS += \ +ALL_OBJS = \ $(patsubst $(citus_abs_srcdir)/%.c,%.o,$(foreach dir,$(SUBDIRS), $(sort $(wildcard $(citus_abs_srcdir)/$(dir)/*.c)))) +OBJS += $(filter-out ../columnar/mod.o,$(ALL_OBJS)) + # be explicit about the default target all: @@ -84,7 +86,8 @@ endif .PHONY: clean-full install install-downgrades install-all cleanup-before-install: - rm -f $(DESTDIR)$(datadir)/$(datamoduledir)/citus* + rm -f $(DESTDIR)$(datadir)/$(datamoduledir)/citus.control + rm -f $(DESTDIR)$(datadir)/$(datamoduledir)/citus--* install: cleanup-before-install diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index e92c7d136..d30aaebc2 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -95,7 +95,7 @@ #include "utils/syscache.h" #include "utils/varlena.h" -#include "columnar/mod.h" +#include "columnar/columnar.h" /* marks shared object as one loadable by the postgres version compiled against */ PG_MODULE_MAGIC; diff --git a/src/include/columnar/columnar.h b/src/include/columnar/columnar.h index 5195cbfee..67a7b3966 100644 --- a/src/include/columnar/columnar.h +++ b/src/include/columnar/columnar.h @@ -207,6 +207,7 @@ extern int columnar_compression_level; typedef void (*ColumnarTableSetOptions_hook_type)(Oid relid, ColumnarOptions options); extern ColumnarTableSetOptions_hook_type ColumnarTableSetOptions_hook; +extern void columnar_init(void); extern void columnar_init_gucs(void); extern CompressionType ParseCompressionType(const char *compressionTypeString); diff --git a/src/include/columnar/mod.h b/src/include/columnar/mod.h deleted file mode 100644 index 7440a9fd7..000000000 --- a/src/include/columnar/mod.h +++ /dev/null @@ -1,19 +0,0 @@ -/*------------------------------------------------------------------------- - * - * mod.h - * - * Type and function declarations for columnar - * - * Copyright (c) Citus Data, Inc. - * - *------------------------------------------------------------------------- - */ - -#ifndef MOD_H -#define MOD_H - -/* Function declarations for extension loading and unloading */ -extern void columnar_init(void); -extern void columnar_fini(void); - -#endif /* MOD_H */ diff --git a/src/test/regress/expected/columnar_create.out b/src/test/regress/expected/columnar_create.out index 9cb025336..9eee11ffb 100644 --- a/src/test/regress/expected/columnar_create.out +++ b/src/test/regress/expected/columnar_create.out @@ -185,3 +185,11 @@ SELECT columnar_test_helpers.columnar_metadata_has_storage_id(:columnar_temp_sto f (1 row) +-- +-- Will throw error due to redefining GUCs, because citus is already +-- loaded and has already initialized columnar code. This test is to +-- ensure that the citus_columnar module is built and present, and +-- that it can be loaded without link failures. +-- +LOAD 'citus_columnar'; +ERROR: attempt to redefine parameter "columnar.compression" diff --git a/src/test/regress/sql/columnar_create.sql b/src/test/regress/sql/columnar_create.sql index a5861bb45..4e9c28faf 100644 --- a/src/test/regress/sql/columnar_create.sql +++ b/src/test/regress/sql/columnar_create.sql @@ -129,3 +129,11 @@ SELECT COUNT(*)=1 FROM pg_class WHERE relname='columnar_temp'; SELECT COUNT(*)=0 FROM columnar_temp; -- since we deleted all the rows, we shouldn't have any stripes for table SELECT columnar_test_helpers.columnar_metadata_has_storage_id(:columnar_temp_storage_id); + +-- +-- Will throw error due to redefining GUCs, because citus is already +-- loaded and has already initialized columnar code. This test is to +-- ensure that the citus_columnar module is built and present, and +-- that it can be loaded without link failures. +-- +LOAD 'citus_columnar';