From 75299dcab541e4e98603ebfb3f95eb9315c4ac52 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 12 Aug 2022 09:37:45 +0200 Subject: [PATCH] [3.10] gh-95273: Improve sqlite3.complete_statement docs (GH-95840) (#95918) 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 | 30 ---------------------- Doc/library/sqlite3.rst | 24 +++++++++++------ 2 files changed, 16 insertions(+), 38 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 cd38d7305bb69c..00000000000000 --- a/Doc/includes/sqlite3/complete_statement.py +++ /dev/null @@ -1,30 +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: - print("An error occurred:", e.args[0]) - buffer = "" - -con.close() diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 219c41e2b1975b..ff90feb471c3c3 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, /)