  Joins in native graph database management systems (GDBMSs) are predefined to
the system as edges, which are indexed in adjacency list indices and serve as
pointers. This contrasts with and can be more performant than value-based joins
in RDBMSs and has lead researchers to investigate ways to integrate predefined
joins directly into RDBMSs. Existing approaches adopt a strict separation of
graph and relational data and processors, where a graph-specific processor uses
left-deep and index nested loop joins for a subset of joins. This may be
suboptimal, and may lead to non-sequential scans of data in some queries. We
propose a purely relational approach to integrate predefined joins in columnar
RDBMSs that uses row IDs (RIDs) of tuples as pointers. Users can predefine
equality joins between any two tables, which leads to materializing RIDs in
extended tables and optionally in RID indices. Instead of using the RID index
to perform the join directly, we use it primarily in hash joins to generate
semi-join filters that can be passed to scans using sideways information
passing, ensuring sequential scans. In some settings, we also use RID indices
to reduce the number of joins in query plans. Our approach does not introduce
any graph-specific system components, can execute predefined joins on any join
plan, and can improve performance on any workload that contains equality joins
that can be predefined. We integrated our approach to DuckDB and call the
resulting system {\em GRainDB}. We demonstrate that GRainDB far improves the
performance of DuckDB on relational and graph workloads with large many-to-many
joins, making it competitive with a state-of-the-art GDBMS, and incurs no major
overheads otherwise.
