o
    ˜¨Êhb5  ã                   @   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ed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* +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d0d1„ ƒZ8ed2d3„ ƒZ9e)e* +d4¡ƒZ:e)e* +d4¡ƒZed5d6„ ƒZ;ed7d8„ ƒZ<ed9d:„ ƒZ=ed;d<„ ƒZ>ed=d>„ ƒZ?ed?d@„ ƒZ@edAdB„ ƒZA‡  ZBS )CÚ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   s   | j jrdS dS )N)é
   é   )é   é   ©Ú
connectionÚmysql_is_mariadb©Úselfr   r   úS/var/www/html/env/lib/python3.10/site-packages/django/db/backends/mysql/features.pyÚminimum_database_version4   s   z)DatabaseFeatures.minimum_database_versionc                 C   s0   | j jr
| j jdk s| j js| j jdk rdS dS )N©r   é   ©é   z
 FROM DUALÚ ©r   r   Úmysql_versionr   r   r   r   Úbare_select_suffix;   s   ÿþz#DatabaseFeatures.bare_select_suffixc                 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   é   )r   r   é   Úutf8mb3Ú_general_ciÚ_esperanto_ciÚ_swedish_ci)ÚciÚnon_defaultÚ
swedish_cir   )r   Úcharsetr   r   r   Útest_collationsF   s   ÿþýz DatabaseFeatures.test_collationsÚUTC_TIMESTAMPc                 C   s&  ddhddhdhdhddhd	œ}d
| j jv r| dddhi¡ | j js5| j jdk r5| ddhddhdœ¡ | j jrOd| j j  k rEdk rOn n| ddhi¡ | j jrid| j j  k r_dk rin n| ddhi¡ | j jrs| j jdk s}| j js†| j jdk r†| dh d£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_transformzDexpressions.tests.FTimeDeltaTests.test_durationfield_multiply_dividezGupdate.tests.AdvancedTests.test_update_ordered_by_inline_m2m_annotationz@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.Ú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_m2or   zSaggregation.tests.AggregateTestCase.test_aggregation_default_using_time_from_pythonzWaggregation.tests.AggregateTestCase.test_aggregation_default_using_datetime_from_pythonzUaggregation.tests.AggregateTestCase.test_aggregation_default_using_time_from_databasezYaggregation.tests.AggregateTestCase.test_aggregation_default_using_datetime_from_database)zBCasting to datetime/time is not supported by MySQL < 8.0. (#30224)zBMySQL < 8.0 returns string type instead of datetime/time. (#30224))r   r   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_fieldr   zPParenthesized combined queries are not supported on MySQL < 8 and MariaDB < 10.4>   úLqueries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_subqueryúQqueries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_with_orderingú]queries.test_qs_combinators.QuerySetSetOperationTests.test_union_in_subquery_related_outerrefz%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_skipsZ   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   ó   | 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©r7   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   rK   è   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_insertrN   c                 C   r3   )NÚhas_zoneinfo_databaser5   r   r   r   r   rO   þ   ó   z&DatabaseFeatures.has_zoneinfo_databasec                 C   r3   )NÚsql_auto_is_nullr5   r   r   r   r   Úis_sql_auto_is_null_enabled  rP   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   r   Úsupports_over_clause  ó   z%DatabaseFeatures.supports_over_clauserT   c                 C   rS   )NT©r   r   é   r   r   r   r   r   Ú!supports_column_check_constraints  rU   z2DatabaseFeatures.supports_column_check_constraintsrX   c                 C   s$   | j jr| j j}|dkS | j jdkS )N)r   r   r   rV   r   )r   Úversionr   r   r   Ú can_introspect_check_constraints  s   z1DatabaseFeatures.can_introspect_check_constraintsc                 C   s    | j jr
| j jdkS | j jdkS )Nr   ©r   r   é   r   r   r   r   r   Ú!has_select_for_update_skip_locked!  s   z2DatabaseFeatures.has_select_for_update_skip_lockedc                 C   rS   )NTr[   r   r   r   r   r   Úhas_select_for_update_nowait'  rU   z-DatabaseFeatures.has_select_for_update_nowaitc                 C   s   | j j o
| j jdkS )Nr[   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   r0   4  r<   z)DatabaseFeatures.supports_explain_analyzec                 C   s*   h d£}| j js| j jdkr| d¡ |S )N>   ÚJSONÚTEXTÚTRADITIONALrV   Ú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_transactionsI  s   
z&DatabaseFeatures.supports_transactionsrh   c                 C   r3   )NÚlower_case_table_namesr5   r   r   r   r   Úignores_table_name_caseS  rP   z(DatabaseFeatures.ignores_table_name_casec                 C   s
   | j j S ©Nr
   r   r   r   r   Úsupports_default_in_lead_lagW  rA   z-DatabaseFeatures.supports_default_in_lead_lagc                 C   rS   )NT)r   r	   r   r   r   r   r   r   Úsupports_json_field\  rU   z$DatabaseFeatures.supports_json_fieldc                 C   s   | j jr
| jo	| jS | jS rk   )r   r   rm   rZ   r   r   r   r   Úcan_introspect_json_fieldb  s   z*DatabaseFeatures.can_introspect_json_fieldc                 C   s.   | j dkrdS | jjr| jjdkS | jjdkS )NÚInnoDBF)r   r   r[   )r7   r   r   r   r   r   r   r   Úsupports_index_column_orderingh  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   r7   r   r   r   r   r   Úsupports_expression_indexesp  s
   
ÿ
ýz,DatabaseFeatures.supports_expression_indexesc                 C   s   | j jr
| j jdkS dS )Nr(   Tr   r   r   r   r   Úcan_rename_indexx  s   z!DatabaseFeatures.can_rename_index)CÚ__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Úsupports_update_conflictsÚ(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_firstÚsupports_logical_xorr   r   r   r%   Útest_now_utc_templater2   r7   r9   r;   r@   rK   rN   ÚpropertyÚoperatorÚ
attrgetterÚ can_return_rows_from_bulk_insertrO   rR   rT   Ú#supports_frame_range_fixed_distancerX   Ú supports_table_check_constraintsrZ   r]   r^   r_   r0   rg   rh   Úuses_savepointsrj   rl   rm   rn   rp   rr   rs   Ú__classcell__r   r   rL   r   r      s¾    




s



	
ÿ


ÿ
ÿ












r   )r“   Ú django.db.backends.base.featuresr   Údjango.utils.functionalr   r   r   r   r   r   Ú<module>   s    