         ljoincol.push_back(left_cols[ left_join_cols[i] ]);
         rjoincol.push_back(right_cols[ right_join_cols[i] ]);
     }
+
+
     gdf_error join_err = join_call<join_type>(num_cols_to_join,
             ljoincol.data(), rjoincol.data(),
             left_index_out, right_index_out,

        for (auto &join_index : l_join_indices) {
            gdf_column_view(result_cols[i], nullptr, nullptr, join_size, left_cols[join_index]->dtype);
            int col_width; get_column_byte_width(result_cols[i], &col_width);
            cudaMalloc(&(result_cols[i]->data), col_width * join_size);
            cudaMalloc(&(result_cols[i]->valid), sizeof(gdf_valid_type)*gdf_get_num_chars_bitmask(join_size));
            cudaMemset(result_cols[i]->valid, 0, sizeof(gdf_valid_type)*gdf_get_num_chars_bitmask(join_size));
            ++i;
        }
    }

    for (int i = 0; i < left_table_end; ++i) {
        gdf_column_view(result_cols[i], nullptr, nullptr, join_size, lnonjoincol[i]->dtype);
        int col_width; get_column_byte_width(result_cols[i], &col_width);
        CUDA_TRY( cudaMalloc(&(result_cols[i]->data), col_width * join_size) );
        CUDA_TRY( cudaMalloc(&(result_cols[i]->valid), sizeof(gdf_valid_type)*gdf_get_num_chars_bitmask(join_size)) );
        CUDA_TRY( cudaMemset(result_cols[i]->valid, 0, sizeof(gdf_valid_type)*gdf_get_num_chars_bitmask(join_size)) );
    }
    for (int i = right_table_begin; i < result_num_cols; ++i) {
        gdf_column_view(result_cols[i], nullptr, nullptr, join_size, rnonjoincol[i - right_table_begin]->dtype);
        int col_width; get_column_byte_width(result_cols[i], &col_width);
        CUDA_TRY( cudaMalloc(&(result_cols[i]->data), col_width * join_size) );
        CUDA_TRY( cudaMalloc(&(result_cols[i]->valid), sizeof(gdf_valid_type)*gdf_get_num_chars_bitmask(join_size)) );
        CUDA_TRY( cudaMemset(result_cols[i]->valid, 0, sizeof(gdf_valid_type)*gdf_get_num_chars_bitmask(join_size)) );
    }
    //create joined output column data buffers
    {
