o
    `Zh.                     @   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"e#dd	 Z$e#d
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# fddZ,e#dd Z-e.e/0dZ1e#dd Z2e#dd Z3e#d d! Z4e.e/0d"Z5e#d#d$ Z6e#d%d& Z7e#d'd( Z8e#d)d* Z9e#d+d, Z:e#d-d. Z;e#d/d0 Z<e#d1d2 Z=e#d3d4 Z>e#d5d6 Z?e#d7d8 Z@e#d9d: ZAe.e/0d;ZBe#d<d= ZCe#d>d? ZDe#d@dA ZEe#dBdC ZF  ZGS )D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
        CREATE TABLE test_table_composite_pk (
            column_1 INTEGER NOT NULL,
            column_2 INTEGER NOT NULL,
            PRIMARY KEY(column_1, column_2)
        )
    zINSERT INTO {} () VALUES ()c                 C   s   | j jrdS dS )N)
      )   r      
connectionmysql_is_mariadbselfr   r   X/var/www/html/lang_env/lib/python3.10/site-packages/django/db/backends/mysql/features.pyminimum_database_versionA   s   z)DatabaseFeatures.minimum_database_versionc                 C   sV   d}| j jr| j jdks| j js| j jdkrd}| d| d| d| ddS )	Nutf8r      )r   r      Zutf8mb3Z_general_ciZ_esperanto_ciZ_swedish_ci)ciZnon_defaultZ
swedish_ciZvirtualr   r   mysql_version)r   charsetr   r   r   test_collationsH   s   z DatabaseFeatures.test_collationszUTC_TIMESTAMP(6)c                 C   s   ddhddhdhdhh dd}| j jr*d	| j j  k r d
k r*n n|ddhi | j jrDd| j j  k r:dk rDn n|ddhi | jsO|ddhi d| j jv r]|ddhi | j jdk rk|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_transformzDexpressions.tests.FTimeDeltaTests.test_durationfield_multiply_divide>   zGupdate.tests.AdvancedTests.test_update_ordered_by_inline_m2m_annotationzEupdate.tests.AdvancedTests.test_update_ordered_by_m2m_annotation_descz@update.tests.AdvancedTests.test_update_ordered_by_m2m_annotation)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 JSONzkMySQL supports multiplying and dividing DurationFields by a scalar value but it's not implemented (#25287).zWUPDATE ... ORDER BY syntax on MySQL/MariaDB does not support ordering byrelated fields.)r   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ONLY_FULL_GROUP_BYzjGROUP BY cannot contain nonaggregated column when ONLY_FULL_GROUP_BY mode is enabled on MySQL, see #34262.zOaggregation.tests.AggregateTestCase.test_group_by_nested_expression_with_paramsr   r      zKNesting of UNIONs at the right-hand side is not supported on MySQL < 8.0.31zGqueries.test_qs_combinators.QuerySetSetOperationTests.test_union_nested)r   r   r   updatesupports_explain_analyzesql_mode)r   skipsr   r   r   django_test_skips]   sp   



		z"DatabaseFeatures.django_test_skipsc                 C      | 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_datar   r   r   r   _mysql_storage_engine   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.
        ZNO_AUTO_VALUE_ON_ZERO)r   r$   r   r   r   r   allows_auto_pk_0   s   z!DatabaseFeatures.allows_auto_pk_0c                 C   s   | j jS Nr
   r   r   r   r   update_can_self_select   s   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 )NZ	TextFieldZIntegerFieldZBigIntegerFieldZ	CharField)ZBinaryFieldZBooleanFieldZDurationFieldZGenericIPAddressField)superintrospected_field_typesr   	__class__r   r   r3      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      z/DatabaseFeatures.can_return_columns_from_insertr6   c                 C   r'   )Nhas_zoneinfo_databaser(   r   r   r   r   r8         z&DatabaseFeatures.has_zoneinfo_databasec                 C   r'   )NZsql_auto_is_nullr(   r   r   r   r   is_sql_auto_is_null_enabled   r9   z,DatabaseFeatures.is_sql_auto_is_null_enabledc                 C      | j jrdS | j jdkS NTr   r      r   r   r   r   r   !supports_column_check_constraints      z2DatabaseFeatures.supports_column_check_constraintsr?   c                 C   r;   r<   r   r   r   r   r    can_introspect_check_constraints   r@   z1DatabaseFeatures.can_introspect_check_constraintsc                 C      | j jr
| j jdkS dS )Nr   Tr   r   r   r   r   !has_select_for_update_skip_locked      z2DatabaseFeatures.has_select_for_update_skip_lockedc                 C   
   | j j S r+   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#      r7   z)DatabaseFeatures.supports_explain_analyzec                 C   s*   h d}| j js| j jdkr|d |S )N>   JSONZTRADITIONALZTEXTr=   ZTREE)r   r   r   add)r   formatsr   r   r   supported_explain_formats  s   
z*DatabaseFeatures.supported_explain_formatsc                 C   r-   )zI
        All storage engines except MyISAM support transactions.
        r.   r/   r   r   r   r   supports_transactions  s   
z&DatabaseFeatures.supports_transactionsc                 C   r'   )NZlower_case_table_namesr(   r   r   r   r   ignores_table_name_case  r9   z(DatabaseFeatures.ignores_table_name_casec                 C   rE   r+   r
   r   r   r   r   supports_default_in_lead_lag   r1   z-DatabaseFeatures.supports_default_in_lead_lagc                 C   s   | j jr| jS dS )NT)r   r   rA   r   r   r   r   can_introspect_json_field%  s   z*DatabaseFeatures.can_introspect_json_fieldc                 C   s&   | j dkrdS | jjr| jjdkS dS )NZInnoDBF)r   r   T)r)   r   r   r   r   r   r   r   supports_index_column_ordering+  s
   
z/DatabaseFeatures.supports_index_column_orderingc                 C   s    | j j o| jdko| j jdkS )Nr.   r   r      )r   r   r)   r   r   r   r   r   supports_expression_indexes3  s
   

z,DatabaseFeatures.supports_expression_indexesc                 C   s   | j j}|p| j jdkS )Nr    r   r   Z
is_mariadbr   r   r   supports_select_intersection;     z-DatabaseFeatures.supports_select_intersectionrU   c                 C   rB   )Nr   Tr   r   r   r   r   can_rename_indexD  rD   z!DatabaseFeatures.can_rename_indexc                 C   r;   )NTrQ   r   r   r   r   r   supports_expression_defaultsJ  r@   z-DatabaseFeatures.supports_expression_defaultsc                 C   s   | j j}|o| j jdkS )N)r      r   rT   r   r   r   has_native_uuid_fieldP  rV   z&DatabaseFeatures.has_native_uuid_fieldc                 C   s   | j jr
d| j jvS dS )Nr   T)r   r   r$   r   r   r   r   allows_group_by_selected_pksU  rD   z-DatabaseFeatures.allows_group_by_selected_pks)H__name__
__module____qualname__Zempty_fetchmany_valueZrelated_fields_match_typeZallow_sliced_subqueries_with_inZhas_select_for_updateZhas_select_for_update_nowaitZsupports_forward_referencesZsupports_regex_backreferencingZ!supports_date_lookup_using_stringZsupports_timezonesZ-requires_explicit_null_ordering_when_groupingZatomic_transactionsZcan_clone_databasesZsupports_commentsZsupports_comments_inlineZsupports_temporal_subtractionZ%supports_slicing_ordering_in_compoundZsupports_index_on_text_fieldZsupports_over_clauseZ#supports_frame_range_fixed_distanceZsupports_update_conflictsZ"delete_can_self_reference_subqueryZ(create_test_procedure_without_params_sqlZ(create_test_procedure_with_int_param_sqlZ,create_test_table_with_composite_primary_keyZsupports_partial_indexesZcollate_as_index_expressionZinsert_test_table_with_defaultsZ supports_order_by_nulls_modifierZorder_by_nulls_firstZsupports_logical_xorZ!supports_stored_generated_columnsZ"supports_virtual_generated_columnsr   r   r   Ztest_now_utc_templater&   r)   r*   r,   r0   r3   r6   propertyoperator
attrgetterZ can_return_rows_from_bulk_insertr8   r:   r?   Z supports_table_check_constraintsrA   rC   rF   r#   rK   rL   rM   rN   rO   rP   rS   rU   Zsupports_select_differencerW   rX   rZ   r[   __classcell__r   r   r4   r   r      s    


T



	


















r   )r`   Z django.db.backends.base.featuresr   Zdjango.utils.functionalr   r   r   r   r   r   <module>   s    