/*
*
* Entrypoint of GpuJoin
*/
void
pgstrom_init_gpujoin(void)
{
/* turn on/off gpunestloop */
DefineCustomBoolVariable("pg_strom.enable_gpunestloop",
"Enables the use of GpuNestLoop logic",
NULL,
&enable_gpunestloop,
true,
PGC_USERSET,
GUC_NOT_IN_SAMPLE,
NULL, NULL, NULL);
/* turn on/off gpuhashjoin */
DefineCustomBoolVariable("pg_strom.enable_gpuhashjoin",
"Enables the use of GpuHashJoin logic",
NULL,
&enable_gpuhashjoin,
true,
PGC_USERSET,
GUC_NOT_IN_SAMPLE,
NULL, NULL, NULL);
#if PG_VERSION_NUM >= 110000
/* turn on/off partition wise gpujoin */
DefineCustomBoolVariable("pg_strom.enable_partitionwise_gpujoin",
"(EXPERIMENTAL) Enables partition wise GpuJoin",
NULL,
&enable_partitionwise_gpujoin,
true,
PGC_USERSET,
GUC_NOT_IN_SAMPLE,
NULL, NULL, NULL);
#else
enable_partitionwise_gpujoin = false;
#endif
/* setup path methods */
gpujoin_path_methods.CustomName = "GpuJoin";
gpujoin_path_methods.PlanCustomPath = PlanGpuJoinPath;
/* setup plan methods */
gpujoin_plan_methods.CustomName = "GpuJoin";
gpujoin_plan_methods.CreateCustomScanState = gpujoin_create_scan_state;
RegisterCustomScanMethods(&gpujoin_plan_methods);
/* setup exec methods */
gpujoin_exec_methods.CustomName = "GpuJoin";
gpujoin_exec_methods.BeginCustomScan = ExecInitGpuJoin;
gpujoin_exec_methods.ExecCustomScan = ExecGpuJoin;
gpujoin_exec_methods.EndCustomScan = ExecEndGpuJoin;
gpujoin_exec_methods.ReScanCustomScan = ExecReScanGpuJoin;
gpujoin_exec_methods.MarkPosCustomScan = NULL;
gpujoin_exec_methods.RestrPosCustomScan = NULL;
gpujoin_exec_methods.EstimateDSMCustomScan = ExecGpuJoinEstimateDSM;
gpujoin_exec_methods.InitializeDSMCustomScan = ExecGpuJoinInitDSM;
gpujoin_exec_methods.InitializeWorkerCustomScan = ExecGpuJoinInitWorker;
gpujoin_exec_methods.ReInitializeDSMCustomScan = ExecGpuJoinReInitializeDSM;
gpujoin_exec_methods.ShutdownCustomScan = ExecShutdownGpuJoin;
gpujoin_exec_methods.ExplainCustomScan = ExplainGpuJoin;
/* hook registration */
set_join_pathlist_next = set_join_pathlist_hook;
set_join_pathlist_hook = gpujoin_add_join_path;
}