# -*- coding: utf-8 -*-
# :Project:   pglast — DO NOT EDIT: type stubs automatically extracted from dml.py
# :Author:    Lele Gaifax <lele@metapensiero.it>
# :License:   GNU General Public License version 3 or later
# :Copyright: © 2017-2026 Lele Gaifax
#

from typing import Any, ClassVar

from .. import ast, enums
from ..stream import RawStream
from . import IntEnumPrinter

def a_array_expr(node: ast.A_ArrayExpr, output: RawStream) -> None: ...

def a_const(node: ast.A_Const, output: RawStream) -> None: ...

class AExprKindPrinter(IntEnumPrinter[enums.A_Expr_Kind]):
    enum: ClassVar[type[enums.A_Expr_Kind]]
    def AEXPR_BETWEEN(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_BETWEEN_SYM(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_DISTINCT(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_ILIKE(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_IN(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_LIKE(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_NOT_BETWEEN(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_NOT_BETWEEN_SYM(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_NOT_DISTINCT(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_NULLIF(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_OP(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_OP_ALL(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_OP_ANY(self, node: ast.Node, output: RawStream) -> None: ...
    def AEXPR_SIMILAR(self, node: ast.Node, output: RawStream) -> None: ...


a_expr_kind_printer: AExprKindPrinter

def a_expr(node: ast.A_Expr, output: RawStream) -> None: ...

def a_indices(node: ast.A_Indices, output: RawStream) -> None: ...

def a_indirection(node: ast.A_Indirection, output: RawStream) -> None: ...

def a_indirection_a_star(node: ast.A_Star, output: RawStream) -> None: ...

def a_indirection_column_ref(node: ast.ColumnRef, output: RawStream) -> None: ...

def a_indirection_func_call(node: ast.FuncCall, output: RawStream) -> None: ...

def a_indirection_field(node: ast.String, output: RawStream) -> None: ...

def a_star(node: ast.A_Star, output: RawStream) -> None: ...

def alias(node: ast.Alias, output: RawStream) -> None: ...

def bitstring(node: ast.BitString, output: RawStream) -> None: ...

def boolean(node: ast.Boolean, output: RawStream) -> None: ...

def bool_expr(node: ast.BoolExpr, output: RawStream) -> None: ...

class BooleanTestPrinter(IntEnumPrinter[enums.BoolTestType]):
    enum: ClassVar[type[enums.BoolTestType]]
    def IS_FALSE(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_NOT_FALSE(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_NOT_TRUE(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_NOT_UNKNOWN(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_TRUE(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_UNKNOWN(self, node: ast.Node, output: RawStream) -> None: ...


boolean_test_printer: BooleanTestPrinter

def boolean_test(node: ast.BooleanTest, output: RawStream) -> None: ...

def call_stmt(node: ast.CallStmt, output: RawStream) -> None: ...

def case_expr(node: ast.CaseExpr, output: RawStream) -> None: ...

def case_when(node: ast.CaseWhen, output: RawStream) -> None: ...

def coalesce_expr(node: ast.CoalesceExpr, output: RawStream) -> None: ...

def collate_clause(node: ast.CollateClause, output: RawStream) -> None: ...

def column_ref(node: ast.ColumnRef, output: RawStream) -> None: ...

class CTEMaterializedPrinter(IntEnumPrinter[enums.CTEMaterialize]):
    enum: ClassVar[type[enums.CTEMaterialize]]
    def CTEMaterializeAlways(self, node: ast.Node, output: RawStream) -> None: ...
    def CTEMaterializeDefault(self, node: ast.Node, output: RawStream) -> None: ...
    def CTEMaterializeNever(self, node: ast.Node, output: RawStream) -> None: ...


cte_materialize_printer: CTEMaterializedPrinter

def cte_cycle_clause(node: ast.CTECycleClause, output: RawStream) -> None: ...

def cte_cycle_clause_type_cast(node: ast.TypeCast, output: RawStream) -> None: ...

def cte_search_clause(node: ast.CTESearchClause, output: RawStream) -> None: ...

def common_table_expr(node: ast.CommonTableExpr, output: RawStream) -> None: ...

def constraints_set_stmt(node: ast.ConstraintsSetStmt, output: RawStream) -> None: ...

def copy_stmt(node: ast.CopyStmt, output: RawStream) -> None: ...

def copy_stmt_def_elem(node: ast.DefElem, output: RawStream) -> None: ...

def declare_cursor_stmt(node: ast.DeclareCursorStmt, output: RawStream) -> None: ...

def delete_stmt(node: ast.DeleteStmt, output: RawStream) -> None: ...

def execute_stmt(node: ast.ExecuteStmt, output: RawStream) -> None: ...

def explain_stmt(node: ast.ExplainStmt, output: RawStream) -> None: ...

def explain_stmt_def_elem(node: ast.DefElem, output: RawStream) -> None: ...

class FetchDirectionPrinter(IntEnumPrinter[enums.FetchDirection]):
    enum: ClassVar[type[enums.FetchDirection]]
    def FETCH_FORWARD(self, node: ast.Node, output: RawStream) -> None: ...
    def FETCH_BACKWARD(self, node: ast.Node, output: RawStream) -> None: ...
    def FETCH_ABSOLUTE(self, node: ast.Node, output: RawStream) -> None: ...
    def FETCH_RELATIVE(self, node: ast.Node, output: RawStream) -> None: ...


fetch_direction_printer: FetchDirectionPrinter

def fetch_stmt(node: ast.FetchStmt, output: RawStream) -> None: ...

def float(node: ast.Float, output: RawStream) -> None: ...

def func_call(node: ast.FuncCall, output: RawStream) -> None: ...

def func_call_window_def(node: ast.WindowDef, output: RawStream) -> None: ...

def grouping_set(node: ast.GroupingSet, output: RawStream) -> None: ...

def grouping_func(node: ast.GroupingFunc, output: RawStream) -> None: ...

def index_elem(node: ast.IndexElem, output: RawStream) -> None: ...

def infer_clause(node: ast.InferClause, output: RawStream) -> None: ...

def integer(node: ast.Integer, output: RawStream) -> None: ...

def insert_stmt(node: ast.InsertStmt, output: RawStream) -> None: ...

def into_clause(node: ast.IntoClause, output: RawStream) -> None: ...

def join_expr(node: ast.JoinExpr, output: RawStream) -> None: ...

def json_agg_constructor(node: ast.JsonAggConstructor, output: RawStream) -> None: ...

def json_argument(node: ast.JsonArgument, output: RawStream) -> None: ...

def json_array_agg(node: ast.JsonArrayAgg, output: RawStream) -> None: ...

def json_array_constructor(node: ast.JsonArrayConstructor, output: RawStream) -> None: ...

def json_array_query_constructor(node: ast.JsonArrayQueryConstructor, output: RawStream) -> None: ...

class JsonBehaviorTypePrinter(IntEnumPrinter[enums.JsonBehaviorType]):
    enum: ClassVar[type[enums.JsonBehaviorType]]
    def JSON_BEHAVIOR_NULL(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_BEHAVIOR_ERROR(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_BEHAVIOR_EMPTY(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_BEHAVIOR_TRUE(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_BEHAVIOR_FALSE(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_BEHAVIOR_UNKNOWN(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_BEHAVIOR_EMPTY_ARRAY(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_BEHAVIOR_EMPTY_OBJECT(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_BEHAVIOR_DEFAULT(self, node: ast.Node, output: RawStream) -> None: ...


json_behavior_type_printer: JsonBehaviorTypePrinter

def json_behavior(node: ast.JsonBehavior, output: RawStream) -> None: ...

class JsonEncodingPrinter(IntEnumPrinter[enums.JsonEncoding]):
    enum: ClassVar[type[enums.JsonEncoding]]
    def JS_ENC_UTF8(self, node: ast.Node, output: RawStream) -> None: ...
    def JS_ENC_UTF16(self, node: ast.Node, output: RawStream) -> None: ...
    def JS_ENC_UTF32(self, node: ast.Node, output: RawStream) -> None: ...


json_encoding_printer: JsonEncodingPrinter

class JsonFormatTypePrinter(IntEnumPrinter[enums.JsonFormatType]):
    enum: ClassVar[type[enums.JsonFormatType]]
    def JS_FORMAT_JSON(self, node: ast.Node, output: RawStream) -> None: ...
    def JS_FORMAT_JSONB(self, node: ast.Node, output: RawStream) -> None: ...


json_format_type_printer: JsonFormatTypePrinter

def json_format(node: ast.JsonFormat, output: RawStream) -> None: ...

class JsonExprOpPrinter(IntEnumPrinter[enums.JsonExprOp]):
    enum: ClassVar[type[enums.JsonExprOp]]
    def JSON_EXISTS_OP(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_QUERY_OP(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_VALUE_OP(self, node: ast.Node, output: RawStream) -> None: ...
    def JSON_TABLE_OP(self, node: ast.Node, output: RawStream) -> None: ...


json_expr_op_printer: JsonExprOpPrinter

def json_func_expr(node: ast.JsonFuncExpr, output: RawStream) -> None: ...

def json_is_predicate(node: ast.JsonIsPredicate, output: RawStream) -> None: ...

def json_key_value(node: ast.JsonKeyValue, output: RawStream) -> None: ...

def json_object_agg(node: ast.JsonObjectAgg, output: RawStream) -> None: ...

def json_object_constructor(node: ast.JsonObjectConstructor, output: RawStream) -> None: ...

def json_output(node: ast.JsonOutput, output: RawStream) -> None: ...

def json_parse_expr(node: ast.JsonParseExpr, output: RawStream) -> None: ...

def json_returning(node: ast.JsonReturning, output: RawStream) -> None: ...

def json_scalar_expr(node: ast.JsonScalarExpr, output: RawStream) -> None: ...

def json_serialize_expr(node: ast.JsonSerializeExpr, output: RawStream) -> None: ...

def json_table(node: ast.JsonTable, output: RawStream) -> None: ...

class JsonQuotesPrinter(IntEnumPrinter[enums.JsonQuotes]):
    enum: ClassVar[type[enums.JsonQuotes]]
    def JS_QUOTES_UNSPEC(self, node: ast.Node, output: RawStream) -> None: ...
    def JS_QUOTES_KEEP(self, node: ast.Node, output: RawStream) -> None: ...
    def JS_QUOTES_OMIT(self, node: ast.Node, output: RawStream) -> None: ...


json_quotes_printer: JsonQuotesPrinter

def json_table_column(node: ast.JsonTableColumn, output: RawStream) -> None: ...

def json_table_path_spec(node: ast.JsonTablePathSpec, output: RawStream) -> None: ...

def json_value_expr(node: ast.JsonValueExpr, output: RawStream) -> None: ...

class JsonValueTypePrinter(IntEnumPrinter[enums.JsonValueType]):
    enum: ClassVar[type[enums.JsonValueType]]
    def JS_TYPE_ANY(self, node: ast.Node, output: RawStream) -> None: ...
    def JS_TYPE_OBJECT(self, node: ast.Node, output: RawStream) -> None: ...
    def JS_TYPE_ARRAY(self, node: ast.Node, output: RawStream) -> None: ...
    def JS_TYPE_SCALAR(self, node: ast.Node, output: RawStream) -> None: ...


json_value_type_printer: JsonValueTypePrinter

def locking_clause(node: ast.LockingClause, output: RawStream) -> None: ...

def listen_stmt(node: ast.ListenStmt, output: RawStream) -> None: ...

class MergeMatchKindPrinter(IntEnumPrinter[enums.MergeMatchKind]):
    enum: ClassVar[type[enums.MergeMatchKind]]
    def MERGE_WHEN_MATCHED(self, node: ast.Node, output: RawStream) -> None: ...
    def MERGE_WHEN_NOT_MATCHED_BY_SOURCE(self, node: ast.Node, output: RawStream) -> None: ...
    def MERGE_WHEN_NOT_MATCHED_BY_TARGET(self, node: ast.Node, output: RawStream) -> None: ...


merge_match_kind_printer: MergeMatchKindPrinter

def merge_stmt(node: ast.MergeStmt, output: RawStream) -> None: ...

def merge_support_func(node: ast.MergeSupportFunc, output: RawStream) -> None: ...

def merge_when_clause(node: ast.MergeWhenClause, output: RawStream) -> None: ...

def min_max_expr(node: ast.MinMaxExpr, output: RawStream) -> None: ...

def multi_assign_ref(node: ast.MultiAssignRef, output: RawStream) -> None: ...

def named_arg_expr(node: ast.NamedArgExpr, output: RawStream) -> None: ...

def null_test(node: ast.NullTest, output: RawStream) -> None: ...

def param_ref(node: ast.ParamRef, output: RawStream) -> None: ...

def prepare_stmt(node: ast.PrepareStmt, output: RawStream) -> None: ...

def on_conflict_clause(node: ast.OnConflictClause, output: RawStream) -> None: ...

def range_function(node: ast.RangeFunction, output: RawStream) -> None: ...

def range_subselect(node: ast.RangeSubselect, output: RawStream) -> None: ...

def range_table_func(node: ast.RangeTableFunc, output: RawStream) -> None: ...

def range_table_func_res_target(node: ast.ResTarget, output: RawStream) -> None: ...

def range_table_func_col(node: ast.RangeTableFuncCol, output: RawStream) -> None: ...

def range_var(node: ast.RangeVar, output: RawStream) -> None: ...

def range_table_sample(node: ast.RangeTableSample, output: RawStream) -> None: ...

def raw_stmt(node: ast.RawStmt, output: RawStream) -> None: ...

def returning_clause(node: ast.ReturningClause, output: RawStream) -> None: ...

def returning_option(node: ast.ReturningOption, output: RawStream) -> None: ...

def res_target(node: ast.ResTarget, output: RawStream) -> None: ...

def row_expr(node: ast.RowExpr, output: RawStream) -> None: ...

def select_stmt(node: ast.SelectStmt, output: RawStream) -> None: ...

def set_to_default(node: ast.SetToDefault, output: RawStream) -> None: ...

def sort_by(node: ast.SortBy, output: RawStream) -> None: ...

class SQLValueFunctionOpPrinter(IntEnumPrinter[enums.SQLValueFunctionOp]):
    enum: ClassVar[type[enums.SQLValueFunctionOp]]
    def SVFOP_CURRENT_CATALOG(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_CURRENT_DATE(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_CURRENT_ROLE(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_CURRENT_SCHEMA(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_CURRENT_TIME(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_CURRENT_TIMESTAMP(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_CURRENT_TIMESTAMP_N(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_CURRENT_TIME_N(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_CURRENT_USER(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_LOCALTIME(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_LOCALTIMESTAMP(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_LOCALTIMESTAMP_N(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_LOCALTIME_N(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_SESSION_USER(self, node: ast.Node, output: RawStream) -> None: ...
    def SVFOP_USER(self, node: ast.Node, output: RawStream) -> None: ...


sql_value_function_op_printer: SQLValueFunctionOpPrinter

def sql_value_function(node: ast.SQLValueFunction, output: RawStream) -> None: ...

def string(node: ast.String, output: RawStream, is_name: bool = ..., is_symbol: bool = ...) -> None: ...

def sub_link(node: ast.SubLink, output: RawStream) -> None: ...

def transaction_stmt(node: ast.TransactionStmt, output: RawStream) -> None: ...

def transaction_stmt_def_elem(node: ast.DefElem, output: RawStream) -> None: ...

def truncate_stmt(node: ast.TruncateStmt, output: RawStream) -> None: ...

def type_cast(node: ast.TypeCast, output: RawStream) -> None: ...

MONTH: int

YEAR: int

DAY: int

HOUR: int

MINUTE: int

SECOND: int

interval_ranges: Any

system_types: Any

def type_name(node: ast.TypeName, output: RawStream) -> None: ...

def variable_set_stmt_type_cast(node: ast.TypeCast, output: RawStream) -> None: ...

def update_stmt(node: ast.UpdateStmt, output: RawStream) -> None: ...

def unlisten_stmt(node: ast.UnlistenStmt, output: RawStream) -> None: ...

def with_clause(node: ast.WithClause, output: RawStream) -> None: ...

def window_def(node: ast.WindowDef, output: RawStream) -> None: ...

def print_indirection(node: ast.Node, output: RawStream) -> None: ...

def update_stmt_res_target(node: ast.ResTarget, output: RawStream) -> None: ...

class XmlOptionTypePrinter(IntEnumPrinter[enums.XmlOptionType]):
    enum: ClassVar[type[enums.XmlOptionType]]
    def XMLOPTION_DOCUMENT(self, node: ast.Node, output: RawStream) -> None: ...
    def XMLOPTION_CONTENT(self, node: ast.Node, output: RawStream) -> None: ...


xml_option_type_printer: XmlOptionTypePrinter

class XmlStandaloneTypePrinter(IntEnumPrinter[enums.XmlStandaloneType]):
    enum: ClassVar[type[enums.XmlStandaloneType]]
    def XML_STANDALONE_YES(self, node: ast.Node, output: RawStream) -> None: ...
    def XML_STANDALONE_NO(self, node: ast.Node, output: RawStream) -> None: ...
    def XML_STANDALONE_NO_VALUE(self, node: ast.Node, output: RawStream) -> None: ...
    def XML_STANDALONE_OMITTED(self, node: ast.Node, output: RawStream) -> None: ...


xml_standalone_type_printer: XmlStandaloneTypePrinter

class XmlExprOpPrinter(IntEnumPrinter[enums.XmlExprOp]):
    enum: ClassVar[type[enums.XmlExprOp]]
    def IS_XMLCONCAT(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_XMLELEMENT(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_XMLFOREST(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_XMLPARSE(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_XMLPI(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_XMLROOT(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_XMLSERIALIZE(self, node: ast.Node, output: RawStream) -> None: ...
    def IS_DOCUMENT(self, node: ast.Node, output: RawStream) -> None: ...


xml_expr_op_printer: XmlExprOpPrinter

def xml_expr(node: ast.XmlExpr, output: RawStream) -> None: ...

def xml_serialize(node: ast.XmlSerialize, output: RawStream) -> None: ...
