Commit ba8e3cb
committed
Fix composite SRF (RETURNS TABLE) to correctly handle array returns
The composite case in call_srf_function had three bugs:
1. Used argv[0] (input argument) instead of ret (JS return value),
causing all column values to be NULL.
2. Did not handle array-of-objects return for RETURNS TABLE/SETOF,
only processing a single object. JS functions returning arrays
like [{id:1, name:'a'}, {id:2, name:'b'}] would crash (segfault).
3. Missing NULL check on pfree(values) when pljs_jsvalue_to_datums
returns NULL.
Also fixed a minor memory leak: added JS_FreeValue for array elements
in the non-composite scalar array case.
Added regression tests for:
- RETURNS TABLE with array of objects
- RETURNS TABLE with single object return
- RETURNS SETOF composite with array return1 parent 194c4d5 commit ba8e3cb
3 files changed
Lines changed: 112 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
239 | 239 | | |
240 | 240 | | |
241 | 241 | | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
242 | 288 | | |
243 | 289 | | |
244 | 290 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
148 | 148 | | |
149 | 149 | | |
150 | 150 | | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
151 | 182 | | |
152 | 183 | | |
153 | 184 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1183 | 1183 | | |
1184 | 1184 | | |
1185 | 1185 | | |
1186 | | - | |
| 1186 | + | |
| 1187 | + | |
| 1188 | + | |
| 1189 | + | |
| 1190 | + | |
| 1191 | + | |
| 1192 | + | |
| 1193 | + | |
| 1194 | + | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | + | |
| 1210 | + | |
1187 | 1211 | | |
1188 | | - | |
1189 | | - | |
1190 | | - | |
1191 | | - | |
| 1212 | + | |
| 1213 | + | |
1192 | 1214 | | |
1193 | | - | |
1194 | | - | |
| 1215 | + | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
1195 | 1222 | | |
1196 | 1223 | | |
1197 | 1224 | | |
| |||
1203 | 1230 | | |
1204 | 1231 | | |
1205 | 1232 | | |
| 1233 | + | |
1206 | 1234 | | |
1207 | 1235 | | |
1208 | 1236 | | |
| |||
0 commit comments