gitlab-pg_query 1.3.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +321 -0
- data/LICENSE +28 -0
- data/README.md +180 -0
- data/Rakefile +23 -0
- data/ext/pg_query/extconf.rb +46 -0
- data/ext/pg_query/pg_query_ruby.c +129 -0
- data/ext/pg_query/pg_query_ruby.h +10 -0
- data/ext/pg_query/pg_query_ruby.sym +1 -0
- data/lib/pg_query.rb +16 -0
- data/lib/pg_query/deep_dup.rb +16 -0
- data/lib/pg_query/deparse.rb +1588 -0
- data/lib/pg_query/deparse/alter_table.rb +42 -0
- data/lib/pg_query/deparse/interval.rb +105 -0
- data/lib/pg_query/deparse/keywords.rb +159 -0
- data/lib/pg_query/deparse/rename.rb +41 -0
- data/lib/pg_query/filter_columns.rb +107 -0
- data/lib/pg_query/fingerprint.rb +115 -0
- data/lib/pg_query/legacy_parsetree.rb +109 -0
- data/lib/pg_query/node_types.rb +296 -0
- data/lib/pg_query/param_refs.rb +45 -0
- data/lib/pg_query/parse.rb +247 -0
- data/lib/pg_query/parse_error.rb +9 -0
- data/lib/pg_query/treewalker.rb +53 -0
- data/lib/pg_query/truncate.rb +60 -0
- data/lib/pg_query/version.rb +3 -0
- metadata +130 -0
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'digest'
|
2
|
+
|
3
|
+
class PgQuery
|
4
|
+
def fingerprint
|
5
|
+
hash = Digest::SHA1.new
|
6
|
+
fingerprint_tree(hash)
|
7
|
+
format('%02x', FINGERPRINT_VERSION) + hash.hexdigest
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
FINGERPRINT_VERSION = 2
|
13
|
+
|
14
|
+
class FingerprintSubHash
|
15
|
+
attr_reader :parts
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@parts = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def update(part)
|
22
|
+
@parts << part
|
23
|
+
end
|
24
|
+
|
25
|
+
def flush_to(hash)
|
26
|
+
parts.each do |part|
|
27
|
+
hash.update part
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def ignored_fingerprint_value?(val)
|
33
|
+
[nil, 0, false, [], ''].include?(val)
|
34
|
+
end
|
35
|
+
|
36
|
+
def fingerprint_value(val, hash, parent_node_name, parent_field_name, need_to_write_name)
|
37
|
+
return if ignored_fingerprint_value?(val)
|
38
|
+
|
39
|
+
subhash = FingerprintSubHash.new
|
40
|
+
|
41
|
+
if val.is_a?(Hash)
|
42
|
+
fingerprint_node(val, subhash, parent_node_name, parent_field_name)
|
43
|
+
elsif val.is_a?(Array)
|
44
|
+
fingerprint_list(val, subhash, parent_node_name, parent_field_name)
|
45
|
+
else
|
46
|
+
subhash.update val.to_s
|
47
|
+
end
|
48
|
+
|
49
|
+
return if subhash.parts.empty?
|
50
|
+
|
51
|
+
hash.update(parent_field_name) if need_to_write_name
|
52
|
+
subhash.flush_to(hash)
|
53
|
+
end
|
54
|
+
|
55
|
+
def fingerprint_node(node, hash, parent_node_name = nil, parent_field_name = nil) # rubocop:disable Metrics/CyclomaticComplexity
|
56
|
+
node_name = node.keys.first
|
57
|
+
return if [A_CONST, ALIAS, PARAM_REF, SET_TO_DEFAULT, INT_LIST, OID_LIST, NULL].include?(node_name)
|
58
|
+
|
59
|
+
hash.update node_name
|
60
|
+
|
61
|
+
fields = node.values.first
|
62
|
+
fields.sort_by { |k, _| k }.each do |field_name, val|
|
63
|
+
next if ignored_fingerprint_value?(val)
|
64
|
+
|
65
|
+
case field_name
|
66
|
+
when 'location'
|
67
|
+
next
|
68
|
+
when 'name'
|
69
|
+
next if node_name == RES_TARGET && parent_node_name == SELECT_STMT && parent_field_name == TARGET_LIST_FIELD
|
70
|
+
next if [PREPARE_STMT, EXECUTE_STMT, DEALLOCATE_STMT].include?(node_name)
|
71
|
+
when 'gid'
|
72
|
+
next if node_name == TRANSACTION_STMT
|
73
|
+
when 'options'
|
74
|
+
next if node_name == TRANSACTION_STMT
|
75
|
+
when 'portalname'
|
76
|
+
next if [DECLARE_CURSOR_STMT, FETCH_STMT, CLOSE_PORTAL_STMT].include?(node_name)
|
77
|
+
when 'relname'
|
78
|
+
next if node_name == RANGE_VAR && fields[RELPERSISTENCE_FIELD] == 't'
|
79
|
+
when 'stmt_len'
|
80
|
+
next if node_name == RAW_STMT
|
81
|
+
when 'stmt_location'
|
82
|
+
next if node_name == RAW_STMT
|
83
|
+
end
|
84
|
+
|
85
|
+
fingerprint_value(val, hash, node_name, field_name, true)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def fingerprint_list(values, hash, parent_node_name, parent_field_name)
|
90
|
+
if [FROM_CLAUSE_FIELD, TARGET_LIST_FIELD, COLS_FIELD, REXPR_FIELD, VALUES_LISTS_FIELD].include?(parent_field_name)
|
91
|
+
values_subhashes = values.map do |val|
|
92
|
+
subhash = FingerprintSubHash.new
|
93
|
+
fingerprint_value(val, subhash, parent_node_name, parent_field_name, false)
|
94
|
+
subhash
|
95
|
+
end
|
96
|
+
|
97
|
+
values_subhashes.uniq!(&:parts)
|
98
|
+
values_subhashes.sort_by!(&:parts)
|
99
|
+
|
100
|
+
values_subhashes.each do |subhash|
|
101
|
+
subhash.flush_to(hash)
|
102
|
+
end
|
103
|
+
else
|
104
|
+
values.each do |val|
|
105
|
+
fingerprint_value(val, hash, parent_node_name, parent_field_name, false)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def fingerprint_tree(hash)
|
111
|
+
@tree.each do |node|
|
112
|
+
fingerprint_node(node, hash)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,109 @@
|
|
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
|
@@ -0,0 +1,296 @@
|
|
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
|
+
PARAM_REF = 'ParamRef'.freeze
|
72
|
+
PREPARE_STMT = 'PrepareStmt'.freeze
|
73
|
+
RANGE_FUNCTION = 'RangeFunction'.freeze
|
74
|
+
RANGE_SUBSELECT = 'RangeSubselect'.freeze
|
75
|
+
RANGE_VAR = 'RangeVar'.freeze
|
76
|
+
RAW_STMT = 'RawStmt'.freeze
|
77
|
+
REFRESH_MAT_VIEW_STMT = 'RefreshMatViewStmt'.freeze
|
78
|
+
RENAME_STMT = 'RenameStmt'.freeze
|
79
|
+
RES_TARGET = 'ResTarget'.freeze
|
80
|
+
ROLE_SPEC = 'RoleSpec'.freeze
|
81
|
+
ROW_EXPR = 'RowExpr'.freeze
|
82
|
+
RULE_STMT = 'RuleStmt'.freeze
|
83
|
+
SELECT_STMT = 'SelectStmt'.freeze
|
84
|
+
SET_TO_DEFAULT = 'SetToDefault'.freeze
|
85
|
+
SORT_BY = 'SortBy'.freeze
|
86
|
+
SQL_VALUE_FUNCTION = 'SQLValueFunction'.freeze
|
87
|
+
STRING = 'String'.freeze
|
88
|
+
SUB_LINK = 'SubLink'.freeze
|
89
|
+
TRANSACTION_STMT = 'TransactionStmt'.freeze
|
90
|
+
TRUNCATE_STMT = 'TruncateStmt'.freeze
|
91
|
+
TYPE_CAST = 'TypeCast'.freeze
|
92
|
+
TYPE_NAME = 'TypeName'.freeze
|
93
|
+
UPDATE_STMT = 'UpdateStmt'.freeze
|
94
|
+
VACUUM_STMT = 'VacuumStmt'.freeze
|
95
|
+
VARIABLE_SET_STMT = 'VariableSetStmt'.freeze
|
96
|
+
VARIABLE_SHOW_STMT = 'VariableShowStmt'.freeze
|
97
|
+
VIEW_STMT = 'ViewStmt'.freeze
|
98
|
+
WINDOW_DEF = 'WindowDef'.freeze
|
99
|
+
WITH_CLAUSE = 'WithClause'.freeze
|
100
|
+
|
101
|
+
# FIELDS
|
102
|
+
|
103
|
+
COLS_FIELD = 'cols'.freeze
|
104
|
+
FROM_CLAUSE_FIELD = 'fromClause'.freeze
|
105
|
+
RELPERSISTENCE_FIELD = 'relpersistence'.freeze
|
106
|
+
REXPR_FIELD = 'rexpr'.freeze
|
107
|
+
STMT_FIELD = 'stmt'.freeze
|
108
|
+
TARGET_LIST_FIELD = 'targetList'.freeze
|
109
|
+
VALUES_LISTS_FIELD = 'valuesLists'.freeze
|
110
|
+
|
111
|
+
# ENUMS
|
112
|
+
|
113
|
+
CONSTR_TYPE_NULL = 0 # not standard SQL, but a lot of people expect it
|
114
|
+
CONSTR_TYPE_NOTNULL = 1
|
115
|
+
CONSTR_TYPE_DEFAULT = 2
|
116
|
+
CONSTR_TYPE_IDENTITY = 3
|
117
|
+
CONSTR_TYPE_CHECK = 4
|
118
|
+
CONSTR_TYPE_PRIMARY = 5
|
119
|
+
CONSTR_TYPE_UNIQUE = 6
|
120
|
+
CONSTR_TYPE_EXCLUSION = 7
|
121
|
+
CONSTR_TYPE_FOREIGN = 8
|
122
|
+
CONSTR_TYPE_ATTR_DEFERRABLE = 9 # attributes for previous constraint node
|
123
|
+
CONSTR_TYPE_ATTR_NOT_DEFERRABLE = 10
|
124
|
+
CONSTR_TYPE_ATTR_DEFERRED = 11
|
125
|
+
CONSTR_TYPE_ATTR_IMMEDIATE = 12
|
126
|
+
|
127
|
+
OBJECT_TYPE_ACCESS_METHOD = 0
|
128
|
+
OBJECT_TYPE_AGGREGATE = 1
|
129
|
+
OBJECT_TYPE_AMOP = 2
|
130
|
+
OBJECT_TYPE_AMPROC = 3
|
131
|
+
OBJECT_TYPE_ATTRIBUTE = 4
|
132
|
+
OBJECT_TYPE_CAST = 5
|
133
|
+
OBJECT_TYPE_COLUMN = 6
|
134
|
+
OBJECT_TYPE_COLLATION = 7
|
135
|
+
OBJECT_TYPE_CONVERSION = 8
|
136
|
+
OBJECT_TYPE_DATABASE = 9
|
137
|
+
OBJECT_TYPE_DEFAULT = 10
|
138
|
+
OBJECT_TYPE_DEFACL = 11
|
139
|
+
OBJECT_TYPE_DOMAIN = 12
|
140
|
+
OBJECT_TYPE_DOMCONSTRAINT = 13
|
141
|
+
OBJECT_TYPE_EVENT_TRIGGER = 14
|
142
|
+
OBJECT_TYPE_EXTENSION = 15
|
143
|
+
OBJECT_TYPE_FDW = 16
|
144
|
+
OBJECT_TYPE_FOREIGN_SERVER = 17
|
145
|
+
OBJECT_TYPE_FOREIGN_TABLE = 18
|
146
|
+
OBJECT_TYPE_FUNCTION = 19
|
147
|
+
OBJECT_TYPE_INDEX = 20
|
148
|
+
OBJECT_TYPE_LANGUAGE = 21
|
149
|
+
OBJECT_TYPE_LARGEOBJECT = 22
|
150
|
+
OBJECT_TYPE_MATVIEW = 23
|
151
|
+
OBJECT_TYPE_OPCLASS = 24
|
152
|
+
OBJECT_TYPE_OPERATOR = 25
|
153
|
+
OBJECT_TYPE_OPFAMILY = 26
|
154
|
+
OBJECT_TYPE_POLICY = 27
|
155
|
+
OBJECT_TYPE_PUBLICATION = 28
|
156
|
+
OBJECT_TYPE_PUBLICATION_REL = 29
|
157
|
+
OBJECT_TYPE_ROLE = 30
|
158
|
+
OBJECT_TYPE_RULE = 31
|
159
|
+
OBJECT_TYPE_SCHEMA = 32
|
160
|
+
OBJECT_TYPE_SEQUENCE = 33
|
161
|
+
OBJECT_TYPE_SUBSCRIPTION = 34
|
162
|
+
OBJECT_TYPE_STATISTIC_EXT = 35
|
163
|
+
OBJECT_TYPE_TABCONSTRAINT = 36
|
164
|
+
OBJECT_TYPE_TABLE = 37
|
165
|
+
OBJECT_TYPE_TABLESPACE = 38
|
166
|
+
OBJECT_TYPE_TRANSFORM = 39
|
167
|
+
OBJECT_TYPE_TRIGGER = 40
|
168
|
+
OBJECT_TYPE_TSCONFIGURATION = 41
|
169
|
+
OBJECT_TYPE_TSDICTIONARY = 42
|
170
|
+
OBJECT_TYPE_TSPARSER = 43
|
171
|
+
OBJECT_TYPE_TSTEMPLATE = 44
|
172
|
+
OBJECT_TYPE_TYPE = 45
|
173
|
+
OBJECT_TYPE_USER_MAPPING = 46
|
174
|
+
OBJECT_TYPE_VIEW = 47
|
175
|
+
|
176
|
+
BOOL_EXPR_AND = 0
|
177
|
+
BOOL_EXPR_OR = 1
|
178
|
+
BOOL_EXPR_NOT = 2
|
179
|
+
|
180
|
+
BOOLEAN_TEST_TRUE = 0
|
181
|
+
BOOLEAN_TEST_NOT_TRUE = 1
|
182
|
+
BOOLEAN_TEST_FALSE = 2
|
183
|
+
BOOLEAN_TEST_NOT_FALSE = 3
|
184
|
+
BOOLEAN_TEST_UNKNOWN = 4
|
185
|
+
BOOLEAN_TEST_NOT_UNKNOWN = 5
|
186
|
+
|
187
|
+
AEXPR_OP = 0 # normal operator
|
188
|
+
AEXPR_OP_ANY = 1 # scalar op ANY (array)
|
189
|
+
AEXPR_OP_ALL = 2 # scalar op ALL (array)
|
190
|
+
AEXPR_DISTINCT = 3 # IS DISTINCT FROM - name must be "="
|
191
|
+
AEXPR_NOT_DISTINCT = 4 # IS NOT DISTINCT FROM - name must be "="
|
192
|
+
AEXPR_NULLIF = 5 # NULLIF - name must be "="
|
193
|
+
AEXPR_OF = 6 # IS [NOT] OF - name must be "=" or "<>"
|
194
|
+
AEXPR_IN = 7 # [NOT] IN - name must be "=" or "<>"
|
195
|
+
AEXPR_LIKE = 8 # [NOT] LIKE - name must be "~~" or "!~~"
|
196
|
+
AEXPR_ILIKE = 9 # [NOT] ILIKE - name must be "~~*" or "!~~*"
|
197
|
+
AEXPR_SIMILAR = 10 # [NOT] SIMILAR - name must be "~" or "!~"
|
198
|
+
AEXPR_BETWEEN = 11 # name must be "BETWEEN"
|
199
|
+
AEXPR_NOT_BETWEEN = 12 # name must be "NOT BETWEEN"
|
200
|
+
AEXPR_BETWEEN_SYM = 13 # name must be "BETWEEN SYMMETRIC"
|
201
|
+
AEXPR_NOT_BETWEEN_SYM = 14 # name must be "NOT BETWEEN SYMMETRIC"
|
202
|
+
AEXPR_PAREN = 15 # nameless dummy node for parentheses
|
203
|
+
|
204
|
+
TRANS_STMT_BEGIN = 0
|
205
|
+
TRANS_STMT_START = 1 # semantically identical to BEGIN
|
206
|
+
TRANS_STMT_COMMIT = 2
|
207
|
+
TRANS_STMT_ROLLBACK = 3
|
208
|
+
TRANS_STMT_SAVEPOINT = 4
|
209
|
+
TRANS_STMT_RELEASE = 5
|
210
|
+
TRANS_STMT_ROLLBACK_TO = 6
|
211
|
+
TRANS_STMT_PREPARE = 7
|
212
|
+
TRANS_STMT_COMMIT_PREPARED = 8
|
213
|
+
TRANS_STMT_ROLLBACK_PREPARED = 9
|
214
|
+
|
215
|
+
SUBLINK_TYPE_EXISTS = 0 # EXISTS(SELECT ...)
|
216
|
+
SUBLINK_TYPE_ALL = 1 # (lefthand) op ALL (SELECT ...)
|
217
|
+
SUBLINK_TYPE_ANY = 2 # (lefthand) op ANY (SELECT ...)
|
218
|
+
SUBLINK_TYPE_ROWCOMPARE = 3 # (lefthand) op (SELECT ...)
|
219
|
+
SUBLINK_TYPE_EXPR = 4 # (SELECT with single targetlist item ...)
|
220
|
+
SUBLINK_TYPE_MULTIEXPR = 5 # (SELECT with multiple targetlist items ...)
|
221
|
+
SUBLINK_TYPE_ARRAY = 6 # ARRAY(SELECT with single targetlist item ...)
|
222
|
+
SUBLINK_TYPE_CTE = 7 # WITH query (never actually part of an expression), for SubPlans only
|
223
|
+
|
224
|
+
LCS_NONE = 0 # no such clause - only used in PlanRowMark
|
225
|
+
LCS_FORKEYSHARE = 1 # FOR KEY SHARE
|
226
|
+
LCS_FORSHARE = 2 # FOR SHARE
|
227
|
+
LCS_FORNOKEYUPDATE = 3 # FOR NO KEY UPDATE
|
228
|
+
LCS_FORUPDATE = 4 # FOR UPDATE
|
229
|
+
|
230
|
+
AT_AddColumn = 0 # add column
|
231
|
+
AT_AddColumnRecurse = 1 # internal to commands/tablecmds.c
|
232
|
+
AT_AddColumnToView = 2 # implicitly via CREATE OR REPLACE VIEW
|
233
|
+
AT_ColumnDefault = 3 # alter column default
|
234
|
+
AT_DropNotNull = 4 # alter column drop not null
|
235
|
+
AT_SetNotNull = 5 # alter column set not null
|
236
|
+
AT_SetStatistics = 6 # alter column set statistics
|
237
|
+
AT_SetOptions = 7 # alter column set ( options )
|
238
|
+
AT_ResetOptions = 8 # alter column reset ( options )
|
239
|
+
AT_SetStorage = 9 # alter column set storage
|
240
|
+
AT_DropColumn = 10 # drop column
|
241
|
+
AT_DropColumnRecurse = 11 # internal to commands/tablecmds.c
|
242
|
+
AT_AddIndex = 12 # add index
|
243
|
+
AT_ReAddIndex = 13 # internal to commands/tablecmds.c
|
244
|
+
AT_AddConstraint = 14 # add constraint
|
245
|
+
AT_AddConstraintRecurse = 15 # internal to commands/tablecmds.c
|
246
|
+
AT_ReAddConstraint = 16 # internal to commands/tablecmds.c
|
247
|
+
AT_AlterConstraint = 17 # alter constraint
|
248
|
+
AT_ValidateConstraint = 18 # validate constraint
|
249
|
+
AT_ValidateConstraintRecurse = 19 # internal to commands/tablecmds.c
|
250
|
+
AT_ProcessedConstraint = 20 # pre-processed add constraint (local in parser/parse_utilcmd.c)
|
251
|
+
AT_AddIndexConstraint = 21 # add constraint using existing index
|
252
|
+
AT_DropConstraint = 22 # drop constraint
|
253
|
+
AT_DropConstraintRecurse = 23 # internal to commands/tablecmds.c
|
254
|
+
AT_ReAddComment = 24 # internal to commands/tablecmds.c
|
255
|
+
AT_AlterColumnType = 25 # alter column type
|
256
|
+
AT_AlterColumnGenericOptions = 26 # alter column OPTIONS (...)
|
257
|
+
AT_ChangeOwner = 27 # change owner
|
258
|
+
AT_ClusterOn = 28 # CLUSTER ON
|
259
|
+
AT_DropCluster = 29 # SET WITHOUT CLUSTER
|
260
|
+
AT_SetLogged = 30 # SET LOGGED
|
261
|
+
AT_SetUnLogged = 31 # SET UNLOGGED
|
262
|
+
AT_AddOids = 32 # SET WITH OIDS
|
263
|
+
AT_AddOidsRecurse = 33 # internal to commands/tablecmds.c
|
264
|
+
AT_DropOids = 34 # SET WITHOUT OIDS
|
265
|
+
AT_SetTableSpace = 35 # SET TABLESPACE
|
266
|
+
AT_SetRelOptions = 36 # SET (...) -- AM specific parameters
|
267
|
+
AT_ResetRelOptions = 37 # RESET (...) -- AM specific parameters
|
268
|
+
AT_ReplaceRelOptions = 38 # replace reloption list in its entirety
|
269
|
+
AT_EnableTrig = 39 # ENABLE TRIGGER name
|
270
|
+
AT_EnableAlwaysTrig = 40 # ENABLE ALWAYS TRIGGER name
|
271
|
+
AT_EnableReplicaTrig = 41 # ENABLE REPLICA TRIGGER name
|
272
|
+
AT_DisableTrig = 42 # DISABLE TRIGGER name
|
273
|
+
AT_EnableTrigAll = 43 # ENABLE TRIGGER ALL
|
274
|
+
AT_DisableTrigAll = 44 # DISABLE TRIGGER ALL
|
275
|
+
AT_EnableTrigUser = 45 # ENABLE TRIGGER USER
|
276
|
+
AT_DisableTrigUser = 46 # DISABLE TRIGGER USER
|
277
|
+
AT_EnableRule = 47 # ENABLE RULE name
|
278
|
+
AT_EnableAlwaysRule = 48 # ENABLE ALWAYS RULE name
|
279
|
+
AT_EnableReplicaRule = 49 # ENABLE REPLICA RULE name
|
280
|
+
AT_DisableRule = 50 # DISABLE RULE name
|
281
|
+
AT_AddInherit = 51 # INHERIT parent
|
282
|
+
AT_DropInherit = 52 # NO INHERIT parent
|
283
|
+
AT_AddOf = 53 # OF <type_name>
|
284
|
+
AT_DropOf = 54 # NOT OF
|
285
|
+
AT_ReplicaIdentity = 55 # REPLICA IDENTITY
|
286
|
+
AT_EnableRowSecurity = 56 # ENABLE ROW SECURITY
|
287
|
+
AT_DisableRowSecurity = 57 # DISABLE ROW SECURITY
|
288
|
+
AT_ForceRowSecurity = 58 # FORCE ROW SECURITY
|
289
|
+
AT_NoForceRowSecurity = 59 # NO FORCE ROW SECURITY
|
290
|
+
AT_GenericOptions = 60 # OPTIONS (...)
|
291
|
+
AT_AttachPartition = 61 # ATTACH PARTITION
|
292
|
+
AT_DetachPartition = 62 # DETACH PARTITION
|
293
|
+
AT_AddIdentity = 63 # ADD IDENTITY
|
294
|
+
AT_SetIdentity = 64 # SET identity column options
|
295
|
+
AT_DropIdentity = 65 # DROP IDENTITY
|
296
|
+
end
|