o
    ÕèFh1  ã                   @   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   úZ/var/www/html/loop/nvenv/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   é   Úutf8mb3Ú_general_ciÚ_esperanto_ciÚ_swedish_ci)ÚciÚnon_defaultÚ
swedish_ciÚ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¡ | j jsx| d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>   ú@update.tests.AdvancedTests.test_update_ordered_by_m2m_annotationúEupdate.tests.AdvancedTests.test_update_ordered_by_m2m_annotation_descúGupdate.tests.AdvancedTests.test_update_ordered_by_inline_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_nestedzDMySQL doesn't allow renaming columns referenced by generated columnsz_migrations.test_operations.OperationTests.test_invalid_generated_field_changes_on_rename_storedz`migrations.test_operations.OperationTests.test_invalid_generated_field_changes_on_rename_virtual)r   r   r   ÚupdateÚsupports_explain_analyzeÚsql_mode)r   Úskipsr   r   r   Údjango_test_skips]   s€   ýþÿÿì
ü
üÿÿÿ
ü
üÿÿÿÿÿÿÿþÿ	ÿþÿ	ýþÿ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_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.
        Ú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©r5   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   rH   Ô   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_insertrK   c                 C   r1   )NÚhas_zoneinfo_databaser3   r   r   r   r   rM   ê   ó   z&DatabaseFeatures.has_zoneinfo_databasec                 C   r1   )NÚsql_auto_is_nullr3   r   r   r   r   Úis_sql_auto_is_null_enabledî   rN   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_constraintsrU   c                 C   rQ   rR   r   r   r   r   r   Ú can_introspect_check_constraintsü   rV   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 r8   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-     rL   z)DatabaseFeatures.supports_explain_analyzec                 C   s*   h d£}| j js| j jdkr| d¡ |S )N>   ÚJSONÚTEXTÚTRADITIONALrS   Ú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   r1   )NÚlower_case_table_namesr3   r   r   r   r   Úignores_table_name_case(  rN   z(DatabaseFeatures.ignores_table_name_casec                 C   r[   r8   r
   r   r   r   r   Úsupports_default_in_lead_lag,  r>   z-DatabaseFeatures.supports_default_in_lead_lagc                 C   s   | j jr| jS dS )NT)r   r   rW   r   r   r   r   Úcan_introspect_json_field1  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 )NÚInnoDBF)r   r   T)r5   r   r   r   r   r   r   r   Úsupports_index_column_ordering7  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   r5   r   r   r   r   r   Úsupports_expression_indexes?  s
   
ÿ
ýz,DatabaseFeatures.supports_expression_indexesc                 C   s   | j j}|p| j jdkS )Nr*   r   ©r   Ú
is_mariadbr   r   r   Úsupports_select_intersectionG  ó   z-DatabaseFeatures.supports_select_intersectionrq   c                 C   rX   )Nr%   Tr   r   r   r   r   Úcan_rename_indexP  rZ   z!DatabaseFeatures.can_rename_indexc                 C   rQ   )NTrl   r   r   r   r   r   Úsupports_expression_defaultsV  rV   z-DatabaseFeatures.supports_expression_defaultsc                 C   s   | j j}|o| j jdkS )N)r   é   r   ro   r   r   r   Úhas_native_uuid_field\  rr   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_pksa  rZ   z-DatabaseFeatures.allows_group_by_selected_pks)HÚ__name__Ú
__module__Ú__qualname__Úempty_fetchmany_valueÚrelated_fields_match_typeÚallow_sliced_subqueries_with_inÚhas_select_for_updateÚhas_select_for_update_nowaitÚsupports_forward_referencesÚsupports_regex_backreferencingÚ!supports_date_lookup_using_stringÚsupports_timezonesÚ-requires_explicit_null_ordering_when_groupingÚatomic_transactionsÚcan_clone_databasesÚsupports_commentsÚsupports_comments_inlineÚsupports_temporal_subtractionÚ%supports_slicing_ordering_in_compoundÚsupports_index_on_text_fieldÚsupports_over_clauseÚ#supports_frame_range_fixed_distanceÚsupports_update_conflictsÚ"delete_can_self_reference_subqueryÚ(create_test_procedure_without_params_sqlÚ(create_test_procedure_with_int_param_sqlÚ,create_test_table_with_composite_primary_keyÚsupports_partial_indexesÚcollate_as_index_expressionÚinsert_test_table_with_defaultsÚ supports_order_by_nulls_modifierÚorder_by_nulls_firstÚsupports_logical_xorÚ!supports_stored_generated_columnsÚ"supports_virtual_generated_columnsr   r   r    Útest_now_utc_templater0   r5   r7   r9   r=   rH   rK   ÚpropertyÚoperatorÚ
attrgetterÚ can_return_rows_from_bulk_insertrM   rP   rU   Ú supports_table_check_constraintsrW   rY   r\   r-   rd   re   rg   rh   ri   rk   rn   rq   Úsupports_select_differencers   rt   rv   rw   Ú__classcell__r   r   rI   r   r      sÆ    


`



	
ÿ


ÿ











ÿ


r   )r�   Ú django.db.backends.base.featuresr   Údjango.utils.functionalr   r   r   r   r   r   Ú<module>   s    