o
    i                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ ddd,ddZddd-ddZ	h dZ
d.ddZh dZe
eZd d!hZd/d$d%Zd0d'd(Zd1d*d+ZdS )2    )annotationsN)Iterable)List)Optional)Sequence)exc_infologgerlogging.Loggerprefixstrlevelintmsgargsobjectr   Optional[BaseException]returnNonec                G  s"   | j ||| g|R d|i d S )Nr   )log)r   r
   r   r   r   r    r   O/home/ubuntu/.local/lib/python3.10/site-packages/libsql_client/dbapi2/_utils.py
log_prefix
   s   "r   objc                G  s>   t |dd }|d u r|d}t| |||g|R d|i d S )N_log_prefixz: r   )getattrr   )r   r   r   r   r   r   r
   r   r   r   log_obj   s   
 r   >   
	 sqlOptional[str]c                 C  sL  d}t | }||k r| | }|tv r|d7 }q|dkrV|d |k rP| |d  dkrP|d7 }||k rE| | dkrE|d7 }||k rE| | dks7||krKd S |d7 }q| |d  S |dkr|d |k r| |d  dkr|d7 }||k r| | dkr|d |k r| |d  dkrn|d7 }||k sp||krd S |d7 }q| |d  S | |d  S d S )Nr      -   r   /*)len_lstrip_sql_whitespace_charsr!   posend_poschr   r   r   
lstrip_sql&   sD   r.   >   (),;[]"'r+   r,   c                 C  sr   |d |kr|S | | }|d |k r7|d7 }| | |kr1|d7 }||ks*| | |kr-	 |S |d7 }|d |k s|S )a  Find the end of the quoted string starting at ``pos``.

    The returned position includes the position of the quote character,
    that matches the one at ``pos``.

    >>> def test_quote(ts):
    ...     end = _iter_sql_get_quoted_end(ts, 0, len(ts))
    ...     return (end, ts[:end])

    >>> test_quote("'abc'")
    (5, "'abc'")
    >>> test_quote('"abc "')
    (6, '"abc "')

    >>> test_quote("'abc' def")
    (5, "'abc'")
    >>> test_quote('"abc "def')
    (6, '"abc "')

    It also handles escaping by double quotes, see
    https://www.sqlite.org/faq.html#q14

    >>> test_quote('"abc""def" ghi')
    (10, '"abc""def"')
    >>> test_quote('"abc "def" ghi')
    (6, '"abc "')
    r#   r   r*   r   r   r   _iter_sql_get_quoted_endi   s   
r7   Iterable[str]c                 c  s    | rYt | pd} | sdS d}t| }||k r8| | }|tv r+|dkr$nt| ||}n|tv r0n|d7 }||k s|dkrJ| d| V  | |d } n| d V  | dd } | sdS dS )aY  Calls lstrip_sql() to get the start of the next token and yield it.

    It will handle stop chars (;,[]()) as their own tokens, as well as handle
    double and single quotes, as well as quote escaping with \

    >>> list(iter_sql_tokens("--COMMENT\nBEGIN X"))
    ['BEGIN', 'X']
    >>> list(iter_sql_tokens(
    ... "CREATE TABLE x (id INTEGER /* COMMENT */, name TEXT)"))
    ['CREATE', 'TABLE', 'x', '(', 'id', 'INTEGER', ',', 'name', 'TEXT', ')']
    >>> list(iter_sql_tokens("SELECT; INSERT; DELETE"))
    ['SELECT', ';', 'INSERT', ';', 'DELETE']
    >>> print("\n".join(iter_sql_tokens(
    ... 'INSERT INTO t (a,b) VALUES("s -- c /* c */", \'x\')'
    ... )))
    INSERT
    INTO
    t
    (
    a
    ,
    b
    )
    VALUES
    (
    "s -- c /* c */"
    ,
    'x'
    )
    >>> list(iter_sql_tokens('SELECT"abc"'))
    ['SELECT', '"abc"']
     r   r#   N)r.   r(   _iter_sql_quote_charsr7   _iter_sql_stop_charsr*   r   r   r   iter_sql_tokens   s0   !
r<   Iterable[Sequence[str]]c                 c  sB    g }t | D ]}|| |dkr|V  g }q|r|V  dS dS )zYields sql statements based on ";" tokens.

    >>> list(iter_sql_statements("BEGIN"))
    [['BEGIN']]
    >>> list(iter_sql_statements("BEGIN;INSERT INTO x;COMMIT"))
    [['BEGIN', ';'], ['INSERT', 'INTO', 'x', ';'], ['COMMIT']]

    r2   N)r<   append)r!   stmttokenr   r   r   iter_sql_statements   s   	

rA   )r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   )r   r	   r   r   r   r   r   r   r   r   r   r   r   r   )r!   r   r   r"   )r!   r   r+   r   r,   r   r   r   )r!   r   r   r8   )r!   r   r   r=   )
__future__r   loggingtypingr   r   r   r   r   r   r)   r.   _iter_sql_delim_charsunionr;   r:   r7   r<   rA   r   r   r   r   <module>   s(    	
<

-<