(state: readonly FilterResult[], isRelation: string | null, every: boolean)
| 189 | : _ |
| 190 | |
| 191 | const print = (state: readonly FilterResult[], isRelation: string | null, every: boolean) => { |
| 192 | let s = "" |
| 193 | let l = 0 |
| 194 | const printN = (n: number) => { |
| 195 | return n === 0 ? "" : Array.range(1, n).map(() => " ").join("") |
| 196 | } |
| 197 | for (const e of state) { |
| 198 | switch (e.t) { |
| 199 | case "where": |
| 200 | s += statement(e, i++) |
| 201 | break |
| 202 | case "or": |
| 203 | s += ` OR ${statement(e, i++)}` |
| 204 | break |
| 205 | case "and": |
| 206 | s += ` AND ${statement(e, i++)}` |
| 207 | break |
| 208 | case "or-scope": { |
| 209 | ++l |
| 210 | if (!every) every = e.relation === "every" |
| 211 | const rel = isRelationCheck(e.result, isRelation) |
| 212 | if (rel) { |
| 213 | const rel = (e.result[0]! as { path: string }).path.split(".-1.")[0] |
| 214 | s += isRelation |
| 215 | ? ` OR (\n${printN(l + 1)}${print(e.result, rel, every)}\n${printN(l)})` |
| 216 | : ` OR (\n${printN(l + 1)}${ |
| 217 | every ? "NOT " : "" |
| 218 | }EXISTS(SELECT VALUE ${rel} FROM ${rel} IN f.${rel} WHERE ${ |
| 219 | print( |
| 220 | e |
| 221 | .result |
| 222 | .map(flip(every)), |
| 223 | rel, |
| 224 | every |
| 225 | ) |
| 226 | }))` |
| 227 | } else { |
| 228 | s += ` OR (\n${printN(l + 1)}${print(e.result, null, every)}\n${printN(l)})` |
| 229 | } |
| 230 | --l |
| 231 | break |
| 232 | } |
| 233 | case "and-scope": { |
| 234 | ++l |
| 235 | if (!every) every = e.relation === "every" |
| 236 | const rel = isRelationCheck(e.result, isRelation) |
| 237 | if (rel) { |
| 238 | const rel = (e.result[0]! as { path: string }).path.split(".-1.")[0] |
| 239 | s += isRelation |
| 240 | ? ` AND (\n${printN(l + 1)}${print(e.result, rel, every)}\n${printN(l)})` |
| 241 | : ` AND (\n${printN(l + 1)}${ |
| 242 | every ? "NOT " : "" |
| 243 | }EXISTS(SELECT VALUE ${rel} FROM ${rel} IN f.${rel} WHERE ${ |
| 244 | print(e.result.map(flip(every)), rel, every) |
| 245 | }))` |
| 246 | } else { |
| 247 | s += ` AND (\n${printN(l + 1)}${print(e.result, null, every)}\n${printN(l)})` |
| 248 | } |
no test coverage detected
searching dependent graphs…