pg_query 2.0.1 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +220 -114
- data/README.md +12 -0
- data/Rakefile +6 -21
- data/ext/pg_query/extconf.rb +5 -2
- data/ext/pg_query/include/c.h +12 -0
- data/ext/pg_query/include/executor/executor.h +6 -0
- data/ext/pg_query/include/nodes/execnodes.h +9 -6
- data/ext/pg_query/include/nodes/pathnodes.h +1 -1
- data/ext/pg_query/include/optimizer/paths.h +8 -0
- data/ext/pg_query/include/pg_config.h +10 -6
- data/ext/pg_query/include/pg_config_manual.h +7 -0
- data/ext/pg_query/include/pg_query.h +2 -2
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1 -0
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1 -0
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +472 -467
- data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
- data/ext/pg_query/include/protobuf-c.h +7 -3
- data/ext/pg_query/include/utils/array.h +1 -0
- data/ext/pg_query/include/utils/lsyscache.h +1 -0
- data/ext/pg_query/include/utils/probes.h +57 -57
- data/ext/pg_query/pg_query.pb-c.c +502 -487
- data/ext/pg_query/pg_query_deparse.c +33 -21
- data/ext/pg_query/pg_query_fingerprint.c +123 -33
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_normalize.c +222 -61
- data/ext/pg_query/pg_query_parse_plpgsql.c +21 -1
- data/ext/pg_query/pg_query_ruby.sym +1 -0
- data/ext/pg_query/protobuf-c.c +34 -27
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +36 -0
- data/ext/pg_query/src_common_hashfn.c +420 -0
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1 -1
- data/lib/pg_query/filter_columns.rb +3 -1
- data/lib/pg_query/fingerprint.rb +1 -3
- data/lib/pg_query/parse.rb +101 -46
- data/lib/pg_query/pg_query_pb.rb +1385 -1383
- data/lib/pg_query/truncate.rb +12 -4
- data/lib/pg_query/version.rb +1 -1
- data/lib/pg_query.rb +0 -1
- metadata +8 -8
- data/lib/pg_query/json_field_names.rb +0 -1402
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4db477ee95910b6c5d8e6c4e5f86c64cc985c0812cc461c017f652754848be1
|
4
|
+
data.tar.gz: 1167f0524fe8a23b19ee1beef4400cf5f0f817ba64f7d1893ac3d8ddb36ad0ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40d3c6157fc68c041f04bf9adcd6a6b018a821c45e877729ee1f657d97a1cea7d9b686ca2802c4dc56a21daae370433d8c96efb36f95a2a2a31f251307536c3d
|
7
|
+
data.tar.gz: 1ee0b3527a02b0e81c9177b37de943b51fe6b0f5ded846d298a659061133b3b76d25b5f76059dc5568484bca6939421b3e7d8c05e94d95f3f4a10d493a2301d6
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,89 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## Unreleased
|
4
|
+
|
5
|
+
* ...
|
6
|
+
|
7
|
+
## 2.1.1 2021-10-13
|
8
|
+
|
9
|
+
* Update to libpg_query 13-2.1.0 ([#230](https://github.com/pganalyze/pg_query/pull/230))
|
10
|
+
- Normalize: add funcname error object
|
11
|
+
- Normalize: Match GROUP BY against target list and re-use param refs
|
12
|
+
- PL/pgSQL: Setup namespace items for parameters, support RECORD types
|
13
|
+
- This significantly improves parsing for PL/pgSQL functions, to the extent
|
14
|
+
that most functions should now parse successfully
|
15
|
+
- Normalize: Don't modify constants in TypeName typmods/arrayBounds fields
|
16
|
+
- This matches how pg_stat_statement behaves, and avoids causing parsing
|
17
|
+
errors on the normalized statement
|
18
|
+
- Don't fail builds on systems that have strchrnul support (FreeBSD)
|
19
|
+
* Fix build on FreeBSD ([#222](https://github.com/pganalyze/pg_query/pull/222))
|
20
|
+
* Add workaround for Ruby garbage collection bug ([#227](https://github.com/pganalyze/pg_query/pull/227))
|
21
|
+
- The Ruby interpreter has a bug in `String#concat` where the appended
|
22
|
+
array may be garbage collected prematurely because the compiler
|
23
|
+
optimized out a Ruby stack variable. We now call `to_ary` on the
|
24
|
+
Protobuf object to ensure the array lands on the Ruby stack so the
|
25
|
+
garbage collector sees it.
|
26
|
+
- The real fix in the interpreter is described in
|
27
|
+
https://bugs.ruby-lang.org/issues/18140#note-2, but most current Ruby
|
28
|
+
interpreters won't have this fix for some time.
|
29
|
+
* Table/function extraction: Support subselects and LATERAL better ([#229](https://github.com/pganalyze/pg_query/pull/229))
|
30
|
+
- This reworks the parsing logic so we don't ignore certain kinds of
|
31
|
+
subselects.
|
32
|
+
|
33
|
+
|
34
|
+
## 2.1.0 2021-07-04
|
35
|
+
|
36
|
+
* Update to libpg_query 13-2.0.6
|
37
|
+
- Update to Postgres 13.3 patch release
|
38
|
+
- Normalize: Don't touch "GROUP BY 1" and "ORDER BY 1" expressions, keep original text
|
39
|
+
- Fingerprint: Cache list item hashes to fingerprint complex queries faster
|
40
|
+
- Deparser: Emit the RangeVar catalogname if present
|
41
|
+
- Fix crash in pg_scan function when encountering backslash escapes
|
42
|
+
* Support extracting functions from a parsed query ([#147](https://github.com/pganalyze/pg_query/pull/147))
|
43
|
+
- Adds new `functions`, `ddl_functions` and `call_functions` methods
|
44
|
+
- Note that functions are identified by their name only, not their full type definition,
|
45
|
+
since raw query parsetrees don't contain sufficient data to identify the types of
|
46
|
+
arguments when functions are called
|
47
|
+
* Relax google-protobuf dependency ([#213](https://github.com/pganalyze/pg_query/pull/213))
|
48
|
+
* Update google-protobuf to 3.17.1 ([#212](https://github.com/pganalyze/pg_query/pull/212))
|
49
|
+
- google-protobuf 3.15.x has a bug that causes a seg fault in Ruby under
|
50
|
+
certain conditions (https://github.com/protocolbuffers/protobuf/pull/8639). Use
|
51
|
+
google-protobuf 3.17.1 instead.
|
52
|
+
* Use Protobuf definition for determining JSON field names
|
53
|
+
- Note you may see a breaking change if you were using `PgQuery::ParseResult.encode_json`
|
54
|
+
to map the protobuf result to JSON, since this now respects the intended JSON names
|
55
|
+
from the Proto3 definition (instead of the differently formatted Protobuf field names)
|
56
|
+
* Rakefile: Fix "rake clean" by using CLEAN.include instead of CLEAN.<<
|
57
|
+
* Find tables inside COALESCE/MIN/MAX functions, UPDATE FROM list
|
58
|
+
* Extconf: Add library include path using $INCFLAGS, list it first
|
59
|
+
- This ensures any system installed libpg_query gets considered after
|
60
|
+
the bundled libpg_query, avoiding errors where the wrong header files
|
61
|
+
are used.
|
62
|
+
|
63
|
+
|
64
|
+
## 2.0.3 2021-04-05
|
65
|
+
|
66
|
+
* Update to libpg_query 13-2.0.4
|
67
|
+
- Normalize: Fix handling of two subsequent DefElem elements (avoids crash)
|
68
|
+
- Deparser: Fix crash in CopyStmt with HEADER or FREEZE inside WITH parens
|
69
|
+
|
70
|
+
|
71
|
+
## 2.0.2 2021-03-31
|
72
|
+
|
73
|
+
* `COALESCE` arguments are now included in `#filter_columns`
|
74
|
+
* Improve error message for protobuf parse failures
|
75
|
+
* Extconf: Fix object path regexp
|
76
|
+
- This accidentally replaced `.c` in the wrong parts of the path in some cases,
|
77
|
+
causing build failures
|
78
|
+
* Update to libpg_query 13-2.0.2
|
79
|
+
- Fix ARM builds: Avoid dependency on cpuid.h header
|
80
|
+
- Simplify deparser of TableLikeClause
|
81
|
+
- Fix asprintf warnings by ensuring _GNU_SOURCE is set early enough
|
82
|
+
|
83
|
+
|
3
84
|
## 2.0.1 2021-03-18
|
4
85
|
|
5
|
-
* Fix
|
86
|
+
* Fix gemspec to correctly reference include files
|
6
87
|
- This would have shown as a build failure when using the published `2.0.0` gem
|
7
88
|
|
8
89
|
|
@@ -19,23 +100,23 @@
|
|
19
100
|
* Use new deparser maintained directly in libpg_query
|
20
101
|
* This replaces the complete Ruby deparser with a new, more complete deparser
|
21
102
|
that is directly maintained in libpg_query. Further deparser improvements
|
22
|
-
should be directly contributed to [libpg_query]
|
23
|
-
* Tables helper: Return more details through
|
24
|
-
* This is renamed from the previously badly named
|
103
|
+
should be directly contributed to [libpg_query]
|
104
|
+
* Tables helper: Return more details through `#tables_with_details` method
|
105
|
+
* This is renamed from the previously badly named `#tables_with_types`
|
25
106
|
method. Note that this change should not affect the output of the
|
26
|
-
primary
|
107
|
+
primary `tables` helper.
|
27
108
|
* Replace on-demand libpg_query source download with bundled source code
|
28
109
|
* Its unnecessary to download the source on-demand, and makes this more
|
29
110
|
complex than it needs to be. Instead, introduce a new "update_source" rake
|
30
111
|
task that can be called to refresh the source for a specified revision.
|
31
112
|
* Re-implement smart truncation without requiring a special node type
|
32
|
-
* This ensures the truncate method works with the new deparser, without
|
113
|
+
* This ensures the `#truncate` method works with the new deparser, without
|
33
114
|
the C level code needing to know about it. We may add it in the C library
|
34
115
|
in the future for edge cases that can't be covered by this slightly
|
35
116
|
hack-ish approach, but for now this avoids unnecessary C library
|
36
117
|
deparser modifications with non-standard node types.
|
37
|
-
* Update Ruby
|
38
|
-
* Note that its recommended to use PgQuery.fingerprint for performance
|
118
|
+
* Update Ruby fingerprinting to new fingerprint format and XXH3 hash
|
119
|
+
* Note that its recommended to use `PgQuery.fingerprint` for performance
|
39
120
|
reasons, but when the tree has been modified, it can be convenient to
|
40
121
|
run a Ruby-side fingerprint instead of the C-based one that is faster.
|
41
122
|
|
@@ -44,25 +125,25 @@
|
|
44
125
|
|
45
126
|
* Incorporate newer libpg_query updates in 10-1.0.3 and 10-1.0.4
|
46
127
|
* Adds support for running on ARM
|
47
|
-
* Fixes asprintf warning during builds
|
128
|
+
* Fixes an asprintf warning during builds
|
48
129
|
* Updates to newer Postgres 10 patch release (10.15)
|
49
|
-
* Deparsing improvements by [@emin100]
|
50
|
-
* Add support for additional DROP statements (#147)
|
51
|
-
* Fix CREATE TABLE AS - Support without TEMP
|
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]
|
64
|
-
* `tables` method: Find tables in the subquery of CREATE TABLE AS (#172
|
65
|
-
* Support Ruby 3.0, verify SHA256 checksum of downloaded libpg_query (#178
|
130
|
+
* Deparsing improvements by [@emin100]
|
131
|
+
* Add support for additional DROP statements ([#147](https://github.com/pganalyze/pg_query/pull/147))
|
132
|
+
* Fix `CREATE TABLE AS` - Support without `TEMP`, Add `ON COMMIT` ([#149](https://github.com/pganalyze/pg_query/pull/149))
|
133
|
+
* Empty target list support ([#156](https://github.com/pganalyze/pg_query/pull/156))
|
134
|
+
* `UNION` parentheses ([#158](https://github.com/pganalyze/pg_query/pull/158))
|
135
|
+
* `OVERLAY` keyword function ([#161](https://github.com/pganalyze/pg_query/pull/161))
|
136
|
+
* Array indirection ([#162](https://github.com/pganalyze/pg_query/pull/162))
|
137
|
+
* `ARRAY` functions ([#163](https://github.com/pganalyze/pg_query/pull/163))
|
138
|
+
* Correctly handle column names that need escaping in `INSERT` and `UPDATE` statements ([#164](https://github.com/pganalyze/pg_query/pull/164))
|
139
|
+
* `INSERT INTO ON CONFLICT` ([#166](https://github.com/pganalyze/pg_query/pull/166))
|
140
|
+
* `LATERAL JOIN` ([#168](https://github.com/pganalyze/pg_query/pull/168))
|
141
|
+
* `UPDATE FROM` clause ([#170](https://github.com/pganalyze/pg_query/pull/170))
|
142
|
+
* `SELECT` aggregate `FILTER` ([#175](https://github.com/pganalyze/pg_query/pull/175))
|
143
|
+
* `INTERSECT` operator ([#176](https://github.com/pganalyze/pg_query/pull/176))
|
144
|
+
* Deparsing: Improve handling of boolean type casts [@himanshu-pro] & [@emin100]
|
145
|
+
* `tables` method: Find tables in the subquery of `CREATE TABLE AS` ([#172](https://github.com/pganalyze/pg_query/pull/172)) [@Tassosb]
|
146
|
+
* Support Ruby 3.0, verify SHA256 checksum of downloaded libpg_query ([#178](https://github.com/pganalyze/pg_query/pull/178)) [@stanhu]
|
66
147
|
* Verify SHA256 checksum to guard against any malicious attempts to change the archive
|
67
148
|
* Use `URI.open` to fix Ruby 3.0 support
|
68
149
|
|
@@ -78,69 +159,69 @@
|
|
78
159
|
|
79
160
|
## 1.1.1 2019-11-10
|
80
161
|
|
81
|
-
* Deparsing improvements by [@emin100]
|
82
|
-
* Deparse ILIKE
|
83
|
-
* CREATE CAST (#136)
|
84
|
-
* CREATE SCHEMA (#136)
|
85
|
-
* UNION
|
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]
|
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]
|
105
|
-
* Named window functions (#150)
|
106
|
-
* Deparsing improvements by [@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
|
162
|
+
* Deparsing improvements by [@emin100]
|
163
|
+
* Deparse `ILIKE`, `COLLATE` and `DISCARD` ([#133](https://github.com/pganalyze/pg_query/pull/133))
|
164
|
+
* `CREATE CAST` ([#136](https://github.com/pganalyze/pg_query/pull/136))
|
165
|
+
* `CREATE SCHEMA` ([#136](https://github.com/pganalyze/pg_query/pull/136))
|
166
|
+
* `UNION`, `UNION ALL` and `EXCEPT` in `SELECT` queries ([#136](https://github.com/pganalyze/pg_query/pull/136))
|
167
|
+
* `CREATE DOMAIN` ([#145](https://github.com/pganalyze/pg_query/pull/145))
|
168
|
+
* Subquery indirection ([#157](https://github.com/pganalyze/pg_query/pull/157))
|
169
|
+
* Fix Type Cast Parentheses Problem ([#152](https://github.com/pganalyze/pg_query/pull/152))
|
170
|
+
* `SELECT INTO` ([#151](https://github.com/pganalyze/pg_query/pull/151))
|
171
|
+
* `SET DEFAULT` in `INSERT INTO` ([#154](https://github.com/pganalyze/pg_query/pull/154))
|
172
|
+
* `REVOKE` ([#155](https://github.com/pganalyze/pg_query/pull/155))
|
173
|
+
* `PREPARE` and `EXECUTE` ([#148](https://github.com/pganalyze/pg_query/pull/148))
|
174
|
+
* `INSERT INTO ... RETURNING` ([#153](https://github.com/pganalyze/pg_query/pull/153))
|
175
|
+
* Fix Alter .. `RENAME SQL` ([#146](https://github.com/pganalyze/pg_query/pull/146))
|
176
|
+
* Deparsing improvements by [@herwinw]
|
177
|
+
* Fix subquery in `COPY` in deparse ([#112](https://github.com/pganalyze/pg_query/pull/112))
|
178
|
+
* Function call indirection ([#116](https://github.com/pganalyze/pg_query/pull/116))
|
179
|
+
* Function without parameters ([#117](https://github.com/pganalyze/pg_query/pull/117))
|
180
|
+
* `CREATE AGGREGATE`
|
181
|
+
* `CREATE OPERATOR`
|
182
|
+
* `CREATE TYPE`
|
183
|
+
* `GRANT` statements
|
184
|
+
* `DROP SCHEMA`
|
185
|
+
* Deparsing improvements by [@akiellor]
|
186
|
+
* Named window functions ([#150](https://github.com/pganalyze/pg_query/pull/150))
|
187
|
+
* Deparsing improvements by [@himanshu]
|
188
|
+
* Arguments in custom types ([#143](https://github.com/pganalyze/pg_query/pull/143))
|
189
|
+
* Use "double precision" instead of "double" type name ([#139](https://github.com/pganalyze/pg_query/pull/139))
|
190
|
+
* Use explicit -z flag to support OpenBSD tar ([#134](https://github.com/pganalyze/pg_query/pull/134)) [@sirn]
|
110
191
|
* Add Ruby 2.6 to Travis tests
|
111
192
|
* Escape identifiers in more cases, if necessary
|
112
193
|
|
113
194
|
|
114
195
|
## 1.1.0 2018-10-04
|
115
196
|
|
116
|
-
* Deparsing improvements by [@herwinw]
|
117
|
-
* Add NULLS FIRST
|
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)
|
197
|
+
* Deparsing improvements by [@herwinw]
|
198
|
+
* Add `NULLS FIRST`/`LAST` to `ORDER BY` [#95](https://github.com/pganalyze/pg_query/pull/95)
|
199
|
+
* `VACUUM` [#97](https://github.com/pganalyze/pg_query/pull/97)
|
200
|
+
* `UPDATE` with multiple columns [#99](https://github.com/pganalyze/pg_query/pull/99)
|
201
|
+
* `DISTINCT ON` [#101](https://github.com/pganalyze/pg_query/pull/101)
|
202
|
+
* `CREATE TABLE AS` [#102](https://github.com/pganalyze/pg_query/pull/102)
|
122
203
|
* 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]
|
128
|
-
* Prefer __dir__ over File.dirname(__FILE__) [#110](https://github.com/pganalyze/pg_query/pull/104) [@herwinw]
|
204
|
+
* `LOCK` [#105](https://github.com/pganalyze/pg_query/pull/105)
|
205
|
+
* `EXPLAIN` [#107](https://github.com/pganalyze/pg_query/pull/107)
|
206
|
+
* `COPY` [#108](https://github.com/pganalyze/pg_query/pull/108)
|
207
|
+
* `DO` [#109](https://github.com/pganalyze/pg_query/pull/109)
|
208
|
+
* Ignore pg_query.so in git checkout [#110](https://github.com/pganalyze/pg_query/pull/110) [@herwinw]
|
209
|
+
* Prefer `__dir__` over `File.dirname(__FILE__)` [#110](https://github.com/pganalyze/pg_query/pull/104) [@herwinw]
|
129
210
|
|
130
211
|
|
131
212
|
## 1.0.2 2018-04-11
|
132
213
|
|
133
214
|
* Deparsing improvements
|
134
|
-
* SELECT DISTINCT clause [#77](https://github.com/pganalyze/pg_query/pull/77) [@Papierkorb]
|
135
|
-
* "CASE expr WHEN ... END" clause [#78](https://github.com/pganalyze/pg_query/pull/78) [@Papierkorb]
|
136
|
-
* LEFT
|
137
|
-
* SELECT that includes schema name [#80](https://github.com/pganalyze/pg_query/pull/80) [@jcsjcs]
|
215
|
+
* `SELECT DISTINCT` clause [#77](https://github.com/pganalyze/pg_query/pull/77) [@Papierkorb]
|
216
|
+
* "`CASE expr WHEN ... END`" clause [#78](https://github.com/pganalyze/pg_query/pull/78) [@Papierkorb]
|
217
|
+
* `LEFT`/`RIGHT`/`FULL`/`NATURAL JOIN` [#79](https://github.com/pganalyze/pg_query/pull/79) [@Papierkorb]
|
218
|
+
* `SELECT` that includes schema name [#80](https://github.com/pganalyze/pg_query/pull/80) [@jcsjcs]
|
138
219
|
|
139
220
|
|
140
221
|
## 1.0.1 2018-02-02
|
141
222
|
|
142
|
-
* Parse CTEs and nested selects in INSERT/UPDATE [#76](https://github.com/pganalyze/pg_query/pull/76) [@jcoleman]
|
143
|
-
* Drop explicit json dependency [#74](https://github.com/pganalyze/pg_query/pull/74) [@yuki24]
|
223
|
+
* Parse CTEs and nested selects in INSERT/UPDATE [#76](https://github.com/pganalyze/pg_query/pull/76) [@jcoleman]
|
224
|
+
* Drop explicit json dependency [#74](https://github.com/pganalyze/pg_query/pull/74) [@yuki24]
|
144
225
|
|
145
226
|
|
146
227
|
## 1.0.0 2017-10-31
|
@@ -155,7 +236,7 @@
|
|
155
236
|
## 0.13.5 2017-10-26
|
156
237
|
|
157
238
|
* Update to libpg_query 9.5-1.7.1
|
158
|
-
- Allow "
|
239
|
+
- Allow "`$1 FROM $2`" to be parsed (new with pg_stat_statements in Postgres 10)
|
159
240
|
|
160
241
|
|
161
242
|
## 0.13.4 2017-10-20
|
@@ -166,12 +247,12 @@
|
|
166
247
|
|
167
248
|
## 0.13.3 2017-09-04
|
168
249
|
|
169
|
-
* Fix table detection for SELECTs that have sub-SELECTs without FROM clause [#69](https://github.com/pganalyze/pg_query/issues/69)
|
250
|
+
* Fix table detection for SELECTs that have sub-SELECTs without `FROM` clause [#69](https://github.com/pganalyze/pg_query/issues/69)
|
170
251
|
|
171
252
|
|
172
253
|
## 0.13.2 2017-08-10
|
173
254
|
|
174
|
-
* Support table detection in sub-SELECTs in
|
255
|
+
* Support table detection in sub-SELECTs in `JOIN`s [#68](https://github.com/pganalyze/pg_query/pull/65) [@seanmdick]
|
175
256
|
* Legacy ".parsetree" helper: Fix "Between" and "In" operator does not have "AEXPR" [#66](https://github.com/pganalyze/pg_query/issues/66)
|
176
257
|
* For new applications please use ".tree" method which uses the native structure
|
177
258
|
returned from libpg_query which resembles Postgres node names more closely
|
@@ -179,13 +260,13 @@
|
|
179
260
|
|
180
261
|
## 0.13.1 2017-08-03
|
181
262
|
|
182
|
-
* Fix regression in 0.13.1 that broke ".tables" logic for COPY statements that
|
263
|
+
* Fix regression in 0.13.1 that broke ".tables" logic for `COPY` statements that
|
183
264
|
don't have a target table (i.e. are reading out data vs copying in)
|
184
265
|
|
185
266
|
|
186
267
|
## 0.13.0 2017-07-30
|
187
268
|
|
188
|
-
* Introduce split between SELECT/DML/DDL for tables method [#65](https://github.com/pganalyze/pg_query/pull/65) [@chrisfrommann]
|
269
|
+
* Introduce split between SELECT/DML/DDL for tables method [#65](https://github.com/pganalyze/pg_query/pull/65) [@chrisfrommann]
|
189
270
|
* Backwards compatible, use the new select_tables/dml_tables/ddl_tables to
|
190
271
|
access the categorized table references
|
191
272
|
* Update libpg_query to 9.5-1.6.2
|
@@ -213,14 +294,14 @@
|
|
213
294
|
|
214
295
|
## 0.11.5 2017-07-09
|
215
296
|
|
216
|
-
* Deparse coldeflist [#64](https://github.com/pganalyze/pg_query/pull/64) [@jcsjcs]
|
217
|
-
* Use Integer class for checking integer instead of Fixnum [#62](https://github.com/pganalyze/pg_query/pull/62) [@makimoto]
|
297
|
+
* Deparse coldeflist [#64](https://github.com/pganalyze/pg_query/pull/64) [@jcsjcs]
|
298
|
+
* Use Integer class for checking integer instead of Fixnum [#62](https://github.com/pganalyze/pg_query/pull/62) [@makimoto]
|
218
299
|
|
219
300
|
|
220
301
|
## 0.11.4 2017-01-18
|
221
302
|
|
222
|
-
* Compatibility with Ruby 2.4 [#59](https://github.com/pganalyze/pg_query/pull/59) [@merqlove]
|
223
|
-
* Deparse varchar and numeric casts without arguments [#61](https://github.com/pganalyze/pg_query/pull/61) [@jcsjcs]
|
303
|
+
* Compatibility with Ruby 2.4 [#59](https://github.com/pganalyze/pg_query/pull/59) [@merqlove]
|
304
|
+
* Deparse varchar and numeric casts without arguments [#61](https://github.com/pganalyze/pg_query/pull/61) [@jcsjcs]
|
224
305
|
|
225
306
|
|
226
307
|
## 0.11.3 2016-12-06
|
@@ -228,12 +309,12 @@
|
|
228
309
|
* Update to newest libpg_query version (9.5-1.4.2)
|
229
310
|
* Cut off fingerprints at 100 nodes deep to avoid excessive runtimes/memory
|
230
311
|
* Fix warning on Linux due to missing asprintf include
|
231
|
-
* Improved deparsing [@jcsjcs]
|
312
|
+
* Improved deparsing [@jcsjcs]
|
232
313
|
* 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]
|
314
|
+
* `BETWEEN` [#55](https://github.com/pganalyze/pg_query/pull/55)
|
315
|
+
* `NULLIF` [#56](https://github.com/pganalyze/pg_query/pull/56)
|
316
|
+
* `SELECT NULL` and BooleanTest [#57](https://github.com/pganalyze/pg_query/pull/57)
|
317
|
+
* Fix build on BSD systems [#58](https://github.com/pganalyze/pg_query/pull/58) [@myfreeweb]
|
237
318
|
|
238
319
|
|
239
320
|
## 0.11.2 2016-06-27
|
@@ -251,11 +332,11 @@
|
|
251
332
|
|
252
333
|
## 0.11.0 2016-06-22
|
253
334
|
|
254
|
-
* Improved table name analysis (
|
255
|
-
* Don't include CTE names, make them accessible as
|
335
|
+
* Improved table name analysis (`#tables` method)
|
336
|
+
* Don't include CTE names, make them accessible as `#cte_names` instead [#52](https://github.com/pganalyze/pg_query/issues/52)
|
256
337
|
* Include table names in target list sub selects [#38](https://github.com/pganalyze/pg_query/issues/38)
|
257
|
-
* Add support for ORDER
|
258
|
-
* Fix parsing of DROP TYPE statements
|
338
|
+
* Add support for `ORDER`/`GROUP BY`, `HAVING`, and booleans in `WHERE` [#53](https://github.com/pganalyze/pg_query/pull/53) [@jcoleman]
|
339
|
+
* Fix parsing of `DROP TYPE` statements
|
259
340
|
|
260
341
|
|
261
342
|
## 0.10.0 2016-05-31
|
@@ -263,9 +344,9 @@
|
|
263
344
|
* Based on PostgreSQL 9.5.3
|
264
345
|
* Use LLVM extracted parser for significantly improved build times (via libpg_query)
|
265
346
|
* Deparsing Improvements
|
266
|
-
* SET statements [#48](https://github.com/pganalyze/pg_query/pull/48) [@Winslett]
|
267
|
-
* LIKE
|
268
|
-
* CREATE FUNCTION improvements [#50](https://github.com/pganalyze/pg_query/pull/50) [@Winslett]
|
347
|
+
* `SET` statements [#48](https://github.com/pganalyze/pg_query/pull/48) [@Winslett]
|
348
|
+
* `LIKE`/`NOT LIKE` [#49](https://github.com/pganalyze/pg_query/pull/49) [@Winslett]
|
349
|
+
* `CREATE FUNCTION` improvements [#50](https://github.com/pganalyze/pg_query/pull/50) [@Winslett]
|
269
350
|
|
270
351
|
|
271
352
|
## 0.9.2 2016-05-03
|
@@ -301,17 +382,17 @@
|
|
301
382
|
## 0.7.2 2015-12-20
|
302
383
|
|
303
384
|
* Deparsing
|
304
|
-
* Quote all column refs [#40](https://github.com/pganalyze/pg_query/pull/40) [@avinoamr]
|
305
|
-
* Quote all range vars [#43](https://github.com/pganalyze/pg_query/pull/43) [@avinoamr]
|
306
|
-
* Support for COUNT(DISTINCT ...) [#42](https://github.com/pganalyze/pg_query/pull/42) [@avinoamr]
|
385
|
+
* Quote all column refs [#40](https://github.com/pganalyze/pg_query/pull/40) [@avinoamr]
|
386
|
+
* Quote all range vars [#43](https://github.com/pganalyze/pg_query/pull/43) [@avinoamr]
|
387
|
+
* Support for `COUNT(DISTINCT ...)` [#42](https://github.com/pganalyze/pg_query/pull/42) [@avinoamr]
|
307
388
|
|
308
389
|
|
309
390
|
## 0.7.1 2015-11-17
|
310
391
|
|
311
392
|
* Abstracted parser access into libpg_query [#24](https://github.com/pganalyze/pg_query/pull/35)
|
312
393
|
* libpg_query
|
313
|
-
* Use UTF-8 encoding for parsing [#4](https://github.com/lfittl/libpg_query/pull/4) [@zhm]
|
314
|
-
* Add type to A_CONST nodes[#5](https://github.com/lfittl/libpg_query/pull/5) [@zhm]
|
394
|
+
* Use UTF-8 encoding for parsing [#4](https://github.com/lfittl/libpg_query/pull/4) [@zhm]
|
395
|
+
* Add type to A_CONST nodes[#5](https://github.com/lfittl/libpg_query/pull/5) [@zhm]
|
315
396
|
|
316
397
|
|
317
398
|
## 0.7.0 2015-10-17
|
@@ -320,25 +401,25 @@
|
|
320
401
|
* Avoid bison/flex dependency to make deployment easier [#31](https://github.com/pganalyze/pg_query/issues/31)
|
321
402
|
* Solve issues with deployments to Heroku [#32](https://github.com/pganalyze/pg_query/issues/32)
|
322
403
|
* Deparsing
|
323
|
-
* HAVING and FOR UPDATE [#36](https://github.com/pganalyze/pg_query/pull/36) [@JackDanger]
|
404
|
+
* `HAVING` and `FOR UPDATE` [#36](https://github.com/pganalyze/pg_query/pull/36) [@JackDanger]
|
324
405
|
|
325
406
|
|
326
407
|
## 0.6.4 2015-10-01
|
327
408
|
|
328
409
|
* Deparsing
|
329
|
-
* Constraints & Interval Types [#28](https://github.com/pganalyze/pg_query/pull/28) [@JackDanger]
|
330
|
-
* Cross joins [#29](https://github.com/pganalyze/pg_query/pull/29) [@mme]
|
331
|
-
* ALTER TABLE [#30](https://github.com/pganalyze/pg_query/pull/30) [@JackDanger]
|
332
|
-
* LIMIT and OFFSET [#33](https://github.com/pganalyze/pg_query/pull/33) [@jcsjcs]
|
410
|
+
* Constraints & Interval Types [#28](https://github.com/pganalyze/pg_query/pull/28) [@JackDanger]
|
411
|
+
* Cross joins [#29](https://github.com/pganalyze/pg_query/pull/29) [@mme]
|
412
|
+
* `ALTER TABLE` [#30](https://github.com/pganalyze/pg_query/pull/30) [@JackDanger]
|
413
|
+
* `LIMIT and OFFSET` [#33](https://github.com/pganalyze/pg_query/pull/33) [@jcsjcs]
|
333
414
|
|
334
415
|
|
335
416
|
## 0.6.3 2015-08-20
|
336
417
|
|
337
418
|
* Deparsing
|
338
|
-
* COUNT(*) [@JackDanger]
|
339
|
-
* Window clauses [Chris Martin]
|
340
|
-
* CREATE TABLE
|
341
|
-
* Return exact location for parser errors [@JackDanger]
|
419
|
+
* `COUNT(*)` [@JackDanger]
|
420
|
+
* Window clauses [Chris Martin]
|
421
|
+
* `CREATE TABLE`/`VIEW/FUNCTION` [@JackDanger]
|
422
|
+
* Return exact location for parser errors [@JackDanger]
|
342
423
|
|
343
424
|
|
344
425
|
## 0.6.2 2015-08-06
|
@@ -348,7 +429,7 @@
|
|
348
429
|
|
349
430
|
## 0.6.1 2015-08-06
|
350
431
|
|
351
|
-
* Deparsing: Support WITH clauses in INSERT
|
432
|
+
* Deparsing: Support `WITH` clauses in `INSERT`/`UPDATE`/`DELETE` [@JackDanger]
|
352
433
|
* Make sure gemspec includes all necessary files
|
353
434
|
|
354
435
|
|
@@ -357,20 +438,20 @@
|
|
357
438
|
* Deparsing (experimental)
|
358
439
|
* Turns parse trees into SQL again
|
359
440
|
* New truncate method to smartly truncate based on less important query parts
|
360
|
-
* Thanks to [@mme]
|
441
|
+
* Thanks to [@mme] & [@JackDanger] for their contributions
|
361
442
|
* Restructure extension C code
|
362
443
|
* Add table/filter columns support for CTEs
|
363
|
-
* Extract views as tables from CREATE
|
444
|
+
* Extract views as tables from `CREATE`/`REFRESH VIEW`
|
364
445
|
* Refactor code using generic treewalker
|
365
|
-
* fingerprint: Normalize IN lists
|
446
|
+
* fingerprint: Normalize `IN` lists
|
366
447
|
* param_refs: Fix length attribute in result
|
367
448
|
|
368
449
|
|
369
450
|
## 0.5.0 2015-03-26
|
370
451
|
|
371
452
|
* Query fingerprinting
|
372
|
-
* Filter columns (aka columns referenced in a query's WHERE clause)
|
373
|
-
* Parameter references: Returns all
|
453
|
+
* Filter columns (aka columns referenced in a query's `WHERE` clause)
|
454
|
+
* Parameter references: Returns all `$1`/`$2`/etc like references in the query with their location
|
374
455
|
* Remove dependency on active_support
|
375
456
|
|
376
457
|
|
@@ -387,3 +468,28 @@
|
|
387
468
|
|
388
469
|
|
389
470
|
See git commit log for previous releases.
|
471
|
+
|
472
|
+
[libpg_query]: https://github.com/pganalyze/libpg_query
|
473
|
+
[@emin100]: https://github.com/emin100
|
474
|
+
[@akiellor]: https://github.com/akiellor
|
475
|
+
[@himanshu-pro]: https://github.com/himanshu-pro
|
476
|
+
[@himanshu]: https://github.com/himanshu
|
477
|
+
[@Tassosb]: https://github.com/Tassosb
|
478
|
+
[@herwinw]: https://github.com/herwinw
|
479
|
+
[@stanhu]: https://github.com/stanhu
|
480
|
+
[@Papierkorb]: https://github.com/Papierkorb
|
481
|
+
[@jcsjcs]: https://github.com/jcsjcs
|
482
|
+
[@jcoleman]: https://github.com/jcoleman
|
483
|
+
[@yuki24]: https://github.com/yuki24
|
484
|
+
[@seanmdick]: https://github.com/seanmdick
|
485
|
+
[@chrisfrommann]: https://github.com/chrisfrommann
|
486
|
+
[@makimoto]: https://github.com/makimoto
|
487
|
+
[@merqlove]: https://github.com/merqlove
|
488
|
+
[@myfreeweb]: https://github.com/myfreeweb
|
489
|
+
[@Winslett]: https://github.com/Winslett
|
490
|
+
[@avinoamr]: https://github.com/avinoamr
|
491
|
+
[@zhm]: https://github.com/zhm
|
492
|
+
[@mme]: https://github.com/mme
|
493
|
+
[@JackDanger]: https://github.com/JackDanger
|
494
|
+
[Chris Martin]: https://github.com/cmrtn
|
495
|
+
[@sirn]: https://github.com/sirn
|
data/README.md
CHANGED
@@ -133,6 +133,18 @@ PgQuery.fingerprint("SELECT ?")
|
|
133
133
|
=> "50fde20626009aba"
|
134
134
|
```
|
135
135
|
|
136
|
+
### Scanning a query into tokens
|
137
|
+
|
138
|
+
```ruby
|
139
|
+
PgQuery.scan('SELECT 1 --comment')
|
140
|
+
|
141
|
+
=> [<PgQuery::ScanResult: version: 130002, tokens: [
|
142
|
+
<PgQuery::ScanToken: start: 0, end: 6, token: :SELECT, keyword_kind: :RESERVED_KEYWORD>,
|
143
|
+
<PgQuery::ScanToken: start: 7, end: 8, token: :ICONST, keyword_kind: :NO_KEYWORD>,
|
144
|
+
<PgQuery::ScanToken: start: 9, end: 18, token: :SQL_COMMENT, keyword_kind: :NO_KEYWORD>]>,
|
145
|
+
[]]
|
146
|
+
```
|
147
|
+
|
136
148
|
## Differences from Upstream PostgreSQL
|
137
149
|
|
138
150
|
This gem is based on [libpg_query](https://github.com/pganalyze/libpg_query),
|
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.
|
8
|
-
LIB_PG_QUERY_SHA256SUM = '
|
8
|
+
LIB_PG_QUERY_TAG = '13-2.1.0'.freeze
|
9
|
+
LIB_PG_QUERY_SHA256SUM = 'a01329ae5bac19b10b8ddf8012bd663a20f85f180d6d7b900c1a1ca8444d19a5'.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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
FileUtils.rm_f File.join(__dir__, 'lib/pg_query/pg_query.bundle')
|
27
|
-
end
|
24
|
+
CLEAN.include 'tmp/**/*'
|
25
|
+
CLEAN.include 'ext/pg_query/*.o'
|
26
|
+
CLEAN.include 'lib/pg_query/pg_query.bundle'
|
28
27
|
|
29
28
|
task :update_source do
|
30
29
|
workdir = File.join(__dir__, 'tmp')
|
@@ -87,18 +86,4 @@ task :update_source do
|
|
87
86
|
system("cp -a #{libdir}/testdata/* #{testfilesdir}")
|
88
87
|
# Copy back the custom ext files
|
89
88
|
system("cp -a #{extbakdir}/pg_query_ruby.{c,sym} #{extbakdir}/extconf.rb #{extdir}")
|
90
|
-
|
91
|
-
# Generate JSON field name helper (workaround until https://github.com/protocolbuffers/protobuf/pull/8356 is merged)
|
92
|
-
str = "module PgQuery\n INTERNAL_PROTO_FIELD_NAME_TO_JSON_NAME = {\n"
|
93
|
-
cur_type = nil
|
94
|
-
File.read(File.join(libdir, 'protobuf/pg_query.proto')).each_line do |line|
|
95
|
-
if line[/^message (\w+)/]
|
96
|
-
cur_type = $1
|
97
|
-
next
|
98
|
-
end
|
99
|
-
next unless line[/(repeated )?\w+ (\w+) = \d+( \[json_name="(\w+)"\])?;/]
|
100
|
-
str += format(" [%s, :%s] => '%s',\n", cur_type, $2, $4 || $2)
|
101
|
-
end
|
102
|
-
str += " }\nend\n"
|
103
|
-
File.write(File.join(__dir__, 'lib/pg_query/json_field_names.rb'), str)
|
104
89
|
end
|
data/ext/pg_query/extconf.rb
CHANGED
@@ -3,10 +3,13 @@
|
|
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.
|
8
|
+
$objs = Dir.glob(File.join(__dir__, '*.c')).map { |f| Pathname.new(f).sub_ext('.o').to_s }
|
8
9
|
|
9
|
-
$CFLAGS << " -
|
10
|
+
$CFLAGS << " -O3 -Wall -fno-strict-aliasing -fwrapv -fstack-protector -Wno-unused-function -Wno-unused-variable -g"
|
11
|
+
|
12
|
+
$INCFLAGS = "-I#{File.join(__dir__, 'include')} " + $INCFLAGS
|
10
13
|
|
11
14
|
SYMFILE = File.join(__dir__, 'pg_query_ruby.sym')
|
12
15
|
if RUBY_PLATFORM =~ /darwin/
|
data/ext/pg_query/include/c.h
CHANGED
@@ -110,6 +110,18 @@
|
|
110
110
|
#define pg_attribute_unused()
|
111
111
|
#endif
|
112
112
|
|
113
|
+
/*
|
114
|
+
* Place this macro before functions that should be allowed to make misaligned
|
115
|
+
* accesses. Think twice before using it on non-x86-specific code!
|
116
|
+
* Testing can be done with "-fsanitize=alignment -fsanitize-trap=alignment"
|
117
|
+
* on clang, or "-fsanitize=alignment -fno-sanitize-recover=alignment" on gcc.
|
118
|
+
*/
|
119
|
+
#if __clang_major__ >= 7 || __GNUC__ >= 8
|
120
|
+
#define pg_attribute_no_sanitize_alignment() __attribute__((no_sanitize("alignment")))
|
121
|
+
#else
|
122
|
+
#define pg_attribute_no_sanitize_alignment()
|
123
|
+
#endif
|
124
|
+
|
113
125
|
/*
|
114
126
|
* Append PG_USED_FOR_ASSERTS_ONLY to definitions of variables that are only
|
115
127
|
* used in assert-enabled builds, to avoid compiler warnings about unused
|