sql-cli 1.69.1

SQL query tool for CSV/JSON with both interactive TUI and non-interactive CLI modes - perfect for exploration and automation
Documentation
�

R�h�!���dZddlZddlmcmZddlZddlZddl	m
Z
ddlmZddl
ZddlZGd�d�Zedk(rej$edg�yy)	z)
SQL engine tests using pytest framework
�N)�Path)�StringIOc�h�eZdZdZed��Zdedefd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zej.j1d��d��Zej.j1d��d��Zej.j1d��d��Zd�Zd�Zd�Zd�Zy)�
TestSqlEnginez'Test suite for SQL engine functionalityc��tt�jj|_t	|jdzdzdz�|_t|j
�j
�s$tjgd�|jd��|jdzdz|jdzd	zg}td
�|D��s>tjdt	|jdzd
z�g|jd��yy)zSetup test environment�target�releasezsql-cli)�cargo�buildz	--releaseT)�cwd�check�data�test_simple_math.csv�test_simple_strings.csvc3�<K�|]}|j����y�w)N)�exists)�.0�fs  �4/home/me/dev/sql-cli/tests/test_sql_engine_pytest.py�	<genexpr>z,TestSqlEngine.setup_class.<locals>.<genexpr>!s����2�z�!�1�8�8�:�z�s��python3�scriptszgenerate_simple_test.pyN)
r�__file__�parent�project_root�str�sql_clir�
subprocess�run�all)�cls�
test_filess  r�setup_classzTestSqlEngine.setup_classs��� ��>�0�0�7�7����#�*�*�X�5�	�A�I�M�N����C�K�K� �'�'�)��N�N�:�!�.�.�d�
<�

���v�%�(>�>����v�%�(A�A�
�
�
�2�z�2�2��N�N�I�s�3�+;�+;�i�+G�Jc�+c�'d�e�!�.�.�d�
<�3��csv_file�queryc�(�|jt|jdz|z�d|ddg}tj|ddd��}|j
}d}||k(}|s�t
jd	|fd
||f�dtj�vst
j|�rt
j|�ndt
j|�t
j|�d�z}t
jd
|j���dzd|iz}	tt
j|	���dx}x}}|j j#�r6t%j&t)|j j#���St%j*�S)zHelper to run a SQL queryrz-qz-o�csvT�)�capture_output�text�timeoutr��==)z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)s�result)�py0�py2�py5zQuery failed: z
>assert %(py7)s�py7N)rrrrr�
returncode�
@pytest_ar�_call_reprcompare�@py_builtins�locals�_should_repr_global_name�	_saferepr�_format_assertmsg�stderr�AssertionError�_format_explanation�stdout�strip�pd�read_csvr�	DataFrame)
�selfr%r&�cmdr/�@py_assert1�@py_assert4�@py_assert3�@py_format6�@py_format8s
          r�	run_queryzTestSqlEngine.run_query%s��
�L�L���!�!�F�*�X�5�6��%��%�	
������D�t�Q�O��� � �G�A�G� �A�%�G�G�G� �A�G�G�G�G�G�G�v�G�G�G�v�G�G�G� �G�G�G�A�G�G�G���
�
��'G�G�G�G�G�G�G�G��=�=��� ��;�;�x��
�
�(;�(;�(=�>�?�?��|�|�~�r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest basic additionrz=SELECT id, a + b as result FROM test_simple_math WHERE id = 1�r-�z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)s�len�df�r0�py1�py3�py6�assert %(py8)s�py8Nrr/��z%(py1)s == %(py4)s�rR�py4�assert %(py6)srT�rKrOr5r6r7r8r9r:r=r>�iloc�
rDrP�@py_assert2�@py_assert5rG�@py_format7�@py_format9�@py_assert0rH�@py_format5s
          r�
test_additionzTestSqlEngine.test_addition6����
�^�^�2�Z�\���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�(�#�)�r�)�#�r�)�)�)�)�#�r�)�)�)�#�)�)�)�r�)�)�)�)�)�)�)r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest multiplicationrz=SELECT id, a * b as result FROM test_simple_math WHERE id = 2rMr-rNrOrPrQrUrVNrr/�(rXrYr[rTr\r^s
          r�test_multiplicationz!TestSqlEngine.test_multiplication=rfr$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest ROUND functionrzCSELECT id, ROUND(c, 0) as result FROM test_simple_math WHERE id = 3rMr-rNrOrPrQrUrVNrr/�rXrYr[rTr\r^s
          r�test_round_functionz!TestSqlEngine.test_round_functionDs���
�^�^�2�`�b���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�(�#�(�q�(�#�q�(�(�(�(�#�q�(�(�(�#�(�(�(�q�(�(�(�(�(�(�(r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest ABS functionrzCSELECT id, ABS(a - d) as result FROM test_simple_math WHERE id = 10rMr-rNrOrPrQrUrVNrr/�PrXrYr[rTr\r^s
          r�test_abs_functionzTestSqlEngine.test_abs_functionK����
�^�^�2�`�b���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�(�#�)�r�)�#�r�)�)�)�)�#�r�)�)�)�#�)�)�)�r�)�)�)�)�)�)�)r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest POWER functionrzCSELECT id, POWER(a, 2) as result FROM test_simple_math WHERE id = 5rMr-rNrOrPrQrUrVNrr/�rXrYr[rTr\r^s
          r�test_power_functionz!TestSqlEngine.test_power_functionRrpr$c�t�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||z
}t|�}	d}
|	|
k}|s�tjd|fd|	|
f�dt	j
�vstjt�rtjt�ndtj|�tj|�tj|	�tj|
�d�z}dd|iz}
ttj|
���dx}x}x}x}	x}}
y)zTest SQRT functionrz?SELECT id, SQRT(e) as result FROM test_simple_math WHERE id = 4rMr-rNrOrPrQrUrVNrr/�g����MbP?��<�z<%(py7)s
{%(py7)s = %(py0)s((%(py2)s - %(py4)s))
} < %(py10)s�abs�r0r1rZr3�py10�assert %(py12)s�py12�rKrOr5r6r7r8r9r:r=r>r]ry�rDrPr_r`rGrarbrFrH�@py_assert6�@py_assert9�@py_assert8�@py_format11�@py_format13s              r�test_sqrt_functionz TestSqlEngine.test_sqrt_functionYsP��
�^�^�2�\�^���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������7�7�1�:�h�'�4�!�4�'�!�+�4�s�+�,�4�u�4�,�u�4�4�4�4�,�u�4�4�4�4�4�4�s�4�4�4�s�4�4�4�'�4�4�4�!�4�4�4�,�4�4�4�u�4�4�4�4�4�4�4�4r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest MOD functionrzASELECT id, MOD(b, 7) as result FROM test_simple_math WHERE id = 3rMr-rNrOrPrQrUrVNrr/rkrXrYr[rTr\r^s
          r�test_mod_functionzTestSqlEngine.test_mod_function`s���
�^�^�2�^�`���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�(�#�(�q�(�#�q�(�(�(�(�#�q�(�(�(�#�(�(�(�q�(�(�(�(�(�(�(r$c�t�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||z
}t|�}	d}
|	|
k}|s�tjd|fd|	|
f�dt	j
�vstjt�rtjt�ndtj|�tj|�tj|	�tj|
�d�z}dd|iz}
ttj|
���dx}x}x}x}	x}}
y)z$Test complex mathematical expressionrzQSELECT id, ROUND((a + b) * c / 2, 1) as result FROM test_simple_math WHERE id = 2rMr-rNrOrPrQrUrVNrr/g&@皙�����?rvrxryrzr|r}r~rs              r�test_complex_expressionz%TestSqlEngine.test_complex_expressiongsP��
�^�^�2�n�p���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������7�7�1�:�h�'�5�$�5�'�$�.�5�s�.�/�5�#�5�/�#�5�5�5�5�/�#�5�5�5�5�5�5�s�5�5�5�s�5�5�5�'�5�5�5�$�5�5�5�/�5�5�5�#�5�5�5�5�5�5�5�5r$c	��|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|d}|j}|�}t|�}	d
dh}
|	|
k(}|s�tjd|fd|	|
f�dt	j
�vstjt�rtjt�ndtj|�tj|�tj|�tj|	�tj|
�d�z}dd|iz}
ttj|
���dx}x}x}x}	x}}
y)zTest string Contains methodrzBSELECT id, name FROM test_simple_strings WHERE name.Contains('li')rkr-rNrOrPrQrUrVN�idrM��zd%(py8)s
{%(py8)s = %(py0)s(%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s.tolist
}()
})
} == %(py11)s�set�r0r1rZrTrV�py11�assert %(py13)s�py13�rKrOr5r6r7r8r9r:r=r>�tolistr��rDrPr_r`rGrarbrFrH�@py_assert7�@py_assert10r��@py_format12�@py_format14s              r�test_contains_methodz"TestSqlEngine.test_contains_methodpsW��
�^�^�5�_�a���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������d�8�/�8�?�?�/�?�$�/�s�$�%�/�!�Q��/�%��/�/�/�/�%��/�/�/�/�/�/�s�/�/�/�s�/�/�/�8�/�/�/�?�/�/�/�$�/�/�/�%�/�/�/��/�/�/�/�/�/�/�/r$c	��|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|d}|j}|�}t|�}	hd
�}
|	|
k(}|s�tjd|fd|	|
f�dt	j
�vstjt�rtjt�ndtj|�tj|�tj|�tj|	�tj|
�d�z}dd|iz}
ttj|
���dx}x}x}x}	x}}
y)zTest string EndsWith methodrz?SELECT id FROM test_simple_strings WHERE email.EndsWith('.com')�r-rNrOrPrQrUrVNr�>rMr�rur)�r��	�
r�r�r�r�r�r�r�s              r�test_endswith_methodz"TestSqlEngine.test_endswith_methodwsW��
�^�^�5�\�^���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������d�8�B�8�?�?�B�?�$�B�s�$�%�B�)B�B�%�)B�B�B�B�B�%�)B�B�B�B�B�B�B�s�B�B�B�s�B�B�B�8�B�B�B�?�B�B�B�$�B�B�B�%�B�B�B�)B�B�B�B�B�B�B�B�Br$c	��|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|d}|j}|�}t|�}	hd
�}
|	|
k(}|s�tjd|fd|	|
f�dt	j
�vstjt�rtjt�ndtj|�tj|�tj|�tj|	�tj|
�d�z}dd|iz}
ttj|
���dx}x}x}x}	x}}
y)zTest string StartsWith methodrz?SELECT id FROM test_simple_strings WHERE status.StartsWith('A')r�r-rNrOrPrQrUrVNr�>rMr�r)r��r�r�r�r�r�r�r�r�s              r�test_startswith_methodz$TestSqlEngine.test_startswith_methodsW��
�^�^�5�\�^���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������d�8�;�8�?�?�;�?�$�;�s�$�%�;�);�;�%�);�;�;�;�;�%�);�;�;�;�;�;�;�s�;�;�;�s�;�;�;�8�;�;�;�?�;�;�;�$�;�;�;�%�;�;�;�);�;�;�;�;�;�;�;�;r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest string Trim methodrzGSELECT id, name.Trim() as trimmed FROM test_simple_strings WHERE id = 4rMr-rNrOrPrQrUrVNr�trimmed�DavidrXrYr[rTr\r^s
          r�test_trim_methodzTestSqlEngine.test_trim_method�s���
�^�^�5�d�f���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�)�$�/��/�$��/�/�/�/�$��/�/�/�$�/�/�/��/�/�/�/�/�/�/r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd}d
}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest string Length methodrzESELECT id, name.Length() as len FROM test_simple_strings WHERE id = 1rMr-rNrOrPrQrUrVNrr)rXrYr[rTr\r^s
          r�test_length_methodz TestSqlEngine.test_length_method�s���
�^�^�5�b�d���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�%� �%�A�%� �A�%�%�%�%� �A�%�%�%� �%�%�%�A�%�%�%�%�%�%�%r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest string IndexOf methodrzISELECT id, code.IndexOf('2') as pos FROM test_simple_strings WHERE id = 1rMr-rNrOrPrQrUrVNr�posrurXrYr[rTr\r^s
          r�test_indexof_methodz!TestSqlEngine.test_indexof_method�s���
�^�^�5�f�h���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�%� �%�A�%� �A�%�%�%�%� �A�%�%�%� �%�%�%�A�%�%�%�%�%�%�%r$z'Aggregate functions not yet implemented)�reasonc�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest COUNT aggregationrz;SELECT COUNT(*) as total FROM test_simple_math WHERE a <= 5rMr-rNrOrPrQrUrVNr�totalr)rXrYr[rTr\r^s
          r�test_count_functionz!TestSqlEngine.test_count_function�s����^�^�2�X�Z���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�'�"�'�a�'�"�a�'�'�'�'�"�a�'�'�'�"�'�'�'�a�'�'�'�'�'�'�'r$c�b�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||k(}|sltjd|fd||f�tj|�tj|�d�z}	dd|	iz}ttj|���dx}x}}y)zTest SUM aggregationrz9SELECT SUM(a) as total FROM test_simple_math WHERE a <= 5rMr-rNrOrPrQrUrVNrr��rXrYr[rTr\r^s
          r�test_sum_functionzTestSqlEngine.test_sum_function�s����^�^�2�V�X���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������w�w�q�z�'�"�(�b�(�"�b�(�(�(�(�"�b�(�(�(�"�(�(�(�b�(�(�(�(�(�(�(r$c�t�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|jdd
}d}||z
}t|�}	d}
|	|
k}|s�tjd|fd|	|
f�dt	j
�vstjt�rtjt�ndtj|�tj|�tj|	�tj|
�d�z}dd|iz}
ttj|
���dx}x}x}x}	x}}
y)zTest AVG aggregationrzESELECT ROUND(AVG(a), 1) as average FROM test_simple_math WHERE a <= 4rMr-rNrOrPrQrUrVNr�averageg@r�rvrxryrzr|r}r~rs              r�test_avg_functionzTestSqlEngine.test_avg_function�sR���^�^�2�b�d���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������7�7�1�:�i�(�5�3�5�(�3�.�5�s�.�/�5�#�5�/�#�5�5�5�5�/�#�5�5�5�5�5�5�s�5�5�5�s�5�5�5�(�5�5�5�3�5�5�5�/�5�5�5�#�5�5�5�5�5�5�5�5r$c�H�|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}y)z-Test mathematical expressions in WHERE clauserz1SELECT id FROM test_simple_math WHERE a * b > 100�r-rNrOrPrQrUrVN)
rKrOr5r6r7r8r9r:r=r>)rDrPr_r`rGrarbs       r�test_math_in_wherez TestSqlEngine.test_math_in_where�s���
�^�^�2�N�P���2�w��"��w�"�}����w�"�������s����s�������2����2����w����"�������r$c	��|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|d}|j}|�}t|�}	hd
�}
|	|
k(}|s�tjd|fd|	|
f�dt	j
�vstjt�rtjt�ndtj|�tj|�tj|�tj|	�tj|
�d�z}dd|iz}
ttj|
���dx}x}x}x}	x}}
y)zTest multiple WHERE conditionsrzUSELECT id FROM test_simple_strings WHERE status = 'Active' AND email.EndsWith('.com')rur-rNrOrPrQrUrVNr�>rMr�r)r�r�r�r�r�r�r�r�s              r�test_multiple_conditionsz&TestSqlEngine.test_multiple_conditions�sS��
�^�^�5�r�t���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������d�8�5�8�?�?�5�?�$�5�s�$�%�5��5�%��5�5�5�5�%��5�5�5�5�5�5�s�5�5�5�s�5�5�5�8�5�5�5�?�5�5�5�$�5�5�5�%�5�5�5��5�5�5�5�5�5�5�5r$c���|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|d}|j}|�}gd
�}||k(}	|	s�tjd|	fd||f�tj|�tj|�tj|�tj|�d�z}dd|iz}
ttj|
���dx}x}x}x}	}y)zTest ORDER BY clauserz?SELECT id, a FROM test_simple_math WHERE a <= 5 ORDER BY a DESCr)r-rNrOrPrQrUrVN�a)r)rur�rkrM�zE%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.tolist
}()
} == %(py8)s�rRrSr2rV�assert %(py10)sr{�rKrOr5r6r7r8r9r:r=r>r��rDrPr_r`rGrarbrcr�r�r�s           r�
test_order_byzTestSqlEngine.test_order_by�s��
�^�^�2�\�^���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������#�w�2�w�~�~�2�~��2�?�2��?�2�2�2�2��?�2�2�2�w�2�2�2�~�2�2�2��2�2�2�?�2�2�2�2�2�2�2�2r$c���|jdd�}t|�}d}||k(}|s�tjd|fd||f�dt	j
�vstjt�rtjt�nddt	j
�vstj|�rtj|�ndtj|�tj|�d�z}d	d
|iz}ttj|���dx}x}}|d}|j}|�}gd
�}||k(}	|	s�tjd|	fd||f�tj|�tj|�tj|�tj|�d�z}dd|iz}
ttj|
���dx}x}x}x}	}y)zTest LIMIT clauserz3SELECT id FROM test_simple_math ORDER BY id LIMIT 3r�r-rNrOrPrQrUrVNr�)rMrkr�r�r�r�r{r�r�s           r�
test_limitzTestSqlEngine.test_limit�s��
�^�^�2�P�R���2�w��!��w�!�|����w�!�������s����s�������2����2����w����!���������$�x�-�x���-�� �-�I�-� �I�-�-�-�-� �I�-�-�-�x�-�-�-��-�-�-� �-�-�-�I�-�-�-�-�-�-�-�-r$N) �__name__�
__module__�__qualname__�__doc__�classmethodr#rrKrerirlrorsr�r�r�r�r�r�r�r�r��pytest�mark�skipr�r�r�r�r�r�r��r$rrr
s���1��<��<�(
�#�
�c�
�"*�*�)�*�*�5�)�6�0�C�<�0�&�&��[�[���F��G�(�H�(��[�[���F��G�)�H�)��[�[���F��G�6�H�6��6�3�.r$r�__main__z-v)r��builtinsr7�_pytest.assertion.rewrite�	assertion�rewriter5rr��pathlibr�ior�pandasrA�jsonrr��mainrr�r$r�<module>r�sR������
�����E.�E.�P�z���F�K�K��4� �!�r$