HOME


sh-3ll 1.0
DIR:/usr/local/lib64/python3.6/site-packages/pandas/tests/io/__pycache__/
Upload File :
Current File : //usr/local/lib64/python3.6/site-packages/pandas/tests/io/__pycache__/test_sql.cpython-36.pyc
3

���h4��@sdZddlZddlmZmZmZddlmZddlZddlZddl	Z
ddlZddlm
Z
mZddlZddlmZmZmZmZmZmZmZmZmZmZddljZddljjZddlm Z m!Z!y<ddl"Z"ddl#m$Z$dd	l%m&Z'ddl(Z"ddl)jj*Z*d
Z+Wne,k
�rdZ+YnXdd
dd�dddd�dddd�ddpd �d!dqd �d"drd �d�d$d%d&d�d'd(d)d�d*d+d,d�d-d.id/�Z-Gd0d1�d1�Z.Gd2d3�d3e.�Z/Gd4d5�d5e.�Z0Gd6d7�d7e.�Z1Gd8d9�d9�Z2Gd:d;�d;e2�Z3ej4j5ej4j6e+d<d=�Gd>d?�d?e1e3���Z7Gd@dA�dA�Z8ej4j5GdBdC�dCe8e7��Z9ej4j5GdDdE�dEe0e3��Z:GdFdG�dGe1e2�Z;GdHdI�dIe8e;�Z<GdJdK�dK�Z=GdLdM�dM�Z>GdNdO�dO�Z?ej4j5ej4j@GdPdQ�dQe>e;���ZAej4j5ej4j@GdRdS�dSe>e<���ZBej4j5ej4j@GdTdU�dUe?e;���ZCej4j5ej4j@GdVdW�dWe?e<���ZDej4j5GdXdY�dYe=e;��ZEej4j5GdZd[�d[e=e<��ZFej4j5Gd\d]�d]e0e2��ZGd^d_�ZHed`jIeJd`jIe
jKd`jIeLd`jIeMdajIeNdbjIeOd�dcdd�e
jPdejIeQdfjIi	ZRdgdh�ZSdsdidj�ZTej4j5Gdkdl�dle0��ZUej4j5ej4j@ej4jVdmd=�Gdndo�doe/����ZWdS)taSQL io tests

The SQL tests are broken down in different classes:

- `PandasSQLTest`: base class with common methods for all test classes
- Tests for the public API (only tests with sqlite3)
    - `_TestSQLApi` base class
    - `TestSQLApi`: test the public API with sqlalchemy engine
    - `TestSQLiteFallbackApi`: test the public API with a sqlite DBAPI
      connection
- Tests for the different SQL flavors (flavor specific type conversions)
    - Tests for the sqlalchemy mode: `_TestSQLAlchemy` is the base class with
      common methods, `_TestSQLAlchemyConn` tests the API with a SQLAlchemy
      Connection object. The different tested flavors (sqlite3, MySQL,
      PostgreSQL) derive from the base class
    - Tests for the fallback mode (`TestSQLiteFallback`)

�N)�date�datetime�time)�StringIO)�is_datetime64_dtype�is_datetime64tz_dtype)
�	DataFrame�Index�
MultiIndex�Series�	Timestamp�concat�
date_range�isna�to_datetime�to_timedelta)�read_sql_query�read_sql_table)�declarative)�sessionTFz�CREATE TABLE iris (
                "SepalLength" REAL,
                "SepalWidth" REAL,
                "PetalLength" REAL,
                "PetalWidth" REAL,
                "Name" TEXT
            )z�CREATE TABLE iris (
                `SepalLength` DOUBLE,
                `SepalWidth` DOUBLE,
                `PetalLength` DOUBLE,
                `PetalWidth` DOUBLE,
                `Name` VARCHAR(200)
            )aCREATE TABLE iris (
                "SepalLength" DOUBLE PRECISION,
                "SepalWidth" DOUBLE PRECISION,
                "PetalLength" DOUBLE PRECISION,
                "PetalWidth" DOUBLE PRECISION,
                "Name" VARCHAR(200)
            ))�sqlite�mysql�
postgresqlz&INSERT INTO iris VALUES(?, ?, ?, ?, ?)z.INSERT INTO iris VALUES(%s, %s, %s, %s, "%s");z,INSERT INTO iris VALUES(%s, %s, %s, %s, %s);a�CREATE TABLE types_test_data (
                    "TextCol" TEXT,
                    "DateCol" TEXT,
                    "IntDateCol" INTEGER,
                    "IntDateOnlyCol" INTEGER,
                    "FloatCol" REAL,
                    "IntCol" INTEGER,
                    "BoolCol" INTEGER,
                    "IntColWithNull" INTEGER,
                    "BoolColWithNull" INTEGER
                )a�CREATE TABLE types_test_data (
                    `TextCol` TEXT,
                    `DateCol` DATETIME,
                    `IntDateCol` INTEGER,
                    `IntDateOnlyCol` INTEGER,
                    `FloatCol` DOUBLE,
                    `IntCol` INTEGER,
                    `BoolCol` BOOLEAN,
                    `IntColWithNull` INTEGER,
                    `BoolColWithNull` BOOLEAN
                )a�CREATE TABLE types_test_data (
                    "TextCol" TEXT,
                    "DateCol" TIMESTAMP,
                    "DateColWithTz" TIMESTAMP WITH TIME ZONE,
                    "IntDateCol" INTEGER,
                    "IntDateOnlyCol" INTEGER,
                    "FloatCol" DOUBLE PRECISION,
                    "IntCol" INTEGER,
                    "BoolCol" BOOLEAN,
                    "IntColWithNull" INTEGER,
                    "BoolColWithNull" BOOLEAN
                )zo
                INSERT INTO types_test_data
                VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)
                �TextCol�DateCol�
IntDateCol�IntDateOnlyCol�FloatCol�IntCol�BoolCol�IntColWithNull�BoolColWithNull)�query�fieldszz
                INSERT INTO types_test_data
                VALUES("%s", %s, %s, %s, %s, %s, %s, %s, %s)
                z|
                INSERT INTO types_test_data
                VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                �
DateColWithTzz1SELECT * FROM iris WHERE Name=? AND SepalLength=?z9SELECT * FROM iris WHERE `Name`="%s" AND `SepalLength`=%sz7SELECT * FROM iris WHERE "Name"=%s AND "SepalLength"=%sz]
                SELECT * FROM iris WHERE Name=:name AND SepalLength=:length
                zy
                SELECT * FROM iris WHERE
                `Name`="%(name)s" AND `SepalLength`=%(length)s
                zw
                SELECT * FROM iris WHERE
                "Name"=%(name)s AND "SepalLength"=%(length)s
                z&SELECT * FROM iris WHERE Name LIKE '%'z(SELECT * FROM iris WHERE `Name` LIKE '%'z(SELECT * FROM iris WHERE "Name" LIKE '%'rz]
                CREATE VIEW iris_view AS
                SELECT * FROM iris
                )�create_iris�insert_iris�create_test_types�insert_test_types�read_parameters�read_named_parameters�read_no_parameters_with_percent�create_viewc@seZdZdd�ZdS)�	MixInBasecCs2t|d�r.x|j�D]}|j|�qW|j�dS)N�conn)�hasattr�_get_all_tables�
drop_table�_close_conn)�self�method�tbl�r6�:/tmp/pip-build-5_djhm0z/pandas/pandas/tests/io/test_sql.py�teardown_method�s
zMixInBase.teardown_methodN)�__name__�
__module__�__qualname__r8r6r6r6r7r-�sr-c@s$eZdZdd�Zdd�Zdd�ZdS)�
MySQLMixIncCs.|jj�}|jdtj|����|jj�dS)NzDROP TABLE IF EXISTS )r.�cursor�execute�sqlZ_get_valid_mysql_name�commit)r3�
table_name�curr6r6r7r1�s
zMySQLMixIn.drop_tablecCs&|jj�}|jd�dd�|j�D�S)NzSHOW TABLEScSsg|]}|d�qS)rr6)�.0�tabler6r6r7�
<listcomp>�sz.MySQLMixIn._get_all_tables.<locals>.<listcomp>)r.r=r>�fetchall)r3rBr6r6r7r0�s

zMySQLMixIn._get_all_tablescCs4ddlm}y|jj�Wn|k
r.YnXdS)Nr)�Error)Zpymysql.errrGr.�close)r3rGr6r6r7r2�s
zMySQLMixIn._close_connN)r9r:r;r1r0r2r6r6r6r7r<�sr<c@s$eZdZdd�Zdd�Zdd�ZdS)�SQLiteMixIncCs&|jjdtj|����|jj�dS)NzDROP TABLE IF EXISTS )r.r>r?Z_get_valid_sqlite_namer@)r3rAr6r6r7r1�szSQLiteMixIn.drop_tablecCs|jjd�}dd�|j�D�S)Nz1SELECT name FROM sqlite_master WHERE type='table'cSsg|]}|d�qS)rr6)rCrDr6r6r7rE�sz/SQLiteMixIn._get_all_tables.<locals>.<listcomp>)r.r>rF)r3�cr6r6r7r0�szSQLiteMixIn._get_all_tablescCs|jj�dS)N)r.rH)r3r6r6r7r2�szSQLiteMixIn._close_connN)r9r:r;r1r0r2r6r6r6r7rI�srIc@s$eZdZdd�Zdd�Zdd�ZdS)�SQLAlchemyMixIncCstj|j�j|�dS)N)r?�SQLDatabaser.r1)r3rAr6r6r7r1szSQLAlchemyMixIn.drop_tablecCs&tjj|jd�}|j�|jj�}|S)N)�bind)�
sqlalchemy�schema�MetaDatar.�reflect�tables�keys)r3�metaZ
table_listr6r6r7r0s
zSQLAlchemyMixIn._get_all_tablescCsdS)Nr6)r3r6r6r7r2	szSQLAlchemyMixIn._close_connN)r9r:r;r1r0r2r6r6r6r7rK�srKc@s�eZdZdZdd�Zejd6gd�d	d
��Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd7d"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd!S)8�
PandasSQLTestzT
    Base class with common private methods for SQLAlchemy and fallback cases.

    cCs t|jd�r|jS|jj�SdS)Nr>)r/r.r=)r3r6r6r7�	_get_execszPandasSQLTest._get_exec�io�data�csv�iris.csv)�paramsc	Cs�ddl}||j�}t|d�s$|j�|jd�|j�jtd|j�|j	|ddd��D}t
j|�}t|�td|j}x|D]}|j�j||�q~WWdQRXdS)Nrr.�irisr%�r)�mode�newliner&)
rW�paramr/�
setup_connectr1rVr>�SQL_STRINGS�flavor�openrY�reader�next)	r3�datapath�requestrWZ
iris_csv_fileZiris_csvr]�ins�rowr6r6r7�load_iris_datas




zPandasSQLTest.load_iris_datacCs&|jd�|j�jtd|j�dS)NZ	iris_viewr,)r1rVr>rbrc)r3r6r6r7�_load_iris_view-s
zPandasSQLTest._load_iris_viewcCsB|jdj}|jd}t|tj�s&t�tj|j	dddddg�dS)Nrgffffff@g@gffffff�?g�������?zIris-setosa)
Zdtypes�type�iloc�
issubclass�np�floating�AssertionError�tm�
equalContents�values)r3�
iris_frameZpytyperjr6r6r7�_check_iris_loaded_frame1s
z&PandasSQLTest._check_iris_loaded_framecCs,dddddg}dd d"d#g}t||d�|_dS)$N�index�A�B�C�D�2000-01-03 00:00:00�N�\^�?�9\�x`|
@g%�TO�?g�(nI��?�2000-01-04 00:00:00��}�C��?gc�^�V�?g~q"B��?�����4�?�2000-01-05 00:00:00�G�Ϳ��?�2r¹e�?g��>ݦ4�?�ё��R��?�2000-01-06 00:00:00��?{mX��?�$���?�nk3�A�m?��
S���?)�columns�%�TO׿��(nI��)r}r~rr�r��c�^�V���~q"B�Ŀ)r�r�r�r�r�爎>ݦ4�)r�r�r�r�r�)r�r�r�r�r�)r�test_frame1)r3r�rXr6r6r7�_load_test1_data8s,zPandasSQLTest._load_test1_datac
CsXttddddgddddgd	d
ddgd
ddd
gddddgd��}t|d�|d<||_dS)N�����asdZgsqZyltZjklg�������?g������@g������@g333333@FTz
1990-11-22z
1991-10-26z
1993-11-26z
1995-12-12)ryrzr{r|�Er�)r�dictr�test_frame2)r3�dfr6r6r7�_load_test2_data[s



zPandasSQLTest._load_test2_datacCs(dddg}ddddg}t||d�|_dS)Nrxryrz�2000-01-03 00:00:00��r�gZ���?�2000-01-04 00:00:00�gc�^�V�?�2000-01-05 00:00:00� N�2r¹e�?�2000-01-06 00:00:00i3p�$���?)r�l���Z����)r�r�r�����c�^�V��)r�r�r�)r�r�r��͏��)r�r�r�)r�test_frame3)r3r�rXr6r6r7�_load_test3_datais
zPandasSQLTest._load_test3_datacs�|jd�|j�jtd|j�td|j}dddddd	d
dd
dd�
dd
dddd	d
dddd�
g}x2|D]*�|j�j|d�fdd�|dD��qjWdS)N�types_test_datar'r(�firstz2000-01-03 00:00:00z2000-01-01 00:00:00-08:00iw�i��2g333333$@r�F)
rrr$rrrrrr r!z2000-01-04 00:00:00z2000-06-01 00:00:00-07:00i'�Pi\�2r"csg|]}�|�qSr6r6)rC�field)�dr6r7rE�sz/PandasSQLTest._load_raw_sql.<locals>.<listcomp>r#)r1rVr>rbrc)r3rirXr6)r�r7�
_load_raw_sqlts4


zPandasSQLTest._load_raw_sqlcCs |j�jd|���j�}|dS)Nz SELECT count(*) AS count_1 FROM r)rVr>�fetchone)r3rA�resultr6r6r7�_count_rows�szPandasSQLTest._count_rowscCs|jjd�}|j|�dS)NzSELECT * FROM iris)�	pandasSQL�
read_queryrw)r3rvr6r6r7�_read_sql_iris�szPandasSQLTest._read_sql_iriscCs4td|j}ddg}|jj||d�}|j|�dS)Nr)zIris-setosagffffff@)r[)rbrcr�r�rw)r3r"r[rvr6r6r7�_read_sql_iris_parameter�sz&PandasSQLTest._read_sql_iris_parametercCs6td|j}ddd�}|jj||d�}|j|�dS)Nr*zIris-setosagffffff@)�name�length)r[)rbrcr�r�rw)r3r"r[rvr6r6r7�_read_sql_iris_named_parameter�s
z,PandasSQLTest._read_sql_iris_named_parametercCs,td|j}|jj|dd�}|j|�dS)Nr+)r[)rbrcr�r�rw)r3r"rvr6r6r7�(_read_sql_iris_no_parameter_with_percent�sz6PandasSQLTest._read_sql_iris_no_parameter_with_percentNcCs\|jd�|jj|jd|d�|jjd�s.t�t|j�}|jd�}||ksNt�|jd�dS)Nr�)r4)r1r��to_sqlr��	has_tablerr�lenr�)r3r4�num_entries�num_rowsr6r6r7�_to_sql�s


zPandasSQLTest._to_sqlcCs(|jd�|jj|jjdd�d�dS)Nr�r)r1r�r�r�rn)r3r6r6r7�
_to_sql_empty�s
zPandasSQLTest._to_sql_emptycCsn|jd�|jj|jddd�|jjd�s.t�d}tjt|d��|jj|jddd�WdQRX|jd�dS)Nr��fail)�	if_existsz"Table 'test_frame1' already exists)�match)	r1r�r�r�r�rr�pytest�raises�
ValueError)r3�msgr6r6r7�_to_sql_fail�s
zPandasSQLTest._to_sql_failcCsp|jd�|jj|jddd�|jj|jddd�|jjd�sBt�t|j�}|jd�}||ksbt�|jd�dS)Nr�r�)r��replace)r1r�r�r�r�rrr�r�)r3r�r�r6r6r7�_to_sql_replace�s


zPandasSQLTest._to_sql_replacecCst|jd�|jj|jddd�|jj|jddd�|jjd�sBt�dt|j�}|jd�}||ksft�|jd�dS)Nr�r�)r��appendr�)r1r�r�r�r�rrr�r�)r3r�r�r6r6r7�_to_sql_append�s

zPandasSQLTest._to_sql_appendcszg��fdd�}|jd�|jj|jd|d�|jjd�s>t��dgksLt�t|j�}|jd�}||kslt�|jd�dS)Ncs2�jd��fdd�|D�}|j|jj�|�dS)Nr�csg|]}tt�|���qSr6)r��zip)rCrj)rSr6r7rE�szIPandasSQLTest._to_sql_method_callable.<locals>.sample.<locals>.<listcomp>)r�r>rD�insert)Zpd_tabler.rS�	data_iterrX)�check)rSr7�sample�s
z5PandasSQLTest._to_sql_method_callable.<locals>.sampler�)r4r�)r1r�r�r�r�rrr�r�)r3r�r�r�r6)r�r7�_to_sql_method_callable�s


z%PandasSQLTest._to_sql_method_callablecCsN|jd�|jj|jd�|jjd�}|jddd�d|j_tj	||j�dS)N�test_frame_roundtripz"SELECT * FROM test_frame_roundtrip�level_0T)�inplace)
r1r�r�r�r��	set_indexrxr�rs�assert_frame_equal)r3r�r6r6r7�
_roundtrips
zPandasSQLTest._roundtripcCs.|jjd�}|j�}tj|dddddg�dS)NzSELECT * FROM irisgffffff@g@gffffff�?g�������?zIris-setosa)r�r>r�rsrt)r3�iris_resultsrjr6r6r7�_execute_sqlszPandasSQLTest._execute_sqlcCsHtjdd
gddd	gdgd
�}|jj|d�|jd�}|dggksDt�dS)Nr��������@�line1r���?�line2ryrzr{)r�rxZtest_to_sql_saves_index)r�r�r�)r�r�r�)r�from_recordsr�r��_get_index_columnsrr)r3r��ix_colsr6r6r7�_to_sql_save_indexs

z PandasSQLTest._to_sql_save_indexcCs�|jj��}|jd�WdQRXGdd�dt�}d}y,|jj��}|j|�|d��WdQRXWn|k
rtYnX|jjd�}t|�dks�t�|jj��}|j|�WdQRX|jjd�}t|�dks�t�dS)	Nz'CREATE TABLE test_trans (A INT, B TEXT)c@seZdZdS)z7PandasSQLTest._transaction_test.<locals>.DummyExceptionN)r9r:r;r6r6r6r7�DummyException"sr�z/INSERT INTO test_trans (A,B) VALUES (1, 'blah')�errorzSELECT * FROM test_transrr�)r�Zrun_transactionr>�	Exceptionr�r�rr)r3�transr�Zins_sql�res�res2r6r6r7�_transaction_tests 
zPandasSQLTest._transaction_test)rWrXrYrZ)N)r9r:r;�__doc__rVr��fixturerkrlrwr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r6r6r6r7rU
s0#$

rUc
@s(eZdZUdZdZedd�Zej	dd�dd��Z
d	d
�Zdd�Zd
d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zejjd)dFdGdHdIdJdKg�d0d1��Zd2d3�Zd4d5�Zd6d7�Z d8d9�Z!d:d;�Z"d<d=�Z#d>d?�Z$d@dA�Z%dBdC�Z&dDdE�Z'd*S)L�_TestSQLApia�
    Base class to test the public API.

    From this two classes are derived to run these tests for both the
    sqlalchemy mode (`TestSQLApi`) and the fallback mode
    (`TestSQLiteFallbackApi`).  These tests are run with sqlite3. Specific
    tests for the different sql flavours are included in `_TestSQLAlchemy`.

    Notes:
    flavor can always be passed even in SQLAlchemy mode,
    should be correctly ignored.

    we don't use drop_table because that isn't part of the public api

    rcCs|j�|_dS)N)�connectr.)r3r6r6r7raPsz_TestSQLApi.setup_connectT)�autousecCs|j�dS)N)�load_test_data_and_sql)r3rkr6r6r7�setup_methodSsz_TestSQLApi.setup_methodcCs,|j�|j�|j�|j�|j�dS)N)rlr�r�r�r�)r3r6r6r7r�Ws
z"_TestSQLApi.load_test_data_and_sqlcCstjd|j�}|j|�dS)NzSELECT * FROM iris)r?rr.rw)r3rvr6r6r7�test_read_sql_iris^sz_TestSQLApi.test_read_sql_iriscCstjd|j�}|j|�dS)NzSELECT * FROM iris_view)r?rr.rw)r3rvr6r6r7�test_read_sql_viewbsz_TestSQLApi.test_read_sql_viewcCs(tj|jd|j�tjd|j�s$t�dS)Nr�)r?r�r�r.r�rr)r3r6r6r7�test_to_sqlfsz_TestSQLApi.test_to_sqlc
Cs`tj|jd|jdd�tjd|j�s(t�d}tjt|d��tj|jd|jdd�WdQRXdS)Nr�r�)r�z"Table 'test_frame2' already exists)r�)	r?r�r�r.r�rrr�r�r�)r3r�r6r6r7�test_to_sql_failjs
z_TestSQLApi.test_to_sql_failcCsbtj|jd|jdd�tj|jd|jdd�tjd|j�s>t�t|j�}|jd�}||ks^t�dS)Nr�r�)r�r�)r?r�r�r.r�rrr�r�)r3r�r�r6r6r7�test_to_sql_replacers

z_TestSQLApi.test_to_sql_replacecCsftj|jd|jdd�tj|jd|jdd�tjd|j�s>t�dt|j�}|jd�}||ksbt�dS)N�test_frame4r�)r�r�r�)r?r�r�r.r�rrr�r�)r3r�r�r6r6r7�test_to_sql_append}s
z_TestSQLApi.test_to_sql_appendcCs6tj|jd|jdd�tjd|j�}tj|j|�dS)NZtest_frame5F)rxzSELECT * FROM test_frame5)r?r�r�r.�read_sqlrsr�)r3r�r6r6r7�test_to_sql_type_mapping�sz$_TestSQLApi.test_to_sql_type_mappingcCsLttjddd�dd�}tj|d|jdd�tjd	|j�}tj|j	�|�dS)
N��int64)�dtypeZseries)r�Ztest_seriesF)rxzSELECT * FROM test_series)
rrp�aranger?r�r.rrsr��to_frame)r3�s�s2r6r6r7�test_to_sql_series�sz_TestSQLApi.test_to_sql_seriescCsbtj|jd|jd�tjd|jd�}|jj|_|jddd�|jjt�d|j_	t
j||j�dS)Nr�)�conz"SELECT * FROM test_frame_roundtripr�T)r�)r?r�r�r.rrxr��astype�intr�rsr�)r3r�r6r6r7�test_roundtrip�s
z_TestSQLApi.test_roundtripcCs:tj|jd|jddd�tjd|jd�}tj||j�dS)Nr�Fr�)rrx�	chunksizez"SELECT * FROM test_frame_roundtrip)r)r?r�r�r.rrsr�)r3r�r6r6r7�test_roundtrip_chunksize�sz$_TestSQLApi.test_roundtrip_chunksizecCs2tjd|jd�}|j�}tj|dddddg�dS)NzSELECT * FROM iris)rgffffff@g@gffffff�?g�������?zIris-setosa)r?r>r.r�rsrt)r3r�rjr6r6r7�test_execute_sql�sz_TestSQLApi.test_execute_sqlc	Cstjd|j�}t|jjjtj�s&t	�tjd|jdgd�}t|jjjtj�sPt	�|jj
�tjdddddd�tjdddddd�gks�t	�tjd|jdd	id�}t|jjjtj�s�t	�|jj
�tjdddddd�tjdddddd�gks�t	�tjd|jd
gd�}t|j
jjtj��st	�|j
j
�tjddd
ddd�tjdddddd�gk�sLt	�tjd|jd
did�}t|j
jjtj��szt	�|j
j
�tjddd
ddd�tjdddddd�gk�s�t	�tjd|jddid�}t|jjjtj��s�t	�|jj
�tjd�tjd�gk�st	�dS)NzSELECT * FROM types_test_datar)�parse_datesi�r�r�rr�z%Y-%m-%d %H:%M:%Sri���i�rrz%Y%m%dz
2010-10-10z
2010-12-12)r?rr.rorrrmrp�
datetime64rr�tolist�pdrrr)r3r�r6r6r7�test_date_parsing�sHz_TestSQLApi.test_date_parsingcCsHtjd|jdddgd�}t|jjjtj�s.t	�t|j
jjtj�sDt	�dS)NzSELECT * FROM types_test_datarr)�	index_colr)r?rr.rorxrrmrprrrr)r3r�r6r6r7�test_date_and_index�sz_TestSQLApi.test_date_and_indexcCshttddgdd��j�}tjt��|jd|j�WdQRXtj	d|j�}tj
|d|djd��dS)Nz00:00:01z00:00:03�foo)r��test_timedeltazSELECT * FROM test_timedeltar)rrrrs�assert_produces_warning�UserWarningr�r.r?r�assert_series_equalr)r3r�r�r6r6r7r�s
z_TestSQLApi.test_timedeltac
Cs@tdddgi�}d}tjt|d��|jd|j�WdQRXdS)	N�ar�y�?y@zComplex datatypes not supported)r�Ztest_complexy�?�?)rr�r�r�r�r.)r3r�r�r6r6r7�test_complex_raises�sz_TestSQLApi.test_complex_raiseszindex_name,index_label,expectedNrx�other_label�
index_namer�0cCsTtdtd�i�}||j_d}tj|d|j|d�tj||j�}|jd|ksPt	�dS)N�col1r�zSELECT * FROM test_index_label�test_index_label)�index_labelr)
r�rangerxr�r?r�r.rr�rr)r3rr#�expected�
temp_framer"�framer6r6r7�test_to_sql_index_labelsz#_TestSQLApi.test_to_sql_index_labelcCsrtdtd�itjddg�d�}tj|d|j�tjd	|j�}|jd
dksNt	�|jdd
ks`t	�tj|d|jdddgd�tjd	|j�}|jdd�j
�ddgks�t	�ddg|j_tj|d|jdd�tjd	|j�}|jdd�j
�ddgks�t	�tj|d|jdddgd�tjd	|j�}|jdd�j
�ddgk�s:t	�d}t
jt|d��tj|d|jddd�WdQRXdS)Nr!r��A0�A1�B0�B1)rxr"zSELECT * FROM test_index_labelrr�r�Zlevel_1r�ryrz)r�r#r�)r�r{r|zALength of 'index_label' should match number of levels, which is 2)r�)r)r*)r+r,)rr$r
Zfrom_productr?r�r.rr�rrrrx�namesr�r�r�)r3r&r'r�r6r6r7�"test_to_sql_index_label_multiindexsF
 z._TestSQLApi.test_to_sql_index_label_multiindexcCsVtjddgddd	gddgd
�}|jd|j�tjd|jddgd
�}tj||dd�dS)Nr��������@r�r���?r�ryrzr{)r�rx�test_multiindex_roundtripz'SELECT * FROM test_multiindex_roundtrip)rT)�check_index_type)r�r/r�)r�r0r�)rr�r�r.r?rrsr�)r3r�r�r6r6r7r1Osz%_TestSQLApi.test_multiindex_roundtripcCs4tddgddggddgd�}tj|d|jdd	�dS)
Nr�r�r�r�r)r�Ztest_frame_integer_col_namesr�)r�)rr?r�r.)r3r�r6r6r7�test_integer_col_names\sz"_TestSQLApi.test_integer_col_namescCs$tj|jd|jd�}d|ks t�dS)N�test)r�CREATE)r?�
get_schemar�r.rr)r3�
create_sqlr6r6r7�test_get_schema`sz_TestSQLApi.test_get_schemacCs^tddgddgd��}|jdkr&tjnd}tj|d|jd	|id
�}d|ksNt�d|ksZt�dS)Ng�������?g333333�?g������@g������@)r�brN�INTEGERr4r9)rrr5)rr^rN�Integerr?r6r.rr)r3Zfloat_framerr7r6r6r7�test_get_schema_dtypesdsz"_TestSQLApi.test_get_schema_dtypescCshtddgddgd��}tj|d|jdd�}d	}||ks:t�tj|jd|jd
dgd�}d}||ksdt�dS)
Ng�������?g333333�?g������@g������@)�Col1ZCol2r4r=)rrSz'CONSTRAINT test_pk PRIMARY KEY ("Col1")ryrzz)CONSTRAINT test_pk PRIMARY KEY ("A", "B"))rr?r6r.rrr�)r3r'r7Zconstraint_sentencer6r6r7�test_get_schema_keysmsz _TestSQLApi.test_get_schema_keyscCs$ttjjdd�td�d�}|jd|jdd�tjd|j�}t�}d	}ddddd
g}xFtjd|jdd�D]0}t	||gdd
�}t
|�||ks�t�|d7}qfWtj
||�|jdk�r t�}d	}ddddd
g}xHtjd|jdd�D]2}t	||gdd
�}t
|�||k�st�|d7}q�Wtj
||�dS)N�r�Zabcde)r�Ztest_chunksizeF)rxzselect * from test_chunksizerr�)rT)�ignore_indexr�rN)rrp�randomZrandn�listr�r.r?rr
r�rrrsr�r^r)r3r��res1r��i�sizes�chunk�res3r6r6r7�test_chunksize_readzs*z_TestSQLApi.test_chunksize_readcCsdtdddgdddgd��}|j�}|djd�|d<|jd	|jd
d�tjd|j�}tj||�dS)
Nr�r�r�zJohn P. Doez	Jane Dove)Z	person_id�person_namerI�category�test_categoricalF)rxzSELECT * FROM test_categorical)	r�copyrr�r.r?rrsr�)r3r��df2r�r6r6r7rK�sz_TestSQLApi.test_categoricalcCs2tddgddggddgd�}|jd|jd	d
�dS)Nr�r�r�r��ér9)r�Ztest_unicodeF)rx)rr�r.)r3r�r6r6r7�test_unicode_column_name�sz$_TestSQLApi.test_unicode_column_namecCsLtdddgdtjdgd��}|jd|jdd	�tjd
|j�}tj||�dS)Nrr�r�g�������?gffffff@)ryrzzd1187b08-4943-4c8d-a7f6F)rxz'SELECT * FROM `d1187b08-4943-4c8d-a7f6`)	rrp�nanr�r.r?rrsr�)r3r�r�r6r6r7�test_escaped_table_name�sz#_TestSQLApi.test_escaped_table_name)NNrx)Nrr)rNr)rrr)rNr )Nrr )(r9r:r;r�rc�strr^rar�r�r�r�r�r�r�r�r�r�r�rr
rr
rrrr�mark�parametrizer(r.r1r3r8r<r>rHrKrOrQr6r6r6r7r�<sN
7
	2
	
"r�zSQLAlchemy not installed)�reasonc@sxeZdZdZdZdZdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�
TestSQLApiz�
    Test the public API as it would be used directly

    Tests for `read_sql_table` are included here, as this is specific for the
    sqlalchemy mode.

    rrNcCs
tjd�S)Nzsqlite:///:memory:)rN�
create_engine)r3r6r6r7r��szTestSQLApi.connectcCsBtj|jd|j�ddg}tjd|j|d�}|jj�|ks>t�dS)N�
test_frameryrz)r�)r?r�r�r.rr�rrr)r3�colsr�r6r6r7�test_read_table_columns�sz"TestSQLApi.test_read_table_columnscCs�tj|jd|j�tjd|jdd�}|jjdgks6t�tjd|jddgd�}|jjddgks`t�tjd|jddgddgd�}|jjddgks�t�|jj	�ddgks�t�dS)	NrXrx)rryrzr{r|)rr�)
r?r�r�r.rrxr-rrr�r)r3r�r6r6r7�test_read_table_index_col�sz$TestSQLApi.test_read_table_index_colcCsTtjd|j�}tjd|j�}tj||�tjd|j�}tjd|j�}tj||�dS)NzSELECT * FROM irisr\)r?rr.r�rsr�r)r3�iris_frame1�iris_frame2r6r6r7�test_read_sql_delegate�sz!TestSQLApi.test_read_sql_delegatec
Csrd}|jj|�d}|jj|�tjdd��<}tjd�tjd|j�tjd|j�t|�dksdt	�WdQRXdS)	Nz,CREATE TABLE invalid (x INTEGER, y UNKNOWN);z0CREATE TABLE other_table (x INTEGER, y INTEGER);T)�record�alwaysZother_tablezSELECT * FROM other_tabler)
r.r>�warnings�catch_warnings�simplefilterr?rrr�rr)r3Zqry�wr6r6r7�test_not_reflect_all_tables�s
z&TestSQLApi.test_not_reflect_all_tablesc
CsFtjdd��0}tjd�|jjd|j�t|�dks8t�WdQRXdS)NT)r_r`Z
CaseSensitiver)rarbrcr�r�r.r�rr)r3rdr6r6r7�(test_warning_case_insensitive_table_name�s
z3TestSQLApi.test_warning_case_insensitive_table_namecCs6ddlm}|jj|j�}|jd�}dd�|D�}|S)Nr)�
reflectionZtest_index_savedcSsg|]}|d�qS)�column_namesr6)rCrDr6r6r7rEsz1TestSQLApi._get_index_columns.<locals>.<listcomp>)�sqlalchemy.enginerg�	Inspector�from_enginer.�get_indexes)r3�tbl_namerg�insp�ixsr6r6r7r�s

zTestSQLApi._get_index_columnscCsRtdtddgdd�i�}tj|j�}tjd||d�}t|jjdj	t
j�sNt�dS)Nr�201412120154�201412110254T)�utc�	test_type)r')
rrr?rLr.ZSQLTable�
isinstancerDrJrm�sqltypes�	TIMESTAMPrr)r3r��dbrDr6r6r7�test_sqlalchemy_type_mappings
z'TestSQLApi.test_sqlalchemy_type_mappingc
Cs�|j}tj��L}d|}d}|j||ddd�tj||�}tj||�}d}tj||�}WdQRXtj||�tj||�tj||�yddl	}	t
jd�Wntk
r�YnXd	}t
j
td
d��tjd|�WdQRXdS)
Nz
sqlite:///r\r�F)r�rxzSELECT * FROM irisrzpg8000 is installedz)postgresql+pg8000://user:pass@host/dbname�pg8000)r�zselect * from table)r�rs�ensure_cleanr�r?r�rrr�ryr��skip�ImportErrorr�)
r3r�r�Zdb_urirDr�r�r"r�ryr6r6r7�test_database_uri_strings(
z#TestSQLApi.test_database_uri_stringc
CsXt}|j�}|jd||jd|j�|jd|j�|jd|j�|jd|j�|jd|j��}|S)Nr\�SepalLengthZ
SepalWidthZPetalLengthZ
PetalWidth�Name)rNrPZTable�Column�REAL�TEXT)r3�sa�metadatar\r6r6r7�_make_iris_table_metadata@sz$TestSQLApi._make_iris_table_metadatacCs>tjd�}tj||jddid�}t|d�}|dhks:t�dS)Nz#select * from iris where name=:namer�zIris-versicolor)r[r)rN�textr?r�r.�setrr)r3Z	name_text�iris_df�	all_namesr6r6r7�test_query_by_text_objOs
z!TestSQLApi.test_query_by_text_objcCs\|j�}tj|g�j|jjtjd�k�}tj||j	ddid�}t
|d�}|dhksXt�dS)Nr�zIris-setosa)r[r)r�rN�select�whererJrZ	bindparamr?r�r.r�rr)r3r\Zname_selectr�r�r6r6r7�test_query_by_select_objVsz#TestSQLApi.test_query_by_select_objN)r9r:r;r�rcr^r�rZr[r^rerfr�rxr}r�r�r�r6r6r6r7rV�s		!rVcs,eZdZdZejdd��fdd��Z�ZS)�_EngineToConnMixinzS
    A mixin that causes setup_connect to create a conn rather than an engine.
    T)r�c#snt�j�|j}|j�}|j�|_tj|�|_||_	||_dV|jj
�|jj�|j	|_tj|j	�|_dS)N)�superr�r.r��beginZ_EngineToConnMixin__txr?rLr�Z_EngineToConnMixin__engine�rollbackrH)r3rk�enginer.)�	__class__r6r7r�gs



z_EngineToConnMixin.setup_method)r9r:r;r�r�r�r��
__classcell__r6r6)r�r7r�bsr�c@seZdZdS)�TestSQLApiConnN)r9r:r;r6r6r6r7r�ysr�c@sjeZdZdZdZdZddd�Zdd�Zej	j
ed	d
�dd��Zd
d�Z
dd�Zdd�Zdd�Zdd�ZdS)�TestSQLiteFallbackApiz9
    Test the public sqlite connection fallback API

    r�fallback�:memory:cCs
tj|�S)N)�sqlite3r�)r3Zdatabaser6r6r7r��szTestSQLiteFallbackApi.connectc
Csjtj��J}|j|�}tj|jd|dd�|j�|j|�}tjd|�}|j�WdQRXtj|j|�dS)N�test_frame3_legacyF)rxz!SELECT * FROM test_frame3_legacy;)	rsrzr�r?r�r�rHrr�)r3r�r.r�r6r6r7�test_sql_open_close�s


z)TestSQLiteFallbackApi.test_sql_open_closezSQLAlchemy is installed)rUc
Cs2d}d}tjt|d��tjd|�WdQRXdS)Nz&mysql://root@localhost/pandas_nosetestz-Using URI string without sqlalchemy installed)r�zSELECT * FROM iris)r�r�r|r?r�)r3r.r�r6r6r7�test_con_string_import_error�sz2TestSQLiteFallbackApi.test_con_string_import_errorc
CsZtjd|j�}tjd|j�}tj||�d}tjtj|d��tjd|j�WdQRXdS)NzSELECT * FROM irisz9Execution failed on sql 'iris': near "iris": syntax error)r�r\)	r?rr.r�rsr�r�r�Z
DatabaseError)r3r\r]r�r6r6r7r^�sz,TestSQLiteFallbackApi.test_read_sql_delegatec
CsHtddgddggddgd�}tj��tj|d|jd	d
�WdQRXdS)Nr�r�r�r�rzb )r�r�F)rx)rrsrr?r�r.)r3r�r6r6r7�test_safe_names_warning�s
z-TestSQLiteFallbackApi.test_safe_names_warningcCstj|jd�}d|kst�dS)Nr4r5)r?r6r�rr)r3r7r6r6r7�test_get_schema2�sz&TestSQLiteFallbackApi.test_get_schema2cCsJx4|jd�D]&}|j�djd�|kr|j�dSqWtd|�d���dS)N�
rz""r�zColumn z
 not found)�split�stripr�)r3rO�column�colr6r6r7�_get_sqlite_column_type�sz-TestSQLiteFallbackApi._get_sqlite_column_typecCsTtdtddgdd�i�}tj|j�}tjd||d�}|j�}|j|d�dksPt�dS)	NrrprqT)rrrs)r'rv)	rrr?�SQLiteDatabaser.ZSQLiteTableZ
sql_schemar�rr)r3r�rwrDrOr6r6r7�test_sqlite_type_mapping�sz.TestSQLiteFallbackApi.test_sqlite_type_mappingN)r�)r9r:r;r�rcr^r�r�r�rS�skipif�SQLALCHEMY_INSTALLEDr�r^r�r�r�r�r6r6r6r7r�~s
	r�c@seZdZUdZeejddd�dd��Zdd�Z	ejdd	�d
d��Z
edd
��Zedd��Z
edd��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Z d6d7�Z!d8d9�Z"d:d;�Z#d<d=�Z$d>d?�Z%d@dA�Z&dBdC�Z'dDdE�Z(dFdG�Z)dHdI�Z*dJdK�Z+dLdM�Z,dNdO�Z-dPdQ�Z.dRdS�Z/dTdU�Z0dVdW�Z1dXdY�Z2dZd[�Z3d\d]�Z4d^d_�Z5d`da�Z6dbdc�Z7ddde�Z8ej9j:dfdge;j<gidge;j<gie;j<gdhgdi�g�djdk��Z=dldm�Z>dnS)o�_TestSQLAlchemyz�
    Base class for testing the sqlalchemy backend.

    Subclasses for specific database types are created below. Tests that
    deviate for each flavor are overwritten there.

    T�class)r��scopecCs$|j�|j�|j�}|j�dS)N)�setup_import�setup_driverr�)�clsr.r6r6r7�setup_class�sz_TestSQLAlchemy.setup_classcCs|j�|j�dS)N)r�r�)r3r6r6r7r��sz&_TestSQLAlchemy.load_test_data_and_sql)r�cCs|j�dS)N)r�)r3rkr6r6r7r��sz_TestSQLAlchemy.setup_methodcCststjd�dS)NzSQLAlchemy not installed)r�r�r{)r�r6r6r7r��sz_TestSQLAlchemy.setup_importcCs
t��dS)N)�NotImplementedError)r�r6r6r7r��sz_TestSQLAlchemy.setup_drivercCs
t��dS)N)r�)r�r6r6r7r��sz_TestSQLAlchemy.connectcCsXy&|j�|_tj|j�|_|jj�Wn,tjjk
rRtj	d|j
�d��YnXdS)NzCan't connect to z server)r�r.r?rLr�rN�excZOperationalErrorr�r{rc)r3r6r6r7ra�s
z_TestSQLAlchemy.setup_connectcCs|j�dS)N)r�)r3r6r6r7�
test_read_sql�sz_TestSQLAlchemy.test_read_sqlcCs|j�dS)N)r�)r3r6r6r7�test_read_sql_parametersz'_TestSQLAlchemy.test_read_sql_parametercCs|j�dS)N)r�)r3r6r6r7�test_read_sql_named_parametersz-_TestSQLAlchemy.test_read_sql_named_parametercCs|j�dS)N)r�)r3r6r6r7r�sz_TestSQLAlchemy.test_to_sqlcCs|j�dS)N)r�)r3r6r6r7�test_to_sql_emptysz!_TestSQLAlchemy.test_to_sql_emptycCs|j�dS)N)r�)r3r6r6r7r�sz _TestSQLAlchemy.test_to_sql_failcCs|j�dS)N)r�)r3r6r6r7r�sz#_TestSQLAlchemy.test_to_sql_replacecCs|j�dS)N)r�)r3r6r6r7r�sz"_TestSQLAlchemy.test_to_sql_appendcCs|jdd�dS)N�multi)r4)r�)r3r6r6r7�test_to_sql_method_multisz(_TestSQLAlchemy.test_to_sql_method_multicCs|j�dS)N)r�)r3r6r6r7�test_to_sql_method_callablesz+_TestSQLAlchemy.test_to_sql_method_callablecCsN|j�}tddddgddddgd��}tj|�}|j|d�|jd�sJt�dS)Ng�?g@g@g@)�one�twor&)r�rr?rLr�r�rr)r3�	temp_connr&r�r6r6r7�test_create_tables
z!_TestSQLAlchemy.test_create_tablecCsh|j�}tddddgddddgd��}tj|�}|j|d�|jd�sJt�|jd�|jd�sdt�dS)Ng�?g@g@g@)r�r�r&)r�rr?rLr�r�rrr1)r3r�r&r�r6r6r7�test_drop_table(s

z_TestSQLAlchemy.test_drop_tablecCs|j�dS)N)r�)r3r6r6r7r
8sz_TestSQLAlchemy.test_roundtripcCs|j�dS)N)r�)r3r6r6r7r
;sz _TestSQLAlchemy.test_execute_sqlcCstjd|jd�}|j|�dS)Nr\)r)r?rr.rw)r3rvr6r6r7�test_read_table>sz_TestSQLAlchemy.test_read_tablecCs.tjd|jddgd�}tj|jjddg�dS)Nr\r~)rr�)r?rr.rsrtr�ru)r3rvr6r6r7rZBsz'_TestSQLAlchemy.test_read_table_columnscCs2d}tjt|d��tjd|jd�WdQRXdS)Nz!Table this_doesnt_exist not found)r�Zthis_doesnt_exist)r)r�r�r�r?rr.)r3r�r6r6r7�test_read_table_absent_raisesHsz-_TestSQLAlchemy.test_read_table_absent_raisescCs~tjd|j�}t|jjjtj�s$t	�t|j
jjtj�s:t	�t|jjjtj
�sPt	�t|jjjtj�sft	�t|jjjt�szt	�dS)Nr�)r?rr.rorrrmrprqrrr�integerrZbool_r r!�object)r3r�r6r6r7�test_default_type_conversionMsz,_TestSQLAlchemy.test_default_type_conversioncCs@tddgid�}|jd|jdd�tjd|j�}tj||�dS)	N�i64r��>)rX�test_bigintF)rxl)rr�r.r?rrsr�)r3r�r�r6r6r7r�Ysz_TestSQLAlchemy.test_bigintcCs(tjd|j�}t|jjjtj�s$t	�dS)Nr�)
r?rr.rorrrmrprrr)r3r�r6r6r7�test_default_date_loadasz&_TestSQLAlchemy.test_default_date_loadcCs0dd�}tjd|j�}t|d�s*tjd�|j}t|j�s>t	�tjd|jdgd�}t|d�sftjd�|j}t|j�szt	�t
|jj�dks�t	�||j�tj
ttjd|jdd	��d
d�}|j}t|j�s�t	�t
|jj�dks�t	�tjd|j�}|j}t|j��st	�tj|j|j�tjd|j�}||j�dS)
NcSs�t|j�r4|dtd�kst�|dtd�ks�t�nbt|j�r�t|jj�dksRt�tddd�tddd�g}t||j	d�}t
j||�ntd|j����dS)	Nrz2000-01-01 08:00:00r�z2000-06-01 07:00:00�UTC)�tz)r�z&DateCol loaded with incorrect type -> )rrrrrrrR�dtr�rr�rsr)r�Z
expected_datar%r6r6r7r�ms


z:_TestSQLAlchemy.test_datetime_with_timezone.<locals>.checkzselect * from types_test_datar$z&no column with datetime with time zone)rr�r�)rT)r@r�)rrr.r/r�r{r$rrrrrRr�r�r
rBr?rrsr)r3r�r�r�r%r6r6r7�test_datetime_with_timezonehs8"




z+_TestSQLAlchemy.test_datetime_with_timezonecCs�tdtdddd�i�}|jd|jdd�|jd	krH|djjd
�|d<n|djjd�|d<tj	d|j�}t
j||�tjd|j�}|jdkr�t
|jdt�s�t�t|d�|d<t
j||�dS)Nryz2013-01-01 09:00:00r�z
US/Pacific)�periodsr�Ztest_datetime_tzF)rxrr�zSELECT * FROM test_datetime_tzrr)rry)rrr�r.rcr�Z
tz_convertZtz_localizer?rrsr�rrt�locrRrrr)r3r%r�r6r6r7�%test_datetime_with_timezone_roundtrip�s

z5_TestSQLAlchemy.test_datetime_with_timezone_roundtripcCs`tjdtddd�idgd�}|jd|jdd�tjd|j�}tjtjgdgd�}tj	||�dS)	Nri'r�r)rxZtest_datetime_obbF)r�)
rrrr�r.r?rZNaTrsr�)r3rXr�r%r6r6r7�test_out_of_bounds_datetime�s
z+_TestSQLAlchemy.test_out_of_bounds_datetimecCs`tdddd�jd�}tdtd�i|d�}|jd|jdd	�tjd|jdd
�}tj	||dd�dS)
Nz
2018-01-01r�Z6H)r��freq�nums)rxZ	foo_tableZ	info_date)r#)rF)Zcheck_names)
rZ
_with_freqrr$r�r.r?rrsr�)r3�datesr%r�r6r6r7�"test_naive_datetimeindex_roundtrip�s
z2_TestSQLAlchemy.test_naive_datetimeindex_roundtripcCsJtjd|j�}|jdkrtntj}t|jj	j
|�s6t�tjd|jdgd�}t|jj	j
tj�s`t�tjd|jddid�}t|jj	j
tj�s�t�tjd|jdddiid�}t|jj	j
tj�s�t�tjd|jdgd�}t|jj	j
tj�s�t�tjd|jddid�}t|jj	j
tj��st�tjd|jdd	diid�}t|jj	j
tj��sFt�dS)
Nr�rr)rz%Y-%m-%d %H:%M:%S�formatrr�unit)
r?rr.rcr�rprrorrrmrrr)r3r�Z
expected_typer6r6r7r�s,z!_TestSQLAlchemy.test_date_parsingcCs�ttddd�tjd�d��}|jd|j�tjd|j�}|jddd	�}t	j
||�tjd
|j�}|jddd	�}|jdkr�t
|jdt�s�t�t|d
�|d
<t	j
||�nt	j
||�dS)Nz2013-01-01 09:00:00r�)r�g@)ryrz�
test_datetimerxr�)ZaxiszSELECT * FROM test_datetimerrry)rry)rrrprr�r.r?rZdroprsr�rrcrtr�rRrrr)r3r�r�r6r6r7r�	s
z_TestSQLAlchemy.test_datetimecCs�ttddd�tjd�d��}tj|jd<|jd|jd	d
�tj	d|j�}t
j||�tjd|j�}|j
dkr�t|jdt�s�t�t|ddd�|d<t
j||�nt
j||�dS)Nz2013-01-01 09:00:00r�)r�g@)ryrzr�ryr�F)rxzSELECT * FROM test_datetimerrZcoerce)�errors)r�ry)rry)rrrprrPr�r�r.r?rrsr�rrcrtrRrrr)r3r�r�r6r6r7�test_datetime_NaTs
z!_TestSQLAlchemy.test_datetime_NaTcCsdttddd�tddd�gdgd�}|jd|jdd�td|j�}|d}t|d�}tj||�dS)	Ni�r�r�r)r��	test_dateF)rx)rrr�r.rrrsr)r3r�r�r�r%r6r6r7�test_datetime_date2s"z"_TestSQLAlchemy.test_datetime_datecCs�ttddd�tddd�gdgd�}|jd|jdd	�td|j�}tj||�tj�}t	j|d
|dd	�t	j
d|�}|jdd
��}tj||�t	j|d|jdd	�|jdkr�t	j
d|j�}|jdd
��}tj||�t	jd|j�}tj||�dS)N�	rr��r)r��	test_timeF)rxZ
test_time2zSELECT * FROM test_time2cSs
|jd�S)Nz%H:%M:%S.%f)�strftime)�_r6r6r7�<lambda>Hsz4_TestSQLAlchemy.test_datetime_time.<locals>.<lambda>Z
test_time3rzSELECT * FROM test_time3cSs
|jd�S)Nz%H:%M:%S.%f)r�)r�r6r6r7r�Ns)
rrr�r.rrsr��TestSQLiteFallbackr�r?r�applymaprc)r3r�r�Zsqlite_conn�refr6r6r7�test_datetime_time<s "
z"_TestSQLAlchemy.test_datetime_timecCs`td
tjd�}tdtjd�}t||d��}|jd|jdd	�tjd|j�}t	j
||dd
d�dS)Nr�rr�)rg)�s1rZtest_read_writeF)rxT)Zcheck_dtypeZcheck_exactii)rrp�int32�float32rr�r.r?rrsr�)r3r�rr�rMr6r6r7�test_mixed_dtype_insertSsz'_TestSQLAlchemy.test_mixed_dtype_insertcCsftdddgdtjdgd��}|jd|jdd	�tjd|j�}tj||�tj	d
|j�}tj||�dS)Nrr�r�g�������?gffffff@)ryrz�test_nanF)rxzSELECT * FROM test_nan)
rrprPr�r.r?rrsr�r)r3r�r�r6r6r7�test_nan_numeric_sz _TestSQLAlchemy.test_nan_numericcCs�tdddgtjtjtjgd��}|jd|jdd�tjd|j�}tj||�|dj	d	�|d<d|d<tj
d
|j�}tj||�dS)Nrr�r�)ryrzr�F)rxrzr�zSELECT * FROM test_nan)rrprPr�r.r?rrsr�rr)r3r�r�r6r6r7�test_nan_fullcolumnls z#_TestSQLAlchemy.test_nan_fullcolumncCsptdddgddtjgd��}|jd|jdd	�d|jd<tjd|j�}tj	||�tj
d|j�}tj	||�dS)
Nrr�r�rr9)ryrzr�F)rxrzzSELECT * FROM test_nan)r�rz)rrprPr�r.r�r?rrsr�r)r3r�r�r6r6r7�test_nan_string{s
z_TestSQLAlchemy.test_nan_stringcCs6ddlm}|jj|j�}|j|�}dd�|D�}|S)Nr)rgcSsg|]}|d�qS)rhr6)rCrDr6r6r7rE�sz6_TestSQLAlchemy._get_index_columns.<locals>.<listcomp>)rirgrjrkr.rl)r3rmrgrnror6r6r7r��s

z"_TestSQLAlchemy._get_index_columnscCs|j�dS)N)r�)r3r6r6r7�test_to_sql_save_index�sz&_TestSQLAlchemy.test_to_sql_save_indexcCs|j�dS)N)r�)r3r6r6r7�test_transactions�sz!_TestSQLAlchemy.test_transactionscCsr|j�d}tj|j||jd�}|jjdd�}|j|�|jj|�tj||j�}t	j
||dd�|j|�dS)N�test_get_schema_create_table)rrF)r2)r�r?r6r�r.rnr1r>rrsr�)r3r5r7Z
blank_test_df�returned_dfr6r6r7r��s
z,_TestSQLAlchemy.test_get_schema_create_tablec	
Cs~ddg}ddg}t||d�}|jd|j�|jd|jdtjid	�tjj|jd
�}|j�|jdj	dj
}t|tj�s|t�d}t
jt|d��|jd
|jdtid	�WdQRX|jd|jdtjd�id	�|j�|jdj	dj
}t|tj�s�t�|jdk�st�|jd|jtjd	�tjj|jd
�}|j�|jdj	dj
}|jdj	dj
}t|tj��sht�t|tj��szt�dS)Nryrz皙�����?T��������?)r��
dtype_test�dtype_test2)r)rMz&The type of B is not a SQLAlchemy type)r�r�Zdtype_test3�
�single_dtype_test)r�T)r�N)rr�r.rNr�rOrPrQrRr�rmrtrrr�r�r�rR�Stringr�)	r3rYrXr�rTZsqltyper�ZsqltypeaZsqltypebr6r6r7�
test_dtype�s0 z_TestSQLAlchemy.test_dtypecCs�tddg�ttddd�dg�tddgdd�tddg�d�}t|�}d	}|j||j�tj||j�}tjj	|jd
�}|j
�|jdkr�tj
}ntj}|j|j}t|dj|�s�t�t|d
jtj�s�t�t|djtj
�s�t�t|djtj�s�t�dS)NTi�r�r�r�)rg�������?)�Bool�Date�Int�Float�notna_dtype_test)rMrr�r�r�r�)rrrr�r.r?rrNrOrPrQrcrur;�BooleanrRr�rtrmrr�DateTimer�)r3rYr�r5r�rTZmy_type�col_dictr6r6r7�test_notna_dtype�s$

z _TestSQLAlchemy.test_notna_dtypec	CsRd}tt|gdd�t|gdd�t|gdd�tdgdd�tdgdd�d��}|jd	|jd
ddtjd
d�id�tjd	|j�}tj	|dj
dd�tj	|dj
dd�ks�t�tjj
|jd�}|j�|jd	j}t|dj�t|dj�ks�t�t|djtj��st�t|djtj��st�t|djtj��s6t�t|djtj��sNt�dS)Ng�Y�B��?r�)r�float64r�r�r)�f32�f64�
f64_as_f32�i32r�Ztest_dtypesFr�r�)Z	precision)rxr�rrr�)rMrrr�)rrr�r.rNr�r?rrp�roundrnrrrOrPrQrRr�rRrmrtrur;Z
BigInteger)r3�Vr�r�rTr�r6r6r7�test_double_precision�s.0 z%_TestSQLAlchemy.test_double_precisioncsHdd��dd����fdd�}tddd	d
gi�jd|j�||j�dS)NcSsd}tj||d�S)Nz'SELECT test_foo_data FROM test_foo_data)r)r?r)�
connectionr"r6r6r7rsz;_TestSQLAlchemy.test_connectable_issue_example.<locals>.foocSs|jd|dd�dS)N�
test_foo_datar�)r�rr�)r�)rrXr6r6r7�barsz;_TestSQLAlchemy.test_connectable_issue_example.<locals>.barcsB|j��0}|j��|j��}|j�|�WdQRXWdQRXdS)N)r�r�Zrun_callable)Zconnectabler.Zfoo_data)r
rr6r7�mains


z<_TestSQLAlchemy.test_connectable_issue_example.<locals>.mainrrr�r�)rr�r.)r3rr6)r
rr7�test_connectable_issue_examples
z._TestSQLAlchemy.test_connectable_issue_example�inputrr
)rZinfe0cCsvtj|�}|jdkrFd}tjt|d��|jd|jdd�WdQRXn,|jd|jdd�tj	d|j�}t
j||�dS)Nrzinf cannot be used with MySQL)r�ZfoobarF)rx)rrrcr�r�r�r�r.r?rrsZassert_equal)r3rr�r�r�r6r6r7�test_to_sql_with_negative_npinfs

z/_TestSQLAlchemy.test_to_sql_with_negative_npinfc	Cs�d}td|gi�}tj�}Gdd�d|�}tj|jd�}|�}|j�J|j�}|jj	|�|j
||d��|j�tj
tj|jg�|d�}WdQRXtj||�dS)Nz
Hello, World!�spamc@s>eZdZdZddgiZejejdd�Zejej	d�dd�Z
d	S)
z7_TestSQLAlchemy.test_temporary_table.<locals>.TemporaryZ	temp_test�prefixes�	TEMPORARYT)Zprimary_keyr�F)ZnullableN)r9r:r;Z
__tablename__Z__table_args__rNr�r;�idZUnicoderr6r6r6r7�	Temporary/s
r)rM)r)r?r)rrZdeclarative_base�
sa_sessionZsessionmakerr.ZtransactionrZ	__table__�create�add�flushr?rrNr�rrsr�)	r3Z	test_datar%ZBaser�Sessionrr.r�r6r6r7�test_temporary_table*s"z$_TestSQLAlchemy.test_temporary_tableN)?r9r:r;r�rRrcr�r�r�r�r��classmethodr�r�r�rar�r�r�r�r�r�r�r�r�r�r�r�r
r
r�rZr�r�r�r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�rr
rrSrTrp�infrrr6r6r6r7r��sl
	P
$

#4r�c@seZdZdd�ZdS)�_TestSQLAlchemyConncCstjd�dS)Nz4Nested transactions rollbacks don't work with Pandas)r�r{)r3r6r6r7r�Bsz%_TestSQLAlchemyConn.test_transactionsN)r9r:r;r�r6r6r6r7rAsrc@sDeZdZdZdZedd��Zedd��Zdd�Zd	d
�Z	dd�Z
d
S)�_TestSQLiteAlchemyzL
    Test the sqlalchemy backend against an in-memory sqlite database.

    rcCs
tjd�S)Nzsqlite:///:memory:)rNrW)r�r6r6r7r�Nsz_TestSQLiteAlchemy.connectcCs
d|_dS)N)�driver)r�r6r6r7r�Rsz_TestSQLiteAlchemy.setup_drivercCs�tjd|j�}t|jjjtj�s$t	�t|j
jjtj�s:t	�t|jjjtj�sPt	�t|j
jjtj�sft	�t|jjjtj�s|t	�dS)Nr�)r?rr.rorrrmrprqrrrr�rr r!)r3r�r6r6r7r�Wsz/_TestSQLiteAlchemy.test_default_type_conversioncCs*tjd|j�}t|jjjtj�s&t	�dS)Nr�)
r?rr.rorrrmrprrr)r3r�r6r6r7r�fsz)_TestSQLiteAlchemy.test_default_date_loadc
Csjtdddgidd�}|jd|jdd�tjd	d
��.}tjd�tjd|j�t|�dks\t	�WdQRXdS)
Nrr�r�r)rZtest_bigintwarningF)rxT)r_r`r)
rr�r.rarbrcr?rr�rr)r3r�rdr6r6r7�test_bigint_warningls
z&_TestSQLiteAlchemy.test_bigint_warningN)r9r:r;r�rcrr�r�r�r�r"r6r6r6r7r Fsr c@s<eZdZdZdZedd��Zedd��Zdd�Zd	d
�Z	dS)�_TestMySQLAlchemyzA
    Test the sqlalchemy backend against an MySQL database.

    rcCstjd|j�d�|jd�S)Nzmysql+z!://root@localhost/pandas_nosetest)�connect_args)rNrWr!r$)r�r6r6r7r�sz_TestMySQLAlchemy.connectcCs$tjd�}d|_d|jjji|_dS)N�pymysqlZclient_flag)r��importorskipr!�	constantsZCLIENTZMULTI_STATEMENTSr$)r�r%r6r6r7r��s
z_TestMySQLAlchemy.setup_drivercCs�tjd|j�}t|jjjtj�s$t	�t|j
jjtj�s:t	�t|jjjtj�sPt	�t|j
jjtj�sft	�t|jjjtj�s|t	�dS)Nr�)r?rr.rorrrmrprqrrrr�rr r!)r3r�r6r6r7r��sz._TestMySQLAlchemy.test_default_type_conversionc	Cs�ddl}tdddgdddgd��}|jd	|jd
d�d}|jj�}|j�}y|j|�}|j�Wn |jk
r�|j	��YnXt
jd
|j�}tj
||�t
jd
|j�}tj
||�dS)Nrr�r�r�g�������?g�������?g333333�?)rr9Ztest_procedureF)rxz�DROP PROCEDURE IF EXISTS get_testdb;

        CREATE PROCEDURE get_testdb ()

        BEGIN
            SELECT * FROM test_procedure;
        ENDzCALL get_testdb();)r%rr�r.r�r�r>r@rGr�r?rrsr�r�)	r3r%r��procrr�Zr1rCr�r6r6r7�test_read_procedure�s 

z%_TestMySQLAlchemy.test_read_procedureN)
r9r:r;r�rcrr�r�r�r)r6r6r6r7r#wsr#c@s<eZdZdZdZedd��Zedd��Zdd�Zd	d
�Z	dS)�_TestPostgreSQLAlchemyzF
    Test the sqlalchemy backend against an PostgreSQL database.

    rcCstjd|j�d��S)Nzpostgresql+z%://postgres@localhost/pandas_nosetest)rNrWr!)r�r6r6r7r��sz_TestPostgreSQLAlchemy.connectcCstjd�d|_dS)NZpsycopg2)r�r&r!)r�r6r6r7r��s
z#_TestPostgreSQLAlchemy.setup_drivercCs&tddgddgddgd��}|jjd�|jjd	�|jd
|jdd�|jd
|jddd�|jd|jddd�tjd
|j�}tj||�tjd
|j�}tj||�tjd
|jdd�}tj||�tjd|jdd�}tj||�d}tj	t
|d��tjd|jdd�WdQRX|jjd�|jjd	�|jd|jddd�|jd|jdddd�|jd|jdddd�tjd|jdd�}tjt||gdd�|�t|jt
jj��r"|j�}t
j|dd�}	tj||	d�}
|
j|ddd�|
j|dddd�|
j|dddd�tjd|jdd�}|
jd�}tj||�dS)Nr�r�g�������?g�������?r�n)r!�col2�col3z$DROP SCHEMA IF EXISTS other CASCADE;zCREATE SCHEMA other;Ztest_schema_publicF)rxZtest_schema_public_explicit�public)rxrOZtest_schema_other�other)rOz!Table test_schema_other not found)r�)rOrxr�)rOrxr�r�T)r@)rTZtest_schema_other2)rxr�)rr.r>r�r?rrsr�r�r�r�r
rtrNr�ZEnginer�rPrLZ
read_table)r3r�rCr�rGZres4r�r�Zengine2rTZpdsqlr6r6r7�test_schema_support�s\
z*_TestPostgreSQLAlchemy.test_schema_supportcCsVdd�}tddgddgddgd	��}|jd
|jd|d�tjd
|j�}tj||�dS)
NcSs�|j}|j��~}t�}tj|�}|j|�|jd�djdd�|D��}|jrb|j�d|j	��}	n|j	}	d|	�d|�d�}
|j
|
|d	�WdQRXdS)
Nrz, css|]}d|�d�VqdS)�"Nr6)rC�kr6r6r7�	<genexpr>#szl_TestPostgreSQLAlchemy.test_copy_from_callable_insertion_method.<locals>.psql_insert_copy.<locals>.<genexpr>�.zCOPY z (z) FROM STDIN WITH CSV)r?�file)rr=rrY�writer�	writerows�seek�joinrOr�Zcopy_expert)rDr.rSr�Z
dbapi_connrBZs_bufr6r�rAZ	sql_queryr6r6r7�psql_insert_copys



zY_TestPostgreSQLAlchemy.test_copy_from_callable_insertion_method.<locals>.psql_insert_copyr�r�g�������?g�������?rr+)r!r,r-Ztest_copy_insertF)rxr4)rr�r.r?rrsr�)r3r:r%r�r6r6r7�(test_copy_from_callable_insertion_methodsz?_TestPostgreSQLAlchemy.test_copy_from_callable_insertion_methodN)
r9r:r;r�rcrr�r�r0r;r6r6r6r7r*�sGr*c@seZdZdS)�TestMySQLAlchemyN)r9r:r;r6r6r6r7r<4sr<c@seZdZdS)�TestMySQLAlchemyConnN)r9r:r;r6r6r6r7r=:sr=c@seZdZdS)�TestPostgreSQLAlchemyN)r9r:r;r6r6r6r7r>@sr>c@seZdZdS)�TestPostgreSQLAlchemyConnN)r9r:r;r6r6r6r7r?Fsr?c@seZdZdS)�TestSQLiteAlchemyN)r9r:r;r6r6r6r7r@Lsr@c@seZdZdS)�TestSQLiteAlchemyConnN)r9r:r;r6r6r6r7rAQsrAc@s�eZdZdZdZedd��Zdd�Zdd�Ze	j
d	d
�dd��Zd
d�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Z d7S)8r�zG
    Test the fallback mode against an in-memory sqlite database.

    rcCs
tjd�S)Nz:memory:)r�r�)r�r6r6r7r�cszTestSQLiteFallback.connectcCs|j�|_dS)N)r�r.)r3r6r6r7ragsz TestSQLiteFallback.setup_connectcCstj|j�|_|j�dS)N)r?r�r.r�r�)r3r6r6r7r�jsz)TestSQLiteFallback.load_test_data_and_sqlT)r�cCs|j�dS)N)r�)r3rkr6r6r7r�nszTestSQLiteFallback.setup_methodcCs|j�dS)N)r�)r3r6r6r7r�rsz TestSQLiteFallback.test_read_sqlcCs|j�dS)N)r�)r3r6r6r7r�usz*TestSQLiteFallback.test_read_sql_parametercCs|j�dS)N)r�)r3r6r6r7r�xsz0TestSQLiteFallback.test_read_sql_named_parametercCs|j�dS)N)r�)r3r6r6r7r�{szTestSQLiteFallback.test_to_sqlcCs|j�dS)N)r�)r3r6r6r7r�~sz$TestSQLiteFallback.test_to_sql_emptycCs|j�dS)N)r�)r3r6r6r7r��sz#TestSQLiteFallback.test_to_sql_failcCs|j�dS)N)r�)r3r6r6r7r��sz&TestSQLiteFallback.test_to_sql_replacecCs|j�dS)N)r�)r3r6r6r7r��sz%TestSQLiteFallback.test_to_sql_appendcCs|jdd�dS)Nr�)r4)r�)r3r6r6r7r��sz+TestSQLiteFallback.test_to_sql_method_multicCs^tddddgddddgd��}|jj|d�|jjd�s<t�|jjd�|jjd�sZt�dS)Ng�?g@g@g@)r�r�Zdrop_test_frame)rr�r�r�rrr1)r3r&r6r6r7�test_create_and_drop_table�sz-TestSQLiteFallback.test_create_and_drop_tablecCs|j�dS)N)r�)r3r6r6r7r
�sz!TestSQLiteFallback.test_roundtripcCs|j�dS)N)r�)r3r6r6r7r
�sz#TestSQLiteFallback.test_execute_sqlcCsxttddd�tddd�gdgd�}|jd|jdd�td	|j�}|jd
kr^tj||jt	��n|jdkrttj||�dS)Ni�r�r�r)r�r�F)rxzSELECT * FROM test_daterr)
rrr�r.rrcrsr�rrR)r3r�r�r6r6r7r��s"

z%TestSQLiteFallback.test_datetime_datecCshttddd�tddd�gdgd�}|jd|jdd	�td
|j�}|jdkrd|jdd
��}tj||�dS)Nr�rr�r�r)r�r�F)rxzSELECT * FROM test_timercSs
|jd�S)Nz%H:%M:%S.%f)r�)r�r6r6r7r��sz7TestSQLiteFallback.test_datetime_time.<locals>.<lambda>)	rrr�r.rrcr�rsr�)r3r�r�r%r6r6r7r��s"
z%TestSQLiteFallback.test_datetime_timecCsXtjdd|�d�|j�}g}x4|jD]*}tjd|�d�|j�}|j|jj��q&W|S)Nz1SELECT * FROM sqlite_master WHERE type = 'index' zAND tbl_name = '�'zPRAGMA index_info(�))r?rr.r�r�r)r3rmror�Zix_nameZix_infor6r6r7r��sz%TestSQLiteFallback._get_index_columnscCs|j�dS)N)r�)r3r6r6r7r��sz)TestSQLiteFallback.test_to_sql_save_indexcCs|j�dS)N)r�)r3r6r6r7r��sz$TestSQLiteFallback.test_transactionsc
CsT|jjd|�d��}x$|D]\}}}}}}	||kr|SqWtd|�d|�d���dS)NzPRAGMA table_info(rDzTable z	, column z
 not found)r.r>r�)
r3rDr�ZrecsZcidr��ctypeZnot_null�default�pkr6r6r7r��s
z*TestSQLiteFallback._get_sqlite_column_typecCs�|jdkrtjd�ddg}ddg}t||d�}|jd	|j�|jd
|jddid�|jd	d�d
ksht�|jd
d�dks|t�d}tjt	|d��|jd|jdt
id�WdQRX|jd|jdd�|jdd�dks�t�|jdd�dks�t�dS)NrzNot applicable to MySQL legacyryrz皙�����?T��������?)r�r�r��STRING)rr:z!B \(<class 'bool'>\) not a string)r�r�r�)rHT)rIN)rcr�r{rr�r.r�rrr�r��bool)r3rYrXr�r�r6r6r7r��s

 zTestSQLiteFallback.test_dtypecCs�|jdkrtjd�tddg�ttddd�dg�tddgdd�td	dg�d
�}t|�}d}|j||j�|j|d�d
ks|t	�|j|d�dks�t	�|j|d�d
ks�t	�|j|d�dks�t	�dS)NrzNot applicable to MySQL legacyTi�r�r�r�)rg�������?)r�r�r�r�r�r�r:r�rvr�r�r�)
rcr�r{rrrr�r.r�rr)r3rYr�r5r6r6r7r�s


z#TestSQLiteFallback.test_notna_dtypecCs�tddgddggddgd�}d}tjt|d	��|jd
|j�WdQRXx�tddd
dddddddg
�D]h\}}|j||j�tj||j�tddgddggd|gd�}d|d��}|j||j�tj||j�qfWdS)Nr�r�r�r�rr9)r�z$Empty table or column name specified)r��ztest_weird_name]ztest_weird_name[ztest_weird_name`ztest_weird_name"ztest_weird_name'z_b.test_weird_name_01-30z"_b.test_weird_name_01-30"Z99beginswithnumberZ12345rNZtest_weird_col_namer�)	rr�r�r�r�r.�	enumerater?Ztable_exists)r3r�r�ZndxZ
weird_namerMZc_tblr6r6r7�test_illegal_names�s*z%TestSQLiteFallback.test_illegal_namesN)!r9r:r;r�rcrr�rar�r�r�r�r�r�r�r�r�r�r�r�r�rBr
r
r�r�r�r�r�r�r�rrNr6r6r6r7r�Zs6

r�cCs
|jd�S)z Returns date in YYYYMMDD format.z%Y%m%d)r�)r�r6r6r7�date_format	srOz'{}'z{:.8f}z{:d}cCsdS)NZNULLr6)�xr6r6r7r�(	sr�z{:.10f}z'{!s}'cGsNg}x<|D]4}t|t�r$t|�r$d}tt|�}|j||��q
W|t|�S)z

    N)rt�floatr�_formattersrmr��tuple)r?�argsZprocessed_args�arg�	formatterr6r6r7�format_query.	s
rWcCs,tj|||d�j�}|dkr dSt|�SdS)z#Replace removed sql.tquery function)rrBN)r?r>rFrB)r"rrBr�r6r6r7�tquery=	srXc@sxeZdZejdd�dd��Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�TestXSQLiteT)r�ccs2|j|_tjd�|_dV|j|_tjd�|_dS)Nz:memory:)�functionr4r�r�r.)r3rhrgr6r6r7r�H	s
zTestXSQLite.setup_methodcCstj�}|j|�dS)N)rs�makeTimeDataFrame�_check_roundtrip)r3r'r6r6r7�
test_basicS	szTestXSQLite.test_basicc	Cs�tj�}tj|jd	<tj|d�}|jj�}|j	|�|jj�}d}x.|j
�D]"\}}t|f|��}t||d�qLW|jj
�tjd|jd�}|j|_tj||dd�dS)
Nrr4z(INSERT INTO test VALUES (%s, %s, %s, %s))rBzselect * from test)rg����MbP?)�rtol)rr)rsr[rprPrnr?r6r.r=r>�iterrowsrWrXr@r�rxr�)	r3r'r7rBri�idxrj�fmt_sqlr�r6r6r7�test_write_row_by_rowW	s



z!TestXSQLite.test_write_row_by_rowcCs�tj�}tj|d�}|jj�}|j|�d}|jd}tj||jt|�d�|jj	�tj
d|j�}|jdd�|_tj||dd��dS)Nr4z$INSERT INTO test VALUES (?, ?, ?, ?)r)r[zselect * from testr�)
rsr[r?r6r.r=r>rnrSr@r�rxr�)r3r'r7rBrirjr�r6r6r7�test_executel	s



zTestXSQLite.test_executecCs�tj�}tj|d�}|j�}x>|D]6}|jd�}t|�dkr"|ddkr"|ddks"t�q"Wtj�}tj|dddgd	�}|j�}d
|ks�t�|jj	�}|j
|�dS)Nr4� r�rryr��DATETIMErz)rSzPRIMARY KEY ("A", "B"))rsr[r?r6�
splitlinesr�r�rrr.r=r>)r3r'r7�lines�l�tokensrBr6r6r7�test_schema{	s


zTestXSQLite.test_schemac
Cs\d}|jj�}|j|�tjd|j�tjd|j�tjt��tjd|j�WdQRXdS)Nz�
        CREATE TABLE test
        (
        a TEXT,
        b TEXT,
        c REAL,
        PRIMARY KEY (a, b)
        );
        z,INSERT INTO test VALUES("foo", "bar", 1.234)z,INSERT INTO test VALUES("foo", "baz", 2.567)z(INSERT INTO test VALUES("foo", "bar", 7))r.r=r>r?r�r�r�)r3r7rBr6r6r7�test_execute_fail�	s	

zTestXSQLite.test_execute_failcCsXd}|jj�}|j|�tjd|j�|jj�tjt��td|jd�WdQRXdS)Nz�
        CREATE TABLE test
        (
        a TEXT,
        b TEXT,
        c REAL,
        PRIMARY KEY (a, b)
        );
        z,INSERT INTO test VALUES("foo", "bar", 1.234)zselect * from test)r)	r.r=r>r?rHr�r�r�rX)r3r7rBr6r6r7�test_execute_closed_connection�	s	


z*TestXSQLite.test_execute_closed_connectioncCsdS)Nr6)r3r6r6r7�test_na_roundtrip�	szTestXSQLite.test_na_roundtripcCs�tj|d|jdd�tjd|j�}|j|_|}tj||�dgt|�|d<|j�}t	t
jt|���d}|j�|d<tj|d	|jdd�tjd
|jdd�}|j�}||_d|j_tj||�dS)N�
test_tableF)r�rrxzselect * from test_tabler�txtr��Idx�test_table2zselect * from test_table2)r)
r?r�r.r�rxrsr�r�rLr	rprr�)r3r'r�r%�frame2Znew_idxr6r6r7r\�	szTestXSQLite._check_roundtripcCs*tdtjd�i�}tj||jddd�dS)N�Fromr��testkeywordsF)rr�rx)rrp�onesr?r�r.)r3r�r6r6r7�test_keyword_as_column_names�	sz(TestXSQLite.test_keyword_as_column_namescCsltddgdgd�}tj||jddd�|j}tdd	�|jd
�D��}|dksPt�tjd
|�}tj	||�dS)Nr�r�Zc0)r��mono_dfF)rr�rxcss|]}|dVqdS)rNr6)rCZmy_c0r6r6r7r3�	sz8TestXSQLite.test_onecolumn_of_integer.<locals>.<genexpr>zselect * from mono_dfr�)
rr?r�r.�sumr>rrr�rsr�)r3rwZcon_xZthe_sumr�r6r6r7�test_onecolumn_of_integer�	sz%TestXSQLite.test_onecolumn_of_integercs�tddgddgd��}tdddgd	d
dgd��}d}d
|��}�fdd�}d}tjt|d��tj|�j|dd�WdQRX||�tj|�j|dd�d}tjt|d��tj|�j|dd�WdQRXtj|�j|ddd�t|�jd�ddgk�s�t�tj|�j|ddd�t|�jd�dddgk�s0t�||�tj|�j|ddd�t|�jd�d d!gk�sjt�tj|�j|ddd�t|�jd�d"d#d$d%d&gk�s�t�||�dS)'Nr�r�ryrz)r!r,r�r�r�r{r|r��table_if_existszSELECT * FROM cs�j|�dS)z
            Drops tables created from individual tests
            so no dependencies arise from sequential tests
            N)r1)�test_table_to_drop)r3r6r7�clean_up�	sz,TestXSQLite.test_if_exists.<locals>.clean_upz*'notvalidvalue' is not valid for if_exists)r��
notvalidvalue)r'rr�r�r�z&Table 'table_if_exists' already existsr�F)r'rr�r�rx)rr�)r�ry)r�rz)r�r{)r�r|)r�r�)r�ry)r�rz)r�ry)r�rz)r�r{)r�r|)r�r�)	rr�r�r�r?r�r.rXrr)r3�df_if_exists_1�df_if_exists_2rA�
sql_selectr|r�r6)r3r7�test_if_exists�	sl
zTestXSQLite.test_if_existsN)r9r:r;r�r�r�r]rbrcrjrkrlrmr\rvryr�r6r6r6r7rYF	srYzFgh-13611: there is no support for MySQL if SQLAlchemy is not installedc@s�eZdZejddd�dd��Zejdd�dd��Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS) �
TestXMySQLTr�)r�r�cCs�tjd�}|jddddd�y|jdd�WnZ|jk
rZ}ztd	�|�WYdd}~Xn.|jk
r�}ztd
�|�WYdd}~XnXdS)Nr%�	localhost�rootrL�pandas_nosetest)�host�user�passwdrw�pandas)�read_default_groupz�Create a group of connection parameters under the heading [pandas] in your system's mysql default file, typically located at ~/.my.cnf or /etc/.my.cnf.z�Cannot connect to database. Create a group of connection parameters under the heading [pandas] in your system's mysql default file, typically located at ~/.my.cnf or /etc/.my.cnf.)r�r&r��ProgrammingError�RuntimeErrorrG)r�r%�errr6r6r7r�/
s
zTestXMySQL.setup_class)r�cCs�tjd�}|jddddd�y|jdd�WnZ|jk
rZ}ztd	�|�WYdd}~Xn.|jk
r�}ztd
�|�WYdd}~XnX|j|_dS)Nr%r�r�rLr�)r�r�r�rwr�)r�z�Create a group of connection parameters under the heading [pandas] in your system's mysql default file, typically located at ~/.my.cnf or /etc/.my.cnf.z�Cannot connect to database. Create a group of connection parameters under the heading [pandas] in your system's mysql default file, typically located at ~/.my.cnf or /etc/.my.cnf.)r�r&r�r�r�rGrZr4)r3rhrgr%r�r6r6r7r�C
s
zTestXMySQL.setup_methodcCstj�}|j|�dS)N)rsr[r\)r3r'r6r6r7r]Y
szTestXMySQL.test_basicc
Cs�tj�}tj|jd
<d}tj|d�}|jj�}|j	|�|j	|�d}x.|j
�D]"\}}t|f|��}t||d�qPW|jj
�tjd|jd�}	|j|	_tj|	|dd	�dS)NrzDROP TABLE IF EXISTS testr4z(INSERT INTO test VALUES (%s, %s, %s, %s))rBzselect * from test)rg����MbP?)r^)rr)rsr[rprPrnr?r6r.r=r>r_rWrXr@r�rxr�)
r3r'�drop_sqlr7rBrir`rjrar�r6r6r7rb]
s



z TestXMySQL.test_write_row_by_rowcCsvtj�}d|j_d}|jj�}|j|�tj|d|jd�d}d}t	j
||j|dd�}t|�}tj|d|�|�dS)NrxzDROP TABLE IF EXISTS testr4)r�rzselect * from testr�)r?rrr)
rsr[rxr�r.r=r>r?r�rrrfr�)r3r'r�rBr"rZ	chunk_genZchunk_dfr6r6r7�test_chunksize_read_typer
s

z#TestXMySQL.test_chunksize_read_typecCs�tj�}d}tj|d�}|jj�}tj��tjdd�|j	|�WdQRX|j	|�d}|j
djj�}tj	||jt
|�d�|jj�tjd|j�}|jdd	�|_tj||dd	��dS)
NzDROP TABLE IF EXISTS testr4�ignorezUnknown table.*z(INSERT INTO test VALUES (%s, %s, %s, %s)r)r[zselect * from testr�)rsr[r?r6r.r=rarb�filterwarningsr>rnrurrSr@r�rxr�)r3r'r�r7rBrirjr�r6r6r7rc�
s



zTestXMySQL.test_executecCs�tj�}tj|d�}|j�}x>|D]6}|jd�}t|�dkr"|ddkr"|ddks"t�q"Wtj�}d}tj|ddd	gd
�}|j�}d|ks�t�|jj	�}|j
|�|j
|�dS)Nr4rdr�rryr�rezDROP TABLE IF EXISTS testrz)rSzPRIMARY KEY (`A`, `B`))rsr[r?r6rfr�r�rrr.r=r>)r3r'r7rgrhrir�rBr6r6r7rj�
s



zTestXMySQL.test_schemac
Csjd}d}|jj�}|j|�|j|�tjd|j�tjd|j�tjt��tjd|j�WdQRXdS)NzDROP TABLE IF EXISTS testz�
        CREATE TABLE test
        (
        a TEXT,
        b TEXT,
        c REAL,
        PRIMARY KEY (a(5), b(5))
        );
        z,INSERT INTO test VALUES("foo", "bar", 1.234)z,INSERT INTO test VALUES("foo", "baz", 2.567)z(INSERT INTO test VALUES("foo", "bar", 7))r.r=r>r?r�r�r�)r3r�r7rBr6r6r7rk�
s	


zTestXMySQL.test_execute_failcCsrd}d}|jj�}|j|�|j|�tjd|j�|jj�tjt��td|jd�WdQRX|j	||�dS)NzDROP TABLE IF EXISTS testz�
        CREATE TABLE test
        (
        a TEXT,
        b TEXT,
        c REAL,
        PRIMARY KEY (a(5), b(5))
        );
        z,INSERT INTO test VALUES("foo", "bar", 1.234)zselect * from test)r)
r.r=r>r?rHr�r�r�rXr�)r3rhrgr�r7rBr6r6r7rl�
s	



z)TestXMySQL.test_execute_closed_connectioncCsdS)Nr6)r3r6r6r7rm�
szTestXMySQL.test_na_roundtripcCs>d}|jj�}tj��tjdd�|j|�WdQRXtj|d|jdd�tjd|j�}|j	|_	|j	j
|j	_
|}tj||�dgt
|�|d	<|j�}ttjt
|���d
}||d<d}|jj�}tj��tjdd�|j|�WdQRXtj|d
|jdd�tjd|jdd�}|j�}||_	|j	j|j	_tj||�dS)NzDROP TABLE IF EXISTS test_tabler�zUnknown table.*rnF)r�rrxzselect * from test_tablerror�rpz DROP TABLE IF EXISTS test_table2rqzselect * from test_table2)r)r.r=rarbr�r>r?r�r�rxr�rsr�r�rLr	rprr-)r3r'r�rBr�r%rrrxr6r6r7r\�
s4



zTestXMySQL._check_roundtripcCs,tdtjd�i�}tj||jdddd�dS)Nrsr�rtr�F)rr�r�rx)rrprur?r�r.)r3r�r6r6r7rv�
sz'TestXMySQL.test_keyword_as_column_namescs�tddgddgd��}tdddgd	d
dgd��}d}d
|��}�fdd�}tjtdd��tj|�j|dd�WdQRX||�tj|�j|ddd�tjtdd��tj|�j|dd�WdQRXtj|�j|ddd�t|�jd�ddgks�t�tj|�j|ddd�t|�jd�dddgk�s(t�||�tj|�j|ddd�t|�jd�dd gk�sbt�tj|�j|ddd�t|�jd�d!d"d#d$d%gk�s�t�||�dS)&Nr�r�ryrz)r!r,r�r�r�r{r|r�rzzSELECT * FROM cs�j|�dS)z
            Drops tables created from individual tests
            so no dependencies arise from sequential tests
            N)r1)r{)r3r6r7r|sz+TestXMySQL.test_if_exists.<locals>.clean_upz<insert message here>)r�r})r'rr�r�r�F)r'rr�r�rxr�)rr�)r�ry)r�rz)r�r{)r�r|)r�r�)r�ry)r�rz)r�ry)r�rz)r�r{)r�r|)r�r�)	rr�r�r�r?r�r.rXrr)r3r~rrAr�r|r6)r3r7r��
sp
zTestXMySQL.test_if_existsN)r9r:r;r�r�r�r�r]rbr�rcrjrkrlrmr\rvr�r6r6r6r7r�)
s"r�)	rrrrrrrr r!)	rrrrrrrr r!)
rrr$rrrrrr r!)NN)Xr�rYrrrrWrr�raZnumpyrpr�Zpandas.core.dtypes.commonrrr�rrr	r
rrr
rrrrZpandas._testingZ_testingrsZ
pandas.io.sqlr?rrrNZsqlalchemy.extrZsqlalchemy.ormrrZsqlalchemy.schemaZsqlalchemy.sql.sqltypesrur�r|rbr-r<rIrKrUr�rSZsingler�rVr�r�r�r�rr r#r*rwr<r=r>r?r@rAr�rOr�rRZstr_�bytesrQr	rmrrKrRrWrXrYr{r�r6r6r6r7�<module>s0





	1%

Ow1Ex


B

	c