3
7^                 @   s4   d dl Z d dlmZ d dlmZ G dd deZdS )    N)BaseDatabaseFeatures)cached_propertyc               @   s$  e Zd Zf 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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ddhZ$dZ%e&d	d
 Z'e&dd Z(e&dd Z)e&dd Z*e&dd Z+e&dd Z,e-e.j/dZ0e&dd Z1e&dd Z2e&dd Z3e&dd Z4dS )DatabaseFeaturesFTZIntegerFieldz
        CREATE PROCEDURE test_procedure ()
        BEGIN
            DECLARE V_I INTEGER;
            SET V_I = 1;
        END;
    z
        CREATE PROCEDURE test_procedure (P_I INTEGER)
        BEGIN
            DECLARE V_I INTEGER;
            SET V_I = P_I;
        END;
    ZJSONZTEXTZTRADITIONALc          	   C   s0   | j j }|jd |j }W dQ R X |d S )zGInternal method used in Django tests. Don't rely on this from your codezGSELECT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE SUPPORT = 'DEFAULT'Nr   )
connectioncursorexecutefetchone)selfr   result r   C/tmp/pip-build-8app2_gc/Django/django/db/backends/mysql/features.py_mysql_storage_engine;   s    
z&DatabaseFeatures._mysql_storage_enginec             C   s
   | j dkS )z-Confirm support for introspected foreign keysMyISAM)r   )r	   r   r   r   can_introspect_foreign_keysC   s    z,DatabaseFeatures.can_introspect_foreign_keysc          	   C   s,   | j j }|jd |j d k	S Q R X d S )Nz%SELECT 1 FROM mysql.time_zone LIMIT 1)r   r   r   r   )r	   r   r   r   r   has_zoneinfo_databaseH   s    
z&DatabaseFeatures.has_zoneinfo_databasec          	   C   s8   | j j $}|jd |j }|o,|d dkS Q R X d S )NzSELECT @@SQL_AUTO_IS_NULLr      )r   r   r   r   )r	   r   r
   r   r   r   is_sql_auto_is_null_enabledO   s    
z,DatabaseFeatures.is_sql_auto_is_null_enabledc             C   s    | j jr| j jdkS | j jdkS )N
         r   )r   r   )r   r   r   )r   mysql_is_mariadbmysql_version)r	   r   r   r   supports_over_clauseV   s    z%DatabaseFeatures.supports_over_clausec             C   s   | j j o| j jdkS )Nr   r   r   )r   r   r   )r   r   r   )r	   r   r   r   !has_select_for_update_skip_locked\   s    z2DatabaseFeatures.has_select_for_update_skip_lockedr   c             C   s   | j j o| j jdk S )N      )r   r   )r   r   r   )r	   r   r   r   needs_explain_extendedb   s    z'DatabaseFeatures.needs_explain_extendedc             C   s
   | j dkS )zI
        All storage engines except MyISAM support transactions.
        r   )r   )r	   r   r   r   supports_transactionsg   s    z&DatabaseFeatures.supports_transactionsc          	   C   s8   | j j $}|jd |j }|o,|d dkS Q R X d S )NzSELECT @@LOWER_CASE_TABLE_NAMESr   )r   r   r   r   )r	   r   r
   r   r   r   ignores_table_name_casen   s    
z(DatabaseFeatures.ignores_table_name_casec             C   s
   | j j S )N)r   r   )r	   r   r   r   supports_default_in_lead_lagu   s    z-DatabaseFeatures.supports_default_in_lead_lagN)5__name__
__module____qualname__Zempty_fetchmany_valueZupdate_can_self_selectZallows_group_by_pkZrelated_fields_match_typeZallow_sliced_subqueries_with_inZhas_select_for_updateZsupports_forward_referencesZsupports_regex_backreferencingZ!supports_date_lookup_using_stringZcan_introspect_autofieldZcan_introspect_binary_fieldZcan_introspect_duration_fieldZ"can_introspect_small_integer_fieldZ%can_introspect_positive_integer_fieldZintrospected_boolean_field_typeZsupports_index_column_orderingZsupports_timezonesZ-requires_explicit_null_ordering_when_groupingZallows_auto_pk_0Zcan_release_savepointsZatomic_transactionsZ!supports_column_check_constraintsZ supports_table_check_constraintsZcan_clone_databasesZsupports_temporal_subtractionZsupports_select_intersectionZsupports_select_differenceZ%supports_slicing_ordering_in_compoundZsupports_index_on_text_fieldZhas_case_insensitive_likeZ(create_test_procedure_without_params_sqlZ(create_test_procedure_with_int_param_sqlZ!db_functions_convert_bytes_to_strZsupported_explain_formatsZsupports_partial_indexesr   r   r   r   r   r   r   propertyoperator
attrgetterZhas_select_for_update_nowaitr   r   r   r   r   r   r   r   r      s\   
r   )r$   Z django.db.backends.base.featuresr   Zdjango.utils.functionalr   r   r   r   r   r   <module>   s   