
    Rh                         d Z ddlZddlZddlmZ ddlmZ ddlmZ ddZ	 G d de      Z
d	 Zed
k(  r eej                  dd        yy)zA simple SQLite CLI for the sqlite3 module.

Apart from using 'argparse' for the command-line interface,
this module implements the REPL as a thin wrapper around
the InteractiveConsole class from the 'code' stdlib module.
    N)ArgumentParser)InteractiveConsole)dedentc                    	 | j                  |      D ]  }t        |        y# t        j                  $ r}t	        |      j
                  }	 t        | d|j                   d| t        j                         n/# t        $ r# t        | d| t        j                         Y nw xY w|st        j                  d       Y d}~yY d}~yd}~ww xY w)zHelper that wraps execution of SQL code.

    This is used both by the REPL and by direct execution from the CLI.

    'c' may be a cursor or a connection.
    'sql' is the SQL string to execute.
    z (z): )filez:    N)executeprintsqlite3Errortype__name__sqlite_errornamesysstderrAttributeErrorexit)csqlsuppress_errorsrowetps         '/usr/lib/python3.12/sqlite3/__main__.pyr	   r	      s    
99S> 	C#J	== !W	1RD1--.c!5CJJG 	1RD1#,SZZ0	1HHQKK s8   !$ CC-A;:C;)B'$C&B''CCc                   *     e Zd ZdZ fdZddZ xZS )SqliteInteractiveConsolezA simple SQLite REPL.c                 Z    t         |           || _        |j                         | _        y )N)super__init___concursor_cur)self
connection	__class__s     r   r   z!SqliteInteractiveConsole.__init__(   s%    	%%'	    c                     |xdk(  r t        t        j                          yxdk(  r t        d       ydk(  rt        j                  d       y	 t        j
                  |      syt        | j                  |       y)zOverride runsource, the core of the InteractiveConsole REPL.

        Return True if more input is needed; buffering is done automatically.
        Return False is input is a complete statement ready for execution.
        z.versionz.helpzEnter SQL code and press enter.z.quitr   TF)r
   r   sqlite_versionr   r   complete_statementr	   r"   )r#   sourcefilenamesymbols       r   	runsourcez"SqliteInteractiveConsole.runsource-   so     //02  78  
 	 11&9		6*r&   )z<input>single)r   
__module____qualname____doc__r   r-   __classcell__)r%   s   @r   r   r   %   s    (
r&   r   c            	      ^   t        dd      }|j                  dt        ddd       |j                  d	t        dd
       |j                  ddddt        j                   d        |j
                  |  } | j                  dk(  rd}nt        | j                        }t        j                  dk(  rdt        j                  vrd}nd}t        dt        j                   d| d| d      j                         }dt        _        dt        _        t        j                  | j                  d       }	 | j                   rt#        || j                   d       nt%        |      }|j'                  |d !       |j)                          t        j*                  d"       y # |j)                          w xY w)#NzPython sqlite3 CLIzpython -m sqlite3)descriptionprogr+   z:memory:?zrSQLite database to open (defaults to ':memory:'). A new database is created if the file does not previously exist.)r   defaultnargshelpr   zAAn SQL query to execute. Any returned rows are printed to stdout.)r   r8   r9   z-vz	--versionversionzSQLite version z'Print underlying SQLite library version)actionr:   r9   za transient in-memory databasewin32zidlelib.runzCTRL-ZzCTRL-Dz2
        sqlite3 shell, running on SQLite version z
        Connected to z}

        Each command will be run using execute() on the cursor.
        Type ".help" for more information; type ".quit" or z to quit.
    zsqlite> z    ... )isolation_levelF)r    )exitmsgr   )r   add_argumentstrr   r(   
parse_argsr+   reprr   platformmodulesr   stripps1ps2connectr   r	   r   interactcloser   )argsparserdb_nameeofkeybannerconconsoles          r   mainrS   A   s   ( F jO   Cs7   k)!'"8"8!9:6  
 6d#D}}
"2t}}% ||w=#C 2292H2H1I JY < =C8 D 	 
  CGCG
//$--
>C	88C59 /s3GVR0		HHQK 			s   1AF F,__main__r   )T)r1   r   r   argparser   coder   textwrapr   r	   r   rS   r   argv r&   r   <module>rZ      sT     
 # # ,1 8:z z!" r&   