File: parser.rst

package info (click to toggle)
pglast 5.0~dev0%2B1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,872 kB
  • sloc: python: 12,256; sql: 2,151; makefile: 134
file content (124 lines) | stat: -rw-r--r-- 3,922 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
.. -*- coding: utf-8 -*-
.. :Project:   pglast -- Parser module
.. :Created:   gio 10 ago 2017 10:19:26 CEST
.. :Author:    Lele Gaifax <lele@metapensiero.it>
.. :License:   GNU General Public License version 3 or later
.. :Copyright: © 2017, 2018, 2021 Lele Gaifax
..

===========================================================
 :mod:`pglast.parser` --- The interface with libpg_query
===========================================================

.. module:: pglast.parser
   :synopsis: The interface with libpg_query

This module is a C extension written in Cython__ that exposes a few functions from the
underlying ``libpg_query`` library it links against.

.. data:: LONG_MAX

   The highest integer that can be stored in a C ``long`` variable: it is used as a marker, for
   example in PG's ``FetchStmt.howMany``, that uses the constant ``FETCH_ALL``.

.. exception:: ParseError

   Exception representing the error state returned by the parser.

.. exception:: DeparseError

   Exception representing the error state returned by the deparser.

.. function:: deparse_protobuf(buffer)

   :param bytes buffer: a ``Protobuf`` buffer
   :returns: str

   Return the ``SQL`` statement from the given `buffer` argument, something generated by
   :func:`parse_sql_protobuf()`.

.. function:: fingerprint(query)

   :param str query: The SQL statement
   :returns: str

   Fingerprint the given `query`, a string with the ``SQL`` statement(s), and return a
   hash digest that can identify similar queries. For similar queries that are different
   only because of the queried object or formatting, the returned digest will be the same.

.. function:: get_postgresql_version()

   :returns: a tuple

   Return the PostgreSQL version as a tuple (`major`, `minor`, `patch`).

.. function:: parse_sql(query)

   :param str query: The SQL statement
   :returns: tuple

   Parse the given `query`, a string with the ``SQL`` statement(s), and return the
   corresponding *parse tree* as a tuple of :class:`pglast.ast.RawStmt` instances.

.. function:: parse_sql_json(query)

   :param str query: The SQL statement
   :returns: str

   Parse the given `query`, a string with the ``SQL`` statement(s), and return the
   ``libpg_query``\ 's ``JSON``\ -serialized parse tree.

.. function:: parse_sql_protobuf(query)

   :param str query: The SQL statement
   :returns: bytes

   Parse the given `query`, a string with the ``SQL`` statement(s), and return the
   ``libpg_query``\ 's ``Protobuf``\ -serialized parse tree.

.. function:: parse_plpgsql_json(query)

   :param str query: The PLpgSQL statement
   :returns: str

   Parse the given `query`, a string with the ``plpgsql`` statement(s), and return the
   ``libpg_query``\ 's ``JSON``\ -serialized parse tree.

.. function:: scan(query)

   :param str query: The SQL statement
   :returns: sequence of tuples

   Split the given `query` into its *tokens*. Each token is a `namedtuple` with the following
   slots:

   start : int
     the index of the start of the token

   end : int
     the index of the end of the token

   name : str
     the name of the offset

   keyword : str
     the keyword kind

.. function:: split(query, with_parser=True, only_slices=False)

   :param str query: The SQL statement
   :param bool with_parser: Whether to use the parser or the scanner
   :param bool only_slices: Return slices instead of statement's text
   :returns: tuple

   Split the given `stmts` string into a sequence of the single ``SQL`` statements.

   By default this uses the *parser* to perform the job; when `with_parser` is ``False``
   the *scanner* variant is used, indicated when the statements may contain parse errors.

   When `only_slices` is ``True``, return a sequence of :class:`slice` instances, one for each
   statement, instead of statements text.

   .. note:: Leading and trailing whitespace are removed from the statements.

__ http://cython.org/