|
1 | | -# 2.10.0 |
| 1 | +## 2.10.0 - 2026-04-24 |
2 | 2 |
|
3 | 3 | * Add support for compiling `Predicate.native` to Sequel, if the |
4 | 4 | operand respond to :sql or :sql_literal |
5 | 5 |
|
6 | | -# 2.9.0 - 2025-04-03 |
| 6 | +## 2.9.0 - 2025-04-03 |
7 | 7 |
|
8 | 8 | * Add Predicate#to_hashes that returns a pair of positive and |
9 | 9 | negative hashes. Generalization of to_hash where neq are used. |
10 | 10 |
|
11 | | -# 2.8.0 - 2023-06-09 |
| 11 | +## 2.8.0 - 2023-06-09 |
12 | 12 |
|
13 | 13 | * BREAKING: removed support for ruby < 2.7 and upgraded sexpr |
14 | 14 | to 1.1.x |
|
18 | 18 | Implementation is fuly functional, yet error messages will |
19 | 19 | be improved in the future by a better usage of minitest itself. |
20 | 20 |
|
21 | | -# 2.7.1 - 2022-04-21 |
| 21 | +## 2.7.1 - 2022-04-21 |
22 | 22 |
|
23 | 23 | * Add shadow support for Exists tree nodes, that are used by |
24 | 24 | Bmg for some `restrict -> WHERE` translations. |
25 | 25 |
|
26 | | -# 2.7.0 - 2022-02-10 |
| 26 | +## 2.7.0 - 2022-02-10 |
27 | 27 |
|
28 | 28 | * Add (experimental) support for translation of `empty` and |
29 | 29 | `intersect` on arrays to usage of PostgreSQL's `pg_array` |
30 | 30 | operators (`overlaps` in particular). |
31 | 31 |
|
32 | | -# 2.6.0 - 2021-12-11 |
| 32 | +## 2.6.0 - 2021-12-11 |
33 | 33 |
|
34 | 34 | * Upgraded `sexpr` to 1.0 |
35 | 35 |
|
|
45 | 45 | Predicate.h(:x => [2,3], ...) # in(:x, [2,2]) & ... |
46 | 46 | Predicate.h(:x => /a-z/, ...) # match(:x, /a-z/) & ... |
47 | 47 |
|
48 | | -# 2.5.0 - 2020-12-30 |
| 48 | +## 2.5.0 - 2020-12-30 |
49 | 49 |
|
50 | 50 | * Add `Predicate.dsl` for building complex expressions without having |
51 | 51 | to prefix factory methods with `Predicate.` all the time. |
|
75 | 75 | * Enhanced README, specified the public API, add jeny code blocks to |
76 | 76 | help contributors providing new predicates. |
77 | 77 |
|
78 | | -# 2.4.0 / 2020-07-23 |
| 78 | +## 2.4.0 / 2020-07-23 |
79 | 79 |
|
80 | 80 | * Add Predicate#to_hash that allows getting back a Hash object |
81 | 81 | representing the same predicate as of `Predicate.coerce` semantics. |
82 | 82 | The method raises an ArgumentError if the predicate cannot be |
83 | 83 | simplified so as to preserve the semantics. |
84 | 84 |
|
85 | | -# 2.3.3 / 2020-07-08 |
| 85 | +## 2.3.3 / 2020-07-08 |
86 | 86 |
|
87 | 87 | * Add Predicate#unqualify that transforms all qualified identifiers to |
88 | 88 | normal identifiers. The resulting predicate might not be semantically |
89 | 89 | equivalent. |
90 | 90 |
|
91 | | -# 2.3.2 / 2020-07-08 |
| 91 | +## 2.3.2 / 2020-07-08 |
92 | 92 |
|
93 | 93 | * Fix Predicate#& when using qualified identifier. The qualifier was not |
94 | 94 | correctly taken into account, yielding conjunctions wrongly loosing |
95 | 95 | terms. |
96 | 96 |
|
97 | | -# 2.3.1 / 2020-04-29 |
| 97 | +## 2.3.1 / 2020-04-29 |
98 | 98 |
|
99 | 99 | * Fix #eq against #in having a placeholder. Yields a undefined method |
100 | 100 | `include?`. |
101 | 101 |
|
102 | | -# 2.3.0 / 2020-04-20 |
| 102 | +## 2.3.0 / 2020-04-20 |
103 | 103 |
|
104 | 104 | * Add an experimental support for literal placeholders. The aim is to let |
105 | 105 | build complex expressions with unknown literals, to be bound later using |
|
113 | 113 |
|
114 | 114 | * Fix Predicate.intersect having wrong #constants_variables logic. |
115 | 115 |
|
116 | | -# 2.2.1 / 2020-01-21 |
| 116 | +## 2.2.1 / 2020-01-21 |
117 | 117 |
|
118 | 118 | * Fix `in(:x, [2, 3]) & eq(:x, 1)` begin wrongly optimized as `eq(:x, 1)` |
119 | 119 | while it must yield a contradiction. |
120 | 120 |
|
121 | | -# 2.2.0 / 2019-06-07 |
| 121 | +## 2.2.0 / 2019-06-07 |
122 | 122 |
|
123 | 123 | * Fix SQL compilation of `Predicate#in` where the list of values |
124 | 124 | contains nil, including edge cases (e.g. where only nil is present). |
|
127 | 127 | * Add `Predicate#call` alias to `Predicate#evaluate` in order to let |
128 | 128 | client write simpler expressions. |
129 | 129 |
|
130 | | -# 2.1 |
| 130 | +## 2.1 |
131 | 131 |
|
132 | 132 | * Introduction of an `opaque` node kind to help with pseudo-literals |
133 | 133 | used in IN expressions. IN expressions now accept any right term, |
134 | 134 | instead of an array of values. |
135 | 135 |
|
136 | | -# 2.0 - 2018-05-28 |
| 136 | +## 2.0 - 2018-05-28 |
137 | 137 |
|
138 | 138 | * Add `Predicate#match` to match attributes against strings and |
139 | 139 | regular expressions. |
|
143 | 143 | also because they tend to be dangerous to use from a security point |
144 | 144 | of view (allowing end user code injection). |
145 | 145 |
|
146 | | -# 1.3.4 / 2018-03-30 |
| 146 | +## 1.3.4 / 2018-03-30 |
147 | 147 |
|
148 | 148 | * `Predicate.in` now returns a contradiction when the set of values |
149 | 149 | is known to be empty. |
150 | 150 |
|
151 | | -# 1.3.3 / 2018-03-16 |
| 151 | +## 1.3.3 / 2018-03-16 |
152 | 152 |
|
153 | 153 | * Add `Predicate#to_s` and `#inspect` with a more readable predicate |
154 | 154 | representation. |
155 | 155 |
|
156 | | -# 1.3.2 / 2018-03-14 |
| 156 | +## 1.3.2 / 2018-03-14 |
157 | 157 |
|
158 | 158 | * Fix `#evaluate` on `Predicate.in`. |
159 | 159 |
|
160 | | -# 1.3.1 / 2018-03-13 |
| 160 | +## 1.3.1 / 2018-03-13 |
161 | 161 |
|
162 | 162 | * Fix `#evaluate` on `Predicate.intersect`. |
163 | 163 |
|
164 | | -# 1.3 / 2018-03-13 |
| 164 | +## 1.3 / 2018-03-13 |
165 | 165 |
|
166 | 166 | * Add various & optimizations, typically those yielding tautologies |
167 | 167 | and contradictions. |
|
177 | 177 | * Changed `Predicate#evaluate` to avoid relying on an unsafe ruby |
178 | 178 | code generation. |
179 | 179 |
|
180 | | -# 1.2 / 2018-03-09 |
| 180 | +## 1.2 / 2018-03-09 |
181 | 181 |
|
182 | 182 | * Add `Predicate#intersect` that has same limitations than `#in` |
183 | 183 | (only `identifier OP values` is supported) but an array/set |
|
200 | 200 | is a Sequel compatible literal, that is, an object responding to |
201 | 201 | `:sql_literal`. |
202 | 202 |
|
203 | | -# 1.1.3 / 2018-03-07 |
| 203 | +## 1.1.3 / 2018-03-07 |
204 | 204 |
|
205 | 205 | * Document `and_split` and review all actual implementations to make sure |
206 | 206 | of their correctness. Let Native implement the specification without |
207 | 207 | throwing a NotSupportedError. |
208 | 208 |
|
209 | | -# 1.1.2 / 2018-03-06 |
| 209 | +## 1.1.2 / 2018-03-06 |
210 | 210 |
|
211 | 211 | * Fix error raised by Sequel when trying to compile a Native predicate. |
212 | 212 | Predicate::NotSupportedError must be raised, not NotImplementedError. |
213 | 213 |
|
214 | | -# 1.1.1 / 2018-03-03 |
| 214 | +## 1.1.1 / 2018-03-03 |
215 | 215 |
|
216 | 216 | * Removed unnecessary & unused 'path' dependency. |
217 | 217 |
|
218 | | -# 1.1.0 / 2018-03-03 |
| 218 | +## 1.1.0 / 2018-03-03 |
219 | 219 |
|
220 | 220 | * Adds `Predicate.from_hash(x: 12, y: ['foo', 'bar'])`, also supported |
221 | 221 | by `Predicate.coerce(...)`, with `x = 12 and y in ('foo','bar')` |
|
226 | 226 | must be required by the user. `Predicate.to_sequel` is only available |
227 | 227 | if `require 'predicate/sequel'` is done first. |
228 | 228 |
|
229 | | -# 1.0.0 / 2018-03-03 |
| 229 | +## 1.0.0 / 2018-03-03 |
230 | 230 |
|
231 | 231 | Predicate 1.0.0, extracted & refactored from alf-core. |
232 | 232 |
|
|
0 commit comments