o
    ^"<fn%                     @   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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 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-d. Z5ed/d0 Z6ed1d2 Z7ed3d4 Z8ed5d6 Z9ed7d8 Z:ed9d: 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;
    c                 C   sN   d}| j jr| j jdks| j js| j jdkrd}| d| d| ddS )	Nutf8)
      )   r      utf8mb3_general_ci_esperanto_ci_swedish_ci)cinon_default
swedish_ci
connectionmysql_is_mariadbmysql_version)selfcharsetr   r   X/var/www/html/kck/venv/lib/python3.10/site-packages/django/db/backends/mysql/features.pytest_collations3   s   z DatabaseFeatures.test_collationsc                 C   s   ddhddhdhd}d| j jv r|dd	d
hi | j jr4d| j j  k r*dk r4n n|ddhi | j jrNd| j j  k rDdk rNn n|ddhi | jsY|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 JSON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         )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)r   sql_modeupdater   r   supports_explain_analyze)r   skipsr   r   r   django_test_skipsE   sN   z"DatabaseFeatures.django_test_skipsc                 C      | j jd S )zGInternal method used in Django tests. Don't rely on this from your codedefault_storage_enginer   mysql_server_datar   r   r   r   _mysql_storage_enginew   s   z&DatabaseFeatures._mysql_storage_enginec                 C   s   d| j jv S )zt
        Autoincrement primary key can be set to 0 if it doesn't generate new
        autoincrement values.
        NO_AUTO_VALUE_ON_ZERO)r   r    r)   r   r   r   allows_auto_pk_0|   s   z!DatabaseFeatures.allows_auto_pk_0c                 C      | j jo	| j jdkS )N)r   r   r   r   r)   r   r   r   update_can_self_select      z'DatabaseFeatures.update_can_self_selectc                 C   
   | j dkS )z-Confirm support for introspected foreign keysMyISAMr*   r)   r   r   r   can_introspect_foreign_keys      
z,DatabaseFeatures.can_introspect_foreign_keysc                    s   i t  jdddddS )N	TextFieldIntegerFieldBigIntegerField	CharField)BinaryFieldBooleanFieldDurationFieldGenericIPAddressField)superintrospected_field_typesr)   	__class__r   r   r>      s   z)DatabaseFeatures.introspected_field_typesc                 C   r-   )N)r   r   r   r   r)   r   r   r   can_return_columns_from_insert   r/   z/DatabaseFeatures.can_return_columns_from_insertrA   c                 C   r%   )Nhas_zoneinfo_databaser'   r)   r   r   r   rB         z&DatabaseFeatures.has_zoneinfo_databasec                 C   r%   )Nsql_auto_is_nullr'   r)   r   r   r   is_sql_auto_is_null_enabled   rC   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   r   supports_over_clause   s   z%DatabaseFeatures.supports_over_clauserF   c                 C       | 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      z2DatabaseFeatures.supports_column_check_constraintsrK   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   rI   r   )r   versionr   r   r    can_introspect_check_constraints   s   z1DatabaseFeatures.can_introspect_check_constraintsc                 C      | j j o
| j jdkS Nr	   r   rH   r   r)   r   r   r   !has_select_for_update_skip_locked      z2DatabaseFeatures.has_select_for_update_skip_lockedc                 C   rG   )N)r   r   r   rR   r   r)   r   r   r   has_select_for_update_nowait   rL   z-DatabaseFeatures.has_select_for_update_nowaitc                 C   rP   rQ   r   r)   r   r   r   has_select_for_update_of   rT   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"      r/   z)DatabaseFeatures.supports_explain_analyzec                 C   s*   h d}| j js| j jdkr|d |S )N>   JSONTEXTTRADITIONALrI   TREE)r   r   r   add)r   formatsr   r   r   supported_explain_formats   s   
z*DatabaseFeatures.supported_explain_formatsc                 C   r0   )zI
        All storage engines except MyISAM support transactions.
        r1   r2   r)   r   r   r   supports_transactions   s   
z&DatabaseFeatures.supports_transactionsc                 C   r%   )Nlower_case_table_namesr'   r)   r   r   r   ignores_table_name_case   rC   z(DatabaseFeatures.ignores_table_name_casec                 C   s
   | j j S N)r   r   r)   r   r   r   supports_default_in_lead_lag   r4   z-DatabaseFeatures.supports_default_in_lead_lagc                 C   rG   )N)r   r      )r   rd   r	   r   r)   r   r   r   supports_json_field   rL   z$DatabaseFeatures.supports_json_fieldc                 C   s   | j jr
| jo	| jS | jS rb   )r   r   re   rO   r)   r   r   r   can_introspect_json_field   s   z*DatabaseFeatures.can_introspect_json_fieldc                 C   rP   rQ   r   r)   r   r   r   supports_index_column_ordering      

z/DatabaseFeatures.supports_index_column_orderingc                 C   rP   )N)r	   r      r   r)   r   r   r   supports_expression_indexes   rh   z,DatabaseFeatures.supports_expression_indexes)=__name__
__module____qualname__empty_fetchmany_valueallows_group_by_pkrelated_fields_match_typeallow_sliced_subqueries_with_inhas_select_for_updatesupports_forward_referencessupports_regex_backreferencing!supports_date_lookup_using_stringsupports_timezones-requires_explicit_null_ordering_when_groupingcan_release_savepointsatomic_transactionscan_clone_databasessupports_temporal_subtractionsupports_select_intersectionsupports_select_difference%supports_slicing_ordering_in_compoundsupports_index_on_text_fieldhas_case_insensitive_like(create_test_procedure_without_params_sql(create_test_procedure_with_int_param_sqlsupports_partial_indexescollate_as_index_expression supports_order_by_nulls_modifierorder_by_nulls_firstr   r   r$   r*   r,   r.   r3   r>   rA   propertyoperator
attrgetter can_return_rows_from_bulk_insertrB   rE   rF   #supports_frame_range_fixed_distancerK    supports_table_check_constraintsrO   rS   rU   rV   r"   r^   r_   ra   rc   re   rf   rg   rj   __classcell__r   r   r?   r   r      s    

1



	
















r   )r    django.db.backends.base.featuresr   django.utils.functionalr   r   r   r   r   r   <module>   s    