From ed35c22e969ca6d271fb2cfede223a24a2b9f340 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 12 Aug 2022 01:05:12 +0200 Subject: [PATCH] [3.11] gh-95273: Improve sqlite3.complete_statement docs (GH-95840) Co-authored-by: Ezio Melotti Co-authored-by: CAM Gerlach . (cherry picked from commit e6623e7083ce08a247e5df169bcc749f99327823) Co-authored-by: Erlend E. Aasland --- Doc/includes/sqlite3/complete_statement.py | 33 ---------------------- Doc/library/sqlite3.rst | 24 ++++++++++------ 2 files changed, 16 insertions(+), 41 deletions(-) delete mode 100644 Doc/includes/sqlite3/complete_statement.py diff --git a/Doc/includes/sqlite3/complete_statement.py b/Doc/includes/sqlite3/complete_statement.py deleted file mode 100644 index a5c947969910d4..00000000000000 --- a/Doc/includes/sqlite3/complete_statement.py +++ /dev/null @@ -1,33 +0,0 @@ -# A minimal SQLite shell for experiments - -import sqlite3 - -con = sqlite3.connect(":memory:") -con.isolation_level = None -cur = con.cursor() - -buffer = "" - -print("Enter your SQL commands to execute in sqlite3.") -print("Enter a blank line to exit.") - -while True: - line = input() - if line == "": - break - buffer += line - if sqlite3.complete_statement(buffer): - try: - buffer = buffer.strip() - cur.execute(buffer) - - if buffer.lstrip().upper().startswith("SELECT"): - print(cur.fetchall()) - except sqlite3.Error as e: - err_msg = str(e) - err_code = e.sqlite_errorcode - err_name = e.sqlite_errorname - print(f"{err_name} ({err_code}): {err_msg}") - buffer = "" - -con.close() diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 1afb8c87b389cf..b4b98a50d8b701 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -222,14 +222,22 @@ Module functions .. function:: complete_statement(statement) - Returns ``True`` if the string *statement* contains one or more complete SQL - statements terminated by semicolons. It does not verify that the SQL is - syntactically correct, only that there are no unclosed string literals and the - statement is terminated by a semicolon. - - This can be used to build a shell for SQLite, as in the following example: - - .. literalinclude:: ../includes/sqlite3/complete_statement.py + Return ``True`` if the string *statement* appears to contain + one or more complete SQL statements. + No syntactic verification or parsing of any kind is performed, + other than checking that there are no unclosed string literals + and the statement is terminated by a semicolon. + + For example:: + + >>> sqlite3.complete_statement("SELECT foo FROM bar;") + True + >>> sqlite3.complete_statement("SELECT foo") + False + + This function may be useful during command-line input + to determine if the entered text seems to form a complete SQL statement, + or if additional input is needed before calling :meth:`~Cursor.execute`. .. function:: enable_callback_tracebacks(flag, /)