3
S^                 @   sj   d dl Z d dlmZ d dlmZ d dlmZ yd dlZdZW n e	k
rT   dZY nX G dd deZ
dS )	    N)BaseDatabaseFeatures)cached_property)sixTFc                   s   e Zd ZdZg ZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZdZ fddZedd Zedd	 Zed
d Zedd Zedd Zdd Z   Z!S )DatabaseFeatureszFeatures specific to MySQL

    Microsecond precision is supported since MySQL 5.6.3 and turned on
    by default if this MySQL version is used.
    FTc                s   t t| j| d S )N)superr   __init__)self
connection)	__class__ Q/tmp/pip-build-8app2_gc/mysql-connector-python/mysql/connector/django/features.pyr   +   s    zDatabaseFeatures.__init__c             C   s   | j jdkrdS dS )N         TF)r   r   r   )r	   mysql_version)r   r   r   r   supports_microsecond_precision.   s    z/DatabaseFeatures.supports_microsecond_precisionc             C   s   d}dj |d}| jj |}|j| |jdj |d | jjdkrj|jd| jjd |f |j d }n|jd	j |d |j d
 }|j| W dQ R X || _|S )zGet default storage engine of MySQL

        This method creates a table without ENGINE table option and inspects
        which engine was used.

        Used by Django tests.
        ZINTROSPECT_TESTzDROP TABLE IF EXISTS {table})tablezCREATE TABLE {table} (X INT)r   r   zXSELECT ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %sNAMEz&SHOW TABLE STATUS WHERE Name='{table}'   N)r   r   r   )formatr	   cursorexecuter   Zsettings_dictZfetchoneZ_cached_storage_engine)r   ZtblnameZ	droptabler   Zenginer   r   r   mysql_storage_engine4   s     	

z%DatabaseFeatures.mysql_storage_enginec             C   s
   | j dkS )NInnoDB)r   )r   r   r   r   _disabled_supports_transactionsT   s    z0DatabaseFeatures._disabled_supports_transactionsc             C   s
   | j dkS )zConfirm support for introspected foreign keys

        Only the InnoDB storage engine supports Foreigen Key (not taking
        into account MySQL Cluster here).
        r   )r   )r   r   r   r   can_introspect_foreign_keysX   s    z,DatabaseFeatures.can_introspect_foreign_keysc          	   C   s4   t sdS | jj }|jd |j g kS Q R X dS )a  Tests if the time zone definitions are installed

        MySQL accepts full time zones names (eg. Africa/Nairobi) but rejects
        abbreviations (eg. EAT). When pytz isn't installed and the current
        time zone is LocalTimezone (the only sensible value in this context),
        the current time zone name will be an abbreviation. As a consequence,
        MySQL cannot perform time zone conversions reliably.
        Fz%SELECT 1 FROM mysql.time_zone LIMIT 1N)	HAVE_PYTZr	   r   r   Zfetchall)r   r   r   r   r   has_zoneinfo_databasea   s
    

z&DatabaseFeatures.has_zoneinfo_databasec             O   s   dS )NZIntegerFieldr   )r   argskwargsr   r   r   introspected_boolean_field_typer   s    z0DatabaseFeatures.introspected_boolean_field_type)"__name__
__module____qualname____doc__Zempty_fetchmany_valueZupdate_can_self_selectZallows_group_by_pkZrelated_fields_match_typeZallow_sliced_subqueriesZhas_bulk_insertZhas_select_for_updateZhas_select_for_update_nowaitZsupports_forward_referencesZsupports_regex_backreferencingZ!supports_date_lookup_using_stringZcan_introspect_autofieldZcan_introspect_binary_fieldZ"can_introspect_small_integer_fieldZsupports_timezonesZ-requires_explicit_null_ordering_when_groupingZallows_auto_pk_0Zallows_primary_key_0Zuses_savepointsZatomic_transactionsZ!supports_column_check_constraintsr   r   r   r   r   r   r   r    __classcell__r   r   )r
   r   r      s:    	r   )ZdjangoZ django.db.backends.base.featuresr   Zdjango.utils.functionalr   Zdjango.utilsr   Zpytzr   ImportErrorr   r   r   r   r   <module>   s   
