pg_query 1.3.0 → 2.0.0

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.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +86 -52
  3. data/README.md +72 -65
  4. data/Rakefile +82 -1
  5. data/ext/pg_query/extconf.rb +2 -39
  6. data/ext/pg_query/guc-file.c +0 -0
  7. data/ext/pg_query/pg_query.c +104 -0
  8. data/ext/pg_query/pg_query.pb-c.c +37628 -0
  9. data/ext/pg_query/pg_query_deparse.c +9953 -0
  10. data/ext/pg_query/pg_query_fingerprint.c +292 -0
  11. data/ext/pg_query/pg_query_fingerprint.h +8 -0
  12. data/ext/pg_query/pg_query_internal.h +24 -0
  13. data/ext/pg_query/pg_query_json_plpgsql.c +738 -0
  14. data/ext/pg_query/pg_query_json_plpgsql.h +9 -0
  15. data/ext/pg_query/pg_query_normalize.c +437 -0
  16. data/ext/pg_query/pg_query_outfuncs.h +10 -0
  17. data/ext/pg_query/pg_query_outfuncs_json.c +297 -0
  18. data/ext/pg_query/pg_query_outfuncs_protobuf.c +237 -0
  19. data/ext/pg_query/pg_query_parse.c +148 -0
  20. data/ext/pg_query/pg_query_parse_plpgsql.c +460 -0
  21. data/ext/pg_query/pg_query_readfuncs.h +11 -0
  22. data/ext/pg_query/pg_query_readfuncs_protobuf.c +142 -0
  23. data/ext/pg_query/pg_query_ruby.c +108 -12
  24. data/ext/pg_query/pg_query_scan.c +173 -0
  25. data/ext/pg_query/pg_query_split.c +221 -0
  26. data/ext/pg_query/protobuf-c.c +3660 -0
  27. data/ext/pg_query/src_backend_catalog_namespace.c +1051 -0
  28. data/ext/pg_query/src_backend_catalog_pg_proc.c +142 -0
  29. data/ext/pg_query/src_backend_commands_define.c +117 -0
  30. data/ext/pg_query/src_backend_libpq_pqcomm.c +651 -0
  31. data/ext/pg_query/src_backend_nodes_bitmapset.c +513 -0
  32. data/ext/pg_query/src_backend_nodes_copyfuncs.c +6013 -0
  33. data/ext/pg_query/src_backend_nodes_equalfuncs.c +4003 -0
  34. data/ext/pg_query/src_backend_nodes_extensible.c +99 -0
  35. data/ext/pg_query/src_backend_nodes_list.c +922 -0
  36. data/ext/pg_query/src_backend_nodes_makefuncs.c +417 -0
  37. data/ext/pg_query/src_backend_nodes_nodeFuncs.c +1363 -0
  38. data/ext/pg_query/src_backend_nodes_value.c +84 -0
  39. data/ext/pg_query/src_backend_parser_gram.c +47456 -0
  40. data/ext/pg_query/src_backend_parser_parse_expr.c +313 -0
  41. data/ext/pg_query/src_backend_parser_parser.c +497 -0
  42. data/ext/pg_query/src_backend_parser_scan.c +7091 -0
  43. data/ext/pg_query/src_backend_parser_scansup.c +160 -0
  44. data/ext/pg_query/src_backend_postmaster_postmaster.c +2230 -0
  45. data/ext/pg_query/src_backend_storage_ipc_ipc.c +192 -0
  46. data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +370 -0
  47. data/ext/pg_query/src_backend_tcop_postgres.c +776 -0
  48. data/ext/pg_query/src_backend_utils_adt_datum.c +326 -0
  49. data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +98 -0
  50. data/ext/pg_query/src_backend_utils_adt_format_type.c +136 -0
  51. data/ext/pg_query/src_backend_utils_adt_ruleutils.c +1683 -0
  52. data/ext/pg_query/src_backend_utils_error_assert.c +74 -0
  53. data/ext/pg_query/src_backend_utils_error_elog.c +1748 -0
  54. data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +570 -0
  55. data/ext/pg_query/src_backend_utils_hash_dynahash.c +1086 -0
  56. data/ext/pg_query/src_backend_utils_init_globals.c +168 -0
  57. data/ext/pg_query/src_backend_utils_mb_mbutils.c +839 -0
  58. data/ext/pg_query/src_backend_utils_misc_guc.c +1831 -0
  59. data/ext/pg_query/src_backend_utils_mmgr_aset.c +1560 -0
  60. data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +1006 -0
  61. data/ext/pg_query/src_common_encnames.c +158 -0
  62. data/ext/pg_query/src_common_keywords.c +39 -0
  63. data/ext/pg_query/src_common_kwlist_d.h +1081 -0
  64. data/ext/pg_query/src_common_kwlookup.c +91 -0
  65. data/ext/pg_query/src_common_psprintf.c +158 -0
  66. data/ext/pg_query/src_common_string.c +86 -0
  67. data/ext/pg_query/src_common_stringinfo.c +336 -0
  68. data/ext/pg_query/src_common_wchar.c +1651 -0
  69. data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1133 -0
  70. data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +877 -0
  71. data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +6533 -0
  72. data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +107 -0
  73. data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +123 -0
  74. data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +671 -0
  75. data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +255 -0
  76. data/ext/pg_query/src_port_erand48.c +127 -0
  77. data/ext/pg_query/src_port_pg_bitutils.c +246 -0
  78. data/ext/pg_query/src_port_pgsleep.c +69 -0
  79. data/ext/pg_query/src_port_pgstrcasecmp.c +83 -0
  80. data/ext/pg_query/src_port_qsort.c +240 -0
  81. data/ext/pg_query/src_port_random.c +31 -0
  82. data/ext/pg_query/src_port_snprintf.c +1449 -0
  83. data/ext/pg_query/src_port_strerror.c +324 -0
  84. data/ext/pg_query/src_port_strnlen.c +39 -0
  85. data/ext/pg_query/xxhash.c +43 -0
  86. data/lib/pg_query.rb +7 -4
  87. data/lib/pg_query/constants.rb +21 -0
  88. data/lib/pg_query/deparse.rb +15 -1673
  89. data/lib/pg_query/filter_columns.rb +86 -85
  90. data/lib/pg_query/fingerprint.rb +122 -87
  91. data/lib/pg_query/json_field_names.rb +1402 -0
  92. data/lib/pg_query/node.rb +31 -0
  93. data/lib/pg_query/param_refs.rb +42 -37
  94. data/lib/pg_query/parse.rb +220 -203
  95. data/lib/pg_query/parse_error.rb +1 -1
  96. data/lib/pg_query/pg_query_pb.rb +3211 -0
  97. data/lib/pg_query/scan.rb +23 -0
  98. data/lib/pg_query/treewalker.rb +24 -40
  99. data/lib/pg_query/truncate.rb +64 -43
  100. data/lib/pg_query/version.rb +2 -2
  101. metadata +101 -11
  102. data/ext/pg_query/pg_query_ruby.h +0 -10
  103. data/lib/pg_query/deep_dup.rb +0 -16
  104. data/lib/pg_query/deparse/alter_table.rb +0 -42
  105. data/lib/pg_query/deparse/interval.rb +0 -105
  106. data/lib/pg_query/deparse/keywords.rb +0 -159
  107. data/lib/pg_query/deparse/rename.rb +0 -41
  108. data/lib/pg_query/legacy_parsetree.rb +0 -109
  109. data/lib/pg_query/node_types.rb +0 -297
@@ -1,105 +0,0 @@
1
- class PgQuery
2
- module Deparse
3
- module Interval
4
- # A type called 'interval hour to minute' is stored in a compressed way by
5
- # simplifying 'hour to minute' to a simple integer. This integer is computed
6
- # by looking up the arbitrary number (always a power of two) for 'hour' and
7
- # the one for 'minute' and XORing them together.
8
- #
9
- # For example, when parsing "interval hour to minute":
10
- #
11
- # HOUR_MASK = 10
12
- # MINUTE_MASK = 11
13
- # mask = (1 << 10) | (1 << 11)
14
- # mask = 1024 | 2048
15
- # mask = (010000000000
16
- # xor
17
- # 100000000000)
18
- # mask = 110000000000
19
- # mask = 3072
20
- #
21
- # Postgres will store this type as 'interval,3072'
22
- # We deparse it by simply reversing that process.
23
- #
24
- def self.from_int(int)
25
- SQL_BY_MASK[int]
26
- end
27
-
28
- # From src/include/utils/datetime.h
29
- # The number is the power of 2 used for the mask.
30
- MASKS = {
31
- 0 => 'RESERV',
32
- 1 => 'MONTH',
33
- 2 => 'YEAR',
34
- 3 => 'DAY',
35
- 4 => 'JULIAN',
36
- 5 => 'TZ',
37
- 6 => 'DTZ',
38
- 7 => 'DYNTZ',
39
- 8 => 'IGNORE_DTF',
40
- 9 => 'AMPM',
41
- 10 => 'HOUR',
42
- 11 => 'MINUTE',
43
- 12 => 'SECOND',
44
- 13 => 'MILLISECOND',
45
- 14 => 'MICROSECOND',
46
- 15 => 'DOY',
47
- 16 => 'DOW',
48
- 17 => 'UNITS',
49
- 18 => 'ADBC',
50
- 19 => 'AGO',
51
- 20 => 'ABS_BEFORE',
52
- 21 => 'ABS_AFTER',
53
- 22 => 'ISODATE',
54
- 23 => 'ISOTIME',
55
- 24 => 'WEEK',
56
- 25 => 'DECADE',
57
- 26 => 'CENTURY',
58
- 27 => 'MILLENNIUM',
59
- 28 => 'DTZMOD'
60
- }.freeze
61
- KEYS = MASKS.invert
62
-
63
- # Postgres stores the interval 'day second' as 'day hour minute second' so
64
- # we need to reconstruct the sql with only the largest and smallest time
65
- # values. Since the rules for this are hardcoded in the grammar (and the
66
- # above list is not sorted in any sensible way) it makes sense to hardcode
67
- # the patterns here, too.
68
- #
69
- # This hash takes the form:
70
- #
71
- # { (1 << 1) | (1 << 2) => 'year to month' }
72
- #
73
- # Which is:
74
- #
75
- # { 6 => 'year to month' }
76
- #
77
- SQL_BY_MASK = {
78
- (1 << KEYS['YEAR']) => %w[year],
79
- (1 << KEYS['MONTH']) => %w[month],
80
- (1 << KEYS['DAY']) => %w[day],
81
- (1 << KEYS['HOUR']) => %w[hour],
82
- (1 << KEYS['MINUTE']) => %w[minute],
83
- (1 << KEYS['SECOND']) => %w[second],
84
- (1 << KEYS['YEAR'] |
85
- 1 << KEYS['MONTH']) => %w[year month],
86
- (1 << KEYS['DAY'] |
87
- 1 << KEYS['HOUR']) => %w[day hour],
88
- (1 << KEYS['DAY'] |
89
- 1 << KEYS['HOUR'] |
90
- 1 << KEYS['MINUTE']) => %w[day minute],
91
- (1 << KEYS['DAY'] |
92
- 1 << KEYS['HOUR'] |
93
- 1 << KEYS['MINUTE'] |
94
- 1 << KEYS['SECOND']) => %w[day second],
95
- (1 << KEYS['HOUR'] |
96
- 1 << KEYS['MINUTE']) => %w[hour minute],
97
- (1 << KEYS['HOUR'] |
98
- 1 << KEYS['MINUTE'] |
99
- 1 << KEYS['SECOND']) => %w[hour second],
100
- (1 << KEYS['MINUTE'] |
101
- 1 << KEYS['SECOND']) => %w[minute second]
102
- }.freeze
103
- end
104
- end
105
- end
@@ -1,159 +0,0 @@
1
- class PgQuery
2
- module Deparse # rubocop:disable Metrics/ModuleLength
3
- # Keywords that need to be escaped during deparsing. This matches they keywords
4
- # excaped by quote_identifier in Postgres ruleutils.c. You can refresh this
5
- # list using the kwlist.h file (make sure to ignore UNRESERVED_KEYWORD entries)
6
- KEYWORDS = %w[
7
- ALL
8
- ANALYSE
9
- ANALYZE
10
- AND
11
- ANY
12
- ARRAY
13
- AS
14
- ASC
15
- ASYMMETRIC
16
- AUTHORIZATION
17
- BETWEEN
18
- BIGINT
19
- BINARY
20
- BIT
21
- BOOLEAN
22
- BOTH
23
- CASE
24
- CAST
25
- CHAR
26
- CHARACTER
27
- CHECK
28
- COALESCE
29
- COLLATE
30
- COLLATION
31
- COLUMN
32
- CONCURRENTLY
33
- CONSTRAINT
34
- CREATE
35
- CROSS
36
- CURRENT_CATALOG
37
- CURRENT_DATE
38
- CURRENT_ROLE
39
- CURRENT_SCHEMA
40
- CURRENT_TIME
41
- CURRENT_TIMESTAMP
42
- CURRENT_USER
43
- DEC
44
- DECIMAL
45
- DEFAULT
46
- DEFERRABLE
47
- DESC
48
- DISTINCT
49
- DO
50
- ELSE
51
- END
52
- EXCEPT
53
- EXISTS
54
- EXTRACT
55
- FALSE
56
- FETCH
57
- FLOAT
58
- FOR
59
- FOREIGN
60
- FREEZE
61
- FROM
62
- FULL
63
- GRANT
64
- GREATEST
65
- GROUP
66
- GROUPING
67
- HAVING
68
- ILIKE
69
- IN
70
- INITIALLY
71
- INNER
72
- INOUT
73
- INT
74
- INTEGER
75
- INTERSECT
76
- INTERVAL
77
- INTO
78
- IS
79
- ISNULL
80
- JOIN
81
- LATERAL
82
- LEADING
83
- LEAST
84
- LEFT
85
- LIKE
86
- LIMIT
87
- LOCALTIME
88
- LOCALTIMESTAMP
89
- NATIONAL
90
- NATURAL
91
- NCHAR
92
- NONE
93
- NOT
94
- NOTNULL
95
- NULL
96
- NULLIF
97
- NUMERIC
98
- OFFSET
99
- ON
100
- ONLY
101
- OR
102
- ORDER
103
- OUT
104
- OUTER
105
- OVERLAPS
106
- OVERLAY
107
- PLACING
108
- POSITION
109
- PRECISION
110
- PRIMARY
111
- REAL
112
- REFERENCES
113
- RETURNING
114
- RIGHT
115
- ROW
116
- SELECT
117
- SESSION_USER
118
- SETOF
119
- SIMILAR
120
- SMALLINT
121
- SOME
122
- SUBSTRING
123
- SYMMETRIC
124
- TABLE
125
- TABLESAMPLE
126
- THEN
127
- TIME
128
- TIMESTAMP
129
- TO
130
- TRAILING
131
- TREAT
132
- TRIM
133
- TRUE
134
- UNION
135
- UNIQUE
136
- USER
137
- USING
138
- VALUES
139
- VARCHAR
140
- VARIADIC
141
- VERBOSE
142
- WHEN
143
- WHERE
144
- WINDOW
145
- WITH
146
- XMLATTRIBUTES
147
- XMLCONCAT
148
- XMLELEMENT
149
- XMLEXISTS
150
- XMLFOREST
151
- XMLNAMESPACES
152
- XMLPARSE
153
- XMLPI
154
- XMLROOT
155
- XMLSERIALIZE
156
- XMLTABLE
157
- ].freeze
158
- end
159
- end
@@ -1,41 +0,0 @@
1
- class PgQuery
2
- module Deparse
3
- module Rename
4
- # relation, subname and object is the array key in the node.
5
- # Array return five value. First is the type like a TRIGGER, TABLE, DOMAIN
6
- # Other values may be parameter or SQL key.
7
- #
8
- # If node['renameType'] is the integer 13 (OBJECT_TYPE_DOMCONSTRAINT),
9
- # then return value of this method will be:
10
- #
11
- # %w[DOMAIN object RENAME CONSTRAINT subname]
12
- #
13
- # Which will be composed into the SQL as:
14
- #
15
- # ALTER {type} {name} RENAME CONSTRAINT {subname} TO {newname}
16
- #
17
- def self.commands(node)
18
- action = RENAME_MAPPING[node['renameType']] || raise(format("Can't deparse: %s", node.inspect))
19
- PgQuery::Deparse.instance_exec(node, &action)
20
- end
21
-
22
- RENAME_MAPPING = {
23
- OBJECT_TYPE_CONVERSION => ->(_node) { %w[CONVERSION object RENAME] },
24
- OBJECT_TYPE_TABLE => ->(_node) { %w[TABLE relation RENAME] },
25
- OBJECT_TYPE_TABCONSTRAINT => ->(_node) { %w[TABLE relation RENAME CONSTRAINT subname] },
26
- OBJECT_TYPE_INDEX => ->(_node) { %w[INDEX relation RENAME] },
27
- OBJECT_TYPE_MATVIEW => ->(_node) { ['MATERIALIZED VIEW', 'relation', 'RENAME'] },
28
- OBJECT_TYPE_TABLESPACE => ->(_node) { %w[TABLESPACE subname RENAME] },
29
- OBJECT_TYPE_VIEW => ->(_node) { %w[VIEW relation RENAME] },
30
- OBJECT_TYPE_COLUMN => ->(_node) { %w[TABLE relation RENAME COLUMN subname] },
31
- OBJECT_TYPE_COLLATION => ->(_node) { %w[COLLATION object RENAME] },
32
- OBJECT_TYPE_TYPE => ->(_node) { %w[TYPE object RENAME] },
33
- OBJECT_TYPE_DOMCONSTRAINT => ->(_node) { %w[DOMAIN object RENAME CONSTRAINT subname] },
34
- OBJECT_TYPE_RULE => ->(_node) { %w[RULE subname ON relation RENAME] },
35
- OBJECT_TYPE_TRIGGER => ->(_node) { %w[TRIGGER subname ON relation RENAME] },
36
- OBJECT_TYPE_AGGREGATE => ->(_node) { %w[AGGREGATE object RENAME] },
37
- OBJECT_TYPE_FUNCTION => ->(_node) { %w[FUNCTION object RENAME] }
38
- }.freeze
39
- end
40
- end
41
- end
@@ -1,109 +0,0 @@
1
- class PgQuery
2
- # Legacy parsetree from 0.7 and earlier versions - migrate to "tree" format if you can
3
- def parsetree # rubocop:disable Metrics/CyclomaticComplexity
4
- @parsetree ||= transform_nodes!(@tree) do |raw_node|
5
- node = raw_node.keys[0] == RAW_STMT ? raw_node.delete(RAW_STMT)[STMT_FIELD] : raw_node
6
-
7
- key = node.keys[0]
8
- new_key = LEGACY_NODE_NAMES[key] || key.upcase
9
-
10
- case key
11
- when A_CONST
12
- transform_parsetree_a_const(node)
13
- when A_EXPR
14
- node[A_EXPR]['name'] = transform_string_list(node[A_EXPR]['name'])
15
- node[key].delete('kind')
16
- when COLUMN_REF
17
- node[COLUMN_REF]['fields'] = transform_string_list(node[COLUMN_REF]['fields'])
18
- when CREATE_FUNCTION_STMT
19
- node[CREATE_FUNCTION_STMT]['funcname'] = transform_string_list(node[CREATE_FUNCTION_STMT]['funcname'])
20
- when CREATE_TRIG_STMT
21
- node[CREATE_TRIG_STMT]['funcname'] = transform_string_list(node[CREATE_TRIG_STMT]['funcname'])
22
- when CONSTRAINT
23
- node[CONSTRAINT]['contype'] = LEGACY_CONSTRAINT_TYPES[node[CONSTRAINT]['contype']]
24
- node[CONSTRAINT]['keys'] = transform_string_list(node[CONSTRAINT]['keys'])
25
- when COPY_STMT
26
- node[COPY_STMT]['attlist'] = transform_string_list(node[COPY_STMT]['attlist'])
27
- when DEF_ELEM
28
- node[DEF_ELEM]['arg'] = node[DEF_ELEM]['arg'][INTEGER]['ival'] if node[DEF_ELEM]['arg'].is_a?(Hash) && node[DEF_ELEM]['arg'].keys[0] == INTEGER
29
- node[DEF_ELEM]['arg'] = node[DEF_ELEM]['arg'][STRING]['str'] if node[DEF_ELEM]['arg'].is_a?(Hash) && node[DEF_ELEM]['arg'].keys[0] == STRING
30
- node[DEF_ELEM]['arg'] = transform_string_list(node[DEF_ELEM]['arg']) if node[DEF_ELEM]['arg'].is_a?(Array)
31
- when DROP_STMT
32
- node[DROP_STMT]['objects'].each_with_index do |obj, idx|
33
- node[DROP_STMT]['objects'][idx] = transform_string_list(obj)
34
- end
35
- when FUNC_CALL
36
- node[FUNC_CALL]['funcname'] = transform_string_list(node[FUNC_CALL]['funcname'])
37
- when GRANT_ROLE_STMT
38
- node[GRANT_ROLE_STMT]['grantee_roles'] = transform_string_list(node[GRANT_ROLE_STMT]['grantee_roles'])
39
- when RANGE_VAR
40
- node[RANGE_VAR]['inhOpt'] = node[RANGE_VAR].delete('inh') ? 2 : 0
41
- when TYPE_NAME
42
- node[TYPE_NAME]['names'] = transform_string_list(node[TYPE_NAME]['names'])
43
- end
44
-
45
- raw_node[new_key] = node.delete(key)
46
- end
47
- end
48
-
49
- private
50
-
51
- LEGACY_NODE_NAMES = {
52
- A_EXPR => 'AEXPR',
53
- SELECT_STMT => 'SELECT',
54
- ALTER_TABLE_CMD => 'ALTER TABLE CMD',
55
- ALTER_TABLE_STMT => 'ALTER TABLE',
56
- CHECK_POINT_STMT => 'CHECKPOINT',
57
- CREATE_SCHEMA_STMT => 'CREATE SCHEMA',
58
- CREATE_TABLE_AS_STMT => 'CREATE TABLE AS',
59
- COPY_STMT => 'COPY',
60
- DELETE_STMT => 'DELETE FROM',
61
- DROP_STMT => 'DROP',
62
- INSERT_STMT => 'INSERT INTO',
63
- EXPLAIN_STMT => 'EXPLAIN',
64
- LOCK_STMT => 'LOCK',
65
- TRANSACTION_STMT => 'TRANSACTION',
66
- TRUNCATE_STMT => 'TRUNCATE',
67
- UPDATE_STMT => 'UPDATE',
68
- VACUUM_STMT => 'VACUUM',
69
- VARIABLE_SET_STMT => 'SET',
70
- VARIABLE_SHOW_STMT => 'SHOW'
71
- # All others default to simply upper-casing the input name
72
- }.freeze
73
-
74
- LEGACY_CONSTRAINT_TYPES = {
75
- CONSTR_TYPE_PRIMARY => 'PRIMARY_KEY'
76
- }.freeze
77
-
78
- def transform_parsetree_a_const(node)
79
- type_key = node[A_CONST]['val'].keys[0]
80
-
81
- case type_key
82
- when INTEGER
83
- node[A_CONST]['type'] = 'integer'
84
- node[A_CONST]['val'] = node[A_CONST]['val'][INTEGER]['ival']
85
- when STRING
86
- node[A_CONST]['type'] = 'string'
87
- node[A_CONST]['val'] = node[A_CONST]['val'][STRING]['str']
88
- when FLOAT
89
- node[A_CONST]['type'] = 'float'
90
- node[A_CONST]['val'] = node[A_CONST]['val'][FLOAT]['str'].to_f
91
- when BIT_STRING
92
- node[A_CONST]['type'] = 'bitstring'
93
- node[A_CONST]['val'] = node[A_CONST]['val'][BIT_STRING]['str']
94
- when NULL
95
- node[A_CONST]['type'] = 'null'
96
- node[A_CONST]['val'] = nil
97
- end
98
- end
99
-
100
- def transform_string_list(list)
101
- return if list.nil?
102
-
103
- if list.is_a?(Array)
104
- list.map { |node| node.keys[0] == STRING ? node[STRING]['str'] : node }
105
- else
106
- [list.keys[0] == STRING ? list[STRING]['str'] : list]
107
- end
108
- end
109
- end
@@ -1,297 +0,0 @@
1
- # rubocop:disable Style/ConstantName
2
- class PgQuery
3
- # NODE TYPES
4
-
5
- A_ARRAY_EXPR = 'A_ArrayExpr'.freeze
6
- A_CONST = 'A_Const'.freeze
7
- A_EXPR = 'A_Expr'.freeze
8
- A_INDICES = 'A_Indices'.freeze
9
- A_INDIRECTION = 'A_Indirection'.freeze
10
- A_STAR = 'A_Star'.freeze
11
- ACCESS_PRIV = 'AccessPriv'.freeze
12
- ALIAS = 'Alias'.freeze
13
- ALTER_TABLE_CMD = 'AlterTableCmd'.freeze
14
- ALTER_TABLE_STMT = 'AlterTableStmt'.freeze
15
- BIT_STRING = 'BitString'.freeze
16
- BOOL_EXPR = 'BoolExpr'.freeze
17
- BOOLEAN_TEST = 'BooleanTest'.freeze
18
- CASE_EXPR = 'CaseExpr'.freeze
19
- CASE_WHEN = 'CaseWhen'.freeze
20
- CHECK_POINT_STMT = 'CheckPointStmt'.freeze
21
- CLOSE_PORTAL_STMT = 'ClosePortalStmt'.freeze
22
- COALESCE_EXPR = 'CoalesceExpr'.freeze
23
- COLLATE_CLAUSE = 'CollateClause'.freeze
24
- COLUMN_DEF = 'ColumnDef'.freeze
25
- COLUMN_REF = 'ColumnRef'.freeze
26
- COMMON_TABLE_EXPR = 'CommonTableExpr'.freeze
27
- COMPOSITE_TYPE_STMT = 'CompositeTypeStmt'.freeze
28
- CONSTRAINT = 'Constraint'.freeze
29
- COPY_STMT = 'CopyStmt'.freeze
30
- CREATE_CAST_STMT = 'CreateCastStmt'.freeze
31
- CREATE_DOMAIN_STMT = 'CreateDomainStmt'.freeze
32
- CREATE_ENUM_STMT = 'CreateEnumStmt'.freeze
33
- CREATE_FUNCTION_STMT = 'CreateFunctionStmt'.freeze
34
- CREATE_RANGE_STMT = 'CreateRangeStmt'.freeze
35
- CREATE_SCHEMA_STMT = 'CreateSchemaStmt'.freeze
36
- CREATE_STMT = 'CreateStmt'.freeze
37
- CREATE_TABLE_AS_STMT = 'CreateTableAsStmt'.freeze
38
- CREATE_TRIG_STMT = 'CreateTrigStmt'.freeze
39
- DEALLOCATE_STMT = 'DeallocateStmt'.freeze
40
- DECLARE_CURSOR_STMT = 'DeclareCursorStmt'.freeze
41
- DEF_ELEM = 'DefElem'.freeze
42
- DEFINE_STMT = 'DefineStmt'.freeze
43
- DELETE_STMT = 'DeleteStmt'.freeze
44
- DISCARD_STMT = 'DiscardStmt'.freeze
45
- DO_STMT = 'DoStmt'.freeze
46
- DROP_STMT = 'DropStmt'.freeze
47
- DROP_SUBSCRIPTION = 'DropSubscriptionStmt'.freeze
48
- DROP_TABLESPACE = 'DropTableSpaceStmt'.freeze
49
- DROP_ROLE = 'DropRoleStmt'.freeze
50
- EXECUTE_STMT = 'ExecuteStmt'.freeze
51
- EXPLAIN_STMT = 'ExplainStmt'.freeze
52
- FETCH_STMT = 'FetchStmt'.freeze
53
- FLOAT = 'Float'.freeze
54
- FUNC_CALL = 'FuncCall'.freeze
55
- FUNCTION_PARAMETER = 'FunctionParameter'.freeze
56
- GRANT_ROLE_STMT = 'GrantRoleStmt'.freeze
57
- GRANT_STMT = 'GrantStmt'.freeze
58
- INDEX_ELEM = 'IndexElem'.freeze
59
- INDEX_STMT = 'IndexStmt'.freeze
60
- INSERT_STMT = 'InsertStmt'.freeze
61
- INT_LIST = 'IntList'.freeze
62
- INTEGER = 'Integer'.freeze
63
- INTO_CLAUSE = 'IntoClause'.freeze
64
- JOIN_EXPR = 'JoinExpr'.freeze
65
- LOCK_STMT = 'LockStmt'.freeze
66
- LOCKING_CLAUSE = 'LockingClause'.freeze
67
- NULL = 'Null'.freeze
68
- NULL_TEST = 'NullTest'.freeze
69
- OBJECT_WITH_ARGS = 'ObjectWithArgs'.freeze
70
- OID_LIST = 'OidList'.freeze
71
- ON_CONFLICT_CLAUSE = 'OnConflictClause'.freeze
72
- PARAM_REF = 'ParamRef'.freeze
73
- PREPARE_STMT = 'PrepareStmt'.freeze
74
- RANGE_FUNCTION = 'RangeFunction'.freeze
75
- RANGE_SUBSELECT = 'RangeSubselect'.freeze
76
- RANGE_VAR = 'RangeVar'.freeze
77
- RAW_STMT = 'RawStmt'.freeze
78
- REFRESH_MAT_VIEW_STMT = 'RefreshMatViewStmt'.freeze
79
- RENAME_STMT = 'RenameStmt'.freeze
80
- RES_TARGET = 'ResTarget'.freeze
81
- ROLE_SPEC = 'RoleSpec'.freeze
82
- ROW_EXPR = 'RowExpr'.freeze
83
- RULE_STMT = 'RuleStmt'.freeze
84
- SELECT_STMT = 'SelectStmt'.freeze
85
- SET_TO_DEFAULT = 'SetToDefault'.freeze
86
- SORT_BY = 'SortBy'.freeze
87
- SQL_VALUE_FUNCTION = 'SQLValueFunction'.freeze
88
- STRING = 'String'.freeze
89
- SUB_LINK = 'SubLink'.freeze
90
- TRANSACTION_STMT = 'TransactionStmt'.freeze
91
- TRUNCATE_STMT = 'TruncateStmt'.freeze
92
- TYPE_CAST = 'TypeCast'.freeze
93
- TYPE_NAME = 'TypeName'.freeze
94
- UPDATE_STMT = 'UpdateStmt'.freeze
95
- VACUUM_STMT = 'VacuumStmt'.freeze
96
- VARIABLE_SET_STMT = 'VariableSetStmt'.freeze
97
- VARIABLE_SHOW_STMT = 'VariableShowStmt'.freeze
98
- VIEW_STMT = 'ViewStmt'.freeze
99
- WINDOW_DEF = 'WindowDef'.freeze
100
- WITH_CLAUSE = 'WithClause'.freeze
101
-
102
- # FIELDS
103
-
104
- COLS_FIELD = 'cols'.freeze
105
- FROM_CLAUSE_FIELD = 'fromClause'.freeze
106
- RELPERSISTENCE_FIELD = 'relpersistence'.freeze
107
- REXPR_FIELD = 'rexpr'.freeze
108
- STMT_FIELD = 'stmt'.freeze
109
- TARGET_LIST_FIELD = 'targetList'.freeze
110
- VALUES_LISTS_FIELD = 'valuesLists'.freeze
111
-
112
- # ENUMS
113
-
114
- CONSTR_TYPE_NULL = 0 # not standard SQL, but a lot of people expect it
115
- CONSTR_TYPE_NOTNULL = 1
116
- CONSTR_TYPE_DEFAULT = 2
117
- CONSTR_TYPE_IDENTITY = 3
118
- CONSTR_TYPE_CHECK = 4
119
- CONSTR_TYPE_PRIMARY = 5
120
- CONSTR_TYPE_UNIQUE = 6
121
- CONSTR_TYPE_EXCLUSION = 7
122
- CONSTR_TYPE_FOREIGN = 8
123
- CONSTR_TYPE_ATTR_DEFERRABLE = 9 # attributes for previous constraint node
124
- CONSTR_TYPE_ATTR_NOT_DEFERRABLE = 10
125
- CONSTR_TYPE_ATTR_DEFERRED = 11
126
- CONSTR_TYPE_ATTR_IMMEDIATE = 12
127
-
128
- OBJECT_TYPE_ACCESS_METHOD = 0
129
- OBJECT_TYPE_AGGREGATE = 1
130
- OBJECT_TYPE_AMOP = 2
131
- OBJECT_TYPE_AMPROC = 3
132
- OBJECT_TYPE_ATTRIBUTE = 4
133
- OBJECT_TYPE_CAST = 5
134
- OBJECT_TYPE_COLUMN = 6
135
- OBJECT_TYPE_COLLATION = 7
136
- OBJECT_TYPE_CONVERSION = 8
137
- OBJECT_TYPE_DATABASE = 9
138
- OBJECT_TYPE_DEFAULT = 10
139
- OBJECT_TYPE_DEFACL = 11
140
- OBJECT_TYPE_DOMAIN = 12
141
- OBJECT_TYPE_DOMCONSTRAINT = 13
142
- OBJECT_TYPE_EVENT_TRIGGER = 14
143
- OBJECT_TYPE_EXTENSION = 15
144
- OBJECT_TYPE_FDW = 16
145
- OBJECT_TYPE_FOREIGN_SERVER = 17
146
- OBJECT_TYPE_FOREIGN_TABLE = 18
147
- OBJECT_TYPE_FUNCTION = 19
148
- OBJECT_TYPE_INDEX = 20
149
- OBJECT_TYPE_LANGUAGE = 21
150
- OBJECT_TYPE_LARGEOBJECT = 22
151
- OBJECT_TYPE_MATVIEW = 23
152
- OBJECT_TYPE_OPCLASS = 24
153
- OBJECT_TYPE_OPERATOR = 25
154
- OBJECT_TYPE_OPFAMILY = 26
155
- OBJECT_TYPE_POLICY = 27
156
- OBJECT_TYPE_PUBLICATION = 28
157
- OBJECT_TYPE_PUBLICATION_REL = 29
158
- OBJECT_TYPE_ROLE = 30
159
- OBJECT_TYPE_RULE = 31
160
- OBJECT_TYPE_SCHEMA = 32
161
- OBJECT_TYPE_SEQUENCE = 33
162
- OBJECT_TYPE_SUBSCRIPTION = 34
163
- OBJECT_TYPE_STATISTIC_EXT = 35
164
- OBJECT_TYPE_TABCONSTRAINT = 36
165
- OBJECT_TYPE_TABLE = 37
166
- OBJECT_TYPE_TABLESPACE = 38
167
- OBJECT_TYPE_TRANSFORM = 39
168
- OBJECT_TYPE_TRIGGER = 40
169
- OBJECT_TYPE_TSCONFIGURATION = 41
170
- OBJECT_TYPE_TSDICTIONARY = 42
171
- OBJECT_TYPE_TSPARSER = 43
172
- OBJECT_TYPE_TSTEMPLATE = 44
173
- OBJECT_TYPE_TYPE = 45
174
- OBJECT_TYPE_USER_MAPPING = 46
175
- OBJECT_TYPE_VIEW = 47
176
-
177
- BOOL_EXPR_AND = 0
178
- BOOL_EXPR_OR = 1
179
- BOOL_EXPR_NOT = 2
180
-
181
- BOOLEAN_TEST_TRUE = 0
182
- BOOLEAN_TEST_NOT_TRUE = 1
183
- BOOLEAN_TEST_FALSE = 2
184
- BOOLEAN_TEST_NOT_FALSE = 3
185
- BOOLEAN_TEST_UNKNOWN = 4
186
- BOOLEAN_TEST_NOT_UNKNOWN = 5
187
-
188
- AEXPR_OP = 0 # normal operator
189
- AEXPR_OP_ANY = 1 # scalar op ANY (array)
190
- AEXPR_OP_ALL = 2 # scalar op ALL (array)
191
- AEXPR_DISTINCT = 3 # IS DISTINCT FROM - name must be "="
192
- AEXPR_NOT_DISTINCT = 4 # IS NOT DISTINCT FROM - name must be "="
193
- AEXPR_NULLIF = 5 # NULLIF - name must be "="
194
- AEXPR_OF = 6 # IS [NOT] OF - name must be "=" or "<>"
195
- AEXPR_IN = 7 # [NOT] IN - name must be "=" or "<>"
196
- AEXPR_LIKE = 8 # [NOT] LIKE - name must be "~~" or "!~~"
197
- AEXPR_ILIKE = 9 # [NOT] ILIKE - name must be "~~*" or "!~~*"
198
- AEXPR_SIMILAR = 10 # [NOT] SIMILAR - name must be "~" or "!~"
199
- AEXPR_BETWEEN = 11 # name must be "BETWEEN"
200
- AEXPR_NOT_BETWEEN = 12 # name must be "NOT BETWEEN"
201
- AEXPR_BETWEEN_SYM = 13 # name must be "BETWEEN SYMMETRIC"
202
- AEXPR_NOT_BETWEEN_SYM = 14 # name must be "NOT BETWEEN SYMMETRIC"
203
- AEXPR_PAREN = 15 # nameless dummy node for parentheses
204
-
205
- TRANS_STMT_BEGIN = 0
206
- TRANS_STMT_START = 1 # semantically identical to BEGIN
207
- TRANS_STMT_COMMIT = 2
208
- TRANS_STMT_ROLLBACK = 3
209
- TRANS_STMT_SAVEPOINT = 4
210
- TRANS_STMT_RELEASE = 5
211
- TRANS_STMT_ROLLBACK_TO = 6
212
- TRANS_STMT_PREPARE = 7
213
- TRANS_STMT_COMMIT_PREPARED = 8
214
- TRANS_STMT_ROLLBACK_PREPARED = 9
215
-
216
- SUBLINK_TYPE_EXISTS = 0 # EXISTS(SELECT ...)
217
- SUBLINK_TYPE_ALL = 1 # (lefthand) op ALL (SELECT ...)
218
- SUBLINK_TYPE_ANY = 2 # (lefthand) op ANY (SELECT ...)
219
- SUBLINK_TYPE_ROWCOMPARE = 3 # (lefthand) op (SELECT ...)
220
- SUBLINK_TYPE_EXPR = 4 # (SELECT with single targetlist item ...)
221
- SUBLINK_TYPE_MULTIEXPR = 5 # (SELECT with multiple targetlist items ...)
222
- SUBLINK_TYPE_ARRAY = 6 # ARRAY(SELECT with single targetlist item ...)
223
- SUBLINK_TYPE_CTE = 7 # WITH query (never actually part of an expression), for SubPlans only
224
-
225
- LCS_NONE = 0 # no such clause - only used in PlanRowMark
226
- LCS_FORKEYSHARE = 1 # FOR KEY SHARE
227
- LCS_FORSHARE = 2 # FOR SHARE
228
- LCS_FORNOKEYUPDATE = 3 # FOR NO KEY UPDATE
229
- LCS_FORUPDATE = 4 # FOR UPDATE
230
-
231
- AT_AddColumn = 0 # add column
232
- AT_AddColumnRecurse = 1 # internal to commands/tablecmds.c
233
- AT_AddColumnToView = 2 # implicitly via CREATE OR REPLACE VIEW
234
- AT_ColumnDefault = 3 # alter column default
235
- AT_DropNotNull = 4 # alter column drop not null
236
- AT_SetNotNull = 5 # alter column set not null
237
- AT_SetStatistics = 6 # alter column set statistics
238
- AT_SetOptions = 7 # alter column set ( options )
239
- AT_ResetOptions = 8 # alter column reset ( options )
240
- AT_SetStorage = 9 # alter column set storage
241
- AT_DropColumn = 10 # drop column
242
- AT_DropColumnRecurse = 11 # internal to commands/tablecmds.c
243
- AT_AddIndex = 12 # add index
244
- AT_ReAddIndex = 13 # internal to commands/tablecmds.c
245
- AT_AddConstraint = 14 # add constraint
246
- AT_AddConstraintRecurse = 15 # internal to commands/tablecmds.c
247
- AT_ReAddConstraint = 16 # internal to commands/tablecmds.c
248
- AT_AlterConstraint = 17 # alter constraint
249
- AT_ValidateConstraint = 18 # validate constraint
250
- AT_ValidateConstraintRecurse = 19 # internal to commands/tablecmds.c
251
- AT_ProcessedConstraint = 20 # pre-processed add constraint (local in parser/parse_utilcmd.c)
252
- AT_AddIndexConstraint = 21 # add constraint using existing index
253
- AT_DropConstraint = 22 # drop constraint
254
- AT_DropConstraintRecurse = 23 # internal to commands/tablecmds.c
255
- AT_ReAddComment = 24 # internal to commands/tablecmds.c
256
- AT_AlterColumnType = 25 # alter column type
257
- AT_AlterColumnGenericOptions = 26 # alter column OPTIONS (...)
258
- AT_ChangeOwner = 27 # change owner
259
- AT_ClusterOn = 28 # CLUSTER ON
260
- AT_DropCluster = 29 # SET WITHOUT CLUSTER
261
- AT_SetLogged = 30 # SET LOGGED
262
- AT_SetUnLogged = 31 # SET UNLOGGED
263
- AT_AddOids = 32 # SET WITH OIDS
264
- AT_AddOidsRecurse = 33 # internal to commands/tablecmds.c
265
- AT_DropOids = 34 # SET WITHOUT OIDS
266
- AT_SetTableSpace = 35 # SET TABLESPACE
267
- AT_SetRelOptions = 36 # SET (...) -- AM specific parameters
268
- AT_ResetRelOptions = 37 # RESET (...) -- AM specific parameters
269
- AT_ReplaceRelOptions = 38 # replace reloption list in its entirety
270
- AT_EnableTrig = 39 # ENABLE TRIGGER name
271
- AT_EnableAlwaysTrig = 40 # ENABLE ALWAYS TRIGGER name
272
- AT_EnableReplicaTrig = 41 # ENABLE REPLICA TRIGGER name
273
- AT_DisableTrig = 42 # DISABLE TRIGGER name
274
- AT_EnableTrigAll = 43 # ENABLE TRIGGER ALL
275
- AT_DisableTrigAll = 44 # DISABLE TRIGGER ALL
276
- AT_EnableTrigUser = 45 # ENABLE TRIGGER USER
277
- AT_DisableTrigUser = 46 # DISABLE TRIGGER USER
278
- AT_EnableRule = 47 # ENABLE RULE name
279
- AT_EnableAlwaysRule = 48 # ENABLE ALWAYS RULE name
280
- AT_EnableReplicaRule = 49 # ENABLE REPLICA RULE name
281
- AT_DisableRule = 50 # DISABLE RULE name
282
- AT_AddInherit = 51 # INHERIT parent
283
- AT_DropInherit = 52 # NO INHERIT parent
284
- AT_AddOf = 53 # OF <type_name>
285
- AT_DropOf = 54 # NOT OF
286
- AT_ReplicaIdentity = 55 # REPLICA IDENTITY
287
- AT_EnableRowSecurity = 56 # ENABLE ROW SECURITY
288
- AT_DisableRowSecurity = 57 # DISABLE ROW SECURITY
289
- AT_ForceRowSecurity = 58 # FORCE ROW SECURITY
290
- AT_NoForceRowSecurity = 59 # NO FORCE ROW SECURITY
291
- AT_GenericOptions = 60 # OPTIONS (...)
292
- AT_AttachPartition = 61 # ATTACH PARTITION
293
- AT_DetachPartition = 62 # DETACH PARTITION
294
- AT_AddIdentity = 63 # ADD IDENTITY
295
- AT_SetIdentity = 64 # SET identity column options
296
- AT_DropIdentity = 65 # DROP IDENTITY
297
- end