(dir)
| 4083 | function parseSearchAnd(tokens, i, params, filters) { |
| 4084 | let [left, j] = parseSearchUnary(tokens, i, params, filters); |
| 4085 | while (j < tokens.length && tokens[j].t === 'op' && tokens[j].op === 'AND') { |
| 4086 | j++; |
| 4087 | const [right, k] = parseSearchUnary(tokens, j, params, filters); |
| 4088 | left = `(${left}) AND (${right})`; |
| 4089 | j = k; |
| 4090 | } |
| 4091 | return [left, j]; |
| 4092 | } |
| 4093 | |
| 4094 | function parseSearchOr(tokens, i, params, filters) { |
| 4095 | let [left, j] = parseSearchAnd(tokens, i, params, filters); |
| 4096 | while (j < tokens.length && tokens[j].t === 'op' && tokens[j].op === 'OR') { |
| 4097 | j++; |
| 4098 | const [right, k] = parseSearchAnd(tokens, j, params, filters); |
| 4099 | left = `(${left}) OR (${right})`; |
| 4100 | j = k; |
| 4101 | } |
| 4102 | return [left, j]; |
| 4103 | } |
| 4104 | |
| 4105 | function compileSearchTokensToSQL(tokens, params, filters) { |
| 4106 | const t = sanitizeSearchTokensForCompile(tokens); |
| 4107 | if (t.length === 0) return null; |
| 4108 | try { |
| 4109 | const [sql, end] = parseSearchOr(t, 0, params, filters); |
| 4110 | if (end !== t.length) return null; |
| 4111 | return sql; |
| 4112 | } catch (e) { |
| 4113 | console.warn('compileSearchTokensToSQL failed:', e.message); |
| 4114 | return null; |
| 4115 | } |
| 4116 | } |
| 4117 |
no test coverage detected