|
2062 | 2062 | "Argument \"{0}\" is incompatible with numeric field \"{1}\"." |
2063 | 2063 | value (name field)))))) |
2064 | 2064 |
|
2065 | | - [[(:or ">" ">=" "<" "<=") (field :guard #(not (str/includes? % "."))) _]] |
| 2065 | + [[(:or ">" ">=" "<" "<=") |
| 2066 | + (field :guard #(= (count (parse/parse-field %)) 1)) |
| 2067 | + _]] |
2066 | 2068 | (let [col-type (get-in query-context [:projections field :type])] |
2067 | 2069 | (when-not (or (vec? field) |
2068 | 2070 | (contains? #{:numeric :timestamp :jsonb-scalar} |
|
2366 | 2368 | :value value})) |
2367 | 2369 |
|
2368 | 2370 | [["=" column-name value]] |
2369 | | - (let [colname (first (str/split column-name #"\.")) |
2370 | | - cinfo (get-in query-rec [:projections colname])] |
| 2371 | + ;; FIXME: pass parsed representation down |
| 2372 | + (let [[top & path] (parse/parse-field column-name) |
| 2373 | + cinfo (get-in query-rec [:projections (:name top)])] |
2371 | 2374 | (case (:type cinfo) |
2372 | 2375 | :timestamp |
2373 | 2376 | (map->BinaryExpression {:operator := |
|
2384 | 2387 | :value (facts/factpath-to-string value)}) |
2385 | 2388 |
|
2386 | 2389 | :queryable-json |
2387 | | - (if (string/includes? column-name "[") |
| 2390 | + (if (some #(= ::parse/indexed-field-part (:kind %)) path) |
2388 | 2391 | (map->JsonbPathBinaryExpression {:field column-name |
2389 | 2392 | :column-data cinfo |
2390 | 2393 | :value value |
|
2442 | 2445 | (map str value))}))) |
2443 | 2446 |
|
2444 | 2447 | [[(op :guard #{">" "<" ">=" "<="}) column-name value]] |
2445 | | - (let [colname (first (str/split column-name #"\.")) |
2446 | | - {:keys [type] :as cinfo} (get-in query-rec [:projections colname])] |
| 2448 | + ;; FIXME: pass parsed representation down |
| 2449 | + (let [[top & path] (parse/parse-field column-name) |
| 2450 | + {:keys [type] :as cinfo} (get-in query-rec [:projections (:name top)])] |
2447 | 2451 | (cond |
2448 | 2452 | (= :timestamp type) |
2449 | 2453 | (map->BinaryExpression {:operator (keyword op) |
|
2498 | 2502 | (map->NullExpression {:column cinfo :null? value}))) |
2499 | 2503 |
|
2500 | 2504 | [["~" column-name value]] |
2501 | | - (let [colname (first (str/split column-name #"\.")) |
2502 | | - cinfo (get-in query-rec [:projections colname])] |
| 2505 | + ;; FIXME: pass parsed representation down |
| 2506 | + (let [[top] (parse/parse-field column-name) |
| 2507 | + cinfo (get-in query-rec [:projections (:name top)])] |
2503 | 2508 | (case (:type cinfo) |
2504 | 2509 | :array |
2505 | 2510 | (map->ArrayRegexExpression {:column cinfo :value value}) |
|
0 commit comments