MCPcopy Create free account
hub / github.com/apache/cloudberry / svec_concat

Function svec_concat

gpcontrib/gp_sparse_vector/operators.c:78–124  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

76Datum svec_concat(PG_FUNCTION_ARGS);
77PG_FUNCTION_INFO_V1( svec_concat );
78Datum
79svec_concat(PG_FUNCTION_ARGS)
80{
81 if (PG_ARGISNULL(0) && (!PG_ARGISNULL(1)))
82 {
83 PG_RETURN_SVECTYPE_P(PG_GETARG_SVECTYPE_P(1));
84 } else if (PG_ARGISNULL(0) && PG_ARGISNULL(1))
85 {
86 PG_RETURN_NULL();
87 } else if (PG_ARGISNULL(1))
88 {
89 PG_RETURN_SVECTYPE_P(PG_GETARG_SVECTYPE_P(0));
90 } else
91 {
92
93 SvecType *svec1 = PG_GETARG_SVECTYPE_P(0);
94 SvecType *svec2 = PG_GETARG_SVECTYPE_P(1);
95 SparseData left = sdata_from_svec(svec1);
96 SparseData right = sdata_from_svec(svec2);
97 SparseData sdata = makeEmptySparseData();
98 char *vals,*index;
99 int l_val_len = left->vals->len;
100 int r_val_len = right->vals->len;
101 int l_ind_len = left->index->len;
102 int r_ind_len = right->index->len;
103 int val_len=l_val_len+r_val_len;
104 int ind_len=l_ind_len+r_ind_len;
105
106 vals = (char *)palloc(sizeof(char)*val_len);
107 index = (char *)palloc(sizeof(char)*ind_len);
108
109 memcpy(vals ,left->vals->data,l_val_len);
110 memcpy(vals+l_val_len,right->vals->data,r_val_len);
111 memcpy(index, left->index->data,l_ind_len);
112 memcpy(index+l_ind_len,right->index->data,r_ind_len);
113
114 sdata->vals = makeStringInfoFromData(vals,val_len);
115 sdata->index = makeStringInfoFromData(index,ind_len);
116 sdata->type_of_data = left->type_of_data;
117 sdata->unique_value_count = left->unique_value_count+
118 right->unique_value_count;
119 sdata->total_value_count = left->total_value_count+
120 right->total_value_count;
121
122 PG_RETURN_SVECTYPE_P(svec_from_sparsedata(sdata,true));
123 }
124}
125
126
127Datum svec_eq(PG_FUNCTION_ARGS);

Callers

nothing calls this directly

Calls 5

sdata_from_svecFunction · 0.85
makeEmptySparseDataFunction · 0.85
makeStringInfoFromDataFunction · 0.85
svec_from_sparsedataFunction · 0.85
pallocFunction · 0.50

Tested by

no test coverage detected