U
    8ÄT_<  ã                   @   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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Z#e$dd„ ƒZ%e$d	d
„ ƒZ&e$dd„ ƒZ'e$dd„ ƒZ(e)e* +d¡ƒZ,e$dd„ ƒZ-e$dd„ ƒZ.e$dd„ ƒZ/e)e* +d¡ƒZ0e$dd„ ƒZ1e)e* +d¡ƒZ2e$dd„ ƒZ3e$dd„ ƒZ4e$dd„ ƒZ5e$d d!„ ƒZ6e$d"d#„ ƒZ7e$d$d%„ ƒZ8e$d&d'„ ƒZ9e$d(d)„ ƒZ:e$d*d+„ ƒZ;e$d,d-„ ƒZ<e$d.d/„ ƒZ=d0S )1ÚDatabaseFeatures© TFZ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;
    c              	   C   s0   | j  ¡ �}| d¡ | ¡ }W 5 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'r   ©Ú
connectionÚcursorÚexecuteZfetchone©Úselfr   Úresultr   r   úE/tmp/pip-unpacked-wheel-dv63caxw/django/db/backends/mysql/features.pyÚ_mysql_storage_engine8   s    
z&DatabaseFeatures._mysql_storage_enginec                 C   s   | j jo| j jdkS )N)é
   é   é   ©r   Úmysql_is_mariadbÚmysql_version©r   r   r   r   Úupdate_can_self_select@   s    z'DatabaseFeatures.update_can_self_selectc                 C   s
   | j dkS )z-Confirm support for introspected foreign keysÚMyISAM©r   r   r   r   r   Úcan_introspect_foreign_keysD   s    z,DatabaseFeatures.can_introspect_foreign_keysc                 C   s   | j jo| j jdkS )N)r   é   r   r   r   r   r   r   Úcan_return_columns_from_insertI   s    z/DatabaseFeatures.can_return_columns_from_insertr   c              
   C   s<   | j  ¡ �(}| d¡ | ¡ d d k	W  5 Q R £ S Q R X d S )Nz6SELECT CONVERT_TZ('2001-01-01 01:00:00', 'UTC', 'UTC')r   r   )r   r   r   r   r   Úhas_zoneinfo_databaseO   s    
z&DatabaseFeatures.has_zoneinfo_databasec              
   C   sD   | j  ¡ �0}| d¡ | ¡ }|o,|d dkW  5 Q R £ S Q R X d S )NzSELECT @@SQL_AUTO_IS_NULLr   é   r   r
   r   r   r   Úis_sql_auto_is_null_enabledW   s    
z,DatabaseFeatures.is_sql_auto_is_null_enabledc                 C   s   | j jrdS | j jdkS )NT)é   r   r   r   r   r   r   r   Úsupports_over_clause^   s    z%DatabaseFeatures.supports_over_clauser    c                 C   s    | j jr| j jdkS | j jdkS )N)r   r   r   ©r   r   é   r   r   r   r   r   Ú!supports_column_check_constraintsf   s    z2DatabaseFeatures.supports_column_check_constraintsr#   c                 C   s4   | j jr(| j j}|dkr |dk p&|dkS | j jdkS )N)r   r   é   )r   r   )r   r   r   r!   r   )r   Úversionr   r   r   Ú can_introspect_check_constraintsn   s    z1DatabaseFeatures.can_introspect_check_constraintsc                 C   s   | j j o| j jdkS )N©r   r   r   r   r   r   r   r   Ú!has_select_for_update_skip_lockedu   s    z2DatabaseFeatures.has_select_for_update_skip_lockedc                 C   s    | j jr| j jdkS | j jdkS )N)r   r   r   r'   r   r   r   r   r   Úhas_select_for_update_nowaity   s    z-DatabaseFeatures.has_select_for_update_nowaitc                 C   s   | j j o| j jdk S )N)r   é   r   r   r   r   r   Úneeds_explain_extended   s    z'DatabaseFeatures.needs_explain_extendedc                 C   s   | j jp| j jdkS )N)r   r   é   r   r   r   r   r   Úsupports_explain_analyze„   s    z)DatabaseFeatures.supports_explain_analyzec                 C   s,   dddh}| j js(| j jdkr(| d¡ |S )NZJSONZTEXTZTRADITIONALr!   ZTREE)r   r   r   Úadd)r   Úformatsr   r   r   Úsupported_explain_formatsˆ   s    

z*DatabaseFeatures.supported_explain_formatsc                 C   s
   | j dkS )zI
        All storage engines except MyISAM support transactions.
        r   r   r   r   r   r   Úsupports_transactions‘   s    z&DatabaseFeatures.supports_transactionsc              
   C   sD   | j  ¡ �0}| d¡ | ¡ }|o,|d dkW  5 Q R £ S Q R X d S )NzSELECT @@LOWER_CASE_TABLE_NAMESr   r   r
   r   r   r   Úignores_table_name_case˜   s    
z(DatabaseFeatures.ignores_table_name_casec                 C   s
   | j j S ©N)r   r   r   r   r   r   Úsupports_default_in_lead_lagŸ   s    z-DatabaseFeatures.supports_default_in_lead_lagc                 C   s    | j jr| j jdkS | j jdkS )N)r   r   r*   )r   r*   r   r   r   r   r   r   Úsupports_json_field¤   s    z$DatabaseFeatures.supports_json_fieldc                 C   s   | j jr| jo| jS | jS r3   )r   r   r5   r&   r   r   r   r   Úcan_introspect_json_fieldª   s    z*DatabaseFeatures.can_introspect_json_fieldN)>Ú__name__Ú
__module__Ú__qualname__Zempty_fetchmany_valueZ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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supports_partial_indexesZ supports_order_by_nulls_modifierZorder_by_nulls_firstr   r   r   r   r   ÚpropertyÚoperatorÚ
attrgetterZ can_return_rows_from_bulk_insertr   r   r    Z#supports_frame_range_fixed_distancer#   Z supports_table_check_constraintsr&   r(   r)   r+   r-   r0   r1   r2   r4   r5   r6   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   