o
    >hx+                     @   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!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Z0e"dd Z1e"dd Z2e"dd  Z3e-e./d!Z4e"d"d# Z5e"d$d% Z6e"d&d' Z7e"d(d) Z8e"d*d+ Z9e"d,d- Z:e"d.d/ Z;e"d0d1 Z<e"d2d3 Z=e"d4d5 Z>e"d6d7 Z?e"d8d9 Z@e-e./d:ZAe"d;d< ZBe"d=d> ZCe"d?d@ ZDe"dAdB ZE  ZFS )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INSERT INTO {} () VALUES ()c                 C   s   | j jrdS dS )N)
      )   r      
connectionmysql_is_mariadbselfr   r   /var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/django/db/backends/mysql/features.pyminimum_database_version:   s   z)DatabaseFeatures.minimum_database_versionc                 C   s   dddddS )Nutf8mb4_general_ciutf8mb4_esperanto_ciutf8mb4_swedish_ci)cinon_default
swedish_civirtualr   r   r   r   r   test_collationsA   s
   z DatabaseFeatures.test_collationszUTC_TIMESTAMP(6)c                 C   s   ddhdhdhh dd}| j jr| j jdk r|dd	hi | js*|d
dhi d| j jv r8|ddhi | j jdk rF|ddhi | j jsS|dddhi |S )NzLdb_functions.comparison.test_greatest.GreatestTests.test_coalesce_workaroundzFdb_functions.comparison.test_least.LeastTests.test_coalesce_workaroundz;schema.tests.SchemaTests.test_func_index_json_key_transformzDexpressions.tests.FTimeDeltaTests.test_durationfield_multiply_divide>   @update.tests.AdvancedTests.test_update_ordered_by_m2m_annotationEupdate.tests.AdvancedTests.test_update_ordered_by_m2m_annotation_descGupdate.tests.AdvancedTests.test_update_ordered_by_inline_m2m_annotation)zThis doesn't work on MySQL.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      z*https://jira.mariadb.org/browse/MDEV-19598zCschema.tests.SchemaTests.test_alter_not_unique_field_to_primary_keyz%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   mysql_versionupdatesupports_explain_analyzesql_mode)r   skipsr   r   r   django_test_skipsL   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S Nr
   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.   r/   r
   r   r   r   r   can_return_columns_from_insert   r1   z/DatabaseFeatures.can_return_columns_from_insertrC   c                 C   r'   )Nhas_zoneinfo_databaser)   r   r   r   r   rD         z&DatabaseFeatures.has_zoneinfo_databasec                 C   r'   )Nsql_auto_is_nullr)   r   r   r   r   is_sql_auto_is_null_enabled   rE   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   r   !supports_column_check_constraints      z2DatabaseFeatures.supports_column_check_constraintsrM   c                 C   rH   rI   rL   r   r   r   r    can_introspect_check_constraints   rN   z1DatabaseFeatures.can_introspect_check_constraintsc                 C      | j jr
| j jdkS dS )N)r      TrL   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      rL   r   r   r   r   r#      s   z)DatabaseFeatures.supports_explain_analyzec                 C   s*   h d}| j js| j jdkr|d |S )N>   JSONTEXTTRADITIONALrJ   TREE)r   r   r!   add)r   formatsr   r   r   supported_explain_formats   s   
z*DatabaseFeatures.supported_explain_formatsc                 C   r2   )zI
        All storage engines except MyISAM support transactions.
        r3   r4   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   rE   z(DatabaseFeatures.ignores_table_name_casec                 C   rT   r/   r
   r   r   r   r   supports_default_in_lead_lag  r6   z-DatabaseFeatures.supports_default_in_lead_lagc                 C   s   | j jr| jS dS )NT)r   r   rO   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 )N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 )Nr3   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 )Nr   rL   r   
is_mariadbr   r   r   supports_select_intersection     z-DatabaseFeatures.supports_select_intersectionrj   c                 C   rP   )Nr   TrL   r   r   r   r   can_rename_index(  rS   z!DatabaseFeatures.can_rename_indexc                 C   rH   )NTre   rL   r   r   r   r   supports_expression_defaults.  rN   z-DatabaseFeatures.supports_expression_defaultsc                 C   s   | j j}|o| j jdkS )N)r      rL   rh   r   r   r   has_native_uuid_field4  rk   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_pks9  rS   z-DatabaseFeatures.allows_group_by_selected_pks)G__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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_templater&   r+   r-   r0   r5   r@   rC   propertyoperator
attrgetter can_return_rows_from_bulk_insertrD   rG   rM    supports_table_check_constraintsrO   rR   rU   r#   r]   r^   r`   ra   rb   rd   rg   rj   supports_select_differencerl   rm   ro   rp   __classcell__r   r   rA   r   r      s    


M



	


















r   )r    django.db.backends.base.featuresr   django.utils.functionalr   r   r   r   r   r   <module>   s    