From bb391a8daba6b5aef54985cbb4a6c0ecb2da9b30 Mon Sep 17 00:00:00 2001 From: Arnav Kapoor Date: Thu, 9 Apr 2026 10:52:20 +0530 Subject: [PATCH 1/6] Update test-tables.jl --- test/test-tables.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test-tables.jl b/test/test-tables.jl index c0dd974..5ae396d 100644 --- a/test/test-tables.jl +++ b/test/test-tables.jl @@ -42,9 +42,10 @@ cols = [:status, :name, :f, :t, :iter] stats, [:status, :f, :t], invariant_cols = [:name], - hdr_override = Dict(:status => "flag"), + hdr_override = Dict(:status => "flag", :name => "Name"), ) + @test :Name in propertynames(df_joined) println(df_joined) end From 7308eb1128f4553123da10cb3a180ae3b59065b9 Mon Sep 17 00:00:00 2001 From: Arnav Kapoor Date: Thu, 9 Apr 2026 10:53:44 +0530 Subject: [PATCH 2/6] Implement header overrides for invariant columns Added functionality to apply header overrides to invariant columns and rename them accordingly. --- src/join.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/join.jl b/src/join.jl index 37ee57c..e8d0f1d 100644 --- a/src/join.jl +++ b/src/join.jl @@ -48,6 +48,10 @@ function join( s = first(stats)[1] df = stats[s][:, invariant_cols] + # Apply hdr_override to invariant columns + inv_col_names = [haskey(hdr_override, c) ? hdr_override[c] : String(c) for c in invariant_cols] + rename!(df, Dict(c => Symbol(n) for (c, n) in zip(invariant_cols, inv_col_names))) + invariant_cols = [Symbol(n) for n in inv_col_names] rename_f(c, s) = begin symbol_c = Symbol(c) From c208776bf09f21aa1fbf7c73c47860746c398d69 Mon Sep 17 00:00:00 2001 From: arnavk23 Date: Thu, 9 Apr 2026 16:57:25 +0530 Subject: [PATCH 3/6] :id copilot suggesstion addition --- src/join.jl | 17 +++++++++-------- test/test-tables.jl | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/join.jl b/src/join.jl index e8d0f1d..d095413 100644 --- a/src/join.jl +++ b/src/join.jl @@ -26,6 +26,7 @@ function join( invariant_cols::Array{Symbol, 1} = Symbol[], hdr_override::AbstractDict{Symbol, String} = Dict{Symbol, String}(), ) + join_key = :id length(cols) == 0 && error("cols can't be empty") if !all(:id in propertynames(df) for (s, df) in stats) error("Missing column :id in some DataFrame") @@ -33,23 +34,23 @@ function join( error("Not all DataFrames have all columns given by `cols`") end - if :id in cols - deleteat!(cols, findall(cols .== :id)) + if join_key in cols + deleteat!(cols, findall(cols .== join_key)) end - if :id in invariant_cols - deleteat!(cols, findall(cols .== :id)) + if join_key in invariant_cols + deleteat!(invariant_cols, findall(invariant_cols .== join_key)) end - invariant_cols = [:id; invariant_cols] + invariant_cols = [join_key; invariant_cols] cols = setdiff(cols, invariant_cols) if length(cols) == 0 error("All columns are invariant") end - cols = [:id; cols] + cols = [join_key; cols] s = first(stats)[1] df = stats[s][:, invariant_cols] - # Apply hdr_override to invariant columns - inv_col_names = [haskey(hdr_override, c) ? hdr_override[c] : String(c) for c in invariant_cols] + # Apply hdr_override to invariant columns, but keep the join key stable. + inv_col_names = [c == join_key ? String(join_key) : (haskey(hdr_override, c) ? hdr_override[c] : String(c)) for c in invariant_cols] rename!(df, Dict(c => Symbol(n) for (c, n) in zip(invariant_cols, inv_col_names))) invariant_cols = [Symbol(n) for n in inv_col_names] diff --git a/test/test-tables.jl b/test/test-tables.jl index 5ae396d..d66c06c 100644 --- a/test/test-tables.jl +++ b/test/test-tables.jl @@ -49,6 +49,25 @@ cols = [:status, :name, :f, :t, :iter] println(df_joined) end + @testset "join ignores id header override" begin + df_joined = join( + stats, + [:status, :f, :t], + invariant_cols = [:name], + hdr_override = Dict(:id => "identifier", :status => "flag"), + ) + df_expected = join( + stats, + [:status, :f, :t], + invariant_cols = [:name], + hdr_override = Dict(:status => "flag"), + ) + + @test :id in propertynames(df_joined) + @test :identifier ∉ propertynames(df_joined) + @test df_joined == df_expected + end + @testset "joined results in latex format" begin df_joined = join( stats, From 8719328a298cc04be900a2cb3a3fc64b8bc9501c Mon Sep 17 00:00:00 2001 From: arnavk23 Date: Sun, 26 Apr 2026 19:03:36 +0530 Subject: [PATCH 4/6] remove join_key --- src/join.jl | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/join.jl b/src/join.jl index d095413..010633c 100644 --- a/src/join.jl +++ b/src/join.jl @@ -26,7 +26,6 @@ function join( invariant_cols::Array{Symbol, 1} = Symbol[], hdr_override::AbstractDict{Symbol, String} = Dict{Symbol, String}(), ) - join_key = :id length(cols) == 0 && error("cols can't be empty") if !all(:id in propertynames(df) for (s, df) in stats) error("Missing column :id in some DataFrame") @@ -34,23 +33,23 @@ function join( error("Not all DataFrames have all columns given by `cols`") end - if join_key in cols - deleteat!(cols, findall(cols .== join_key)) + if :id in cols + deleteat!(cols, findall(cols .== :id)) end - if join_key in invariant_cols - deleteat!(invariant_cols, findall(invariant_cols .== join_key)) + if :id in invariant_cols + deleteat!(invariant_cols, findall(invariant_cols .== :id)) end - invariant_cols = [join_key; invariant_cols] + invariant_cols = [:id; invariant_cols] cols = setdiff(cols, invariant_cols) if length(cols) == 0 error("All columns are invariant") end - cols = [join_key; cols] + cols = [:id; cols] s = first(stats)[1] df = stats[s][:, invariant_cols] - # Apply hdr_override to invariant columns, but keep the join key stable. - inv_col_names = [c == join_key ? String(join_key) : (haskey(hdr_override, c) ? hdr_override[c] : String(c)) for c in invariant_cols] + # Apply hdr_override to invariant columns, but keep :id stable. + inv_col_names = [c == :id ? "id" : (haskey(hdr_override, c) ? hdr_override[c] : String(c)) for c in invariant_cols] rename!(df, Dict(c => Symbol(n) for (c, n) in zip(invariant_cols, inv_col_names))) invariant_cols = [Symbol(n) for n in inv_col_names] From febbe18a28bd65d5545a4b301b66cca4098f906f Mon Sep 17 00:00:00 2001 From: Arnav Kapoor Date: Tue, 12 May 2026 20:24:05 +0530 Subject: [PATCH 5/6] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- test/test-tables.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test-tables.jl b/test/test-tables.jl index d66c06c..bafb00d 100644 --- a/test/test-tables.jl +++ b/test/test-tables.jl @@ -46,6 +46,7 @@ cols = [:status, :name, :f, :t, :iter] ) @test :Name in propertynames(df_joined) + @test :name ∉ propertynames(df_joined) println(df_joined) end From be35f7d1bbb594c86c859ab887bb5a8878480894 Mon Sep 17 00:00:00 2001 From: arnavk23 Date: Tue, 12 May 2026 15:04:35 +0530 Subject: [PATCH 6/6] Work with local copies to avoid mutating caller-provided arrays --- src/join.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/join.jl b/src/join.jl index 010633c..c809fde 100644 --- a/src/join.jl +++ b/src/join.jl @@ -33,6 +33,10 @@ function join( error("Not all DataFrames have all columns given by `cols`") end + # Work with local copies to avoid mutating caller-provided arrays + cols = copy(cols) + invariant_cols = copy(invariant_cols) + if :id in cols deleteat!(cols, findall(cols .== :id)) end