o
    ÖŸŽiã,  ã                   @   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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#„ ƒZ0e(e) *d$¡ƒZ1ed%d&„ ƒZ2ed'd(„ ƒZ3ed)d*„ ƒZ4ed+d,„ ƒZ5ed-d.„ ƒZ6ed/d0„ ƒZ7ed1d2„ ƒZ8e(e) *d3¡ƒZ9e(e) *d3¡ƒZ:ed4d5„ ƒZ;ed6d7„ ƒZ<ed8d9„ ƒZ=ed:d;„ ƒZ>ed<d=„ ƒZ?ed>d?„ ƒZ@e(e) *d@¡ƒZAedAdB„ ƒZB‡  ZCS )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;
    z¸
        CREATE TABLE test_table_composite_pk (
            column_1 INTEGER NOT NULL,
            column_2 INTEGER NOT NULL,
            PRIMARY KEY(column_1, column_2)
        )
    c                 C   s   | j jrdS dS )N)é
   é   )é   ©Ú
connectionÚmysql_is_mariadb©Úselfr   r   úkC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\django/db/backends/mysql/features.pyÚminimum_database_version:   s   z)DatabaseFeatures.minimum_database_versionc                 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   é   Zutf8mb3Z_general_ciZ_esperanto_ciZ_swedish_ci)ÚciZnon_defaultZ
swedish_ci©r
   r   Úmysql_version)r   Úcharsetr   r   r   Útest_collationsA   s   ÿ
þü
ûýz DatabaseFeatures.test_collationszUTC_TIMESTAMP(6)c                 C   s¾   ddhddhdhdhddh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¡ |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.)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_analyzeZ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   r   ÚupdateÚsupports_explain_analyzeÚsql_mode)r   Úskipsr   r   r   Údjango_test_skipsU   sf   ýþÿÿýì
ü
üÿÿÿ
ü
üÿÿÿÿÿÿÿþÿ	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_engineN©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_ZERON)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ÚMyISAMN©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   r0   ¹   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_insertr3   c                 C   r#   )NÚhas_zoneinfo_databaser$   r   r   r   r   r4   Ï   ó   z&DatabaseFeatures.has_zoneinfo_databasec                 C   r#   )NZsql_auto_is_nullr$   r   r   r   r   Úis_sql_auto_is_null_enabledÓ   r5   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_clauser8   c                 C   r7   ©NT©r   r   é   r   r   r   r   r   Ú!supports_column_check_constraintsá   r9   z2DatabaseFeatures.supports_column_check_constraintsr=   c                 C   r7   r:   r   r   r   r   r   Ú can_introspect_check_constraintsë   r9   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   r7   )NTr?   r   r   r   r   r   Úhas_select_for_update_nowait÷   r9   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   r     r)   z)DatabaseFeatures.supports_explain_analyzec                 C   s*   h d£}| j js| j jdkr| d¡ |S )N>   ZJSONZTEXTZTRADITIONALr;   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+   Nr,   r   r   r   r   Úsupports_transactions  s   
z&DatabaseFeatures.supports_transactionsrH   c                 C   r#   )NZlower_case_table_namesr$   r   r   r   r   Úignores_table_name_case#  r5   z(DatabaseFeatures.ignores_table_name_casec                 C   s
   | j j S )Nr	   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   r>   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 | jjdkS )NZInnoDBF)r   r   r?   )r%   r
   r   r   r   r   r   r   Úsupports_index_column_ordering2  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_indexes:  s
   
ÿ
ýz,DatabaseFeatures.supports_expression_indexesc                 C   s   | j j}|p| j jdkS )N)r   r   é   r   )r   Z
is_mariadbr   r   r   Úsupports_select_intersectionB  s   z-DatabaseFeatures.supports_select_intersectionrP   c                 C   s   | j jr
| j jdkS dS )Nr   Tr   r   r   r   r   Úcan_rename_indexK  s   z!DatabaseFeatures.can_rename_index)DÚ__name__Ú
__module__Ú__qualname__Zempty_fetchmany_valueZallows_group_by_selected_pksZ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atomic_transactionsZcan_clone_databasesZsupports_commentsZsupports_comments_inlineZsupports_temporal_subtractionZ%supports_slicing_ordering_in_compoundZsupports_index_on_text_fieldZsupports_update_conflictsZ(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 supports_order_by_nulls_modifierZorder_by_nulls_firstZsupports_logical_xorr   r   r   Ztest_now_utc_templater"   r%   r&   r(   r-   r0   r3   ÚpropertyÚoperatorÚ
attrgetterZ can_return_rows_from_bulk_insertr4   r6   r8   Z#supports_frame_range_fixed_distancer=   Z supports_table_check_constraintsr>   rA   rB   rC   r   rG   rH   Zuses_savepointsZcan_release_savepointsrI   rJ   rK   rL   rN   rP   Zsupports_select_differencerQ   Ú__classcell__r   r   r1   r   r      sÀ    


I



	
ÿ


ÿ
ÿ












ÿr   )rV   Z django.db.backends.base.featuresr   Zdjango.utils.functionalr   r   r   r   r   r   Ú<module>   s    