U
    }®cœ#  ã                   @   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ddd	œZed
d„ ƒZedd„ ƒZedd„ ƒZ edd„ ƒZ!edd„ ƒZ"e‡ f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¡ƒZ,ed d!„ ƒZ-e%e& 'd"¡ƒZ.ed#d$„ ƒZ/ed%d&„ ƒZ0ed'd(„ ƒZ1ed)d*„ ƒZ2ed+d,„ ƒZ3ed-d.„ ƒZ4ed/d0„ ƒZ5ed1d2„ ƒZ6ed3d4„ ƒZ7ed5d6„ ƒZ8ed7d8„ ƒZ9ed9d:„ ƒZ:ed;d<„ ƒZ;‡  Z<S )=ÚDatabaseFeatures© TFz…
        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utf8_general_ciZutf8_esperanto_ciZutf8_swedish_ci)ÚciZnon_defaultZ
swedish_cic                 C   s¶   ddhddhdhdœ}d| j jkr4| dd	d
hi¡ | j jrhd| j j  k rTdk rhn n| ddhi¡ | j jrœd| j j  k rˆdk rœn n| ddhi¡ | js²| ddhi¡ |S )NzLdb_functions.comparison.test_greatest.GreatestTests.test_coalesce_workaroundzFdb_functions.comparison.test_least.LeastTests.test_coalesce_workaroundz5model_fields.test_textfield.TextFieldTests.test_emojiz4model_fields.test_charfield.TestCharField.test_emojiz;schema.tests.SchemaTests.test_func_index_json_key_transform)zThis doesn't work on MySQL.z4Running on MySQL requires utf8mb4 encoding (#18392).zHMySQL doesn't support functional indexes on a function that returns JSONZONLY_FULL_GROUP_BYzjGROUP BY optimization does not work properly when ONLY_FULL_GROUP_BY mode is enabled on MySQL, see #31331.zTaggregation.tests.AggregateTestCase.test_aggregation_subquery_annotation_multivaluedzSannotations.tests.NonAggregateAnnotationTestCase.test_annotation_aggregate_with_m2o)é
   é   é   )r   é   é   z*https://jira.mariadb.org/browse/MDEV-19598zCschema.tests.SchemaTests.test_alter_not_unique_field_to_primary_key)r   r   é   )r   r
   z*https://jira.mariadb.org/browse/MDEV-22775zBschema.tests.SchemaTests.test_alter_pk_with_self_referential_fieldz%MariaDB and MySQL >= 8.0.18 specific.z4queries.test_explain.ExplainTests.test_mysql_analyze)Ú
connectionÚsql_modeÚupdateÚmysql_is_mariadbÚmysql_versionÚsupports_explain_analyze)ÚselfÚskipsr   r   úE/tmp/pip-unpacked-wheel-7m9rsep5/django/db/backends/mysql/features.pyÚdjango_test_skips8   s^    þþÿöþþÿ þþ
ÿÿÿ þþ
ÿÿÿÿz"DatabaseFeatures.django_test_skipsc                 C   s   | j jd S )zGInternal method used in Django tests. Don't rely on this from your codeZdefault_storage_engine©r   Zmysql_server_data©r   r   r   r   Ú_mysql_storage_enginej   s    z&DatabaseFeatures._mysql_storage_enginec                 C   s   d| j jkS )zt
        Autoincrement primary key can be set to 0 if it doesn't generate new
        autoincrement values.
        ZNO_AUTO_VALUE_ON_ZERO)r   r   r   r   r   r   Úallows_auto_pk_0o   s    z!DatabaseFeatures.allows_auto_pk_0c                 C   s   | j jo| j jdkS )N)r   r	   r   ©r   r   r   r   r   r   r   Úupdate_can_self_selectw   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_keys{   s    z,DatabaseFeatures.can_introspect_foreign_keysc                    s   t ƒ jdddddœ–S )NZ	TextFieldZIntegerFieldZBigIntegerFieldZ	CharField)ZBinaryFieldZBooleanFieldZDurationFieldZGenericIPAddressField)ÚsuperÚintrospected_field_typesr   ©Ú	__class__r   r   r!   €   s    ûz)DatabaseFeatures.introspected_field_typesc                 C   s   | j jo| j jdkS )N)r   r
   r   r   r   r   r   r   Úcan_return_columns_from_insertŠ   s    z/DatabaseFeatures.can_return_columns_from_insertr$   c                 C   s   | j jd S )NÚhas_zoneinfo_databaser   r   r   r   r   r%   �   s    z&DatabaseFeatures.has_zoneinfo_databasec                 C   s   | j jd S )NZsql_auto_is_nullr   r   r   r   r   Úis_sql_auto_is_null_enabled”   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   Ú!supports_column_check_constraints    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_constraints¨   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_locked¯   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   r1   r   r   r   r   r   Úhas_select_for_update_nowait³   s    z-DatabaseFeatures.has_select_for_update_nowaitc                 C   s   | j j o| j jdkS r0   r   r   r   r   r   Úhas_select_for_update_of¹   s    z)DatabaseFeatures.has_select_for_update_ofc                 C   s   | j jp| j jdkS )N)r'   r   é   r   r   r   r   r   r   ½   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   s   | j jd S )NZlower_case_table_namesr   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   Úsupports_json_fieldÚ   s    z$DatabaseFeatures.supports_json_fieldc                 C   s   | j jr| jo| jS | jS r;   )r   r   r>   r/   r   r   r   r   Úcan_introspect_json_fieldà   s    z*DatabaseFeatures.can_introspect_json_fieldc                 C   s   | j j o| j jdkS r0   r   r   r   r   r   Úsupports_index_column_orderingæ   s    

þz/DatabaseFeatures.supports_index_column_orderingc                 C   s   | j j o| j jdkS )N)r'   r   é   r   r   r   r   r   Úsupports_expression_indexesí   s    

þz,DatabaseFeatures.supports_expression_indexes)=Ú__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supports_timezonesZ-requires_explicit_null_ordering_when_groupingZ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supports_partial_indexesZcollate_as_index_expressionZ supports_order_by_nulls_modifierZorder_by_nulls_firstZtest_collationsr   r   r   r   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/   r2   r3   r4   r   r8   r9   r:   r<   r>   r?   r@   rB   Ú__classcell__r   r   r"   r   r      s    ý
1



	
















r   )rG   Z django.db.backends.base.featuresr   Zdjango.utils.functionalr   r   r   r   r   r   Ú<module>   s   