// This file is autogenerated by ./scripts/generate_protobuf_and_funcs.rb

syntax = "proto3";

package pg_query;

message ParseResult {
  int32 version = 1;
  repeated RawStmt stmts = 2;
}

message ScanResult {
  int32 version = 1;
  repeated ScanToken tokens = 2;
}

message Node {
  oneof node {
		Alias alias = 1 [json_name="Alias"];
    RangeVar range_var = 2 [json_name="RangeVar"];
    TableFunc table_func = 3 [json_name="TableFunc"];
    IntoClause into_clause = 4 [json_name="IntoClause"];
    Var var = 5 [json_name="Var"];
    Param param = 6 [json_name="Param"];
    Aggref aggref = 7 [json_name="Aggref"];
    GroupingFunc grouping_func = 8 [json_name="GroupingFunc"];
    WindowFunc window_func = 9 [json_name="WindowFunc"];
    SubscriptingRef subscripting_ref = 10 [json_name="SubscriptingRef"];
    FuncExpr func_expr = 11 [json_name="FuncExpr"];
    NamedArgExpr named_arg_expr = 12 [json_name="NamedArgExpr"];
    OpExpr op_expr = 13 [json_name="OpExpr"];
    DistinctExpr distinct_expr = 14 [json_name="DistinctExpr"];
    NullIfExpr null_if_expr = 15 [json_name="NullIfExpr"];
    ScalarArrayOpExpr scalar_array_op_expr = 16 [json_name="ScalarArrayOpExpr"];
    BoolExpr bool_expr = 17 [json_name="BoolExpr"];
    SubLink sub_link = 18 [json_name="SubLink"];
    SubPlan sub_plan = 19 [json_name="SubPlan"];
    AlternativeSubPlan alternative_sub_plan = 20 [json_name="AlternativeSubPlan"];
    FieldSelect field_select = 21 [json_name="FieldSelect"];
    FieldStore field_store = 22 [json_name="FieldStore"];
    RelabelType relabel_type = 23 [json_name="RelabelType"];
    CoerceViaIO coerce_via_io = 24 [json_name="CoerceViaIO"];
    ArrayCoerceExpr array_coerce_expr = 25 [json_name="ArrayCoerceExpr"];
    ConvertRowtypeExpr convert_rowtype_expr = 26 [json_name="ConvertRowtypeExpr"];
    CollateExpr collate_expr = 27 [json_name="CollateExpr"];
    CaseExpr case_expr = 28 [json_name="CaseExpr"];
    CaseWhen case_when = 29 [json_name="CaseWhen"];
    CaseTestExpr case_test_expr = 30 [json_name="CaseTestExpr"];
    ArrayExpr array_expr = 31 [json_name="ArrayExpr"];
    RowExpr row_expr = 32 [json_name="RowExpr"];
    RowCompareExpr row_compare_expr = 33 [json_name="RowCompareExpr"];
    CoalesceExpr coalesce_expr = 34 [json_name="CoalesceExpr"];
    MinMaxExpr min_max_expr = 35 [json_name="MinMaxExpr"];
    SQLValueFunction sqlvalue_function = 36 [json_name="SQLValueFunction"];
    XmlExpr xml_expr = 37 [json_name="XmlExpr"];
    JsonFormat json_format = 38 [json_name="JsonFormat"];
    JsonReturning json_returning = 39 [json_name="JsonReturning"];
    JsonValueExpr json_value_expr = 40 [json_name="JsonValueExpr"];
    JsonConstructorExpr json_constructor_expr = 41 [json_name="JsonConstructorExpr"];
    JsonIsPredicate json_is_predicate = 42 [json_name="JsonIsPredicate"];
    NullTest null_test = 43 [json_name="NullTest"];
    BooleanTest boolean_test = 44 [json_name="BooleanTest"];
    CoerceToDomain coerce_to_domain = 45 [json_name="CoerceToDomain"];
    CoerceToDomainValue coerce_to_domain_value = 46 [json_name="CoerceToDomainValue"];
    SetToDefault set_to_default = 47 [json_name="SetToDefault"];
    CurrentOfExpr current_of_expr = 48 [json_name="CurrentOfExpr"];
    NextValueExpr next_value_expr = 49 [json_name="NextValueExpr"];
    InferenceElem inference_elem = 50 [json_name="InferenceElem"];
    TargetEntry target_entry = 51 [json_name="TargetEntry"];
    RangeTblRef range_tbl_ref = 52 [json_name="RangeTblRef"];
    JoinExpr join_expr = 53 [json_name="JoinExpr"];
    FromExpr from_expr = 54 [json_name="FromExpr"];
    OnConflictExpr on_conflict_expr = 55 [json_name="OnConflictExpr"];
    Query query = 56 [json_name="Query"];
    TypeName type_name = 57 [json_name="TypeName"];
    ColumnRef column_ref = 58 [json_name="ColumnRef"];
    ParamRef param_ref = 59 [json_name="ParamRef"];
    A_Expr a_expr = 60 [json_name="A_Expr"];
    TypeCast type_cast = 61 [json_name="TypeCast"];
    CollateClause collate_clause = 62 [json_name="CollateClause"];
    RoleSpec role_spec = 63 [json_name="RoleSpec"];
    FuncCall func_call = 64 [json_name="FuncCall"];
    A_Star a_star = 65 [json_name="A_Star"];
    A_Indices a_indices = 66 [json_name="A_Indices"];
    A_Indirection a_indirection = 67 [json_name="A_Indirection"];
    A_ArrayExpr a_array_expr = 68 [json_name="A_ArrayExpr"];
    ResTarget res_target = 69 [json_name="ResTarget"];
    MultiAssignRef multi_assign_ref = 70 [json_name="MultiAssignRef"];
    SortBy sort_by = 71 [json_name="SortBy"];
    WindowDef window_def = 72 [json_name="WindowDef"];
    RangeSubselect range_subselect = 73 [json_name="RangeSubselect"];
    RangeFunction range_function = 74 [json_name="RangeFunction"];
    RangeTableFunc range_table_func = 75 [json_name="RangeTableFunc"];
    RangeTableFuncCol range_table_func_col = 76 [json_name="RangeTableFuncCol"];
    RangeTableSample range_table_sample = 77 [json_name="RangeTableSample"];
    ColumnDef column_def = 78 [json_name="ColumnDef"];
    TableLikeClause table_like_clause = 79 [json_name="TableLikeClause"];
    IndexElem index_elem = 80 [json_name="IndexElem"];
    DefElem def_elem = 81 [json_name="DefElem"];
    LockingClause locking_clause = 82 [json_name="LockingClause"];
    XmlSerialize xml_serialize = 83 [json_name="XmlSerialize"];
    PartitionElem partition_elem = 84 [json_name="PartitionElem"];
    PartitionSpec partition_spec = 85 [json_name="PartitionSpec"];
    PartitionBoundSpec partition_bound_spec = 86 [json_name="PartitionBoundSpec"];
    PartitionRangeDatum partition_range_datum = 87 [json_name="PartitionRangeDatum"];
    PartitionCmd partition_cmd = 88 [json_name="PartitionCmd"];
    RangeTblEntry range_tbl_entry = 89 [json_name="RangeTblEntry"];
    RTEPermissionInfo rtepermission_info = 90 [json_name="RTEPermissionInfo"];
    RangeTblFunction range_tbl_function = 91 [json_name="RangeTblFunction"];
    TableSampleClause table_sample_clause = 92 [json_name="TableSampleClause"];
    WithCheckOption with_check_option = 93 [json_name="WithCheckOption"];
    SortGroupClause sort_group_clause = 94 [json_name="SortGroupClause"];
    GroupingSet grouping_set = 95 [json_name="GroupingSet"];
    WindowClause window_clause = 96 [json_name="WindowClause"];
    RowMarkClause row_mark_clause = 97 [json_name="RowMarkClause"];
    WithClause with_clause = 98 [json_name="WithClause"];
    InferClause infer_clause = 99 [json_name="InferClause"];
    OnConflictClause on_conflict_clause = 100 [json_name="OnConflictClause"];
    CTESearchClause ctesearch_clause = 101 [json_name="CTESearchClause"];
    CTECycleClause ctecycle_clause = 102 [json_name="CTECycleClause"];
    CommonTableExpr common_table_expr = 103 [json_name="CommonTableExpr"];
    MergeWhenClause merge_when_clause = 104 [json_name="MergeWhenClause"];
    MergeAction merge_action = 105 [json_name="MergeAction"];
    TriggerTransition trigger_transition = 106 [json_name="TriggerTransition"];
    JsonOutput json_output = 107 [json_name="JsonOutput"];
    JsonKeyValue json_key_value = 108 [json_name="JsonKeyValue"];
    JsonObjectConstructor json_object_constructor = 109 [json_name="JsonObjectConstructor"];
    JsonArrayConstructor json_array_constructor = 110 [json_name="JsonArrayConstructor"];
    JsonArrayQueryConstructor json_array_query_constructor = 111 [json_name="JsonArrayQueryConstructor"];
    JsonAggConstructor json_agg_constructor = 112 [json_name="JsonAggConstructor"];
    JsonObjectAgg json_object_agg = 113 [json_name="JsonObjectAgg"];
    JsonArrayAgg json_array_agg = 114 [json_name="JsonArrayAgg"];
    RawStmt raw_stmt = 115 [json_name="RawStmt"];
    InsertStmt insert_stmt = 116 [json_name="InsertStmt"];
    DeleteStmt delete_stmt = 117 [json_name="DeleteStmt"];
    UpdateStmt update_stmt = 118 [json_name="UpdateStmt"];
    MergeStmt merge_stmt = 119 [json_name="MergeStmt"];
    SelectStmt select_stmt = 120 [json_name="SelectStmt"];
    SetOperationStmt set_operation_stmt = 121 [json_name="SetOperationStmt"];
    ReturnStmt return_stmt = 122 [json_name="ReturnStmt"];
    PLAssignStmt plassign_stmt = 123 [json_name="PLAssignStmt"];
    CreateSchemaStmt create_schema_stmt = 124 [json_name="CreateSchemaStmt"];
    AlterTableStmt alter_table_stmt = 125 [json_name="AlterTableStmt"];
    ReplicaIdentityStmt replica_identity_stmt = 126 [json_name="ReplicaIdentityStmt"];
    AlterTableCmd alter_table_cmd = 127 [json_name="AlterTableCmd"];
    AlterCollationStmt alter_collation_stmt = 128 [json_name="AlterCollationStmt"];
    AlterDomainStmt alter_domain_stmt = 129 [json_name="AlterDomainStmt"];
    GrantStmt grant_stmt = 130 [json_name="GrantStmt"];
    ObjectWithArgs object_with_args = 131 [json_name="ObjectWithArgs"];
    AccessPriv access_priv = 132 [json_name="AccessPriv"];
    GrantRoleStmt grant_role_stmt = 133 [json_name="GrantRoleStmt"];
    AlterDefaultPrivilegesStmt alter_default_privileges_stmt = 134 [json_name="AlterDefaultPrivilegesStmt"];
    CopyStmt copy_stmt = 135 [json_name="CopyStmt"];
    VariableSetStmt variable_set_stmt = 136 [json_name="VariableSetStmt"];
    VariableShowStmt variable_show_stmt = 137 [json_name="VariableShowStmt"];
    CreateStmt create_stmt = 138 [json_name="CreateStmt"];
    Constraint constraint = 139 [json_name="Constraint"];
    CreateTableSpaceStmt create_table_space_stmt = 140 [json_name="CreateTableSpaceStmt"];
    DropTableSpaceStmt drop_table_space_stmt = 141 [json_name="DropTableSpaceStmt"];
    AlterTableSpaceOptionsStmt alter_table_space_options_stmt = 142 [json_name="AlterTableSpaceOptionsStmt"];
    AlterTableMoveAllStmt alter_table_move_all_stmt = 143 [json_name="AlterTableMoveAllStmt"];
    CreateExtensionStmt create_extension_stmt = 144 [json_name="CreateExtensionStmt"];
    AlterExtensionStmt alter_extension_stmt = 145 [json_name="AlterExtensionStmt"];
    AlterExtensionContentsStmt alter_extension_contents_stmt = 146 [json_name="AlterExtensionContentsStmt"];
    CreateFdwStmt create_fdw_stmt = 147 [json_name="CreateFdwStmt"];
    AlterFdwStmt alter_fdw_stmt = 148 [json_name="AlterFdwStmt"];
    CreateForeignServerStmt create_foreign_server_stmt = 149 [json_name="CreateForeignServerStmt"];
    AlterForeignServerStmt alter_foreign_server_stmt = 150 [json_name="AlterForeignServerStmt"];
    CreateForeignTableStmt create_foreign_table_stmt = 151 [json_name="CreateForeignTableStmt"];
    CreateUserMappingStmt create_user_mapping_stmt = 152 [json_name="CreateUserMappingStmt"];
    AlterUserMappingStmt alter_user_mapping_stmt = 153 [json_name="AlterUserMappingStmt"];
    DropUserMappingStmt drop_user_mapping_stmt = 154 [json_name="DropUserMappingStmt"];
    ImportForeignSchemaStmt import_foreign_schema_stmt = 155 [json_name="ImportForeignSchemaStmt"];
    CreatePolicyStmt create_policy_stmt = 156 [json_name="CreatePolicyStmt"];
    AlterPolicyStmt alter_policy_stmt = 157 [json_name="AlterPolicyStmt"];
    CreateAmStmt create_am_stmt = 158 [json_name="CreateAmStmt"];
    CreateTrigStmt create_trig_stmt = 159 [json_name="CreateTrigStmt"];
    CreateEventTrigStmt create_event_trig_stmt = 160 [json_name="CreateEventTrigStmt"];
    AlterEventTrigStmt alter_event_trig_stmt = 161 [json_name="AlterEventTrigStmt"];
    CreatePLangStmt create_plang_stmt = 162 [json_name="CreatePLangStmt"];
    CreateRoleStmt create_role_stmt = 163 [json_name="CreateRoleStmt"];
    AlterRoleStmt alter_role_stmt = 164 [json_name="AlterRoleStmt"];
    AlterRoleSetStmt alter_role_set_stmt = 165 [json_name="AlterRoleSetStmt"];
    DropRoleStmt drop_role_stmt = 166 [json_name="DropRoleStmt"];
    CreateSeqStmt create_seq_stmt = 167 [json_name="CreateSeqStmt"];
    AlterSeqStmt alter_seq_stmt = 168 [json_name="AlterSeqStmt"];
    DefineStmt define_stmt = 169 [json_name="DefineStmt"];
    CreateDomainStmt create_domain_stmt = 170 [json_name="CreateDomainStmt"];
    CreateOpClassStmt create_op_class_stmt = 171 [json_name="CreateOpClassStmt"];
    CreateOpClassItem create_op_class_item = 172 [json_name="CreateOpClassItem"];
    CreateOpFamilyStmt create_op_family_stmt = 173 [json_name="CreateOpFamilyStmt"];
    AlterOpFamilyStmt alter_op_family_stmt = 174 [json_name="AlterOpFamilyStmt"];
    DropStmt drop_stmt = 175 [json_name="DropStmt"];
    TruncateStmt truncate_stmt = 176 [json_name="TruncateStmt"];
    CommentStmt comment_stmt = 177 [json_name="CommentStmt"];
    SecLabelStmt sec_label_stmt = 178 [json_name="SecLabelStmt"];
    DeclareCursorStmt declare_cursor_stmt = 179 [json_name="DeclareCursorStmt"];
    ClosePortalStmt close_portal_stmt = 180 [json_name="ClosePortalStmt"];
    FetchStmt fetch_stmt = 181 [json_name="FetchStmt"];
    IndexStmt index_stmt = 182 [json_name="IndexStmt"];
    CreateStatsStmt create_stats_stmt = 183 [json_name="CreateStatsStmt"];
    StatsElem stats_elem = 184 [json_name="StatsElem"];
    AlterStatsStmt alter_stats_stmt = 185 [json_name="AlterStatsStmt"];
    CreateFunctionStmt create_function_stmt = 186 [json_name="CreateFunctionStmt"];
    FunctionParameter function_parameter = 187 [json_name="FunctionParameter"];
    AlterFunctionStmt alter_function_stmt = 188 [json_name="AlterFunctionStmt"];
    DoStmt do_stmt = 189 [json_name="DoStmt"];
    InlineCodeBlock inline_code_block = 190 [json_name="InlineCodeBlock"];
    CallStmt call_stmt = 191 [json_name="CallStmt"];
    CallContext call_context = 192 [json_name="CallContext"];
    RenameStmt rename_stmt = 193 [json_name="RenameStmt"];
    AlterObjectDependsStmt alter_object_depends_stmt = 194 [json_name="AlterObjectDependsStmt"];
    AlterObjectSchemaStmt alter_object_schema_stmt = 195 [json_name="AlterObjectSchemaStmt"];
    AlterOwnerStmt alter_owner_stmt = 196 [json_name="AlterOwnerStmt"];
    AlterOperatorStmt alter_operator_stmt = 197 [json_name="AlterOperatorStmt"];
    AlterTypeStmt alter_type_stmt = 198 [json_name="AlterTypeStmt"];
    RuleStmt rule_stmt = 199 [json_name="RuleStmt"];
    NotifyStmt notify_stmt = 200 [json_name="NotifyStmt"];
    ListenStmt listen_stmt = 201 [json_name="ListenStmt"];
    UnlistenStmt unlisten_stmt = 202 [json_name="UnlistenStmt"];
    TransactionStmt transaction_stmt = 203 [json_name="TransactionStmt"];
    CompositeTypeStmt composite_type_stmt = 204 [json_name="CompositeTypeStmt"];
    CreateEnumStmt create_enum_stmt = 205 [json_name="CreateEnumStmt"];
    CreateRangeStmt create_range_stmt = 206 [json_name="CreateRangeStmt"];
    AlterEnumStmt alter_enum_stmt = 207 [json_name="AlterEnumStmt"];
    ViewStmt view_stmt = 208 [json_name="ViewStmt"];
    LoadStmt load_stmt = 209 [json_name="LoadStmt"];
    CreatedbStmt createdb_stmt = 210 [json_name="CreatedbStmt"];
    AlterDatabaseStmt alter_database_stmt = 211 [json_name="AlterDatabaseStmt"];
    AlterDatabaseRefreshCollStmt alter_database_refresh_coll_stmt = 212 [json_name="AlterDatabaseRefreshCollStmt"];
    AlterDatabaseSetStmt alter_database_set_stmt = 213 [json_name="AlterDatabaseSetStmt"];
    DropdbStmt dropdb_stmt = 214 [json_name="DropdbStmt"];
    AlterSystemStmt alter_system_stmt = 215 [json_name="AlterSystemStmt"];
    ClusterStmt cluster_stmt = 216 [json_name="ClusterStmt"];
    VacuumStmt vacuum_stmt = 217 [json_name="VacuumStmt"];
    VacuumRelation vacuum_relation = 218 [json_name="VacuumRelation"];
    ExplainStmt explain_stmt = 219 [json_name="ExplainStmt"];
    CreateTableAsStmt create_table_as_stmt = 220 [json_name="CreateTableAsStmt"];
    RefreshMatViewStmt refresh_mat_view_stmt = 221 [json_name="RefreshMatViewStmt"];
    CheckPointStmt check_point_stmt = 222 [json_name="CheckPointStmt"];
    DiscardStmt discard_stmt = 223 [json_name="DiscardStmt"];
    LockStmt lock_stmt = 224 [json_name="LockStmt"];
    ConstraintsSetStmt constraints_set_stmt = 225 [json_name="ConstraintsSetStmt"];
    ReindexStmt reindex_stmt = 226 [json_name="ReindexStmt"];
    CreateConversionStmt create_conversion_stmt = 227 [json_name="CreateConversionStmt"];
    CreateCastStmt create_cast_stmt = 228 [json_name="CreateCastStmt"];
    CreateTransformStmt create_transform_stmt = 229 [json_name="CreateTransformStmt"];
    PrepareStmt prepare_stmt = 230 [json_name="PrepareStmt"];
    ExecuteStmt execute_stmt = 231 [json_name="ExecuteStmt"];
    DeallocateStmt deallocate_stmt = 232 [json_name="DeallocateStmt"];
    DropOwnedStmt drop_owned_stmt = 233 [json_name="DropOwnedStmt"];
    ReassignOwnedStmt reassign_owned_stmt = 234 [json_name="ReassignOwnedStmt"];
    AlterTSDictionaryStmt alter_tsdictionary_stmt = 235 [json_name="AlterTSDictionaryStmt"];
    AlterTSConfigurationStmt alter_tsconfiguration_stmt = 236 [json_name="AlterTSConfigurationStmt"];
    PublicationTable publication_table = 237 [json_name="PublicationTable"];
    PublicationObjSpec publication_obj_spec = 238 [json_name="PublicationObjSpec"];
    CreatePublicationStmt create_publication_stmt = 239 [json_name="CreatePublicationStmt"];
    AlterPublicationStmt alter_publication_stmt = 240 [json_name="AlterPublicationStmt"];
    CreateSubscriptionStmt create_subscription_stmt = 241 [json_name="CreateSubscriptionStmt"];
    AlterSubscriptionStmt alter_subscription_stmt = 242 [json_name="AlterSubscriptionStmt"];
    DropSubscriptionStmt drop_subscription_stmt = 243 [json_name="DropSubscriptionStmt"];
    Integer integer = 244 [json_name="Integer"];
    Float float = 245 [json_name="Float"];
    Boolean boolean = 246 [json_name="Boolean"];
    String string = 247 [json_name="String"];
    BitString bit_string = 248 [json_name="BitString"];
    List list = 249 [json_name="List"];
    IntList int_list = 250 [json_name="IntList"];
    OidList oid_list = 251 [json_name="OidList"];
    A_Const a_const = 252 [json_name="A_Const"];
  }
}

message Integer
{
  int32 ival = 1; /* machine integer */
}

message Float
{
  string fval = 1; /* string */
}

message Boolean
{
  bool boolval = 1;
}

message String
{
  string sval = 1; /* string */
}

message BitString
{
  string bsval = 1; /* string */
}

message List
{
  repeated Node items = 1;
}

message OidList
{
  repeated Node items = 1;
}

message IntList
{
  repeated Node items = 1;
}

message A_Const
{
  oneof val {
    Integer ival = 1;
    Float fval = 2;
    Boolean boolval = 3;
    String sval = 4;
    BitString bsval = 5;
  }
  bool isnull = 10;
  int32 location = 11;
}

message Alias
{
  string aliasname = 1 [json_name="aliasname"];
  repeated Node colnames = 2 [json_name="colnames"];
}

message RangeVar
{
  string catalogname = 1 [json_name="catalogname"];
  string schemaname = 2 [json_name="schemaname"];
  string relname = 3 [json_name="relname"];
  bool inh = 4 [json_name="inh"];
  string relpersistence = 5 [json_name="relpersistence"];
  Alias alias = 6 [json_name="alias"];
  int32 location = 7 [json_name="location"];
}

message TableFunc
{
  repeated Node ns_uris = 1 [json_name="ns_uris"];
  repeated Node ns_names = 2 [json_name="ns_names"];
  Node docexpr = 3 [json_name="docexpr"];
  Node rowexpr = 4 [json_name="rowexpr"];
  repeated Node colnames = 5 [json_name="colnames"];
  repeated Node coltypes = 6 [json_name="coltypes"];
  repeated Node coltypmods = 7 [json_name="coltypmods"];
  repeated Node colcollations = 8 [json_name="colcollations"];
  repeated Node colexprs = 9 [json_name="colexprs"];
  repeated Node coldefexprs = 10 [json_name="coldefexprs"];
  repeated uint64 notnulls = 11 [json_name="notnulls"];
  int32 ordinalitycol = 12 [json_name="ordinalitycol"];
  int32 location = 13 [json_name="location"];
}

message IntoClause
{
  RangeVar rel = 1 [json_name="rel"];
  repeated Node col_names = 2 [json_name="colNames"];
  string access_method = 3 [json_name="accessMethod"];
  repeated Node options = 4 [json_name="options"];
  OnCommitAction on_commit = 5 [json_name="onCommit"];
  string table_space_name = 6 [json_name="tableSpaceName"];
  Node view_query = 7 [json_name="viewQuery"];
  bool skip_data = 8 [json_name="skipData"];
}

message Var
{
  Node xpr = 1 [json_name="xpr"];
  int32 varno = 2 [json_name="varno"];
  int32 varattno = 3 [json_name="varattno"];
  uint32 vartype = 4 [json_name="vartype"];
  int32 vartypmod = 5 [json_name="vartypmod"];
  uint32 varcollid = 6 [json_name="varcollid"];
  repeated uint64 varnullingrels = 7 [json_name="varnullingrels"];
  uint32 varlevelsup = 8 [json_name="varlevelsup"];
  int32 location = 9 [json_name="location"];
}

message Param
{
  Node xpr = 1 [json_name="xpr"];
  ParamKind paramkind = 2 [json_name="paramkind"];
  int32 paramid = 3 [json_name="paramid"];
  uint32 paramtype = 4 [json_name="paramtype"];
  int32 paramtypmod = 5 [json_name="paramtypmod"];
  uint32 paramcollid = 6 [json_name="paramcollid"];
  int32 location = 7 [json_name="location"];
}

message Aggref
{
  Node xpr = 1 [json_name="xpr"];
  uint32 aggfnoid = 2 [json_name="aggfnoid"];
  uint32 aggtype = 3 [json_name="aggtype"];
  uint32 aggcollid = 4 [json_name="aggcollid"];
  uint32 inputcollid = 5 [json_name="inputcollid"];
  repeated Node aggargtypes = 6 [json_name="aggargtypes"];
  repeated Node aggdirectargs = 7 [json_name="aggdirectargs"];
  repeated Node args = 8 [json_name="args"];
  repeated Node aggorder = 9 [json_name="aggorder"];
  repeated Node aggdistinct = 10 [json_name="aggdistinct"];
  Node aggfilter = 11 [json_name="aggfilter"];
  bool aggstar = 12 [json_name="aggstar"];
  bool aggvariadic = 13 [json_name="aggvariadic"];
  string aggkind = 14 [json_name="aggkind"];
  uint32 agglevelsup = 15 [json_name="agglevelsup"];
  AggSplit aggsplit = 16 [json_name="aggsplit"];
  int32 aggno = 17 [json_name="aggno"];
  int32 aggtransno = 18 [json_name="aggtransno"];
  int32 location = 19 [json_name="location"];
}

message GroupingFunc
{
  Node xpr = 1 [json_name="xpr"];
  repeated Node args = 2 [json_name="args"];
  repeated Node refs = 3 [json_name="refs"];
  uint32 agglevelsup = 4 [json_name="agglevelsup"];
  int32 location = 5 [json_name="location"];
}

message WindowFunc
{
  Node xpr = 1 [json_name="xpr"];
  uint32 winfnoid = 2 [json_name="winfnoid"];
  uint32 wintype = 3 [json_name="wintype"];
  uint32 wincollid = 4 [json_name="wincollid"];
  uint32 inputcollid = 5 [json_name="inputcollid"];
  repeated Node args = 6 [json_name="args"];
  Node aggfilter = 7 [json_name="aggfilter"];
  uint32 winref = 8 [json_name="winref"];
  bool winstar = 9 [json_name="winstar"];
  bool winagg = 10 [json_name="winagg"];
  int32 location = 11 [json_name="location"];
}

message SubscriptingRef
{
  Node xpr = 1 [json_name="xpr"];
  uint32 refcontainertype = 2 [json_name="refcontainertype"];
  uint32 refelemtype = 3 [json_name="refelemtype"];
  uint32 refrestype = 4 [json_name="refrestype"];
  int32 reftypmod = 5 [json_name="reftypmod"];
  uint32 refcollid = 6 [json_name="refcollid"];
  repeated Node refupperindexpr = 7 [json_name="refupperindexpr"];
  repeated Node reflowerindexpr = 8 [json_name="reflowerindexpr"];
  Node refexpr = 9 [json_name="refexpr"];
  Node refassgnexpr = 10 [json_name="refassgnexpr"];
}

message FuncExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 funcid = 2 [json_name="funcid"];
  uint32 funcresulttype = 3 [json_name="funcresulttype"];
  bool funcretset = 4 [json_name="funcretset"];
  bool funcvariadic = 5 [json_name="funcvariadic"];
  CoercionForm funcformat = 6 [json_name="funcformat"];
  uint32 funccollid = 7 [json_name="funccollid"];
  uint32 inputcollid = 8 [json_name="inputcollid"];
  repeated Node args = 9 [json_name="args"];
  int32 location = 10 [json_name="location"];
}

message NamedArgExpr
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  string name = 3 [json_name="name"];
  int32 argnumber = 4 [json_name="argnumber"];
  int32 location = 5 [json_name="location"];
}

message OpExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 opno = 2 [json_name="opno"];
  uint32 opresulttype = 3 [json_name="opresulttype"];
  bool opretset = 4 [json_name="opretset"];
  uint32 opcollid = 5 [json_name="opcollid"];
  uint32 inputcollid = 6 [json_name="inputcollid"];
  repeated Node args = 7 [json_name="args"];
  int32 location = 8 [json_name="location"];
}

message DistinctExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 opno = 2 [json_name="opno"];
  uint32 opresulttype = 3 [json_name="opresulttype"];
  bool opretset = 4 [json_name="opretset"];
  uint32 opcollid = 5 [json_name="opcollid"];
  uint32 inputcollid = 6 [json_name="inputcollid"];
  repeated Node args = 7 [json_name="args"];
  int32 location = 8 [json_name="location"];
}

message NullIfExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 opno = 2 [json_name="opno"];
  uint32 opresulttype = 3 [json_name="opresulttype"];
  bool opretset = 4 [json_name="opretset"];
  uint32 opcollid = 5 [json_name="opcollid"];
  uint32 inputcollid = 6 [json_name="inputcollid"];
  repeated Node args = 7 [json_name="args"];
  int32 location = 8 [json_name="location"];
}

message ScalarArrayOpExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 opno = 2 [json_name="opno"];
  bool use_or = 3 [json_name="useOr"];
  uint32 inputcollid = 4 [json_name="inputcollid"];
  repeated Node args = 5 [json_name="args"];
  int32 location = 6 [json_name="location"];
}

message BoolExpr
{
  Node xpr = 1 [json_name="xpr"];
  BoolExprType boolop = 2 [json_name="boolop"];
  repeated Node args = 3 [json_name="args"];
  int32 location = 4 [json_name="location"];
}

message SubLink
{
  Node xpr = 1 [json_name="xpr"];
  SubLinkType sub_link_type = 2 [json_name="subLinkType"];
  int32 sub_link_id = 3 [json_name="subLinkId"];
  Node testexpr = 4 [json_name="testexpr"];
  repeated Node oper_name = 5 [json_name="operName"];
  Node subselect = 6 [json_name="subselect"];
  int32 location = 7 [json_name="location"];
}

message SubPlan
{
  Node xpr = 1 [json_name="xpr"];
  SubLinkType sub_link_type = 2 [json_name="subLinkType"];
  Node testexpr = 3 [json_name="testexpr"];
  repeated Node param_ids = 4 [json_name="paramIds"];
  int32 plan_id = 5 [json_name="plan_id"];
  string plan_name = 6 [json_name="plan_name"];
  uint32 first_col_type = 7 [json_name="firstColType"];
  int32 first_col_typmod = 8 [json_name="firstColTypmod"];
  uint32 first_col_collation = 9 [json_name="firstColCollation"];
  bool use_hash_table = 10 [json_name="useHashTable"];
  bool unknown_eq_false = 11 [json_name="unknownEqFalse"];
  bool parallel_safe = 12 [json_name="parallel_safe"];
  repeated Node set_param = 13 [json_name="setParam"];
  repeated Node par_param = 14 [json_name="parParam"];
  repeated Node args = 15 [json_name="args"];
  double startup_cost = 16 [json_name="startup_cost"];
  double per_call_cost = 17 [json_name="per_call_cost"];
}

message AlternativeSubPlan
{
  Node xpr = 1 [json_name="xpr"];
  repeated Node subplans = 2 [json_name="subplans"];
}

message FieldSelect
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  int32 fieldnum = 3 [json_name="fieldnum"];
  uint32 resulttype = 4 [json_name="resulttype"];
  int32 resulttypmod = 5 [json_name="resulttypmod"];
  uint32 resultcollid = 6 [json_name="resultcollid"];
}

message FieldStore
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  repeated Node newvals = 3 [json_name="newvals"];
  repeated Node fieldnums = 4 [json_name="fieldnums"];
  uint32 resulttype = 5 [json_name="resulttype"];
}

message RelabelType
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  uint32 resulttype = 3 [json_name="resulttype"];
  int32 resulttypmod = 4 [json_name="resulttypmod"];
  uint32 resultcollid = 5 [json_name="resultcollid"];
  CoercionForm relabelformat = 6 [json_name="relabelformat"];
  int32 location = 7 [json_name="location"];
}

message CoerceViaIO
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  uint32 resulttype = 3 [json_name="resulttype"];
  uint32 resultcollid = 4 [json_name="resultcollid"];
  CoercionForm coerceformat = 5 [json_name="coerceformat"];
  int32 location = 6 [json_name="location"];
}

message ArrayCoerceExpr
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  Node elemexpr = 3 [json_name="elemexpr"];
  uint32 resulttype = 4 [json_name="resulttype"];
  int32 resulttypmod = 5 [json_name="resulttypmod"];
  uint32 resultcollid = 6 [json_name="resultcollid"];
  CoercionForm coerceformat = 7 [json_name="coerceformat"];
  int32 location = 8 [json_name="location"];
}

message ConvertRowtypeExpr
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  uint32 resulttype = 3 [json_name="resulttype"];
  CoercionForm convertformat = 4 [json_name="convertformat"];
  int32 location = 5 [json_name="location"];
}

message CollateExpr
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  uint32 coll_oid = 3 [json_name="collOid"];
  int32 location = 4 [json_name="location"];
}

message CaseExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 casetype = 2 [json_name="casetype"];
  uint32 casecollid = 3 [json_name="casecollid"];
  Node arg = 4 [json_name="arg"];
  repeated Node args = 5 [json_name="args"];
  Node defresult = 6 [json_name="defresult"];
  int32 location = 7 [json_name="location"];
}

message CaseWhen
{
  Node xpr = 1 [json_name="xpr"];
  Node expr = 2 [json_name="expr"];
  Node result = 3 [json_name="result"];
  int32 location = 4 [json_name="location"];
}

message CaseTestExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 type_id = 2 [json_name="typeId"];
  int32 type_mod = 3 [json_name="typeMod"];
  uint32 collation = 4 [json_name="collation"];
}

message ArrayExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 array_typeid = 2 [json_name="array_typeid"];
  uint32 array_collid = 3 [json_name="array_collid"];
  uint32 element_typeid = 4 [json_name="element_typeid"];
  repeated Node elements = 5 [json_name="elements"];
  bool multidims = 6 [json_name="multidims"];
  int32 location = 7 [json_name="location"];
}

message RowExpr
{
  Node xpr = 1 [json_name="xpr"];
  repeated Node args = 2 [json_name="args"];
  uint32 row_typeid = 3 [json_name="row_typeid"];
  CoercionForm row_format = 4 [json_name="row_format"];
  repeated Node colnames = 5 [json_name="colnames"];
  int32 location = 6 [json_name="location"];
}

message RowCompareExpr
{
  Node xpr = 1 [json_name="xpr"];
  RowCompareType rctype = 2 [json_name="rctype"];
  repeated Node opnos = 3 [json_name="opnos"];
  repeated Node opfamilies = 4 [json_name="opfamilies"];
  repeated Node inputcollids = 5 [json_name="inputcollids"];
  repeated Node largs = 6 [json_name="largs"];
  repeated Node rargs = 7 [json_name="rargs"];
}

message CoalesceExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 coalescetype = 2 [json_name="coalescetype"];
  uint32 coalescecollid = 3 [json_name="coalescecollid"];
  repeated Node args = 4 [json_name="args"];
  int32 location = 5 [json_name="location"];
}

message MinMaxExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 minmaxtype = 2 [json_name="minmaxtype"];
  uint32 minmaxcollid = 3 [json_name="minmaxcollid"];
  uint32 inputcollid = 4 [json_name="inputcollid"];
  MinMaxOp op = 5 [json_name="op"];
  repeated Node args = 6 [json_name="args"];
  int32 location = 7 [json_name="location"];
}

message SQLValueFunction
{
  Node xpr = 1 [json_name="xpr"];
  SQLValueFunctionOp op = 2 [json_name="op"];
  uint32 type = 3 [json_name="type"];
  int32 typmod = 4 [json_name="typmod"];
  int32 location = 5 [json_name="location"];
}

message XmlExpr
{
  Node xpr = 1 [json_name="xpr"];
  XmlExprOp op = 2 [json_name="op"];
  string name = 3 [json_name="name"];
  repeated Node named_args = 4 [json_name="named_args"];
  repeated Node arg_names = 5 [json_name="arg_names"];
  repeated Node args = 6 [json_name="args"];
  XmlOptionType xmloption = 7 [json_name="xmloption"];
  bool indent = 8 [json_name="indent"];
  uint32 type = 9 [json_name="type"];
  int32 typmod = 10 [json_name="typmod"];
  int32 location = 11 [json_name="location"];
}

message JsonFormat
{
  JsonFormatType format_type = 1 [json_name="format_type"];
  JsonEncoding encoding = 2 [json_name="encoding"];
  int32 location = 3 [json_name="location"];
}

message JsonReturning
{
  JsonFormat format = 1 [json_name="format"];
  uint32 typid = 2 [json_name="typid"];
  int32 typmod = 3 [json_name="typmod"];
}

message JsonValueExpr
{
  Node raw_expr = 1 [json_name="raw_expr"];
  Node formatted_expr = 2 [json_name="formatted_expr"];
  JsonFormat format = 3 [json_name="format"];
}

message JsonConstructorExpr
{
  Node xpr = 1 [json_name="xpr"];
  JsonConstructorType type = 2 [json_name="type"];
  repeated Node args = 3 [json_name="args"];
  Node func = 4 [json_name="func"];
  Node coercion = 5 [json_name="coercion"];
  JsonReturning returning = 6 [json_name="returning"];
  bool absent_on_null = 7 [json_name="absent_on_null"];
  bool unique = 8 [json_name="unique"];
  int32 location = 9 [json_name="location"];
}

message JsonIsPredicate
{
  Node expr = 1 [json_name="expr"];
  JsonFormat format = 2 [json_name="format"];
  JsonValueType item_type = 3 [json_name="item_type"];
  bool unique_keys = 4 [json_name="unique_keys"];
  int32 location = 5 [json_name="location"];
}

message NullTest
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  NullTestType nulltesttype = 3 [json_name="nulltesttype"];
  bool argisrow = 4 [json_name="argisrow"];
  int32 location = 5 [json_name="location"];
}

message BooleanTest
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  BoolTestType booltesttype = 3 [json_name="booltesttype"];
  int32 location = 4 [json_name="location"];
}

message CoerceToDomain
{
  Node xpr = 1 [json_name="xpr"];
  Node arg = 2 [json_name="arg"];
  uint32 resulttype = 3 [json_name="resulttype"];
  int32 resulttypmod = 4 [json_name="resulttypmod"];
  uint32 resultcollid = 5 [json_name="resultcollid"];
  CoercionForm coercionformat = 6 [json_name="coercionformat"];
  int32 location = 7 [json_name="location"];
}

message CoerceToDomainValue
{
  Node xpr = 1 [json_name="xpr"];
  uint32 type_id = 2 [json_name="typeId"];
  int32 type_mod = 3 [json_name="typeMod"];
  uint32 collation = 4 [json_name="collation"];
  int32 location = 5 [json_name="location"];
}

message SetToDefault
{
  Node xpr = 1 [json_name="xpr"];
  uint32 type_id = 2 [json_name="typeId"];
  int32 type_mod = 3 [json_name="typeMod"];
  uint32 collation = 4 [json_name="collation"];
  int32 location = 5 [json_name="location"];
}

message CurrentOfExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 cvarno = 2 [json_name="cvarno"];
  string cursor_name = 3 [json_name="cursor_name"];
  int32 cursor_param = 4 [json_name="cursor_param"];
}

message NextValueExpr
{
  Node xpr = 1 [json_name="xpr"];
  uint32 seqid = 2 [json_name="seqid"];
  uint32 type_id = 3 [json_name="typeId"];
}

message InferenceElem
{
  Node xpr = 1 [json_name="xpr"];
  Node expr = 2 [json_name="expr"];
  uint32 infercollid = 3 [json_name="infercollid"];
  uint32 inferopclass = 4 [json_name="inferopclass"];
}

message TargetEntry
{
  Node xpr = 1 [json_name="xpr"];
  Node expr = 2 [json_name="expr"];
  int32 resno = 3 [json_name="resno"];
  string resname = 4 [json_name="resname"];
  uint32 ressortgroupref = 5 [json_name="ressortgroupref"];
  uint32 resorigtbl = 6 [json_name="resorigtbl"];
  int32 resorigcol = 7 [json_name="resorigcol"];
  bool resjunk = 8 [json_name="resjunk"];
}

message RangeTblRef
{
  int32 rtindex = 1 [json_name="rtindex"];
}

message JoinExpr
{
  JoinType jointype = 1 [json_name="jointype"];
  bool is_natural = 2 [json_name="isNatural"];
  Node larg = 3 [json_name="larg"];
  Node rarg = 4 [json_name="rarg"];
  repeated Node using_clause = 5 [json_name="usingClause"];
  Alias join_using_alias = 6 [json_name="join_using_alias"];
  Node quals = 7 [json_name="quals"];
  Alias alias = 8 [json_name="alias"];
  int32 rtindex = 9 [json_name="rtindex"];
}

message FromExpr
{
  repeated Node fromlist = 1 [json_name="fromlist"];
  Node quals = 2 [json_name="quals"];
}

message OnConflictExpr
{
  OnConflictAction action = 1 [json_name="action"];
  repeated Node arbiter_elems = 2 [json_name="arbiterElems"];
  Node arbiter_where = 3 [json_name="arbiterWhere"];
  uint32 constraint = 4 [json_name="constraint"];
  repeated Node on_conflict_set = 5 [json_name="onConflictSet"];
  Node on_conflict_where = 6 [json_name="onConflictWhere"];
  int32 excl_rel_index = 7 [json_name="exclRelIndex"];
  repeated Node excl_rel_tlist = 8 [json_name="exclRelTlist"];
}

message Query
{
  CmdType command_type = 1 [json_name="commandType"];
  QuerySource query_source = 2 [json_name="querySource"];
  bool can_set_tag = 3 [json_name="canSetTag"];
  Node utility_stmt = 4 [json_name="utilityStmt"];
  int32 result_relation = 5 [json_name="resultRelation"];
  bool has_aggs = 6 [json_name="hasAggs"];
  bool has_window_funcs = 7 [json_name="hasWindowFuncs"];
  bool has_target_srfs = 8 [json_name="hasTargetSRFs"];
  bool has_sub_links = 9 [json_name="hasSubLinks"];
  bool has_distinct_on = 10 [json_name="hasDistinctOn"];
  bool has_recursive = 11 [json_name="hasRecursive"];
  bool has_modifying_cte = 12 [json_name="hasModifyingCTE"];
  bool has_for_update = 13 [json_name="hasForUpdate"];
  bool has_row_security = 14 [json_name="hasRowSecurity"];
  bool is_return = 15 [json_name="isReturn"];
  repeated Node cte_list = 16 [json_name="cteList"];
  repeated Node rtable = 17 [json_name="rtable"];
  repeated Node rteperminfos = 18 [json_name="rteperminfos"];
  FromExpr jointree = 19 [json_name="jointree"];
  repeated Node merge_action_list = 20 [json_name="mergeActionList"];
  bool merge_use_outer_join = 21 [json_name="mergeUseOuterJoin"];
  repeated Node target_list = 22 [json_name="targetList"];
  OverridingKind override = 23 [json_name="override"];
  OnConflictExpr on_conflict = 24 [json_name="onConflict"];
  repeated Node returning_list = 25 [json_name="returningList"];
  repeated Node group_clause = 26 [json_name="groupClause"];
  bool group_distinct = 27 [json_name="groupDistinct"];
  repeated Node grouping_sets = 28 [json_name="groupingSets"];
  Node having_qual = 29 [json_name="havingQual"];
  repeated Node window_clause = 30 [json_name="windowClause"];
  repeated Node distinct_clause = 31 [json_name="distinctClause"];
  repeated Node sort_clause = 32 [json_name="sortClause"];
  Node limit_offset = 33 [json_name="limitOffset"];
  Node limit_count = 34 [json_name="limitCount"];
  LimitOption limit_option = 35 [json_name="limitOption"];
  repeated Node row_marks = 36 [json_name="rowMarks"];
  Node set_operations = 37 [json_name="setOperations"];
  repeated Node constraint_deps = 38 [json_name="constraintDeps"];
  repeated Node with_check_options = 39 [json_name="withCheckOptions"];
  int32 stmt_location = 40 [json_name="stmt_location"];
  int32 stmt_len = 41 [json_name="stmt_len"];
}

message TypeName
{
  repeated Node names = 1 [json_name="names"];
  uint32 type_oid = 2 [json_name="typeOid"];
  bool setof = 3 [json_name="setof"];
  bool pct_type = 4 [json_name="pct_type"];
  repeated Node typmods = 5 [json_name="typmods"];
  int32 typemod = 6 [json_name="typemod"];
  repeated Node array_bounds = 7 [json_name="arrayBounds"];
  int32 location = 8 [json_name="location"];
}

message ColumnRef
{
  repeated Node fields = 1 [json_name="fields"];
  int32 location = 2 [json_name="location"];
}

message ParamRef
{
  int32 number = 1 [json_name="number"];
  int32 location = 2 [json_name="location"];
}

message A_Expr
{
  A_Expr_Kind kind = 1 [json_name="kind"];
  repeated Node name = 2 [json_name="name"];
  Node lexpr = 3 [json_name="lexpr"];
  Node rexpr = 4 [json_name="rexpr"];
  int32 location = 5 [json_name="location"];
}

message TypeCast
{
  Node arg = 1 [json_name="arg"];
  TypeName type_name = 2 [json_name="typeName"];
  int32 location = 3 [json_name="location"];
}

message CollateClause
{
  Node arg = 1 [json_name="arg"];
  repeated Node collname = 2 [json_name="collname"];
  int32 location = 3 [json_name="location"];
}

message RoleSpec
{
  RoleSpecType roletype = 1 [json_name="roletype"];
  string rolename = 2 [json_name="rolename"];
  int32 location = 3 [json_name="location"];
}

message FuncCall
{
  repeated Node funcname = 1 [json_name="funcname"];
  repeated Node args = 2 [json_name="args"];
  repeated Node agg_order = 3 [json_name="agg_order"];
  Node agg_filter = 4 [json_name="agg_filter"];
  WindowDef over = 5 [json_name="over"];
  bool agg_within_group = 6 [json_name="agg_within_group"];
  bool agg_star = 7 [json_name="agg_star"];
  bool agg_distinct = 8 [json_name="agg_distinct"];
  bool func_variadic = 9 [json_name="func_variadic"];
  CoercionForm funcformat = 10 [json_name="funcformat"];
  int32 location = 11 [json_name="location"];
}

message A_Star
{
}

message A_Indices
{
  bool is_slice = 1 [json_name="is_slice"];
  Node lidx = 2 [json_name="lidx"];
  Node uidx = 3 [json_name="uidx"];
}

message A_Indirection
{
  Node arg = 1 [json_name="arg"];
  repeated Node indirection = 2 [json_name="indirection"];
}

message A_ArrayExpr
{
  repeated Node elements = 1 [json_name="elements"];
  int32 location = 2 [json_name="location"];
}

message ResTarget
{
  string name = 1 [json_name="name"];
  repeated Node indirection = 2 [json_name="indirection"];
  Node val = 3 [json_name="val"];
  int32 location = 4 [json_name="location"];
}

message MultiAssignRef
{
  Node source = 1 [json_name="source"];
  int32 colno = 2 [json_name="colno"];
  int32 ncolumns = 3 [json_name="ncolumns"];
}

message SortBy
{
  Node node = 1 [json_name="node"];
  SortByDir sortby_dir = 2 [json_name="sortby_dir"];
  SortByNulls sortby_nulls = 3 [json_name="sortby_nulls"];
  repeated Node use_op = 4 [json_name="useOp"];
  int32 location = 5 [json_name="location"];
}

message WindowDef
{
  string name = 1 [json_name="name"];
  string refname = 2 [json_name="refname"];
  repeated Node partition_clause = 3 [json_name="partitionClause"];
  repeated Node order_clause = 4 [json_name="orderClause"];
  int32 frame_options = 5 [json_name="frameOptions"];
  Node start_offset = 6 [json_name="startOffset"];
  Node end_offset = 7 [json_name="endOffset"];
  int32 location = 8 [json_name="location"];
}

message RangeSubselect
{
  bool lateral = 1 [json_name="lateral"];
  Node subquery = 2 [json_name="subquery"];
  Alias alias = 3 [json_name="alias"];
}

message RangeFunction
{
  bool lateral = 1 [json_name="lateral"];
  bool ordinality = 2 [json_name="ordinality"];
  bool is_rowsfrom = 3 [json_name="is_rowsfrom"];
  repeated Node functions = 4 [json_name="functions"];
  Alias alias = 5 [json_name="alias"];
  repeated Node coldeflist = 6 [json_name="coldeflist"];
}

message RangeTableFunc
{
  bool lateral = 1 [json_name="lateral"];
  Node docexpr = 2 [json_name="docexpr"];
  Node rowexpr = 3 [json_name="rowexpr"];
  repeated Node namespaces = 4 [json_name="namespaces"];
  repeated Node columns = 5 [json_name="columns"];
  Alias alias = 6 [json_name="alias"];
  int32 location = 7 [json_name="location"];
}

message RangeTableFuncCol
{
  string colname = 1 [json_name="colname"];
  TypeName type_name = 2 [json_name="typeName"];
  bool for_ordinality = 3 [json_name="for_ordinality"];
  bool is_not_null = 4 [json_name="is_not_null"];
  Node colexpr = 5 [json_name="colexpr"];
  Node coldefexpr = 6 [json_name="coldefexpr"];
  int32 location = 7 [json_name="location"];
}

message RangeTableSample
{
  Node relation = 1 [json_name="relation"];
  repeated Node method = 2 [json_name="method"];
  repeated Node args = 3 [json_name="args"];
  Node repeatable = 4 [json_name="repeatable"];
  int32 location = 5 [json_name="location"];
}

message ColumnDef
{
  string colname = 1 [json_name="colname"];
  TypeName type_name = 2 [json_name="typeName"];
  string compression = 3 [json_name="compression"];
  int32 inhcount = 4 [json_name="inhcount"];
  bool is_local = 5 [json_name="is_local"];
  bool is_not_null = 6 [json_name="is_not_null"];
  bool is_from_type = 7 [json_name="is_from_type"];
  string storage = 8 [json_name="storage"];
  string storage_name = 9 [json_name="storage_name"];
  Node raw_default = 10 [json_name="raw_default"];
  Node cooked_default = 11 [json_name="cooked_default"];
  string identity = 12 [json_name="identity"];
  RangeVar identity_sequence = 13 [json_name="identitySequence"];
  string generated = 14 [json_name="generated"];
  CollateClause coll_clause = 15 [json_name="collClause"];
  uint32 coll_oid = 16 [json_name="collOid"];
  repeated Node constraints = 17 [json_name="constraints"];
  repeated Node fdwoptions = 18 [json_name="fdwoptions"];
  int32 location = 19 [json_name="location"];
}

message TableLikeClause
{
  RangeVar relation = 1 [json_name="relation"];
  uint32 options = 2 [json_name="options"];
  uint32 relation_oid = 3 [json_name="relationOid"];
}

message IndexElem
{
  string name = 1 [json_name="name"];
  Node expr = 2 [json_name="expr"];
  string indexcolname = 3 [json_name="indexcolname"];
  repeated Node collation = 4 [json_name="collation"];
  repeated Node opclass = 5 [json_name="opclass"];
  repeated Node opclassopts = 6 [json_name="opclassopts"];
  SortByDir ordering = 7 [json_name="ordering"];
  SortByNulls nulls_ordering = 8 [json_name="nulls_ordering"];
}

message DefElem
{
  string defnamespace = 1 [json_name="defnamespace"];
  string defname = 2 [json_name="defname"];
  Node arg = 3 [json_name="arg"];
  DefElemAction defaction = 4 [json_name="defaction"];
  int32 location = 5 [json_name="location"];
}

message LockingClause
{
  repeated Node locked_rels = 1 [json_name="lockedRels"];
  LockClauseStrength strength = 2 [json_name="strength"];
  LockWaitPolicy wait_policy = 3 [json_name="waitPolicy"];
}

message XmlSerialize
{
  XmlOptionType xmloption = 1 [json_name="xmloption"];
  Node expr = 2 [json_name="expr"];
  TypeName type_name = 3 [json_name="typeName"];
  bool indent = 4 [json_name="indent"];
  int32 location = 5 [json_name="location"];
}

message PartitionElem
{
  string name = 1 [json_name="name"];
  Node expr = 2 [json_name="expr"];
  repeated Node collation = 3 [json_name="collation"];
  repeated Node opclass = 4 [json_name="opclass"];
  int32 location = 5 [json_name="location"];
}

message PartitionSpec
{
  PartitionStrategy strategy = 1 [json_name="strategy"];
  repeated Node part_params = 2 [json_name="partParams"];
  int32 location = 3 [json_name="location"];
}

message PartitionBoundSpec
{
  string strategy = 1 [json_name="strategy"];
  bool is_default = 2 [json_name="is_default"];
  int32 modulus = 3 [json_name="modulus"];
  int32 remainder = 4 [json_name="remainder"];
  repeated Node listdatums = 5 [json_name="listdatums"];
  repeated Node lowerdatums = 6 [json_name="lowerdatums"];
  repeated Node upperdatums = 7 [json_name="upperdatums"];
  int32 location = 8 [json_name="location"];
}

message PartitionRangeDatum
{
  PartitionRangeDatumKind kind = 1 [json_name="kind"];
  Node value = 2 [json_name="value"];
  int32 location = 3 [json_name="location"];
}

message PartitionCmd
{
  RangeVar name = 1 [json_name="name"];
  PartitionBoundSpec bound = 2 [json_name="bound"];
  bool concurrent = 3 [json_name="concurrent"];
}

message RangeTblEntry
{
  RTEKind rtekind = 1 [json_name="rtekind"];
  uint32 relid = 2 [json_name="relid"];
  string relkind = 3 [json_name="relkind"];
  int32 rellockmode = 4 [json_name="rellockmode"];
  TableSampleClause tablesample = 5 [json_name="tablesample"];
  uint32 perminfoindex = 6 [json_name="perminfoindex"];
  Query subquery = 7 [json_name="subquery"];
  bool security_barrier = 8 [json_name="security_barrier"];
  JoinType jointype = 9 [json_name="jointype"];
  int32 joinmergedcols = 10 [json_name="joinmergedcols"];
  repeated Node joinaliasvars = 11 [json_name="joinaliasvars"];
  repeated Node joinleftcols = 12 [json_name="joinleftcols"];
  repeated Node joinrightcols = 13 [json_name="joinrightcols"];
  Alias join_using_alias = 14 [json_name="join_using_alias"];
  repeated Node functions = 15 [json_name="functions"];
  bool funcordinality = 16 [json_name="funcordinality"];
  TableFunc tablefunc = 17 [json_name="tablefunc"];
  repeated Node values_lists = 18 [json_name="values_lists"];
  string ctename = 19 [json_name="ctename"];
  uint32 ctelevelsup = 20 [json_name="ctelevelsup"];
  bool self_reference = 21 [json_name="self_reference"];
  repeated Node coltypes = 22 [json_name="coltypes"];
  repeated Node coltypmods = 23 [json_name="coltypmods"];
  repeated Node colcollations = 24 [json_name="colcollations"];
  string enrname = 25 [json_name="enrname"];
  double enrtuples = 26 [json_name="enrtuples"];
  Alias alias = 27 [json_name="alias"];
  Alias eref = 28 [json_name="eref"];
  bool lateral = 29 [json_name="lateral"];
  bool inh = 30 [json_name="inh"];
  bool in_from_cl = 31 [json_name="inFromCl"];
  repeated Node security_quals = 32 [json_name="securityQuals"];
}

message RTEPermissionInfo
{
  uint32 relid = 1 [json_name="relid"];
  bool inh = 2 [json_name="inh"];
  uint64 required_perms = 3 [json_name="requiredPerms"];
  uint32 check_as_user = 4 [json_name="checkAsUser"];
  repeated uint64 selected_cols = 5 [json_name="selectedCols"];
  repeated uint64 inserted_cols = 6 [json_name="insertedCols"];
  repeated uint64 updated_cols = 7 [json_name="updatedCols"];
}

message RangeTblFunction
{
  Node funcexpr = 1 [json_name="funcexpr"];
  int32 funccolcount = 2 [json_name="funccolcount"];
  repeated Node funccolnames = 3 [json_name="funccolnames"];
  repeated Node funccoltypes = 4 [json_name="funccoltypes"];
  repeated Node funccoltypmods = 5 [json_name="funccoltypmods"];
  repeated Node funccolcollations = 6 [json_name="funccolcollations"];
  repeated uint64 funcparams = 7 [json_name="funcparams"];
}

message TableSampleClause
{
  uint32 tsmhandler = 1 [json_name="tsmhandler"];
  repeated Node args = 2 [json_name="args"];
  Node repeatable = 3 [json_name="repeatable"];
}

message WithCheckOption
{
  WCOKind kind = 1 [json_name="kind"];
  string relname = 2 [json_name="relname"];
  string polname = 3 [json_name="polname"];
  Node qual = 4 [json_name="qual"];
  bool cascaded = 5 [json_name="cascaded"];
}

message SortGroupClause
{
  uint32 tle_sort_group_ref = 1 [json_name="tleSortGroupRef"];
  uint32 eqop = 2 [json_name="eqop"];
  uint32 sortop = 3 [json_name="sortop"];
  bool nulls_first = 4 [json_name="nulls_first"];
  bool hashable = 5 [json_name="hashable"];
}

message GroupingSet
{
  GroupingSetKind kind = 1 [json_name="kind"];
  repeated Node content = 2 [json_name="content"];
  int32 location = 3 [json_name="location"];
}

message WindowClause
{
  string name = 1 [json_name="name"];
  string refname = 2 [json_name="refname"];
  repeated Node partition_clause = 3 [json_name="partitionClause"];
  repeated Node order_clause = 4 [json_name="orderClause"];
  int32 frame_options = 5 [json_name="frameOptions"];
  Node start_offset = 6 [json_name="startOffset"];
  Node end_offset = 7 [json_name="endOffset"];
  repeated Node run_condition = 8 [json_name="runCondition"];
  uint32 start_in_range_func = 9 [json_name="startInRangeFunc"];
  uint32 end_in_range_func = 10 [json_name="endInRangeFunc"];
  uint32 in_range_coll = 11 [json_name="inRangeColl"];
  bool in_range_asc = 12 [json_name="inRangeAsc"];
  bool in_range_nulls_first = 13 [json_name="inRangeNullsFirst"];
  uint32 winref = 14 [json_name="winref"];
  bool copied_order = 15 [json_name="copiedOrder"];
}

message RowMarkClause
{
  uint32 rti = 1 [json_name="rti"];
  LockClauseStrength strength = 2 [json_name="strength"];
  LockWaitPolicy wait_policy = 3 [json_name="waitPolicy"];
  bool pushed_down = 4 [json_name="pushedDown"];
}

message WithClause
{
  repeated Node ctes = 1 [json_name="ctes"];
  bool recursive = 2 [json_name="recursive"];
  int32 location = 3 [json_name="location"];
}

message InferClause
{
  repeated Node index_elems = 1 [json_name="indexElems"];
  Node where_clause = 2 [json_name="whereClause"];
  string conname = 3 [json_name="conname"];
  int32 location = 4 [json_name="location"];
}

message OnConflictClause
{
  OnConflictAction action = 1 [json_name="action"];
  InferClause infer = 2 [json_name="infer"];
  repeated Node target_list = 3 [json_name="targetList"];
  Node where_clause = 4 [json_name="whereClause"];
  int32 location = 5 [json_name="location"];
}

message CTESearchClause
{
  repeated Node search_col_list = 1 [json_name="search_col_list"];
  bool search_breadth_first = 2 [json_name="search_breadth_first"];
  string search_seq_column = 3 [json_name="search_seq_column"];
  int32 location = 4 [json_name="location"];
}

message CTECycleClause
{
  repeated Node cycle_col_list = 1 [json_name="cycle_col_list"];
  string cycle_mark_column = 2 [json_name="cycle_mark_column"];
  Node cycle_mark_value = 3 [json_name="cycle_mark_value"];
  Node cycle_mark_default = 4 [json_name="cycle_mark_default"];
  string cycle_path_column = 5 [json_name="cycle_path_column"];
  int32 location = 6 [json_name="location"];
  uint32 cycle_mark_type = 7 [json_name="cycle_mark_type"];
  int32 cycle_mark_typmod = 8 [json_name="cycle_mark_typmod"];
  uint32 cycle_mark_collation = 9 [json_name="cycle_mark_collation"];
  uint32 cycle_mark_neop = 10 [json_name="cycle_mark_neop"];
}

message CommonTableExpr
{
  string ctename = 1 [json_name="ctename"];
  repeated Node aliascolnames = 2 [json_name="aliascolnames"];
  CTEMaterialize ctematerialized = 3 [json_name="ctematerialized"];
  Node ctequery = 4 [json_name="ctequery"];
  CTESearchClause search_clause = 5 [json_name="search_clause"];
  CTECycleClause cycle_clause = 6 [json_name="cycle_clause"];
  int32 location = 7 [json_name="location"];
  bool cterecursive = 8 [json_name="cterecursive"];
  int32 cterefcount = 9 [json_name="cterefcount"];
  repeated Node ctecolnames = 10 [json_name="ctecolnames"];
  repeated Node ctecoltypes = 11 [json_name="ctecoltypes"];
  repeated Node ctecoltypmods = 12 [json_name="ctecoltypmods"];
  repeated Node ctecolcollations = 13 [json_name="ctecolcollations"];
}

message MergeWhenClause
{
  bool matched = 1 [json_name="matched"];
  CmdType command_type = 2 [json_name="commandType"];
  OverridingKind override = 3 [json_name="override"];
  Node condition = 4 [json_name="condition"];
  repeated Node target_list = 5 [json_name="targetList"];
  repeated Node values = 6 [json_name="values"];
}

message MergeAction
{
  bool matched = 1 [json_name="matched"];
  CmdType command_type = 2 [json_name="commandType"];
  OverridingKind override = 3 [json_name="override"];
  Node qual = 4 [json_name="qual"];
  repeated Node target_list = 5 [json_name="targetList"];
  repeated Node update_colnos = 6 [json_name="updateColnos"];
}

message TriggerTransition
{
  string name = 1 [json_name="name"];
  bool is_new = 2 [json_name="isNew"];
  bool is_table = 3 [json_name="isTable"];
}

message JsonOutput
{
  TypeName type_name = 1 [json_name="typeName"];
  JsonReturning returning = 2 [json_name="returning"];
}

message JsonKeyValue
{
  Node key = 1 [json_name="key"];
  JsonValueExpr value = 2 [json_name="value"];
}

message JsonObjectConstructor
{
  repeated Node exprs = 1 [json_name="exprs"];
  JsonOutput output = 2 [json_name="output"];
  bool absent_on_null = 3 [json_name="absent_on_null"];
  bool unique = 4 [json_name="unique"];
  int32 location = 5 [json_name="location"];
}

message JsonArrayConstructor
{
  repeated Node exprs = 1 [json_name="exprs"];
  JsonOutput output = 2 [json_name="output"];
  bool absent_on_null = 3 [json_name="absent_on_null"];
  int32 location = 4 [json_name="location"];
}

message JsonArrayQueryConstructor
{
  Node query = 1 [json_name="query"];
  JsonOutput output = 2 [json_name="output"];
  JsonFormat format = 3 [json_name="format"];
  bool absent_on_null = 4 [json_name="absent_on_null"];
  int32 location = 5 [json_name="location"];
}

message JsonAggConstructor
{
  JsonOutput output = 1 [json_name="output"];
  Node agg_filter = 2 [json_name="agg_filter"];
  repeated Node agg_order = 3 [json_name="agg_order"];
  WindowDef over = 4 [json_name="over"];
  int32 location = 5 [json_name="location"];
}

message JsonObjectAgg
{
  JsonAggConstructor constructor = 1 [json_name="constructor"];
  JsonKeyValue arg = 2 [json_name="arg"];
  bool absent_on_null = 3 [json_name="absent_on_null"];
  bool unique = 4 [json_name="unique"];
}

message JsonArrayAgg
{
  JsonAggConstructor constructor = 1 [json_name="constructor"];
  JsonValueExpr arg = 2 [json_name="arg"];
  bool absent_on_null = 3 [json_name="absent_on_null"];
}

message RawStmt
{
  Node stmt = 1 [json_name="stmt"];
  int32 stmt_location = 2 [json_name="stmt_location"];
  int32 stmt_len = 3 [json_name="stmt_len"];
}

message InsertStmt
{
  RangeVar relation = 1 [json_name="relation"];
  repeated Node cols = 2 [json_name="cols"];
  Node select_stmt = 3 [json_name="selectStmt"];
  OnConflictClause on_conflict_clause = 4 [json_name="onConflictClause"];
  repeated Node returning_list = 5 [json_name="returningList"];
  WithClause with_clause = 6 [json_name="withClause"];
  OverridingKind override = 7 [json_name="override"];
}

message DeleteStmt
{
  RangeVar relation = 1 [json_name="relation"];
  repeated Node using_clause = 2 [json_name="usingClause"];
  Node where_clause = 3 [json_name="whereClause"];
  repeated Node returning_list = 4 [json_name="returningList"];
  WithClause with_clause = 5 [json_name="withClause"];
}

message UpdateStmt
{
  RangeVar relation = 1 [json_name="relation"];
  repeated Node target_list = 2 [json_name="targetList"];
  Node where_clause = 3 [json_name="whereClause"];
  repeated Node from_clause = 4 [json_name="fromClause"];
  repeated Node returning_list = 5 [json_name="returningList"];
  WithClause with_clause = 6 [json_name="withClause"];
}

message MergeStmt
{
  RangeVar relation = 1 [json_name="relation"];
  Node source_relation = 2 [json_name="sourceRelation"];
  Node join_condition = 3 [json_name="joinCondition"];
  repeated Node merge_when_clauses = 4 [json_name="mergeWhenClauses"];
  WithClause with_clause = 5 [json_name="withClause"];
}

message SelectStmt
{
  repeated Node distinct_clause = 1 [json_name="distinctClause"];
  IntoClause into_clause = 2 [json_name="intoClause"];
  repeated Node target_list = 3 [json_name="targetList"];
  repeated Node from_clause = 4 [json_name="fromClause"];
  Node where_clause = 5 [json_name="whereClause"];
  repeated Node group_clause = 6 [json_name="groupClause"];
  bool group_distinct = 7 [json_name="groupDistinct"];
  Node having_clause = 8 [json_name="havingClause"];
  repeated Node window_clause = 9 [json_name="windowClause"];
  repeated Node values_lists = 10 [json_name="valuesLists"];
  repeated Node sort_clause = 11 [json_name="sortClause"];
  Node limit_offset = 12 [json_name="limitOffset"];
  Node limit_count = 13 [json_name="limitCount"];
  LimitOption limit_option = 14 [json_name="limitOption"];
  repeated Node locking_clause = 15 [json_name="lockingClause"];
  WithClause with_clause = 16 [json_name="withClause"];
  SetOperation op = 17 [json_name="op"];
  bool all = 18 [json_name="all"];
  SelectStmt larg = 19 [json_name="larg"];
  SelectStmt rarg = 20 [json_name="rarg"];
}

message SetOperationStmt
{
  SetOperation op = 1 [json_name="op"];
  bool all = 2 [json_name="all"];
  Node larg = 3 [json_name="larg"];
  Node rarg = 4 [json_name="rarg"];
  repeated Node col_types = 5 [json_name="colTypes"];
  repeated Node col_typmods = 6 [json_name="colTypmods"];
  repeated Node col_collations = 7 [json_name="colCollations"];
  repeated Node group_clauses = 8 [json_name="groupClauses"];
}

message ReturnStmt
{
  Node returnval = 1 [json_name="returnval"];
}

message PLAssignStmt
{
  string name = 1 [json_name="name"];
  repeated Node indirection = 2 [json_name="indirection"];
  int32 nnames = 3 [json_name="nnames"];
  SelectStmt val = 4 [json_name="val"];
  int32 location = 5 [json_name="location"];
}

message CreateSchemaStmt
{
  string schemaname = 1 [json_name="schemaname"];
  RoleSpec authrole = 2 [json_name="authrole"];
  repeated Node schema_elts = 3 [json_name="schemaElts"];
  bool if_not_exists = 4 [json_name="if_not_exists"];
}

message AlterTableStmt
{
  RangeVar relation = 1 [json_name="relation"];
  repeated Node cmds = 2 [json_name="cmds"];
  ObjectType objtype = 3 [json_name="objtype"];
  bool missing_ok = 4 [json_name="missing_ok"];
}

message ReplicaIdentityStmt
{
  string identity_type = 1 [json_name="identity_type"];
  string name = 2 [json_name="name"];
}

message AlterTableCmd
{
  AlterTableType subtype = 1 [json_name="subtype"];
  string name = 2 [json_name="name"];
  int32 num = 3 [json_name="num"];
  RoleSpec newowner = 4 [json_name="newowner"];
  Node def = 5 [json_name="def"];
  DropBehavior behavior = 6 [json_name="behavior"];
  bool missing_ok = 7 [json_name="missing_ok"];
  bool recurse = 8 [json_name="recurse"];
}

message AlterCollationStmt
{
  repeated Node collname = 1 [json_name="collname"];
}

message AlterDomainStmt
{
  string subtype = 1 [json_name="subtype"];
  repeated Node type_name = 2 [json_name="typeName"];
  string name = 3 [json_name="name"];
  Node def = 4 [json_name="def"];
  DropBehavior behavior = 5 [json_name="behavior"];
  bool missing_ok = 6 [json_name="missing_ok"];
}

message GrantStmt
{
  bool is_grant = 1 [json_name="is_grant"];
  GrantTargetType targtype = 2 [json_name="targtype"];
  ObjectType objtype = 3 [json_name="objtype"];
  repeated Node objects = 4 [json_name="objects"];
  repeated Node privileges = 5 [json_name="privileges"];
  repeated Node grantees = 6 [json_name="grantees"];
  bool grant_option = 7 [json_name="grant_option"];
  RoleSpec grantor = 8 [json_name="grantor"];
  DropBehavior behavior = 9 [json_name="behavior"];
}

message ObjectWithArgs
{
  repeated Node objname = 1 [json_name="objname"];
  repeated Node objargs = 2 [json_name="objargs"];
  repeated Node objfuncargs = 3 [json_name="objfuncargs"];
  bool args_unspecified = 4 [json_name="args_unspecified"];
}

message AccessPriv
{
  string priv_name = 1 [json_name="priv_name"];
  repeated Node cols = 2 [json_name="cols"];
}

message GrantRoleStmt
{
  repeated Node granted_roles = 1 [json_name="granted_roles"];
  repeated Node grantee_roles = 2 [json_name="grantee_roles"];
  bool is_grant = 3 [json_name="is_grant"];
  repeated Node opt = 4 [json_name="opt"];
  RoleSpec grantor = 5 [json_name="grantor"];
  DropBehavior behavior = 6 [json_name="behavior"];
}

message AlterDefaultPrivilegesStmt
{
  repeated Node options = 1 [json_name="options"];
  GrantStmt action = 2 [json_name="action"];
}

message CopyStmt
{
  RangeVar relation = 1 [json_name="relation"];
  Node query = 2 [json_name="query"];
  repeated Node attlist = 3 [json_name="attlist"];
  bool is_from = 4 [json_name="is_from"];
  bool is_program = 5 [json_name="is_program"];
  string filename = 6 [json_name="filename"];
  repeated Node options = 7 [json_name="options"];
  Node where_clause = 8 [json_name="whereClause"];
}

message VariableSetStmt
{
  VariableSetKind kind = 1 [json_name="kind"];
  string name = 2 [json_name="name"];
  repeated Node args = 3 [json_name="args"];
  bool is_local = 4 [json_name="is_local"];
}

message VariableShowStmt
{
  string name = 1 [json_name="name"];
}

message CreateStmt
{
  RangeVar relation = 1 [json_name="relation"];
  repeated Node table_elts = 2 [json_name="tableElts"];
  repeated Node inh_relations = 3 [json_name="inhRelations"];
  PartitionBoundSpec partbound = 4 [json_name="partbound"];
  PartitionSpec partspec = 5 [json_name="partspec"];
  TypeName of_typename = 6 [json_name="ofTypename"];
  repeated Node constraints = 7 [json_name="constraints"];
  repeated Node options = 8 [json_name="options"];
  OnCommitAction oncommit = 9 [json_name="oncommit"];
  string tablespacename = 10 [json_name="tablespacename"];
  string access_method = 11 [json_name="accessMethod"];
  bool if_not_exists = 12 [json_name="if_not_exists"];
}

message Constraint
{
  ConstrType contype = 1 [json_name="contype"];
  string conname = 2 [json_name="conname"];
  bool deferrable = 3 [json_name="deferrable"];
  bool initdeferred = 4 [json_name="initdeferred"];
  int32 location = 5 [json_name="location"];
  bool is_no_inherit = 6 [json_name="is_no_inherit"];
  Node raw_expr = 7 [json_name="raw_expr"];
  string cooked_expr = 8 [json_name="cooked_expr"];
  string generated_when = 9 [json_name="generated_when"];
  bool nulls_not_distinct = 10 [json_name="nulls_not_distinct"];
  repeated Node keys = 11 [json_name="keys"];
  repeated Node including = 12 [json_name="including"];
  repeated Node exclusions = 13 [json_name="exclusions"];
  repeated Node options = 14 [json_name="options"];
  string indexname = 15 [json_name="indexname"];
  string indexspace = 16 [json_name="indexspace"];
  bool reset_default_tblspc = 17 [json_name="reset_default_tblspc"];
  string access_method = 18 [json_name="access_method"];
  Node where_clause = 19 [json_name="where_clause"];
  RangeVar pktable = 20 [json_name="pktable"];
  repeated Node fk_attrs = 21 [json_name="fk_attrs"];
  repeated Node pk_attrs = 22 [json_name="pk_attrs"];
  string fk_matchtype = 23 [json_name="fk_matchtype"];
  string fk_upd_action = 24 [json_name="fk_upd_action"];
  string fk_del_action = 25 [json_name="fk_del_action"];
  repeated Node fk_del_set_cols = 26 [json_name="fk_del_set_cols"];
  repeated Node old_conpfeqop = 27 [json_name="old_conpfeqop"];
  uint32 old_pktable_oid = 28 [json_name="old_pktable_oid"];
  bool skip_validation = 29 [json_name="skip_validation"];
  bool initially_valid = 30 [json_name="initially_valid"];
}

message CreateTableSpaceStmt
{
  string tablespacename = 1 [json_name="tablespacename"];
  RoleSpec owner = 2 [json_name="owner"];
  string location = 3 [json_name="location"];
  repeated Node options = 4 [json_name="options"];
}

message DropTableSpaceStmt
{
  string tablespacename = 1 [json_name="tablespacename"];
  bool missing_ok = 2 [json_name="missing_ok"];
}

message AlterTableSpaceOptionsStmt
{
  string tablespacename = 1 [json_name="tablespacename"];
  repeated Node options = 2 [json_name="options"];
  bool is_reset = 3 [json_name="isReset"];
}

message AlterTableMoveAllStmt
{
  string orig_tablespacename = 1 [json_name="orig_tablespacename"];
  ObjectType objtype = 2 [json_name="objtype"];
  repeated Node roles = 3 [json_name="roles"];
  string new_tablespacename = 4 [json_name="new_tablespacename"];
  bool nowait = 5 [json_name="nowait"];
}

message CreateExtensionStmt
{
  string extname = 1 [json_name="extname"];
  bool if_not_exists = 2 [json_name="if_not_exists"];
  repeated Node options = 3 [json_name="options"];
}

message AlterExtensionStmt
{
  string extname = 1 [json_name="extname"];
  repeated Node options = 2 [json_name="options"];
}

message AlterExtensionContentsStmt
{
  string extname = 1 [json_name="extname"];
  int32 action = 2 [json_name="action"];
  ObjectType objtype = 3 [json_name="objtype"];
  Node object = 4 [json_name="object"];
}

message CreateFdwStmt
{
  string fdwname = 1 [json_name="fdwname"];
  repeated Node func_options = 2 [json_name="func_options"];
  repeated Node options = 3 [json_name="options"];
}

message AlterFdwStmt
{
  string fdwname = 1 [json_name="fdwname"];
  repeated Node func_options = 2 [json_name="func_options"];
  repeated Node options = 3 [json_name="options"];
}

message CreateForeignServerStmt
{
  string servername = 1 [json_name="servername"];
  string servertype = 2 [json_name="servertype"];
  string version = 3 [json_name="version"];
  string fdwname = 4 [json_name="fdwname"];
  bool if_not_exists = 5 [json_name="if_not_exists"];
  repeated Node options = 6 [json_name="options"];
}

message AlterForeignServerStmt
{
  string servername = 1 [json_name="servername"];
  string version = 2 [json_name="version"];
  repeated Node options = 3 [json_name="options"];
  bool has_version = 4 [json_name="has_version"];
}

message CreateForeignTableStmt
{
  CreateStmt base_stmt = 1 [json_name="base"];
  string servername = 2 [json_name="servername"];
  repeated Node options = 3 [json_name="options"];
}

message CreateUserMappingStmt
{
  RoleSpec user = 1 [json_name="user"];
  string servername = 2 [json_name="servername"];
  bool if_not_exists = 3 [json_name="if_not_exists"];
  repeated Node options = 4 [json_name="options"];
}

message AlterUserMappingStmt
{
  RoleSpec user = 1 [json_name="user"];
  string servername = 2 [json_name="servername"];
  repeated Node options = 3 [json_name="options"];
}

message DropUserMappingStmt
{
  RoleSpec user = 1 [json_name="user"];
  string servername = 2 [json_name="servername"];
  bool missing_ok = 3 [json_name="missing_ok"];
}

message ImportForeignSchemaStmt
{
  string server_name = 1 [json_name="server_name"];
  string remote_schema = 2 [json_name="remote_schema"];
  string local_schema = 3 [json_name="local_schema"];
  ImportForeignSchemaType list_type = 4 [json_name="list_type"];
  repeated Node table_list = 5 [json_name="table_list"];
  repeated Node options = 6 [json_name="options"];
}

message CreatePolicyStmt
{
  string policy_name = 1 [json_name="policy_name"];
  RangeVar table = 2 [json_name="table"];
  string cmd_name = 3 [json_name="cmd_name"];
  bool permissive = 4 [json_name="permissive"];
  repeated Node roles = 5 [json_name="roles"];
  Node qual = 6 [json_name="qual"];
  Node with_check = 7 [json_name="with_check"];
}

message AlterPolicyStmt
{
  string policy_name = 1 [json_name="policy_name"];
  RangeVar table = 2 [json_name="table"];
  repeated Node roles = 3 [json_name="roles"];
  Node qual = 4 [json_name="qual"];
  Node with_check = 5 [json_name="with_check"];
}

message CreateAmStmt
{
  string amname = 1 [json_name="amname"];
  repeated Node handler_name = 2 [json_name="handler_name"];
  string amtype = 3 [json_name="amtype"];
}

message CreateTrigStmt
{
  bool replace = 1 [json_name="replace"];
  bool isconstraint = 2 [json_name="isconstraint"];
  string trigname = 3 [json_name="trigname"];
  RangeVar relation = 4 [json_name="relation"];
  repeated Node funcname = 5 [json_name="funcname"];
  repeated Node args = 6 [json_name="args"];
  bool row = 7 [json_name="row"];
  int32 timing = 8 [json_name="timing"];
  int32 events = 9 [json_name="events"];
  repeated Node columns = 10 [json_name="columns"];
  Node when_clause = 11 [json_name="whenClause"];
  repeated Node transition_rels = 12 [json_name="transitionRels"];
  bool deferrable = 13 [json_name="deferrable"];
  bool initdeferred = 14 [json_name="initdeferred"];
  RangeVar constrrel = 15 [json_name="constrrel"];
}

message CreateEventTrigStmt
{
  string trigname = 1 [json_name="trigname"];
  string eventname = 2 [json_name="eventname"];
  repeated Node whenclause = 3 [json_name="whenclause"];
  repeated Node funcname = 4 [json_name="funcname"];
}

message AlterEventTrigStmt
{
  string trigname = 1 [json_name="trigname"];
  string tgenabled = 2 [json_name="tgenabled"];
}

message CreatePLangStmt
{
  bool replace = 1 [json_name="replace"];
  string plname = 2 [json_name="plname"];
  repeated Node plhandler = 3 [json_name="plhandler"];
  repeated Node plinline = 4 [json_name="plinline"];
  repeated Node plvalidator = 5 [json_name="plvalidator"];
  bool pltrusted = 6 [json_name="pltrusted"];
}

message CreateRoleStmt
{
  RoleStmtType stmt_type = 1 [json_name="stmt_type"];
  string role = 2 [json_name="role"];
  repeated Node options = 3 [json_name="options"];
}

message AlterRoleStmt
{
  RoleSpec role = 1 [json_name="role"];
  repeated Node options = 2 [json_name="options"];
  int32 action = 3 [json_name="action"];
}

message AlterRoleSetStmt
{
  RoleSpec role = 1 [json_name="role"];
  string database = 2 [json_name="database"];
  VariableSetStmt setstmt = 3 [json_name="setstmt"];
}

message DropRoleStmt
{
  repeated Node roles = 1 [json_name="roles"];
  bool missing_ok = 2 [json_name="missing_ok"];
}

message CreateSeqStmt
{
  RangeVar sequence = 1 [json_name="sequence"];
  repeated Node options = 2 [json_name="options"];
  uint32 owner_id = 3 [json_name="ownerId"];
  bool for_identity = 4 [json_name="for_identity"];
  bool if_not_exists = 5 [json_name="if_not_exists"];
}

message AlterSeqStmt
{
  RangeVar sequence = 1 [json_name="sequence"];
  repeated Node options = 2 [json_name="options"];
  bool for_identity = 3 [json_name="for_identity"];
  bool missing_ok = 4 [json_name="missing_ok"];
}

message DefineStmt
{
  ObjectType kind = 1 [json_name="kind"];
  bool oldstyle = 2 [json_name="oldstyle"];
  repeated Node defnames = 3 [json_name="defnames"];
  repeated Node args = 4 [json_name="args"];
  repeated Node definition = 5 [json_name="definition"];
  bool if_not_exists = 6 [json_name="if_not_exists"];
  bool replace = 7 [json_name="replace"];
}

message CreateDomainStmt
{
  repeated Node domainname = 1 [json_name="domainname"];
  TypeName type_name = 2 [json_name="typeName"];
  CollateClause coll_clause = 3 [json_name="collClause"];
  repeated Node constraints = 4 [json_name="constraints"];
}

message CreateOpClassStmt
{
  repeated Node opclassname = 1 [json_name="opclassname"];
  repeated Node opfamilyname = 2 [json_name="opfamilyname"];
  string amname = 3 [json_name="amname"];
  TypeName datatype = 4 [json_name="datatype"];
  repeated Node items = 5 [json_name="items"];
  bool is_default = 6 [json_name="isDefault"];
}

message CreateOpClassItem
{
  int32 itemtype = 1 [json_name="itemtype"];
  ObjectWithArgs name = 2 [json_name="name"];
  int32 number = 3 [json_name="number"];
  repeated Node order_family = 4 [json_name="order_family"];
  repeated Node class_args = 5 [json_name="class_args"];
  TypeName storedtype = 6 [json_name="storedtype"];
}

message CreateOpFamilyStmt
{
  repeated Node opfamilyname = 1 [json_name="opfamilyname"];
  string amname = 2 [json_name="amname"];
}

message AlterOpFamilyStmt
{
  repeated Node opfamilyname = 1 [json_name="opfamilyname"];
  string amname = 2 [json_name="amname"];
  bool is_drop = 3 [json_name="isDrop"];
  repeated Node items = 4 [json_name="items"];
}

message DropStmt
{
  repeated Node objects = 1 [json_name="objects"];
  ObjectType remove_type = 2 [json_name="removeType"];
  DropBehavior behavior = 3 [json_name="behavior"];
  bool missing_ok = 4 [json_name="missing_ok"];
  bool concurrent = 5 [json_name="concurrent"];
}

message TruncateStmt
{
  repeated Node relations = 1 [json_name="relations"];
  bool restart_seqs = 2 [json_name="restart_seqs"];
  DropBehavior behavior = 3 [json_name="behavior"];
}

message CommentStmt
{
  ObjectType objtype = 1 [json_name="objtype"];
  Node object = 2 [json_name="object"];
  string comment = 3 [json_name="comment"];
}

message SecLabelStmt
{
  ObjectType objtype = 1 [json_name="objtype"];
  Node object = 2 [json_name="object"];
  string provider = 3 [json_name="provider"];
  string label = 4 [json_name="label"];
}

message DeclareCursorStmt
{
  string portalname = 1 [json_name="portalname"];
  int32 options = 2 [json_name="options"];
  Node query = 3 [json_name="query"];
}

message ClosePortalStmt
{
  string portalname = 1 [json_name="portalname"];
}

message FetchStmt
{
  FetchDirection direction = 1 [json_name="direction"];
  int64 how_many = 2 [json_name="howMany"];
  string portalname = 3 [json_name="portalname"];
  bool ismove = 4 [json_name="ismove"];
}

message IndexStmt
{
  string idxname = 1 [json_name="idxname"];
  RangeVar relation = 2 [json_name="relation"];
  string access_method = 3 [json_name="accessMethod"];
  string table_space = 4 [json_name="tableSpace"];
  repeated Node index_params = 5 [json_name="indexParams"];
  repeated Node index_including_params = 6 [json_name="indexIncludingParams"];
  repeated Node options = 7 [json_name="options"];
  Node where_clause = 8 [json_name="whereClause"];
  repeated Node exclude_op_names = 9 [json_name="excludeOpNames"];
  string idxcomment = 10 [json_name="idxcomment"];
  uint32 index_oid = 11 [json_name="indexOid"];
  uint32 old_number = 12 [json_name="oldNumber"];
  uint32 old_create_subid = 13 [json_name="oldCreateSubid"];
  uint32 old_first_relfilelocator_subid = 14 [json_name="oldFirstRelfilelocatorSubid"];
  bool unique = 15 [json_name="unique"];
  bool nulls_not_distinct = 16 [json_name="nulls_not_distinct"];
  bool primary = 17 [json_name="primary"];
  bool isconstraint = 18 [json_name="isconstraint"];
  bool deferrable = 19 [json_name="deferrable"];
  bool initdeferred = 20 [json_name="initdeferred"];
  bool transformed = 21 [json_name="transformed"];
  bool concurrent = 22 [json_name="concurrent"];
  bool if_not_exists = 23 [json_name="if_not_exists"];
  bool reset_default_tblspc = 24 [json_name="reset_default_tblspc"];
}

message CreateStatsStmt
{
  repeated Node defnames = 1 [json_name="defnames"];
  repeated Node stat_types = 2 [json_name="stat_types"];
  repeated Node exprs = 3 [json_name="exprs"];
  repeated Node relations = 4 [json_name="relations"];
  string stxcomment = 5 [json_name="stxcomment"];
  bool transformed = 6 [json_name="transformed"];
  bool if_not_exists = 7 [json_name="if_not_exists"];
}

message StatsElem
{
  string name = 1 [json_name="name"];
  Node expr = 2 [json_name="expr"];
}

message AlterStatsStmt
{
  repeated Node defnames = 1 [json_name="defnames"];
  int32 stxstattarget = 2 [json_name="stxstattarget"];
  bool missing_ok = 3 [json_name="missing_ok"];
}

message CreateFunctionStmt
{
  bool is_procedure = 1 [json_name="is_procedure"];
  bool replace = 2 [json_name="replace"];
  repeated Node funcname = 3 [json_name="funcname"];
  repeated Node parameters = 4 [json_name="parameters"];
  TypeName return_type = 5 [json_name="returnType"];
  repeated Node options = 6 [json_name="options"];
  Node sql_body = 7 [json_name="sql_body"];
}

message FunctionParameter
{
  string name = 1 [json_name="name"];
  TypeName arg_type = 2 [json_name="argType"];
  FunctionParameterMode mode = 3 [json_name="mode"];
  Node defexpr = 4 [json_name="defexpr"];
}

message AlterFunctionStmt
{
  ObjectType objtype = 1 [json_name="objtype"];
  ObjectWithArgs func = 2 [json_name="func"];
  repeated Node actions = 3 [json_name="actions"];
}

message DoStmt
{
  repeated Node args = 1 [json_name="args"];
}

message InlineCodeBlock
{
  string source_text = 1 [json_name="source_text"];
  uint32 lang_oid = 2 [json_name="langOid"];
  bool lang_is_trusted = 3 [json_name="langIsTrusted"];
  bool atomic = 4 [json_name="atomic"];
}

message CallStmt
{
  FuncCall funccall = 1 [json_name="funccall"];
  FuncExpr funcexpr = 2 [json_name="funcexpr"];
  repeated Node outargs = 3 [json_name="outargs"];
}

message CallContext
{
  bool atomic = 1 [json_name="atomic"];
}

message RenameStmt
{
  ObjectType rename_type = 1 [json_name="renameType"];
  ObjectType relation_type = 2 [json_name="relationType"];
  RangeVar relation = 3 [json_name="relation"];
  Node object = 4 [json_name="object"];
  string subname = 5 [json_name="subname"];
  string newname = 6 [json_name="newname"];
  DropBehavior behavior = 7 [json_name="behavior"];
  bool missing_ok = 8 [json_name="missing_ok"];
}

message AlterObjectDependsStmt
{
  ObjectType object_type = 1 [json_name="objectType"];
  RangeVar relation = 2 [json_name="relation"];
  Node object = 3 [json_name="object"];
  String extname = 4 [json_name="extname"];
  bool remove = 5 [json_name="remove"];
}

message AlterObjectSchemaStmt
{
  ObjectType object_type = 1 [json_name="objectType"];
  RangeVar relation = 2 [json_name="relation"];
  Node object = 3 [json_name="object"];
  string newschema = 4 [json_name="newschema"];
  bool missing_ok = 5 [json_name="missing_ok"];
}

message AlterOwnerStmt
{
  ObjectType object_type = 1 [json_name="objectType"];
  RangeVar relation = 2 [json_name="relation"];
  Node object = 3 [json_name="object"];
  RoleSpec newowner = 4 [json_name="newowner"];
}

message AlterOperatorStmt
{
  ObjectWithArgs opername = 1 [json_name="opername"];
  repeated Node options = 2 [json_name="options"];
}

message AlterTypeStmt
{
  repeated Node type_name = 1 [json_name="typeName"];
  repeated Node options = 2 [json_name="options"];
}

message RuleStmt
{
  RangeVar relation = 1 [json_name="relation"];
  string rulename = 2 [json_name="rulename"];
  Node where_clause = 3 [json_name="whereClause"];
  CmdType event = 4 [json_name="event"];
  bool instead = 5 [json_name="instead"];
  repeated Node actions = 6 [json_name="actions"];
  bool replace = 7 [json_name="replace"];
}

message NotifyStmt
{
  string conditionname = 1 [json_name="conditionname"];
  string payload = 2 [json_name="payload"];
}

message ListenStmt
{
  string conditionname = 1 [json_name="conditionname"];
}

message UnlistenStmt
{
  string conditionname = 1 [json_name="conditionname"];
}

message TransactionStmt
{
  TransactionStmtKind kind = 1 [json_name="kind"];
  repeated Node options = 2 [json_name="options"];
  string savepoint_name = 3 [json_name="savepoint_name"];
  string gid = 4 [json_name="gid"];
  bool chain = 5 [json_name="chain"];
}

message CompositeTypeStmt
{
  RangeVar typevar = 1 [json_name="typevar"];
  repeated Node coldeflist = 2 [json_name="coldeflist"];
}

message CreateEnumStmt
{
  repeated Node type_name = 1 [json_name="typeName"];
  repeated Node vals = 2 [json_name="vals"];
}

message CreateRangeStmt
{
  repeated Node type_name = 1 [json_name="typeName"];
  repeated Node params = 2 [json_name="params"];
}

message AlterEnumStmt
{
  repeated Node type_name = 1 [json_name="typeName"];
  string old_val = 2 [json_name="oldVal"];
  string new_val = 3 [json_name="newVal"];
  string new_val_neighbor = 4 [json_name="newValNeighbor"];
  bool new_val_is_after = 5 [json_name="newValIsAfter"];
  bool skip_if_new_val_exists = 6 [json_name="skipIfNewValExists"];
}

message ViewStmt
{
  RangeVar view = 1 [json_name="view"];
  repeated Node aliases = 2 [json_name="aliases"];
  Node query = 3 [json_name="query"];
  bool replace = 4 [json_name="replace"];
  repeated Node options = 5 [json_name="options"];
  ViewCheckOption with_check_option = 6 [json_name="withCheckOption"];
}

message LoadStmt
{
  string filename = 1 [json_name="filename"];
}

message CreatedbStmt
{
  string dbname = 1 [json_name="dbname"];
  repeated Node options = 2 [json_name="options"];
}

message AlterDatabaseStmt
{
  string dbname = 1 [json_name="dbname"];
  repeated Node options = 2 [json_name="options"];
}

message AlterDatabaseRefreshCollStmt
{
  string dbname = 1 [json_name="dbname"];
}

message AlterDatabaseSetStmt
{
  string dbname = 1 [json_name="dbname"];
  VariableSetStmt setstmt = 2 [json_name="setstmt"];
}

message DropdbStmt
{
  string dbname = 1 [json_name="dbname"];
  bool missing_ok = 2 [json_name="missing_ok"];
  repeated Node options = 3 [json_name="options"];
}

message AlterSystemStmt
{
  VariableSetStmt setstmt = 1 [json_name="setstmt"];
}

message ClusterStmt
{
  RangeVar relation = 1 [json_name="relation"];
  string indexname = 2 [json_name="indexname"];
  repeated Node params = 3 [json_name="params"];
}

message VacuumStmt
{
  repeated Node options = 1 [json_name="options"];
  repeated Node rels = 2 [json_name="rels"];
  bool is_vacuumcmd = 3 [json_name="is_vacuumcmd"];
}

message VacuumRelation
{
  RangeVar relation = 1 [json_name="relation"];
  uint32 oid = 2 [json_name="oid"];
  repeated Node va_cols = 3 [json_name="va_cols"];
}

message ExplainStmt
{
  Node query = 1 [json_name="query"];
  repeated Node options = 2 [json_name="options"];
}

message CreateTableAsStmt
{
  Node query = 1 [json_name="query"];
  IntoClause into = 2 [json_name="into"];
  ObjectType objtype = 3 [json_name="objtype"];
  bool is_select_into = 4 [json_name="is_select_into"];
  bool if_not_exists = 5 [json_name="if_not_exists"];
}

message RefreshMatViewStmt
{
  bool concurrent = 1 [json_name="concurrent"];
  bool skip_data = 2 [json_name="skipData"];
  RangeVar relation = 3 [json_name="relation"];
}

message CheckPointStmt
{
}

message DiscardStmt
{
  DiscardMode target = 1 [json_name="target"];
}

message LockStmt
{
  repeated Node relations = 1 [json_name="relations"];
  int32 mode = 2 [json_name="mode"];
  bool nowait = 3 [json_name="nowait"];
}

message ConstraintsSetStmt
{
  repeated Node constraints = 1 [json_name="constraints"];
  bool deferred = 2 [json_name="deferred"];
}

message ReindexStmt
{
  ReindexObjectType kind = 1 [json_name="kind"];
  RangeVar relation = 2 [json_name="relation"];
  string name = 3 [json_name="name"];
  repeated Node params = 4 [json_name="params"];
}

message CreateConversionStmt
{
  repeated Node conversion_name = 1 [json_name="conversion_name"];
  string for_encoding_name = 2 [json_name="for_encoding_name"];
  string to_encoding_name = 3 [json_name="to_encoding_name"];
  repeated Node func_name = 4 [json_name="func_name"];
  bool def = 5 [json_name="def"];
}

message CreateCastStmt
{
  TypeName sourcetype = 1 [json_name="sourcetype"];
  TypeName targettype = 2 [json_name="targettype"];
  ObjectWithArgs func = 3 [json_name="func"];
  CoercionContext context = 4 [json_name="context"];
  bool inout = 5 [json_name="inout"];
}

message CreateTransformStmt
{
  bool replace = 1 [json_name="replace"];
  TypeName type_name = 2 [json_name="type_name"];
  string lang = 3 [json_name="lang"];
  ObjectWithArgs fromsql = 4 [json_name="fromsql"];
  ObjectWithArgs tosql = 5 [json_name="tosql"];
}

message PrepareStmt
{
  string name = 1 [json_name="name"];
  repeated Node argtypes = 2 [json_name="argtypes"];
  Node query = 3 [json_name="query"];
}

message ExecuteStmt
{
  string name = 1 [json_name="name"];
  repeated Node params = 2 [json_name="params"];
}

message DeallocateStmt
{
  string name = 1 [json_name="name"];
}

message DropOwnedStmt
{
  repeated Node roles = 1 [json_name="roles"];
  DropBehavior behavior = 2 [json_name="behavior"];
}

message ReassignOwnedStmt
{
  repeated Node roles = 1 [json_name="roles"];
  RoleSpec newrole = 2 [json_name="newrole"];
}

message AlterTSDictionaryStmt
{
  repeated Node dictname = 1 [json_name="dictname"];
  repeated Node options = 2 [json_name="options"];
}

message AlterTSConfigurationStmt
{
  AlterTSConfigType kind = 1 [json_name="kind"];
  repeated Node cfgname = 2 [json_name="cfgname"];
  repeated Node tokentype = 3 [json_name="tokentype"];
  repeated Node dicts = 4 [json_name="dicts"];
  bool override = 5 [json_name="override"];
  bool replace = 6 [json_name="replace"];
  bool missing_ok = 7 [json_name="missing_ok"];
}

message PublicationTable
{
  RangeVar relation = 1 [json_name="relation"];
  Node where_clause = 2 [json_name="whereClause"];
  repeated Node columns = 3 [json_name="columns"];
}

message PublicationObjSpec
{
  PublicationObjSpecType pubobjtype = 1 [json_name="pubobjtype"];
  string name = 2 [json_name="name"];
  PublicationTable pubtable = 3 [json_name="pubtable"];
  int32 location = 4 [json_name="location"];
}

message CreatePublicationStmt
{
  string pubname = 1 [json_name="pubname"];
  repeated Node options = 2 [json_name="options"];
  repeated Node pubobjects = 3 [json_name="pubobjects"];
  bool for_all_tables = 4 [json_name="for_all_tables"];
}

message AlterPublicationStmt
{
  string pubname = 1 [json_name="pubname"];
  repeated Node options = 2 [json_name="options"];
  repeated Node pubobjects = 3 [json_name="pubobjects"];
  bool for_all_tables = 4 [json_name="for_all_tables"];
  AlterPublicationAction action = 5 [json_name="action"];
}

message CreateSubscriptionStmt
{
  string subname = 1 [json_name="subname"];
  string conninfo = 2 [json_name="conninfo"];
  repeated Node publication = 3 [json_name="publication"];
  repeated Node options = 4 [json_name="options"];
}

message AlterSubscriptionStmt
{
  AlterSubscriptionType kind = 1 [json_name="kind"];
  string subname = 2 [json_name="subname"];
  string conninfo = 3 [json_name="conninfo"];
  repeated Node publication = 4 [json_name="publication"];
  repeated Node options = 5 [json_name="options"];
}

message DropSubscriptionStmt
{
  string subname = 1 [json_name="subname"];
  bool missing_ok = 2 [json_name="missing_ok"];
  DropBehavior behavior = 3 [json_name="behavior"];
}

enum OverridingKind
{
  OVERRIDING_KIND_UNDEFINED = 0;
  OVERRIDING_NOT_SET = 1;
  OVERRIDING_USER_VALUE = 2;
  OVERRIDING_SYSTEM_VALUE = 3;
}

enum QuerySource
{
  QUERY_SOURCE_UNDEFINED = 0;
  QSRC_ORIGINAL = 1;
  QSRC_PARSER = 2;
  QSRC_INSTEAD_RULE = 3;
  QSRC_QUAL_INSTEAD_RULE = 4;
  QSRC_NON_INSTEAD_RULE = 5;
}

enum SortByDir
{
  SORT_BY_DIR_UNDEFINED = 0;
  SORTBY_DEFAULT = 1;
  SORTBY_ASC = 2;
  SORTBY_DESC = 3;
  SORTBY_USING = 4;
}

enum SortByNulls
{
  SORT_BY_NULLS_UNDEFINED = 0;
  SORTBY_NULLS_DEFAULT = 1;
  SORTBY_NULLS_FIRST = 2;
  SORTBY_NULLS_LAST = 3;
}

enum SetQuantifier
{
  SET_QUANTIFIER_UNDEFINED = 0;
  SET_QUANTIFIER_DEFAULT = 1;
  SET_QUANTIFIER_ALL = 2;
  SET_QUANTIFIER_DISTINCT = 3;
}

enum A_Expr_Kind
{
  A_EXPR_KIND_UNDEFINED = 0;
  AEXPR_OP = 1;
  AEXPR_OP_ANY = 2;
  AEXPR_OP_ALL = 3;
  AEXPR_DISTINCT = 4;
  AEXPR_NOT_DISTINCT = 5;
  AEXPR_NULLIF = 6;
  AEXPR_IN = 7;
  AEXPR_LIKE = 8;
  AEXPR_ILIKE = 9;
  AEXPR_SIMILAR = 10;
  AEXPR_BETWEEN = 11;
  AEXPR_NOT_BETWEEN = 12;
  AEXPR_BETWEEN_SYM = 13;
  AEXPR_NOT_BETWEEN_SYM = 14;
}

enum RoleSpecType
{
  ROLE_SPEC_TYPE_UNDEFINED = 0;
  ROLESPEC_CSTRING = 1;
  ROLESPEC_CURRENT_ROLE = 2;
  ROLESPEC_CURRENT_USER = 3;
  ROLESPEC_SESSION_USER = 4;
  ROLESPEC_PUBLIC = 5;
}

enum TableLikeOption
{
  TABLE_LIKE_OPTION_UNDEFINED = 0;
  CREATE_TABLE_LIKE_COMMENTS = 1;
  CREATE_TABLE_LIKE_COMPRESSION = 2;
  CREATE_TABLE_LIKE_CONSTRAINTS = 3;
  CREATE_TABLE_LIKE_DEFAULTS = 4;
  CREATE_TABLE_LIKE_GENERATED = 5;
  CREATE_TABLE_LIKE_IDENTITY = 6;
  CREATE_TABLE_LIKE_INDEXES = 7;
  CREATE_TABLE_LIKE_STATISTICS = 8;
  CREATE_TABLE_LIKE_STORAGE = 9;
  CREATE_TABLE_LIKE_ALL = 10;
}

enum DefElemAction
{
  DEF_ELEM_ACTION_UNDEFINED = 0;
  DEFELEM_UNSPEC = 1;
  DEFELEM_SET = 2;
  DEFELEM_ADD = 3;
  DEFELEM_DROP = 4;
}

enum PartitionStrategy
{
  PARTITION_STRATEGY_UNDEFINED = 0;
  PARTITION_STRATEGY_LIST = 1;
  PARTITION_STRATEGY_RANGE = 2;
  PARTITION_STRATEGY_HASH = 3;
}

enum PartitionRangeDatumKind
{
  PARTITION_RANGE_DATUM_KIND_UNDEFINED = 0;
  PARTITION_RANGE_DATUM_MINVALUE = 1;
  PARTITION_RANGE_DATUM_VALUE = 2;
  PARTITION_RANGE_DATUM_MAXVALUE = 3;
}

enum RTEKind
{
  RTEKIND_UNDEFINED = 0;
  RTE_RELATION = 1;
  RTE_SUBQUERY = 2;
  RTE_JOIN = 3;
  RTE_FUNCTION = 4;
  RTE_TABLEFUNC = 5;
  RTE_VALUES = 6;
  RTE_CTE = 7;
  RTE_NAMEDTUPLESTORE = 8;
  RTE_RESULT = 9;
}

enum WCOKind
{
  WCOKIND_UNDEFINED = 0;
  WCO_VIEW_CHECK = 1;
  WCO_RLS_INSERT_CHECK = 2;
  WCO_RLS_UPDATE_CHECK = 3;
  WCO_RLS_CONFLICT_CHECK = 4;
  WCO_RLS_MERGE_UPDATE_CHECK = 5;
  WCO_RLS_MERGE_DELETE_CHECK = 6;
}

enum GroupingSetKind
{
  GROUPING_SET_KIND_UNDEFINED = 0;
  GROUPING_SET_EMPTY = 1;
  GROUPING_SET_SIMPLE = 2;
  GROUPING_SET_ROLLUP = 3;
  GROUPING_SET_CUBE = 4;
  GROUPING_SET_SETS = 5;
}

enum CTEMaterialize
{
  CTEMATERIALIZE_UNDEFINED = 0;
  CTEMaterializeDefault = 1;
  CTEMaterializeAlways = 2;
  CTEMaterializeNever = 3;
}

enum SetOperation
{
  SET_OPERATION_UNDEFINED = 0;
  SETOP_NONE = 1;
  SETOP_UNION = 2;
  SETOP_INTERSECT = 3;
  SETOP_EXCEPT = 4;
}

enum ObjectType
{
  OBJECT_TYPE_UNDEFINED = 0;
  OBJECT_ACCESS_METHOD = 1;
  OBJECT_AGGREGATE = 2;
  OBJECT_AMOP = 3;
  OBJECT_AMPROC = 4;
  OBJECT_ATTRIBUTE = 5;
  OBJECT_CAST = 6;
  OBJECT_COLUMN = 7;
  OBJECT_COLLATION = 8;
  OBJECT_CONVERSION = 9;
  OBJECT_DATABASE = 10;
  OBJECT_DEFAULT = 11;
  OBJECT_DEFACL = 12;
  OBJECT_DOMAIN = 13;
  OBJECT_DOMCONSTRAINT = 14;
  OBJECT_EVENT_TRIGGER = 15;
  OBJECT_EXTENSION = 16;
  OBJECT_FDW = 17;
  OBJECT_FOREIGN_SERVER = 18;
  OBJECT_FOREIGN_TABLE = 19;
  OBJECT_FUNCTION = 20;
  OBJECT_INDEX = 21;
  OBJECT_LANGUAGE = 22;
  OBJECT_LARGEOBJECT = 23;
  OBJECT_MATVIEW = 24;
  OBJECT_OPCLASS = 25;
  OBJECT_OPERATOR = 26;
  OBJECT_OPFAMILY = 27;
  OBJECT_PARAMETER_ACL = 28;
  OBJECT_POLICY = 29;
  OBJECT_PROCEDURE = 30;
  OBJECT_PUBLICATION = 31;
  OBJECT_PUBLICATION_NAMESPACE = 32;
  OBJECT_PUBLICATION_REL = 33;
  OBJECT_ROLE = 34;
  OBJECT_ROUTINE = 35;
  OBJECT_RULE = 36;
  OBJECT_SCHEMA = 37;
  OBJECT_SEQUENCE = 38;
  OBJECT_SUBSCRIPTION = 39;
  OBJECT_STATISTIC_EXT = 40;
  OBJECT_TABCONSTRAINT = 41;
  OBJECT_TABLE = 42;
  OBJECT_TABLESPACE = 43;
  OBJECT_TRANSFORM = 44;
  OBJECT_TRIGGER = 45;
  OBJECT_TSCONFIGURATION = 46;
  OBJECT_TSDICTIONARY = 47;
  OBJECT_TSPARSER = 48;
  OBJECT_TSTEMPLATE = 49;
  OBJECT_TYPE = 50;
  OBJECT_USER_MAPPING = 51;
  OBJECT_VIEW = 52;
}

enum DropBehavior
{
  DROP_BEHAVIOR_UNDEFINED = 0;
  DROP_RESTRICT = 1;
  DROP_CASCADE = 2;
}

enum AlterTableType
{
  ALTER_TABLE_TYPE_UNDEFINED = 0;
  AT_AddColumn = 1;
  AT_AddColumnToView = 2;
  AT_ColumnDefault = 3;
  AT_CookedColumnDefault = 4;
  AT_DropNotNull = 5;
  AT_SetNotNull = 6;
  AT_DropExpression = 7;
  AT_CheckNotNull = 8;
  AT_SetStatistics = 9;
  AT_SetOptions = 10;
  AT_ResetOptions = 11;
  AT_SetStorage = 12;
  AT_SetCompression = 13;
  AT_DropColumn = 14;
  AT_AddIndex = 15;
  AT_ReAddIndex = 16;
  AT_AddConstraint = 17;
  AT_ReAddConstraint = 18;
  AT_ReAddDomainConstraint = 19;
  AT_AlterConstraint = 20;
  AT_ValidateConstraint = 21;
  AT_AddIndexConstraint = 22;
  AT_DropConstraint = 23;
  AT_ReAddComment = 24;
  AT_AlterColumnType = 25;
  AT_AlterColumnGenericOptions = 26;
  AT_ChangeOwner = 27;
  AT_ClusterOn = 28;
  AT_DropCluster = 29;
  AT_SetLogged = 30;
  AT_SetUnLogged = 31;
  AT_DropOids = 32;
  AT_SetAccessMethod = 33;
  AT_SetTableSpace = 34;
  AT_SetRelOptions = 35;
  AT_ResetRelOptions = 36;
  AT_ReplaceRelOptions = 37;
  AT_EnableTrig = 38;
  AT_EnableAlwaysTrig = 39;
  AT_EnableReplicaTrig = 40;
  AT_DisableTrig = 41;
  AT_EnableTrigAll = 42;
  AT_DisableTrigAll = 43;
  AT_EnableTrigUser = 44;
  AT_DisableTrigUser = 45;
  AT_EnableRule = 46;
  AT_EnableAlwaysRule = 47;
  AT_EnableReplicaRule = 48;
  AT_DisableRule = 49;
  AT_AddInherit = 50;
  AT_DropInherit = 51;
  AT_AddOf = 52;
  AT_DropOf = 53;
  AT_ReplicaIdentity = 54;
  AT_EnableRowSecurity = 55;
  AT_DisableRowSecurity = 56;
  AT_ForceRowSecurity = 57;
  AT_NoForceRowSecurity = 58;
  AT_GenericOptions = 59;
  AT_AttachPartition = 60;
  AT_DetachPartition = 61;
  AT_DetachPartitionFinalize = 62;
  AT_AddIdentity = 63;
  AT_SetIdentity = 64;
  AT_DropIdentity = 65;
  AT_ReAddStatistics = 66;
}

enum GrantTargetType
{
  GRANT_TARGET_TYPE_UNDEFINED = 0;
  ACL_TARGET_OBJECT = 1;
  ACL_TARGET_ALL_IN_SCHEMA = 2;
  ACL_TARGET_DEFAULTS = 3;
}

enum VariableSetKind
{
  VARIABLE_SET_KIND_UNDEFINED = 0;
  VAR_SET_VALUE = 1;
  VAR_SET_DEFAULT = 2;
  VAR_SET_CURRENT = 3;
  VAR_SET_MULTI = 4;
  VAR_RESET = 5;
  VAR_RESET_ALL = 6;
}

enum ConstrType
{
  CONSTR_TYPE_UNDEFINED = 0;
  CONSTR_NULL = 1;
  CONSTR_NOTNULL = 2;
  CONSTR_DEFAULT = 3;
  CONSTR_IDENTITY = 4;
  CONSTR_GENERATED = 5;
  CONSTR_CHECK = 6;
  CONSTR_PRIMARY = 7;
  CONSTR_UNIQUE = 8;
  CONSTR_EXCLUSION = 9;
  CONSTR_FOREIGN = 10;
  CONSTR_ATTR_DEFERRABLE = 11;
  CONSTR_ATTR_NOT_DEFERRABLE = 12;
  CONSTR_ATTR_DEFERRED = 13;
  CONSTR_ATTR_IMMEDIATE = 14;
}

enum ImportForeignSchemaType
{
  IMPORT_FOREIGN_SCHEMA_TYPE_UNDEFINED = 0;
  FDW_IMPORT_SCHEMA_ALL = 1;
  FDW_IMPORT_SCHEMA_LIMIT_TO = 2;
  FDW_IMPORT_SCHEMA_EXCEPT = 3;
}

enum RoleStmtType
{
  ROLE_STMT_TYPE_UNDEFINED = 0;
  ROLESTMT_ROLE = 1;
  ROLESTMT_USER = 2;
  ROLESTMT_GROUP = 3;
}

enum FetchDirection
{
  FETCH_DIRECTION_UNDEFINED = 0;
  FETCH_FORWARD = 1;
  FETCH_BACKWARD = 2;
  FETCH_ABSOLUTE = 3;
  FETCH_RELATIVE = 4;
}

enum FunctionParameterMode
{
  FUNCTION_PARAMETER_MODE_UNDEFINED = 0;
  FUNC_PARAM_IN = 1;
  FUNC_PARAM_OUT = 2;
  FUNC_PARAM_INOUT = 3;
  FUNC_PARAM_VARIADIC = 4;
  FUNC_PARAM_TABLE = 5;
  FUNC_PARAM_DEFAULT = 6;
}

enum TransactionStmtKind
{
  TRANSACTION_STMT_KIND_UNDEFINED = 0;
  TRANS_STMT_BEGIN = 1;
  TRANS_STMT_START = 2;
  TRANS_STMT_COMMIT = 3;
  TRANS_STMT_ROLLBACK = 4;
  TRANS_STMT_SAVEPOINT = 5;
  TRANS_STMT_RELEASE = 6;
  TRANS_STMT_ROLLBACK_TO = 7;
  TRANS_STMT_PREPARE = 8;
  TRANS_STMT_COMMIT_PREPARED = 9;
  TRANS_STMT_ROLLBACK_PREPARED = 10;
}

enum ViewCheckOption
{
  VIEW_CHECK_OPTION_UNDEFINED = 0;
  NO_CHECK_OPTION = 1;
  LOCAL_CHECK_OPTION = 2;
  CASCADED_CHECK_OPTION = 3;
}

enum DiscardMode
{
  DISCARD_MODE_UNDEFINED = 0;
  DISCARD_ALL = 1;
  DISCARD_PLANS = 2;
  DISCARD_SEQUENCES = 3;
  DISCARD_TEMP = 4;
}

enum ReindexObjectType
{
  REINDEX_OBJECT_TYPE_UNDEFINED = 0;
  REINDEX_OBJECT_INDEX = 1;
  REINDEX_OBJECT_TABLE = 2;
  REINDEX_OBJECT_SCHEMA = 3;
  REINDEX_OBJECT_SYSTEM = 4;
  REINDEX_OBJECT_DATABASE = 5;
}

enum AlterTSConfigType
{
  ALTER_TSCONFIG_TYPE_UNDEFINED = 0;
  ALTER_TSCONFIG_ADD_MAPPING = 1;
  ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN = 2;
  ALTER_TSCONFIG_REPLACE_DICT = 3;
  ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN = 4;
  ALTER_TSCONFIG_DROP_MAPPING = 5;
}

enum PublicationObjSpecType
{
  PUBLICATION_OBJ_SPEC_TYPE_UNDEFINED = 0;
  PUBLICATIONOBJ_TABLE = 1;
  PUBLICATIONOBJ_TABLES_IN_SCHEMA = 2;
  PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA = 3;
  PUBLICATIONOBJ_CONTINUATION = 4;
}

enum AlterPublicationAction
{
  ALTER_PUBLICATION_ACTION_UNDEFINED = 0;
  AP_AddObjects = 1;
  AP_DropObjects = 2;
  AP_SetObjects = 3;
}

enum AlterSubscriptionType
{
  ALTER_SUBSCRIPTION_TYPE_UNDEFINED = 0;
  ALTER_SUBSCRIPTION_OPTIONS = 1;
  ALTER_SUBSCRIPTION_CONNECTION = 2;
  ALTER_SUBSCRIPTION_SET_PUBLICATION = 3;
  ALTER_SUBSCRIPTION_ADD_PUBLICATION = 4;
  ALTER_SUBSCRIPTION_DROP_PUBLICATION = 5;
  ALTER_SUBSCRIPTION_REFRESH = 6;
  ALTER_SUBSCRIPTION_ENABLED = 7;
  ALTER_SUBSCRIPTION_SKIP = 8;
}

enum OnCommitAction
{
  ON_COMMIT_ACTION_UNDEFINED = 0;
  ONCOMMIT_NOOP = 1;
  ONCOMMIT_PRESERVE_ROWS = 2;
  ONCOMMIT_DELETE_ROWS = 3;
  ONCOMMIT_DROP = 4;
}

enum ParamKind
{
  PARAM_KIND_UNDEFINED = 0;
  PARAM_EXTERN = 1;
  PARAM_EXEC = 2;
  PARAM_SUBLINK = 3;
  PARAM_MULTIEXPR = 4;
}

enum CoercionContext
{
  COERCION_CONTEXT_UNDEFINED = 0;
  COERCION_IMPLICIT = 1;
  COERCION_ASSIGNMENT = 2;
  COERCION_PLPGSQL = 3;
  COERCION_EXPLICIT = 4;
}

enum CoercionForm
{
  COERCION_FORM_UNDEFINED = 0;
  COERCE_EXPLICIT_CALL = 1;
  COERCE_EXPLICIT_CAST = 2;
  COERCE_IMPLICIT_CAST = 3;
  COERCE_SQL_SYNTAX = 4;
}

enum BoolExprType
{
  BOOL_EXPR_TYPE_UNDEFINED = 0;
  AND_EXPR = 1;
  OR_EXPR = 2;
  NOT_EXPR = 3;
}

enum SubLinkType
{
  SUB_LINK_TYPE_UNDEFINED = 0;
  EXISTS_SUBLINK = 1;
  ALL_SUBLINK = 2;
  ANY_SUBLINK = 3;
  ROWCOMPARE_SUBLINK = 4;
  EXPR_SUBLINK = 5;
  MULTIEXPR_SUBLINK = 6;
  ARRAY_SUBLINK = 7;
  CTE_SUBLINK = 8;
}

enum RowCompareType
{
  ROW_COMPARE_TYPE_UNDEFINED = 0;
  ROWCOMPARE_LT = 1;
  ROWCOMPARE_LE = 2;
  ROWCOMPARE_EQ = 3;
  ROWCOMPARE_GE = 4;
  ROWCOMPARE_GT = 5;
  ROWCOMPARE_NE = 6;
}

enum MinMaxOp
{
  MIN_MAX_OP_UNDEFINED = 0;
  IS_GREATEST = 1;
  IS_LEAST = 2;
}

enum SQLValueFunctionOp
{
  SQLVALUE_FUNCTION_OP_UNDEFINED = 0;
  SVFOP_CURRENT_DATE = 1;
  SVFOP_CURRENT_TIME = 2;
  SVFOP_CURRENT_TIME_N = 3;
  SVFOP_CURRENT_TIMESTAMP = 4;
  SVFOP_CURRENT_TIMESTAMP_N = 5;
  SVFOP_LOCALTIME = 6;
  SVFOP_LOCALTIME_N = 7;
  SVFOP_LOCALTIMESTAMP = 8;
  SVFOP_LOCALTIMESTAMP_N = 9;
  SVFOP_CURRENT_ROLE = 10;
  SVFOP_CURRENT_USER = 11;
  SVFOP_USER = 12;
  SVFOP_SESSION_USER = 13;
  SVFOP_CURRENT_CATALOG = 14;
  SVFOP_CURRENT_SCHEMA = 15;
}

enum XmlExprOp
{
  XML_EXPR_OP_UNDEFINED = 0;
  IS_XMLCONCAT = 1;
  IS_XMLELEMENT = 2;
  IS_XMLFOREST = 3;
  IS_XMLPARSE = 4;
  IS_XMLPI = 5;
  IS_XMLROOT = 6;
  IS_XMLSERIALIZE = 7;
  IS_DOCUMENT = 8;
}

enum XmlOptionType
{
  XML_OPTION_TYPE_UNDEFINED = 0;
  XMLOPTION_DOCUMENT = 1;
  XMLOPTION_CONTENT = 2;
}

enum JsonEncoding
{
  JSON_ENCODING_UNDEFINED = 0;
  JS_ENC_DEFAULT = 1;
  JS_ENC_UTF8 = 2;
  JS_ENC_UTF16 = 3;
  JS_ENC_UTF32 = 4;
}

enum JsonFormatType
{
  JSON_FORMAT_TYPE_UNDEFINED = 0;
  JS_FORMAT_DEFAULT = 1;
  JS_FORMAT_JSON = 2;
  JS_FORMAT_JSONB = 3;
}

enum JsonConstructorType
{
  JSON_CONSTRUCTOR_TYPE_UNDEFINED = 0;
  JSCTOR_JSON_OBJECT = 1;
  JSCTOR_JSON_ARRAY = 2;
  JSCTOR_JSON_OBJECTAGG = 3;
  JSCTOR_JSON_ARRAYAGG = 4;
}

enum JsonValueType
{
  JSON_VALUE_TYPE_UNDEFINED = 0;
  JS_TYPE_ANY = 1;
  JS_TYPE_OBJECT = 2;
  JS_TYPE_ARRAY = 3;
  JS_TYPE_SCALAR = 4;
}

enum NullTestType
{
  NULL_TEST_TYPE_UNDEFINED = 0;
  IS_NULL = 1;
  IS_NOT_NULL = 2;
}

enum BoolTestType
{
  BOOL_TEST_TYPE_UNDEFINED = 0;
  IS_TRUE = 1;
  IS_NOT_TRUE = 2;
  IS_FALSE = 3;
  IS_NOT_FALSE = 4;
  IS_UNKNOWN = 5;
  IS_NOT_UNKNOWN = 6;
}

enum CmdType
{
  CMD_TYPE_UNDEFINED = 0;
  CMD_UNKNOWN = 1;
  CMD_SELECT = 2;
  CMD_UPDATE = 3;
  CMD_INSERT = 4;
  CMD_DELETE = 5;
  CMD_MERGE = 6;
  CMD_UTILITY = 7;
  CMD_NOTHING = 8;
}

enum JoinType
{
  JOIN_TYPE_UNDEFINED = 0;
  JOIN_INNER = 1;
  JOIN_LEFT = 2;
  JOIN_FULL = 3;
  JOIN_RIGHT = 4;
  JOIN_SEMI = 5;
  JOIN_ANTI = 6;
  JOIN_RIGHT_ANTI = 7;
  JOIN_UNIQUE_OUTER = 8;
  JOIN_UNIQUE_INNER = 9;
}

enum AggStrategy
{
  AGG_STRATEGY_UNDEFINED = 0;
  AGG_PLAIN = 1;
  AGG_SORTED = 2;
  AGG_HASHED = 3;
  AGG_MIXED = 4;
}

enum AggSplit
{
  AGG_SPLIT_UNDEFINED = 0;
  AGGSPLIT_SIMPLE = 1;
  AGGSPLIT_INITIAL_SERIAL = 2;
  AGGSPLIT_FINAL_DESERIAL = 3;
}

enum SetOpCmd
{
  SET_OP_CMD_UNDEFINED = 0;
  SETOPCMD_INTERSECT = 1;
  SETOPCMD_INTERSECT_ALL = 2;
  SETOPCMD_EXCEPT = 3;
  SETOPCMD_EXCEPT_ALL = 4;
}

enum SetOpStrategy
{
  SET_OP_STRATEGY_UNDEFINED = 0;
  SETOP_SORTED = 1;
  SETOP_HASHED = 2;
}

enum OnConflictAction
{
  ON_CONFLICT_ACTION_UNDEFINED = 0;
  ONCONFLICT_NONE = 1;
  ONCONFLICT_NOTHING = 2;
  ONCONFLICT_UPDATE = 3;
}

enum LimitOption
{
  LIMIT_OPTION_UNDEFINED = 0;
  LIMIT_OPTION_DEFAULT = 1;
  LIMIT_OPTION_COUNT = 2;
  LIMIT_OPTION_WITH_TIES = 3;
}

enum LockClauseStrength
{
  LOCK_CLAUSE_STRENGTH_UNDEFINED = 0;
  LCS_NONE = 1;
  LCS_FORKEYSHARE = 2;
  LCS_FORSHARE = 3;
  LCS_FORNOKEYUPDATE = 4;
  LCS_FORUPDATE = 5;
}

enum LockWaitPolicy
{
  LOCK_WAIT_POLICY_UNDEFINED = 0;
  LockWaitBlock = 1;
  LockWaitSkip = 2;
  LockWaitError = 3;
}

enum LockTupleMode
{
  LOCK_TUPLE_MODE_UNDEFINED = 0;
  LockTupleKeyShare = 1;
  LockTupleShare = 2;
  LockTupleNoKeyExclusive = 3;
  LockTupleExclusive = 4;
}

message ScanToken {
  int32 start = 1;
  int32 end = 2;
  Token token = 4;
  KeywordKind keyword_kind = 5;
}

enum KeywordKind {
  NO_KEYWORD = 0;
  UNRESERVED_KEYWORD = 1;
  COL_NAME_KEYWORD = 2;
  TYPE_FUNC_NAME_KEYWORD = 3;
  RESERVED_KEYWORD = 4;
}

enum Token {
  NUL = 0;
  // Single-character tokens that are returned 1:1 (identical with "self" list in scan.l)
  // Either supporting syntax, or single-character operators (some can be both)
  // Also see https://www.postgresql.org/docs/12/sql-syntax-lexical.html#SQL-SYNTAX-SPECIAL-CHARS
  ASCII_36 = 36; // "$"
  ASCII_37 = 37; // "%"
  ASCII_40 = 40; // "("
  ASCII_41 = 41; // ")"
  ASCII_42 = 42; // "*"
  ASCII_43 = 43; // "+"
  ASCII_44 = 44; // ","
  ASCII_45 = 45; // "-"
  ASCII_46 = 46; // "."
  ASCII_47 = 47; // "/"
  ASCII_58 = 58; // ":"
  ASCII_59 = 59; // ";"
  ASCII_60 = 60; // "<"
  ASCII_61 = 61; // "="
  ASCII_62 = 62; // ">"
  ASCII_63 = 63; // "?"
  ASCII_91 = 91; // "["
  ASCII_92 = 92; // "\"
  ASCII_93 = 93; // "]"
  ASCII_94 = 94; // "^"
  // Named tokens in scan.l
  IDENT = 258;
  UIDENT = 259;
  FCONST = 260;
  SCONST = 261;
  USCONST = 262;
  BCONST = 263;
  XCONST = 264;
  Op = 265;
  ICONST = 266;
  PARAM = 267;
  TYPECAST = 268;
  DOT_DOT = 269;
  COLON_EQUALS = 270;
  EQUALS_GREATER = 271;
  LESS_EQUALS = 272;
  GREATER_EQUALS = 273;
  NOT_EQUALS = 274;
  SQL_COMMENT = 275;
  C_COMMENT = 276;
  ABORT_P = 277;
  ABSENT = 278;
  ABSOLUTE_P = 279;
  ACCESS = 280;
  ACTION = 281;
  ADD_P = 282;
  ADMIN = 283;
  AFTER = 284;
  AGGREGATE = 285;
  ALL = 286;
  ALSO = 287;
  ALTER = 288;
  ALWAYS = 289;
  ANALYSE = 290;
  ANALYZE = 291;
  AND = 292;
  ANY = 293;
  ARRAY = 294;
  AS = 295;
  ASC = 296;
  ASENSITIVE = 297;
  ASSERTION = 298;
  ASSIGNMENT = 299;
  ASYMMETRIC = 300;
  ATOMIC = 301;
  AT = 302;
  ATTACH = 303;
  ATTRIBUTE = 304;
  AUTHORIZATION = 305;
  BACKWARD = 306;
  BEFORE = 307;
  BEGIN_P = 308;
  BETWEEN = 309;
  BIGINT = 310;
  BINARY = 311;
  BIT = 312;
  BOOLEAN_P = 313;
  BOTH = 314;
  BREADTH = 315;
  BY = 316;
  CACHE = 317;
  CALL = 318;
  CALLED = 319;
  CASCADE = 320;
  CASCADED = 321;
  CASE = 322;
  CAST = 323;
  CATALOG_P = 324;
  CHAIN = 325;
  CHAR_P = 326;
  CHARACTER = 327;
  CHARACTERISTICS = 328;
  CHECK = 329;
  CHECKPOINT = 330;
  CLASS = 331;
  CLOSE = 332;
  CLUSTER = 333;
  COALESCE = 334;
  COLLATE = 335;
  COLLATION = 336;
  COLUMN = 337;
  COLUMNS = 338;
  COMMENT = 339;
  COMMENTS = 340;
  COMMIT = 341;
  COMMITTED = 342;
  COMPRESSION = 343;
  CONCURRENTLY = 344;
  CONFIGURATION = 345;
  CONFLICT = 346;
  CONNECTION = 347;
  CONSTRAINT = 348;
  CONSTRAINTS = 349;
  CONTENT_P = 350;
  CONTINUE_P = 351;
  CONVERSION_P = 352;
  COPY = 353;
  COST = 354;
  CREATE = 355;
  CROSS = 356;
  CSV = 357;
  CUBE = 358;
  CURRENT_P = 359;
  CURRENT_CATALOG = 360;
  CURRENT_DATE = 361;
  CURRENT_ROLE = 362;
  CURRENT_SCHEMA = 363;
  CURRENT_TIME = 364;
  CURRENT_TIMESTAMP = 365;
  CURRENT_USER = 366;
  CURSOR = 367;
  CYCLE = 368;
  DATA_P = 369;
  DATABASE = 370;
  DAY_P = 371;
  DEALLOCATE = 372;
  DEC = 373;
  DECIMAL_P = 374;
  DECLARE = 375;
  DEFAULT = 376;
  DEFAULTS = 377;
  DEFERRABLE = 378;
  DEFERRED = 379;
  DEFINER = 380;
  DELETE_P = 381;
  DELIMITER = 382;
  DELIMITERS = 383;
  DEPENDS = 384;
  DEPTH = 385;
  DESC = 386;
  DETACH = 387;
  DICTIONARY = 388;
  DISABLE_P = 389;
  DISCARD = 390;
  DISTINCT = 391;
  DO = 392;
  DOCUMENT_P = 393;
  DOMAIN_P = 394;
  DOUBLE_P = 395;
  DROP = 396;
  EACH = 397;
  ELSE = 398;
  ENABLE_P = 399;
  ENCODING = 400;
  ENCRYPTED = 401;
  END_P = 402;
  ENUM_P = 403;
  ESCAPE = 404;
  EVENT = 405;
  EXCEPT = 406;
  EXCLUDE = 407;
  EXCLUDING = 408;
  EXCLUSIVE = 409;
  EXECUTE = 410;
  EXISTS = 411;
  EXPLAIN = 412;
  EXPRESSION = 413;
  EXTENSION = 414;
  EXTERNAL = 415;
  EXTRACT = 416;
  FALSE_P = 417;
  FAMILY = 418;
  FETCH = 419;
  FILTER = 420;
  FINALIZE = 421;
  FIRST_P = 422;
  FLOAT_P = 423;
  FOLLOWING = 424;
  FOR = 425;
  FORCE = 426;
  FOREIGN = 427;
  FORMAT = 428;
  FORWARD = 429;
  FREEZE = 430;
  FROM = 431;
  FULL = 432;
  FUNCTION = 433;
  FUNCTIONS = 434;
  GENERATED = 435;
  GLOBAL = 436;
  GRANT = 437;
  GRANTED = 438;
  GREATEST = 439;
  GROUP_P = 440;
  GROUPING = 441;
  GROUPS = 442;
  HANDLER = 443;
  HAVING = 444;
  HEADER_P = 445;
  HOLD = 446;
  HOUR_P = 447;
  IDENTITY_P = 448;
  IF_P = 449;
  ILIKE = 450;
  IMMEDIATE = 451;
  IMMUTABLE = 452;
  IMPLICIT_P = 453;
  IMPORT_P = 454;
  IN_P = 455;
  INCLUDE = 456;
  INCLUDING = 457;
  INCREMENT = 458;
  INDENT = 459;
  INDEX = 460;
  INDEXES = 461;
  INHERIT = 462;
  INHERITS = 463;
  INITIALLY = 464;
  INLINE_P = 465;
  INNER_P = 466;
  INOUT = 467;
  INPUT_P = 468;
  INSENSITIVE = 469;
  INSERT = 470;
  INSTEAD = 471;
  INT_P = 472;
  INTEGER = 473;
  INTERSECT = 474;
  INTERVAL = 475;
  INTO = 476;
  INVOKER = 477;
  IS = 478;
  ISNULL = 479;
  ISOLATION = 480;
  JOIN = 481;
  JSON = 482;
  JSON_ARRAY = 483;
  JSON_ARRAYAGG = 484;
  JSON_OBJECT = 485;
  JSON_OBJECTAGG = 486;
  KEY = 487;
  KEYS = 488;
  LABEL = 489;
  LANGUAGE = 490;
  LARGE_P = 491;
  LAST_P = 492;
  LATERAL_P = 493;
  LEADING = 494;
  LEAKPROOF = 495;
  LEAST = 496;
  LEFT = 497;
  LEVEL = 498;
  LIKE = 499;
  LIMIT = 500;
  LISTEN = 501;
  LOAD = 502;
  LOCAL = 503;
  LOCALTIME = 504;
  LOCALTIMESTAMP = 505;
  LOCATION = 506;
  LOCK_P = 507;
  LOCKED = 508;
  LOGGED = 509;
  MAPPING = 510;
  MATCH = 511;
  MATCHED = 512;
  MATERIALIZED = 513;
  MAXVALUE = 514;
  MERGE = 515;
  METHOD = 516;
  MINUTE_P = 517;
  MINVALUE = 518;
  MODE = 519;
  MONTH_P = 520;
  MOVE = 521;
  NAME_P = 522;
  NAMES = 523;
  NATIONAL = 524;
  NATURAL = 525;
  NCHAR = 526;
  NEW = 527;
  NEXT = 528;
  NFC = 529;
  NFD = 530;
  NFKC = 531;
  NFKD = 532;
  NO = 533;
  NONE = 534;
  NORMALIZE = 535;
  NORMALIZED = 536;
  NOT = 537;
  NOTHING = 538;
  NOTIFY = 539;
  NOTNULL = 540;
  NOWAIT = 541;
  NULL_P = 542;
  NULLIF = 543;
  NULLS_P = 544;
  NUMERIC = 545;
  OBJECT_P = 546;
  OF = 547;
  OFF = 548;
  OFFSET = 549;
  OIDS = 550;
  OLD = 551;
  ON = 552;
  ONLY = 553;
  OPERATOR = 554;
  OPTION = 555;
  OPTIONS = 556;
  OR = 557;
  ORDER = 558;
  ORDINALITY = 559;
  OTHERS = 560;
  OUT_P = 561;
  OUTER_P = 562;
  OVER = 563;
  OVERLAPS = 564;
  OVERLAY = 565;
  OVERRIDING = 566;
  OWNED = 567;
  OWNER = 568;
  PARALLEL = 569;
  PARAMETER = 570;
  PARSER = 571;
  PARTIAL = 572;
  PARTITION = 573;
  PASSING = 574;
  PASSWORD = 575;
  PLACING = 576;
  PLANS = 577;
  POLICY = 578;
  POSITION = 579;
  PRECEDING = 580;
  PRECISION = 581;
  PRESERVE = 582;
  PREPARE = 583;
  PREPARED = 584;
  PRIMARY = 585;
  PRIOR = 586;
  PRIVILEGES = 587;
  PROCEDURAL = 588;
  PROCEDURE = 589;
  PROCEDURES = 590;
  PROGRAM = 591;
  PUBLICATION = 592;
  QUOTE = 593;
  RANGE = 594;
  READ = 595;
  REAL = 596;
  REASSIGN = 597;
  RECHECK = 598;
  RECURSIVE = 599;
  REF_P = 600;
  REFERENCES = 601;
  REFERENCING = 602;
  REFRESH = 603;
  REINDEX = 604;
  RELATIVE_P = 605;
  RELEASE = 606;
  RENAME = 607;
  REPEATABLE = 608;
  REPLACE = 609;
  REPLICA = 610;
  RESET = 611;
  RESTART = 612;
  RESTRICT = 613;
  RETURN = 614;
  RETURNING = 615;
  RETURNS = 616;
  REVOKE = 617;
  RIGHT = 618;
  ROLE = 619;
  ROLLBACK = 620;
  ROLLUP = 621;
  ROUTINE = 622;
  ROUTINES = 623;
  ROW = 624;
  ROWS = 625;
  RULE = 626;
  SAVEPOINT = 627;
  SCALAR = 628;
  SCHEMA = 629;
  SCHEMAS = 630;
  SCROLL = 631;
  SEARCH = 632;
  SECOND_P = 633;
  SECURITY = 634;
  SELECT = 635;
  SEQUENCE = 636;
  SEQUENCES = 637;
  SERIALIZABLE = 638;
  SERVER = 639;
  SESSION = 640;
  SESSION_USER = 641;
  SET = 642;
  SETS = 643;
  SETOF = 644;
  SHARE = 645;
  SHOW = 646;
  SIMILAR = 647;
  SIMPLE = 648;
  SKIP = 649;
  SMALLINT = 650;
  SNAPSHOT = 651;
  SOME = 652;
  SQL_P = 653;
  STABLE = 654;
  STANDALONE_P = 655;
  START = 656;
  STATEMENT = 657;
  STATISTICS = 658;
  STDIN = 659;
  STDOUT = 660;
  STORAGE = 661;
  STORED = 662;
  STRICT_P = 663;
  STRIP_P = 664;
  SUBSCRIPTION = 665;
  SUBSTRING = 666;
  SUPPORT = 667;
  SYMMETRIC = 668;
  SYSID = 669;
  SYSTEM_P = 670;
  SYSTEM_USER = 671;
  TABLE = 672;
  TABLES = 673;
  TABLESAMPLE = 674;
  TABLESPACE = 675;
  TEMP = 676;
  TEMPLATE = 677;
  TEMPORARY = 678;
  TEXT_P = 679;
  THEN = 680;
  TIES = 681;
  TIME = 682;
  TIMESTAMP = 683;
  TO = 684;
  TRAILING = 685;
  TRANSACTION = 686;
  TRANSFORM = 687;
  TREAT = 688;
  TRIGGER = 689;
  TRIM = 690;
  TRUE_P = 691;
  TRUNCATE = 692;
  TRUSTED = 693;
  TYPE_P = 694;
  TYPES_P = 695;
  UESCAPE = 696;
  UNBOUNDED = 697;
  UNCOMMITTED = 698;
  UNENCRYPTED = 699;
  UNION = 700;
  UNIQUE = 701;
  UNKNOWN = 702;
  UNLISTEN = 703;
  UNLOGGED = 704;
  UNTIL = 705;
  UPDATE = 706;
  USER = 707;
  USING = 708;
  VACUUM = 709;
  VALID = 710;
  VALIDATE = 711;
  VALIDATOR = 712;
  VALUE_P = 713;
  VALUES = 714;
  VARCHAR = 715;
  VARIADIC = 716;
  VARYING = 717;
  VERBOSE = 718;
  VERSION_P = 719;
  VIEW = 720;
  VIEWS = 721;
  VOLATILE = 722;
  WHEN = 723;
  WHERE = 724;
  WHITESPACE_P = 725;
  WINDOW = 726;
  WITH = 727;
  WITHIN = 728;
  WITHOUT = 729;
  WORK = 730;
  WRAPPER = 731;
  WRITE = 732;
  XML_P = 733;
  XMLATTRIBUTES = 734;
  XMLCONCAT = 735;
  XMLELEMENT = 736;
  XMLEXISTS = 737;
  XMLFOREST = 738;
  XMLNAMESPACES = 739;
  XMLPARSE = 740;
  XMLPI = 741;
  XMLROOT = 742;
  XMLSERIALIZE = 743;
  XMLTABLE = 744;
  YEAR_P = 745;
  YES_P = 746;
  ZONE = 747;
  FORMAT_LA = 748;
  NOT_LA = 749;
  NULLS_LA = 750;
  WITH_LA = 751;
  WITHOUT_LA = 752;
  MODE_TYPE_NAME = 753;
  MODE_PLPGSQL_EXPR = 754;
  MODE_PLPGSQL_ASSIGN1 = 755;
  MODE_PLPGSQL_ASSIGN2 = 756;
  MODE_PLPGSQL_ASSIGN3 = 757;
  UMINUS = 758;
}
