pg_query 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f5f97de1d1113193f804264c63e29434831dbec88c917471a64b93302308310e
4
- data.tar.gz: fbb5024c13381a02b3706bd9366f62f2e499a8afb30f25f5dfb4ae15723ae2a6
3
+ metadata.gz: f19538f4d41c891a9b7704cd56becd762e44f5f766fba06c07f89b2e1d61b69f
4
+ data.tar.gz: df5a48fd5582bacd09098a5d37c21794a6f1caff82b16fe4597be2257bb0eaa1
5
5
  SHA512:
6
- metadata.gz: a4b80ec2176046a6f6f99cb9a053f5dd5cc10dfc0bed7f98276b46088e054e33da6efb1d7e2d1fc52264b2a915d0048007b3a800507a9eb58da460bfe4bedcd3
7
- data.tar.gz: 174fd09a8ee19b437d4601cfe544a8aa25cf88d6c38a1aa81814f8a59c54a4cbb0f6497d1af7fb4b8034356546f35f1841d875be3b434136c984ec0747c1e1e2
6
+ metadata.gz: 0326c810f5589b03d3a1809e98c199984c6bc013dfd93228cb6e35e5378cf39421ff0690c5dc67431f4b1501815fa80245d5e0cfcb1c75186054aa5d1300d684
7
+ data.tar.gz: 476514b25750f97ab9f27c55ccf6c221b6ab16687677178adc9f2ed219a85286dca983a36b25e703a3f0e9f080268ce6e82b69fbb932d4e50195bc711f434530
data/CHANGELOG.md CHANGED
@@ -1,8 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ * ...
6
+
7
+
8
+ ## 2.0.3 2021-04-05
9
+
10
+ * Update to libpg_query 13-2.0.4
11
+ - Normalize: Fix handling of two subsequent DefElem elements (avoids crash)
12
+ - Deparser: Fix crash in CopyStmt with HEADER or FREEZE inside WITH parens
13
+
14
+
15
+ ## 2.0.2 2021-03-31
16
+
17
+ * `COALESCE` arguments are now included in `#filter_columns`
18
+ * Improve error message for protobuf parse failures
19
+ * Extconf: Fix object path regexp
20
+ - This accidentally replaced `.c` in the wrong parts of the path in some cases,
21
+ causing build failures
22
+ * Update to libpg_query 13-2.0.2
23
+ - Fix ARM builds: Avoid dependency on cpuid.h header
24
+ - Simplify deparser of TableLikeClause
25
+ - Fix asprintf warnings by ensuring _GNU_SOURCE is set early enough
26
+
27
+
3
28
  ## 2.0.1 2021-03-18
4
29
 
5
- * Fix Gem spec to correctly reference include files
30
+ * Fix gemspec to correctly reference include files
6
31
  - This would have shown as a build failure when using the published `2.0.0` gem
7
32
 
8
33
 
@@ -19,23 +44,23 @@
19
44
  * Use new deparser maintained directly in libpg_query
20
45
  * This replaces the complete Ruby deparser with a new, more complete deparser
21
46
  that is directly maintained in libpg_query. Further deparser improvements
22
- should be directly contributed to [libpg_query](https://github.com/pganalyze/libpg_query)
23
- * Tables helper: Return more details through "tables_with_details" method
24
- * This is renamed from the previously badly named "tables_with_types"
47
+ should be directly contributed to [libpg_query]
48
+ * Tables helper: Return more details through `#tables_with_details` method
49
+ * This is renamed from the previously badly named `#tables_with_types`
25
50
  method. Note that this change should not affect the output of the
26
- primary "tables" helper.
51
+ primary `tables` helper.
27
52
  * Replace on-demand libpg_query source download with bundled source code
28
53
  * Its unnecessary to download the source on-demand, and makes this more
29
54
  complex than it needs to be. Instead, introduce a new "update_source" rake
30
55
  task that can be called to refresh the source for a specified revision.
31
56
  * Re-implement smart truncation without requiring a special node type
32
- * This ensures the truncate method works with the new deparser, without
57
+ * This ensures the `#truncate` method works with the new deparser, without
33
58
  the C level code needing to know about it. We may add it in the C library
34
59
  in the future for edge cases that can't be covered by this slightly
35
60
  hack-ish approach, but for now this avoids unnecessary C library
36
61
  deparser modifications with non-standard node types.
37
- * Update Ruby finterprinting to new fingerprint format and XXH3 hash
38
- * Note that its recommended to use PgQuery.fingerprint for performance
62
+ * Update Ruby fingerprinting to new fingerprint format and XXH3 hash
63
+ * Note that its recommended to use `PgQuery.fingerprint` for performance
39
64
  reasons, but when the tree has been modified, it can be convenient to
40
65
  run a Ruby-side fingerprint instead of the C-based one that is faster.
41
66
 
@@ -44,25 +69,25 @@
44
69
 
45
70
  * Incorporate newer libpg_query updates in 10-1.0.3 and 10-1.0.4
46
71
  * Adds support for running on ARM
47
- * Fixes asprintf warning during builds
72
+ * Fixes an asprintf warning during builds
48
73
  * Updates to newer Postgres 10 patch release (10.15)
49
- * Deparsing improvements by [@emin100](https://github.com/emin100)
50
- * Add support for additional DROP statements (#147)
51
- * Fix CREATE TABLE AS - Support without TEMP, Add ON COMMIT (#149)
52
- * Empty target list support (#156)
53
- * UNION parentheses (#158)
54
- * OVERLAY keyword function (#161)
55
- * Array indirection (#162)
56
- * ARRAY functions (#163)
57
- * Correctly handle column names that need escaping in INSERT and UPDATE statements (#164)
58
- * INSERT INTO ON CONFLICT (#166)
59
- * LATERAL JOIN (#168)
60
- * UPDATE FROM clause (#170)
61
- * SELECT aggregate FILTER (#175)
62
- * INTERSECT operator (#176)
63
- * Deparsing: Improve handling of boolean type casts [@himanshu-pro](https://github.com/himanshu-pro) & [@emin100](https://github.com/emin100)
64
- * `tables` method: Find tables in the subquery of CREATE TABLE AS (#172) [@Tassosb](https://github.com/Tassosb)
65
- * Support Ruby 3.0, verify SHA256 checksum of downloaded libpg_query (#178) [@stanhu](https://github.com/stanhu)
74
+ * Deparsing improvements by [@emin100]
75
+ * Add support for additional DROP statements ([#147](https://github.com/pganalyze/pg_query/pull/147))
76
+ * Fix `CREATE TABLE AS` - Support without `TEMP`, Add `ON COMMIT` ([#149](https://github.com/pganalyze/pg_query/pull/149))
77
+ * Empty target list support ([#156](https://github.com/pganalyze/pg_query/pull/156))
78
+ * `UNION` parentheses ([#158](https://github.com/pganalyze/pg_query/pull/158))
79
+ * `OVERLAY` keyword function ([#161](https://github.com/pganalyze/pg_query/pull/161))
80
+ * Array indirection ([#162](https://github.com/pganalyze/pg_query/pull/162))
81
+ * `ARRAY` functions ([#163](https://github.com/pganalyze/pg_query/pull/163))
82
+ * Correctly handle column names that need escaping in `INSERT` and `UPDATE` statements ([#164](https://github.com/pganalyze/pg_query/pull/164))
83
+ * `INSERT INTO ON CONFLICT` ([#166](https://github.com/pganalyze/pg_query/pull/166))
84
+ * `LATERAL JOIN` ([#168](https://github.com/pganalyze/pg_query/pull/168))
85
+ * `UPDATE FROM` clause ([#170](https://github.com/pganalyze/pg_query/pull/170))
86
+ * `SELECT` aggregate `FILTER` ([#175](https://github.com/pganalyze/pg_query/pull/175))
87
+ * `INTERSECT` operator ([#176](https://github.com/pganalyze/pg_query/pull/176))
88
+ * Deparsing: Improve handling of boolean type casts [@himanshu-pro] & [@emin100]
89
+ * `tables` method: Find tables in the subquery of `CREATE TABLE AS` ([#172](https://github.com/pganalyze/pg_query/pull/172)) [@Tassosb]
90
+ * Support Ruby 3.0, verify SHA256 checksum of downloaded libpg_query ([#178](https://github.com/pganalyze/pg_query/pull/178)) [@stanhu]
66
91
  * Verify SHA256 checksum to guard against any malicious attempts to change the archive
67
92
  * Use `URI.open` to fix Ruby 3.0 support
68
93
 
@@ -78,69 +103,69 @@
78
103
 
79
104
  ## 1.1.1 2019-11-10
80
105
 
81
- * Deparsing improvements by [@emin100](https://github.com/emin100)
82
- * Deparse ILIKE, COLLATE and DISCARD (#133)
83
- * CREATE CAST (#136)
84
- * CREATE SCHEMA (#136)
85
- * UNION, UNION ALL and EXCEPT in SELECT queries (#136)
86
- * CREATE DOMAIN (#145)
87
- * Subquery indirection (#157)
88
- * Fix Type Cast Parentheses Problem (#152)
89
- * SELECT INTO (#151)
90
- * SET DEFAULT in INSERT INTO (#154)
91
- * REVOKE (#155)
92
- * PREPARE and EXECUTE (#148)
93
- * INSERT INTO ... RETURNING (#153)
94
- * Fix Alter .. RENAME SQL (#146)
95
- * Deparsing improvements by [@herwinw](https://github.com/herwinw)
96
- * Fix subquery in COPY in deparse (#112)
97
- * Function call indirection (#116)
98
- * Function without parameters (#117)
99
- * CREATE AGGREGATE
100
- * CREATE OPERATOR
101
- * CREATE TYPE
102
- * GRANT statements
103
- * DROP SCHEMA
104
- * Deparsing improvements by [@akiellor](https://github.com/akiellor)
105
- * Named window functions (#150)
106
- * Deparsing improvements by [@himanshu](https://github.com/himanshu)
107
- * Arguments in custom types (#143)
108
- * Use "double precision" instead of "double" type name (#139)
109
- * Use explicit -z flag to support OpenBSD tar (#134) [@sirn](https://github.com/sirn)
106
+ * Deparsing improvements by [@emin100]
107
+ * Deparse `ILIKE`, `COLLATE` and `DISCARD` ([#133](https://github.com/pganalyze/pg_query/pull/133))
108
+ * `CREATE CAST` ([#136](https://github.com/pganalyze/pg_query/pull/136))
109
+ * `CREATE SCHEMA` ([#136](https://github.com/pganalyze/pg_query/pull/136))
110
+ * `UNION`, `UNION ALL` and `EXCEPT` in `SELECT` queries ([#136](https://github.com/pganalyze/pg_query/pull/136))
111
+ * `CREATE DOMAIN` ([#145](https://github.com/pganalyze/pg_query/pull/145))
112
+ * Subquery indirection ([#157](https://github.com/pganalyze/pg_query/pull/157))
113
+ * Fix Type Cast Parentheses Problem ([#152](https://github.com/pganalyze/pg_query/pull/152))
114
+ * `SELECT INTO` ([#151](https://github.com/pganalyze/pg_query/pull/151))
115
+ * `SET DEFAULT` in `INSERT INTO` ([#154](https://github.com/pganalyze/pg_query/pull/154))
116
+ * `REVOKE` ([#155](https://github.com/pganalyze/pg_query/pull/155))
117
+ * `PREPARE` and `EXECUTE` ([#148](https://github.com/pganalyze/pg_query/pull/148))
118
+ * `INSERT INTO ... RETURNING` ([#153](https://github.com/pganalyze/pg_query/pull/153))
119
+ * Fix Alter .. `RENAME SQL` ([#146](https://github.com/pganalyze/pg_query/pull/146))
120
+ * Deparsing improvements by [@herwinw]
121
+ * Fix subquery in `COPY` in deparse ([#112](https://github.com/pganalyze/pg_query/pull/112))
122
+ * Function call indirection ([#116](https://github.com/pganalyze/pg_query/pull/116))
123
+ * Function without parameters ([#117](https://github.com/pganalyze/pg_query/pull/117))
124
+ * `CREATE AGGREGATE`
125
+ * `CREATE OPERATOR`
126
+ * `CREATE TYPE`
127
+ * `GRANT` statements
128
+ * `DROP SCHEMA`
129
+ * Deparsing improvements by [@akiellor]
130
+ * Named window functions ([#150](https://github.com/pganalyze/pg_query/pull/150))
131
+ * Deparsing improvements by [@himanshu]
132
+ * Arguments in custom types ([#143](https://github.com/pganalyze/pg_query/pull/143))
133
+ * Use "double precision" instead of "double" type name ([#139](https://github.com/pganalyze/pg_query/pull/139))
134
+ * Use explicit -z flag to support OpenBSD tar ([#134](https://github.com/pganalyze/pg_query/pull/134)) [@sirn]
110
135
  * Add Ruby 2.6 to Travis tests
111
136
  * Escape identifiers in more cases, if necessary
112
137
 
113
138
 
114
139
  ## 1.1.0 2018-10-04
115
140
 
116
- * Deparsing improvements by [@herwinw](https://github.com/herwinw)
117
- * Add NULLS FIRST/LAST to ORDER BY [#95](https://github.com/pganalyze/pg_query/pull/95)
118
- * VACUUM [#97](https://github.com/pganalyze/pg_query/pull/97)
119
- * UPDATE with multiple columns [#99](https://github.com/pganalyze/pg_query/pull/99)
120
- * DISTINCT ON [#101](https://github.com/pganalyze/pg_query/pull/101)
121
- * CREATE TABLE AS [#102](https://github.com/pganalyze/pg_query/pull/102)
141
+ * Deparsing improvements by [@herwinw]
142
+ * Add `NULLS FIRST`/`LAST` to `ORDER BY` [#95](https://github.com/pganalyze/pg_query/pull/95)
143
+ * `VACUUM` [#97](https://github.com/pganalyze/pg_query/pull/97)
144
+ * `UPDATE` with multiple columns [#99](https://github.com/pganalyze/pg_query/pull/99)
145
+ * `DISTINCT ON` [#101](https://github.com/pganalyze/pg_query/pull/101)
146
+ * `CREATE TABLE AS` [#102](https://github.com/pganalyze/pg_query/pull/102)
122
147
  * SQL value functions [#103](https://github.com/pganalyze/pg_query/pull/103)
123
- * LOCK [#105](https://github.com/pganalyze/pg_query/pull/105)
124
- * EXPLAIN [#107](https://github.com/pganalyze/pg_query/pull/107)
125
- * COPY [#108](https://github.com/pganalyze/pg_query/pull/108)
126
- * DO [#109](https://github.com/pganalyze/pg_query/pull/109)
127
- * Ignore pg_query.so in git checkout [#110](https://github.com/pganalyze/pg_query/pull/110) [@herwinw](https://github.com/herwinw)
128
- * Prefer __dir__ over File.dirname(__FILE__) [#110](https://github.com/pganalyze/pg_query/pull/104) [@herwinw](https://github.com/herwinw)
148
+ * `LOCK` [#105](https://github.com/pganalyze/pg_query/pull/105)
149
+ * `EXPLAIN` [#107](https://github.com/pganalyze/pg_query/pull/107)
150
+ * `COPY` [#108](https://github.com/pganalyze/pg_query/pull/108)
151
+ * `DO` [#109](https://github.com/pganalyze/pg_query/pull/109)
152
+ * Ignore pg_query.so in git checkout [#110](https://github.com/pganalyze/pg_query/pull/110) [@herwinw]
153
+ * Prefer `__dir__` over `File.dirname(__FILE__)` [#110](https://github.com/pganalyze/pg_query/pull/104) [@herwinw]
129
154
 
130
155
 
131
156
  ## 1.0.2 2018-04-11
132
157
 
133
158
  * Deparsing improvements
134
- * SELECT DISTINCT clause [#77](https://github.com/pganalyze/pg_query/pull/77) [@Papierkorb](https://github.com/Papierkorb)
135
- * "CASE expr WHEN ... END" clause [#78](https://github.com/pganalyze/pg_query/pull/78) [@Papierkorb](https://github.com/Papierkorb)
136
- * LEFT/RIGHT/FULL/NATURAL JOIN [#79](https://github.com/pganalyze/pg_query/pull/79) [@Papierkorb](https://github.com/Papierkorb)
137
- * SELECT that includes schema name [#80](https://github.com/pganalyze/pg_query/pull/80) [@jcsjcs](https://github.com/jcsjcs)
159
+ * `SELECT DISTINCT` clause [#77](https://github.com/pganalyze/pg_query/pull/77) [@Papierkorb]
160
+ * "`CASE expr WHEN ... END`" clause [#78](https://github.com/pganalyze/pg_query/pull/78) [@Papierkorb]
161
+ * `LEFT`/`RIGHT`/`FULL`/`NATURAL JOIN` [#79](https://github.com/pganalyze/pg_query/pull/79) [@Papierkorb]
162
+ * `SELECT` that includes schema name [#80](https://github.com/pganalyze/pg_query/pull/80) [@jcsjcs]
138
163
 
139
164
 
140
165
  ## 1.0.1 2018-02-02
141
166
 
142
- * Parse CTEs and nested selects in INSERT/UPDATE [#76](https://github.com/pganalyze/pg_query/pull/76) [@jcoleman](https://github.com/jcoleman)
143
- * Drop explicit json dependency [#74](https://github.com/pganalyze/pg_query/pull/74) [@yuki24](https://github.com/yuki24)
167
+ * Parse CTEs and nested selects in INSERT/UPDATE [#76](https://github.com/pganalyze/pg_query/pull/76) [@jcoleman]
168
+ * Drop explicit json dependency [#74](https://github.com/pganalyze/pg_query/pull/74) [@yuki24]
144
169
 
145
170
 
146
171
  ## 1.0.0 2017-10-31
@@ -155,7 +180,7 @@
155
180
  ## 0.13.5 2017-10-26
156
181
 
157
182
  * Update to libpg_query 9.5-1.7.1
158
- - Allow "$1 FROM $2" to be parsed (new with pg_stat_statements in Postgres 10)
183
+ - Allow "`$1 FROM $2`" to be parsed (new with pg_stat_statements in Postgres 10)
159
184
 
160
185
 
161
186
  ## 0.13.4 2017-10-20
@@ -166,12 +191,12 @@
166
191
 
167
192
  ## 0.13.3 2017-09-04
168
193
 
169
- * Fix table detection for SELECTs that have sub-SELECTs without FROM clause [#69](https://github.com/pganalyze/pg_query/issues/69)
194
+ * Fix table detection for SELECTs that have sub-SELECTs without `FROM` clause [#69](https://github.com/pganalyze/pg_query/issues/69)
170
195
 
171
196
 
172
197
  ## 0.13.2 2017-08-10
173
198
 
174
- * Support table detection in sub-SELECTs in JOINs [#68](https://github.com/pganalyze/pg_query/pull/65) [@seanmdick](https://github.com/seanmdick)
199
+ * Support table detection in sub-SELECTs in `JOIN`s [#68](https://github.com/pganalyze/pg_query/pull/65) [@seanmdick]
175
200
  * Legacy ".parsetree" helper: Fix "Between" and "In" operator does not have "AEXPR" [#66](https://github.com/pganalyze/pg_query/issues/66)
176
201
  * For new applications please use ".tree" method which uses the native structure
177
202
  returned from libpg_query which resembles Postgres node names more closely
@@ -179,13 +204,13 @@
179
204
 
180
205
  ## 0.13.1 2017-08-03
181
206
 
182
- * Fix regression in 0.13.1 that broke ".tables" logic for COPY statements that
207
+ * Fix regression in 0.13.1 that broke ".tables" logic for `COPY` statements that
183
208
  don't have a target table (i.e. are reading out data vs copying in)
184
209
 
185
210
 
186
211
  ## 0.13.0 2017-07-30
187
212
 
188
- * Introduce split between SELECT/DML/DDL for tables method [#65](https://github.com/pganalyze/pg_query/pull/65) [@chrisfrommann](https://github.com/chrisfrommann)
213
+ * Introduce split between SELECT/DML/DDL for tables method [#65](https://github.com/pganalyze/pg_query/pull/65) [@chrisfrommann]
189
214
  * Backwards compatible, use the new select_tables/dml_tables/ddl_tables to
190
215
  access the categorized table references
191
216
  * Update libpg_query to 9.5-1.6.2
@@ -213,14 +238,14 @@
213
238
 
214
239
  ## 0.11.5 2017-07-09
215
240
 
216
- * Deparse coldeflist [#64](https://github.com/pganalyze/pg_query/pull/64) [@jcsjcs](https://github.com/jcsjcs)
217
- * Use Integer class for checking integer instead of Fixnum [#62](https://github.com/pganalyze/pg_query/pull/62) [@makimoto](https://github.com/makimoto)
241
+ * Deparse coldeflist [#64](https://github.com/pganalyze/pg_query/pull/64) [@jcsjcs]
242
+ * Use Integer class for checking integer instead of Fixnum [#62](https://github.com/pganalyze/pg_query/pull/62) [@makimoto]
218
243
 
219
244
 
220
245
  ## 0.11.4 2017-01-18
221
246
 
222
- * Compatibility with Ruby 2.4 [#59](https://github.com/pganalyze/pg_query/pull/59) [@merqlove](https://github.com/merqlove)
223
- * Deparse varchar and numeric casts without arguments [#61](https://github.com/pganalyze/pg_query/pull/61) [@jcsjcs](https://github.com/jcsjcs)
247
+ * Compatibility with Ruby 2.4 [#59](https://github.com/pganalyze/pg_query/pull/59) [@merqlove]
248
+ * Deparse varchar and numeric casts without arguments [#61](https://github.com/pganalyze/pg_query/pull/61) [@jcsjcs]
224
249
 
225
250
 
226
251
  ## 0.11.3 2016-12-06
@@ -228,12 +253,12 @@
228
253
  * Update to newest libpg_query version (9.5-1.4.2)
229
254
  * Cut off fingerprints at 100 nodes deep to avoid excessive runtimes/memory
230
255
  * Fix warning on Linux due to missing asprintf include
231
- * Improved deparsing [@jcsjcs](https://github.com/jcsjcs)
256
+ * Improved deparsing [@jcsjcs]
232
257
  * Float [#54](https://github.com/pganalyze/pg_query/pull/54)
233
- * BETWEEN [#55](https://github.com/pganalyze/pg_query/pull/55)
234
- * NULLIF [#56](https://github.com/pganalyze/pg_query/pull/56)
235
- * SELECT NULL and BooleanTest [#57](https://github.com/pganalyze/pg_query/pull/57)
236
- * Fix build on BSD systems [#58](https://github.com/pganalyze/pg_query/pull/58) [@myfreeweb](https://github.com/myfreeweb)
258
+ * `BETWEEN` [#55](https://github.com/pganalyze/pg_query/pull/55)
259
+ * `NULLIF` [#56](https://github.com/pganalyze/pg_query/pull/56)
260
+ * `SELECT NULL` and BooleanTest [#57](https://github.com/pganalyze/pg_query/pull/57)
261
+ * Fix build on BSD systems [#58](https://github.com/pganalyze/pg_query/pull/58) [@myfreeweb]
237
262
 
238
263
 
239
264
  ## 0.11.2 2016-06-27
@@ -251,11 +276,11 @@
251
276
 
252
277
  ## 0.11.0 2016-06-22
253
278
 
254
- * Improved table name analysis (#tables method)
255
- * Don't include CTE names, make them accessible as #cte_names instead [#52](https://github.com/pganalyze/pg_query/issues/52)
279
+ * Improved table name analysis (`#tables` method)
280
+ * Don't include CTE names, make them accessible as `#cte_names` instead [#52](https://github.com/pganalyze/pg_query/issues/52)
256
281
  * Include table names in target list sub selects [#38](https://github.com/pganalyze/pg_query/issues/38)
257
- * Add support for ORDER/GROUP BY, HAVING, and booleans in WHERE [#53](https://github.com/pganalyze/pg_query/pull/53) [@jcoleman](https://github.com/jcoleman)
258
- * Fix parsing of DROP TYPE statements
282
+ * Add support for `ORDER`/`GROUP BY`, `HAVING`, and booleans in `WHERE` [#53](https://github.com/pganalyze/pg_query/pull/53) [@jcoleman]
283
+ * Fix parsing of `DROP TYPE` statements
259
284
 
260
285
 
261
286
  ## 0.10.0 2016-05-31
@@ -263,9 +288,9 @@
263
288
  * Based on PostgreSQL 9.5.3
264
289
  * Use LLVM extracted parser for significantly improved build times (via libpg_query)
265
290
  * Deparsing Improvements
266
- * SET statements [#48](https://github.com/pganalyze/pg_query/pull/48) [@Winslett](https://github.com/Winslett)
267
- * LIKE/NOT LIKE [#49](https://github.com/pganalyze/pg_query/pull/49) [@Winslett](https://github.com/Winslett)
268
- * CREATE FUNCTION improvements [#50](https://github.com/pganalyze/pg_query/pull/50) [@Winslett](https://github.com/Winslett)
291
+ * `SET` statements [#48](https://github.com/pganalyze/pg_query/pull/48) [@Winslett]
292
+ * `LIKE`/`NOT LIKE` [#49](https://github.com/pganalyze/pg_query/pull/49) [@Winslett]
293
+ * `CREATE FUNCTION` improvements [#50](https://github.com/pganalyze/pg_query/pull/50) [@Winslett]
269
294
 
270
295
 
271
296
  ## 0.9.2 2016-05-03
@@ -301,17 +326,17 @@
301
326
  ## 0.7.2 2015-12-20
302
327
 
303
328
  * Deparsing
304
- * Quote all column refs [#40](https://github.com/pganalyze/pg_query/pull/40) [@avinoamr](https://github.com/avinoamr)
305
- * Quote all range vars [#43](https://github.com/pganalyze/pg_query/pull/43) [@avinoamr](https://github.com/avinoamr)
306
- * Support for COUNT(DISTINCT ...) [#42](https://github.com/pganalyze/pg_query/pull/42) [@avinoamr](https://github.com/avinoamr)
329
+ * Quote all column refs [#40](https://github.com/pganalyze/pg_query/pull/40) [@avinoamr]
330
+ * Quote all range vars [#43](https://github.com/pganalyze/pg_query/pull/43) [@avinoamr]
331
+ * Support for `COUNT(DISTINCT ...)` [#42](https://github.com/pganalyze/pg_query/pull/42) [@avinoamr]
307
332
 
308
333
 
309
334
  ## 0.7.1 2015-11-17
310
335
 
311
336
  * Abstracted parser access into libpg_query [#24](https://github.com/pganalyze/pg_query/pull/35)
312
337
  * libpg_query
313
- * Use UTF-8 encoding for parsing [#4](https://github.com/lfittl/libpg_query/pull/4) [@zhm](https://github.com/zhm)
314
- * Add type to A_CONST nodes[#5](https://github.com/lfittl/libpg_query/pull/5) [@zhm](https://github.com/zhm)
338
+ * Use UTF-8 encoding for parsing [#4](https://github.com/lfittl/libpg_query/pull/4) [@zhm]
339
+ * Add type to A_CONST nodes[#5](https://github.com/lfittl/libpg_query/pull/5) [@zhm]
315
340
 
316
341
 
317
342
  ## 0.7.0 2015-10-17
@@ -320,25 +345,25 @@
320
345
  * Avoid bison/flex dependency to make deployment easier [#31](https://github.com/pganalyze/pg_query/issues/31)
321
346
  * Solve issues with deployments to Heroku [#32](https://github.com/pganalyze/pg_query/issues/32)
322
347
  * Deparsing
323
- * HAVING and FOR UPDATE [#36](https://github.com/pganalyze/pg_query/pull/36) [@JackDanger](https://github.com/JackDanger)
348
+ * `HAVING` and `FOR UPDATE` [#36](https://github.com/pganalyze/pg_query/pull/36) [@JackDanger]
324
349
 
325
350
 
326
351
  ## 0.6.4 2015-10-01
327
352
 
328
353
  * Deparsing
329
- * Constraints & Interval Types [#28](https://github.com/pganalyze/pg_query/pull/28) [@JackDanger](https://github.com/JackDanger)
330
- * Cross joins [#29](https://github.com/pganalyze/pg_query/pull/29) [@mme](https://github.com/mme)
331
- * ALTER TABLE [#30](https://github.com/pganalyze/pg_query/pull/30) [@JackDanger](https://github.com/JackDanger)
332
- * LIMIT and OFFSET [#33](https://github.com/pganalyze/pg_query/pull/33) [@jcsjcs](https://github.com/jcsjcs)
354
+ * Constraints & Interval Types [#28](https://github.com/pganalyze/pg_query/pull/28) [@JackDanger]
355
+ * Cross joins [#29](https://github.com/pganalyze/pg_query/pull/29) [@mme]
356
+ * `ALTER TABLE` [#30](https://github.com/pganalyze/pg_query/pull/30) [@JackDanger]
357
+ * `LIMIT and OFFSET` [#33](https://github.com/pganalyze/pg_query/pull/33) [@jcsjcs]
333
358
 
334
359
 
335
360
  ## 0.6.3 2015-08-20
336
361
 
337
362
  * Deparsing
338
- * COUNT(*) [@JackDanger](https://github.com/JackDanger)
339
- * Window clauses [Chris Martin](https://github.com/cmrtn)
340
- * CREATE TABLE/VIEW/FUNCTION [@JackDanger](https://github.com/JackDanger)
341
- * Return exact location for parser errors [@JackDanger](https://github.com/JackDanger)
363
+ * `COUNT(*)` [@JackDanger]
364
+ * Window clauses [Chris Martin]
365
+ * `CREATE TABLE`/`VIEW/FUNCTION` [@JackDanger]
366
+ * Return exact location for parser errors [@JackDanger]
342
367
 
343
368
 
344
369
  ## 0.6.2 2015-08-06
@@ -348,7 +373,7 @@
348
373
 
349
374
  ## 0.6.1 2015-08-06
350
375
 
351
- * Deparsing: Support WITH clauses in INSERT/UPDATE/DELETE [@JackDanger](https://github.com/JackDanger)
376
+ * Deparsing: Support `WITH` clauses in `INSERT`/`UPDATE`/`DELETE` [@JackDanger]
352
377
  * Make sure gemspec includes all necessary files
353
378
 
354
379
 
@@ -357,20 +382,20 @@
357
382
  * Deparsing (experimental)
358
383
  * Turns parse trees into SQL again
359
384
  * New truncate method to smartly truncate based on less important query parts
360
- * Thanks to [@mme](https://github.com/mme) & [@JackDanger](https://github.com/JackDanger) for their contributions
385
+ * Thanks to [@mme] & [@JackDanger] for their contributions
361
386
  * Restructure extension C code
362
387
  * Add table/filter columns support for CTEs
363
- * Extract views as tables from CREATE/REFRESH VIEW
388
+ * Extract views as tables from `CREATE`/`REFRESH VIEW`
364
389
  * Refactor code using generic treewalker
365
- * fingerprint: Normalize IN lists
390
+ * fingerprint: Normalize `IN` lists
366
391
  * param_refs: Fix length attribute in result
367
392
 
368
393
 
369
394
  ## 0.5.0 2015-03-26
370
395
 
371
396
  * Query fingerprinting
372
- * Filter columns (aka columns referenced in a query's WHERE clause)
373
- * Parameter references: Returns all $1/$2/etc like references in the query with their location
397
+ * Filter columns (aka columns referenced in a query's `WHERE` clause)
398
+ * Parameter references: Returns all `$1`/`$2`/etc like references in the query with their location
374
399
  * Remove dependency on active_support
375
400
 
376
401
 
@@ -387,3 +412,28 @@
387
412
 
388
413
 
389
414
  See git commit log for previous releases.
415
+
416
+ [libpg_query]: https://github.com/pganalyze/libpg_query
417
+ [@emin100]: https://github.com/emin100
418
+ [@akiellor]: https://github.com/akiellor
419
+ [@himanshu-pro]: https://github.com/himanshu-pro
420
+ [@himanshu]: https://github.com/himanshu
421
+ [@Tassosb]: https://github.com/Tassosb
422
+ [@herwinw]: https://github.com/herwinw
423
+ [@stanhu]: https://github.com/stanhu
424
+ [@Papierkorb]: https://github.com/Papierkorb
425
+ [@jcsjcs]: https://github.com/jcsjcs
426
+ [@jcoleman]: https://github.com/jcoleman
427
+ [@yuki24]: https://github.com/yuki24
428
+ [@seanmdick]: https://github.com/seanmdick
429
+ [@chrisfrommann]: https://github.com/chrisfrommann
430
+ [@makimoto]: https://github.com/makimoto
431
+ [@merqlove]: https://github.com/merqlove
432
+ [@myfreeweb]: https://github.com/myfreeweb
433
+ [@Winslett]: https://github.com/Winslett
434
+ [@avinoamr]: https://github.com/avinoamr
435
+ [@zhm]: https://github.com/zhm
436
+ [@mme]: https://github.com/mme
437
+ [@JackDanger]: https://github.com/JackDanger
438
+ [Chris Martin]: https://github.com/cmrtn
439
+ [@sirn]: https://github.com/sirn
data/Rakefile CHANGED
@@ -1,11 +1,12 @@
1
1
  require 'bundler/gem_tasks'
2
+ require 'rake/clean'
2
3
  require 'rake/extensiontask'
3
4
  require 'rspec/core/rake_task'
4
5
  require 'rubocop/rake_task'
5
6
  require 'open-uri'
6
7
 
7
- LIB_PG_QUERY_TAG = '13-2.0.0'.freeze
8
- LIB_PG_QUERY_SHA256SUM = 'e5e6514b1ae0e1ab19a2441de3088988bf1b89778164f9c725c3d85c6903133e'.freeze
8
+ LIB_PG_QUERY_TAG = '13-2.0.4'.freeze
9
+ LIB_PG_QUERY_SHA256SUM = 'a67ef3e3b6c9cb1297f362888d6660dac165d3b020f78d23afe4293b8ceaf190'.freeze
9
10
 
10
11
  Rake::ExtensionTask.new 'pg_query' do |ext|
11
12
  ext.lib_dir = 'lib/pg_query'
@@ -20,11 +21,9 @@ task default: %i[spec lint]
20
21
  task test: :spec
21
22
  task lint: :rubocop
22
23
 
23
- task :clean do
24
- FileUtils.rm_rf File.join(__dir__, 'tmp/')
25
- FileUtils.rm_f Dir.glob(File.join(__dir__, 'ext/pg_query/*.o'))
26
- FileUtils.rm_f File.join(__dir__, 'lib/pg_query/pg_query.bundle')
27
- end
24
+ CLEAN << 'tmp/**/*'
25
+ CLEAN << 'ext/pg_query/*.o'
26
+ CLEAN << 'lib/pg_query/pg_query.bundle'
28
27
 
29
28
  task :update_source do
30
29
  workdir = File.join(__dir__, 'tmp')
@@ -3,8 +3,9 @@
3
3
  require 'digest'
4
4
  require 'mkmf'
5
5
  require 'open-uri'
6
+ require 'pathname'
6
7
 
7
- $objs = Dir.glob(File.join(__dir__, '*.c')).map { |f| f.gsub('.c', '.o') }
8
+ $objs = Dir.glob(File.join(__dir__, '*.c')).map { |f| Pathname.new(f).sub_ext('.o').to_s }
8
9
 
9
10
  $CFLAGS << " -I#{File.join(__dir__, 'include')} -O3 -Wall -fno-strict-aliasing -fwrapv -fstack-protector -Wno-unused-function -Wno-unused-variable -g"
10
11
 
@@ -986,3 +986,4 @@
986
986
  #undef HAVE__STATIC_ASSERT
987
987
  #undef HAVE_EXECINFO_H
988
988
  #undef HAVE_BACKTRACE_SYMBOLS
989
+ #undef HAVE__GET_CPUID
@@ -4018,23 +4018,25 @@ static void deparseTableLikeClause(StringInfo str, TableLikeClause *table_like_c
4018
4018
 
4019
4019
  if (table_like_clause->options == CREATE_TABLE_LIKE_ALL)
4020
4020
  appendStringInfoString(str, "INCLUDING ALL ");
4021
- if (table_like_clause->options & CREATE_TABLE_LIKE_COMMENTS)
4022
- appendStringInfoString(str, "INCLUDING COMMENTS ");
4023
- if (table_like_clause->options & CREATE_TABLE_LIKE_CONSTRAINTS)
4024
- appendStringInfoString(str, "INCLUDING CONSTRAINTS ");
4025
- if (table_like_clause->options & CREATE_TABLE_LIKE_DEFAULTS)
4026
- appendStringInfoString(str, "INCLUDING DEFAULTS ");
4027
- if (table_like_clause->options & CREATE_TABLE_LIKE_IDENTITY)
4028
- appendStringInfoString(str, "INCLUDING IDENTITY ");
4029
- if (table_like_clause->options & CREATE_TABLE_LIKE_GENERATED)
4030
- appendStringInfoString(str, "INCLUDING GENERATED ");
4031
- if (table_like_clause->options & CREATE_TABLE_LIKE_INDEXES)
4032
- appendStringInfoString(str, "INCLUDING INDEXES ");
4033
- if (table_like_clause->options & CREATE_TABLE_LIKE_STATISTICS)
4034
- appendStringInfoString(str, "INCLUDING STATISTICS ");
4035
- if (table_like_clause->options & CREATE_TABLE_LIKE_STORAGE)
4036
- appendStringInfoString(str, "INCLUDING STORAGE ");
4037
-
4021
+ else
4022
+ {
4023
+ if (table_like_clause->options & CREATE_TABLE_LIKE_COMMENTS)
4024
+ appendStringInfoString(str, "INCLUDING COMMENTS ");
4025
+ if (table_like_clause->options & CREATE_TABLE_LIKE_CONSTRAINTS)
4026
+ appendStringInfoString(str, "INCLUDING CONSTRAINTS ");
4027
+ if (table_like_clause->options & CREATE_TABLE_LIKE_DEFAULTS)
4028
+ appendStringInfoString(str, "INCLUDING DEFAULTS ");
4029
+ if (table_like_clause->options & CREATE_TABLE_LIKE_IDENTITY)
4030
+ appendStringInfoString(str, "INCLUDING IDENTITY ");
4031
+ if (table_like_clause->options & CREATE_TABLE_LIKE_GENERATED)
4032
+ appendStringInfoString(str, "INCLUDING GENERATED ");
4033
+ if (table_like_clause->options & CREATE_TABLE_LIKE_INDEXES)
4034
+ appendStringInfoString(str, "INCLUDING INDEXES ");
4035
+ if (table_like_clause->options & CREATE_TABLE_LIKE_STATISTICS)
4036
+ appendStringInfoString(str, "INCLUDING STATISTICS ");
4037
+ if (table_like_clause->options & CREATE_TABLE_LIKE_STORAGE)
4038
+ appendStringInfoString(str, "INCLUDING STORAGE ");
4039
+ }
4038
4040
  removeTrailingSpace(str);
4039
4041
  }
4040
4042
 
@@ -6676,9 +6678,11 @@ static void deparseCopyStmt(StringInfo str, CopyStmt *copy_stmt)
6676
6678
  else
6677
6679
  Assert(false);
6678
6680
  }
6679
- else if (strcmp(def_elem->defname, "freeze") == 0 && intVal(def_elem->arg) == 1)
6681
+ else if (strcmp(def_elem->defname, "freeze") == 0 && (def_elem->arg == NULL || intVal(def_elem->arg) == 1))
6680
6682
  {
6681
- appendStringInfoString(str, "FREEZE 1");
6683
+ appendStringInfoString(str, "FREEZE");
6684
+ if (def_elem->arg != NULL && intVal(def_elem->arg) == 1)
6685
+ appendStringInfoString(str, " 1");
6682
6686
  }
6683
6687
  else if (strcmp(def_elem->defname, "delimiter") == 0)
6684
6688
  {
@@ -6690,9 +6694,11 @@ static void deparseCopyStmt(StringInfo str, CopyStmt *copy_stmt)
6690
6694
  appendStringInfoString(str, "NULL ");
6691
6695
  deparseStringLiteral(str, strVal(def_elem->arg));
6692
6696
  }
6693
- else if (strcmp(def_elem->defname, "header") == 0 && intVal(def_elem->arg) == 1)
6697
+ else if (strcmp(def_elem->defname, "header") == 0 && (def_elem->arg == NULL || intVal(def_elem->arg) == 1))
6694
6698
  {
6695
- appendStringInfoString(str, "HEADER 1");
6699
+ appendStringInfoString(str, "HEADER");
6700
+ if (def_elem->arg != NULL && intVal(def_elem->arg) == 1)
6701
+ appendStringInfoString(str, " 1");
6696
6702
  }
6697
6703
  else if (strcmp(def_elem->defname, "quote") == 0)
6698
6704
  {
@@ -1,3 +1,7 @@
1
+ // Ensure we have asprintf's definition on glibc-based platforms to avoid compiler warnings
2
+ #define _GNU_SOURCE
3
+ #include <stdio.h>
4
+
1
5
  #include "pg_query.h"
2
6
  #include "pg_query_internal.h"
3
7
  #include "pg_query_fingerprint.h"
@@ -13,7 +17,6 @@
13
17
  #include "nodes/parsenodes.h"
14
18
  #include "nodes/value.h"
15
19
 
16
- #include <stdio.h>
17
20
  #include <unistd.h>
18
21
  #include <fcntl.h>
19
22
 
@@ -318,8 +318,10 @@ static bool const_record_walker(Node *node, pgssConstLocations *jstate)
318
318
  DefElem * defElem = (DefElem *) node;
319
319
  if (defElem->arg != NULL && IsA(defElem->arg, String)) {
320
320
  for (int i = defElem->location; i < jstate->query_len; i++) {
321
- if (jstate->query[i] == '\'')
321
+ if (jstate->query[i] == '\'') {
322
322
  RecordConstLocation(jstate, i);
323
+ break;
324
+ }
323
325
  }
324
326
  }
325
327
  return const_record_walker((Node *) ((DefElem *) node)->arg, jstate);
@@ -62,6 +62,8 @@ module PgQuery
62
62
  condition_items << next_item.a_expr.rexpr if next_item.a_expr.rexpr
63
63
  when :bool_expr
64
64
  condition_items += next_item.bool_expr.args
65
+ when :coalesce_expr
66
+ condition_items += next_item.coalesce_expr.args
65
67
  when :row_expr
66
68
  condition_items += next_item.row_expr.args
67
69
  when :column_ref
@@ -4,8 +4,8 @@ module PgQuery
4
4
 
5
5
  begin
6
6
  result = PgQuery::ParseResult.decode(result)
7
- rescue Google::Protobuf::ParseError
8
- raise PgQuery::ParseError.new('Failed to parse tree', __FILE__, __LINE__, -1)
7
+ rescue Google::Protobuf::ParseError => e
8
+ raise PgQuery::ParseError.new(format('Failed to parse tree: %s', e.message), __FILE__, __LINE__, -1)
9
9
  end
10
10
 
11
11
  warnings = []
@@ -24,9 +24,10 @@ module PgQuery
24
24
  dummy_column_ref = PgQuery::Node.new(column_ref: PgQuery::ColumnRef.new(fields: [PgQuery::Node.new(string: PgQuery::String.new(str: '…'))]))
25
25
  case truncation.node_type
26
26
  when :target_list
27
+ res_target_name = '…' if node.is_a?(PgQuery::UpdateStmt) || node.is_a?(PgQuery::OnConflictClause)
27
28
  node.target_list.replace(
28
29
  [
29
- PgQuery::Node.new(res_target: PgQuery::ResTarget.new(val: dummy_column_ref))
30
+ PgQuery::Node.new(res_target: PgQuery::ResTarget.new(name: res_target_name, val: dummy_column_ref))
30
31
  ]
31
32
  )
32
33
  when :where_clause
@@ -34,7 +35,7 @@ module PgQuery
34
35
  when :ctequery
35
36
  node.ctequery = PgQuery::Node.new(select_stmt: PgQuery::SelectStmt.new(where_clause: dummy_column_ref, op: :SETOP_NONE))
36
37
  when :cols
37
- node.cols.replace([PgQuery::Node.from(PgQuery::ResTarget.new(name: '…'))])
38
+ node.cols.replace([PgQuery::Node.from(PgQuery::ResTarget.new(name: '…'))]) if node.is_a?(PgQuery::InsertStmt)
38
39
  else
39
40
  raise ArgumentError, format('Unexpected truncation node type: %s', truncation.node_type)
40
41
  end
@@ -50,21 +51,28 @@ module PgQuery
50
51
 
51
52
  private
52
53
 
53
- def find_possible_truncations
54
+ def find_possible_truncations # rubocop:disable Metrics/CyclomaticComplexity
54
55
  truncations = []
55
56
 
56
- treewalker! @tree do |_expr, k, v, location|
57
+ treewalker! @tree do |node, k, v, location|
57
58
  case k
58
59
  when :target_list
60
+ next unless node.is_a?(PgQuery::SelectStmt) || node.is_a?(PgQuery::UpdateStmt) || node.is_a?(PgQuery::OnConflictClause)
59
61
  length = PgQuery.deparse_stmt(PgQuery::SelectStmt.new(k => v.to_a, op: :SETOP_NONE)).size - 7 # 'SELECT '.size
60
62
  truncations << PossibleTruncation.new(location, :target_list, length, true)
61
63
  when :where_clause
64
+ next unless node.is_a?(PgQuery::SelectStmt) || node.is_a?(PgQuery::UpdateStmt) || node.is_a?(PgQuery::DeleteStmt) ||
65
+ node.is_a?(PgQuery::CopyStmt) || node.is_a?(PgQuery::IndexStmt) || node.is_a?(PgQuery::RuleStmt) ||
66
+ node.is_a?(PgQuery::InferClause) || node.is_a?(PgQuery::OnConflictClause)
67
+
62
68
  length = PgQuery.deparse_expr(v).size
63
69
  truncations << PossibleTruncation.new(location, :where_clause, length, false)
64
70
  when :ctequery
71
+ next unless node.is_a?(PgQuery::CommonTableExpr)
65
72
  length = PgQuery.deparse_stmt(v[v.node.to_s]).size
66
73
  truncations << PossibleTruncation.new(location, :ctequery, length, false)
67
74
  when :cols
75
+ next unless node.is_a?(PgQuery::InsertStmt)
68
76
  length = PgQuery.deparse_stmt(
69
77
  PgQuery::InsertStmt.new(
70
78
  relation: PgQuery::RangeVar.new(relname: 'x', inh: true),
@@ -1,3 +1,3 @@
1
1
  module PgQuery
2
- VERSION = '2.0.1'.freeze
2
+ VERSION = '2.0.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Fittl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-18 00:00:00.000000000 Z
11
+ date: 2021-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler