
    h.                     :    S SK r S SKJr  S SKJr   " S S\5      rg)    N)BaseDatabaseFeatures)cached_propertyc                     ^  \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!Sr"Sr#\$S	 5       r%\$S
 5       r&Sr'\$S 5       r(\$S 5       r)\$S 5       r*\$S 5       r+\$S 5       r,\$U 4S j5       r-\$S 5       r.\/" \0Rb                  " S5      5      r2\$S 5       r3\$S 5       r4\$S 5       r5\/" \0Rb                  " S5      5      r6\$S 5       r7\$S 5       r8\$S 5       r9\$S 5       r:\$S 5       r;\$S 5       r<\$S 5       r=\$S 5       r>\$S  5       r?\$S! 5       r@\$S" 5       rA\$S# 5       rB\/" \0Rb                  " S$5      5      rC\$S% 5       rD\$S& 5       rE\$S' 5       rF\$S( 5       rGSrHU =rI$ ))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                 <    U R                   R                  (       a  gg)N)
      )   r      
connectionmysql_is_mariadbselfs    S/var/www/html/env/lib/python3.13/site-packages/django/db/backends/mysql/features.pyminimum_database_version)DatabaseFeatures.minimum_database_versionA   s    ??++    c                    SnU R                   R                  (       a  U R                   R                  S:  d5  U R                   R                  (       d  U R                   R                  S:  a  SnU S3U S3U S3U S3S.$ )	Nutf8r
      )r   r      utf8mb3_general_ci_esperanto_ci_swedish_ci)cinon_default
swedish_civirtualr   r   mysql_version)r   charsets     r   test_collations DatabaseFeatures.test_collationsH   s~    OO,,--800--;  GI[)%Ym4$I[1!-0	
 	
r   zUTC_TIMESTAMP(6)c                    SS1SS1S1S11 SkS.nU R                   R                  (       a.  U R                   R                  S	:  a  UR                  S
S105        U R                  (       d  UR                  SS105        SU R                   R
                  ;   a  UR                  SS105        U R                   R                  S:  a  UR                  SS105        U R                   R                  (       d  UR                  SSS105        U$ )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_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.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      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   r%   updatesupports_explain_analyzesql_mode)r   skipss     r   django_test_skips"DatabaseFeatures.django_test_skips]   sS   ++, HFE N
 W@ )
6 ??++OO))J6LL@EC ,,LL;N>  4??#;#;;LLOFQ ??((:5LL%,' //LLPQ 
 r   c                 4    U R                   R                  S   $ )zGInternal method used in Django tests. Don't rely on this from your codedefault_storage_enginer   mysql_server_datar   s    r   _mysql_storage_engine&DatabaseFeatures._mysql_storage_engine   s     001IJJr   c                 4    SU R                   R                  ;   $ )z\
Autoincrement primary key can be set to 0 if it doesn't generate new
autoincrement values.
NO_AUTO_VALUE_ON_ZERO)r   r4   r   s    r   allows_auto_pk_0!DatabaseFeatures.allows_auto_pk_0   s     '$//*B*BBBr   c                 .    U R                   R                  $ Nr   r   s    r   update_can_self_select'DatabaseFeatures.update_can_self_select       ///r   c                      U R                   S:g  $ )z-Confirm support for introspected foreign keysMyISAMr<   r   s    r   can_introspect_foreign_keys,DatabaseFeatures.can_introspect_foreign_keys   s     ))X55r   c                 *   > 0 [         TU ]  ESSSSS.E$ )N	TextFieldIntegerFieldBigIntegerField	CharField)BinaryFieldBooleanFieldDurationFieldGenericIPAddressField)superintrospected_field_types)r   	__class__s    r   rV   )DatabaseFeatures.introspected_field_types   s+    
g.
&*.%0
 	
r   c                 .    U R                   R                  $ rC   r   r   s    r   can_return_columns_from_insert/DatabaseFeatures.can_return_columns_from_insert   rF   r   rZ   c                 4    U R                   R                  S   $ )Nhas_zoneinfo_databaser:   r   s    r   r]   &DatabaseFeatures.has_zoneinfo_database   s    001HIIr   c                 4    U R                   R                  S   $ )Nsql_auto_is_nullr:   r   s    r   is_sql_auto_is_null_enabled,DatabaseFeatures.is_sql_auto_is_null_enabled   s    001CDDr   c                 l    U R                   R                  (       a  gU R                   R                  S:  $ NTr   r      r$   r   s    r   !supports_column_check_constraints2DatabaseFeatures.supports_column_check_constraints   '    ??++,,
::r   rg   c                 l    U R                   R                  (       a  gU R                   R                  S:  $ rd   r$   r   s    r    can_introspect_check_constraints1DatabaseFeatures.can_introspect_check_constraints   ri   r   c                 l    U R                   R                  (       a  U R                   R                  S:  $ g)Nr   Tr$   r   s    r   !has_select_for_update_skip_locked2DatabaseFeatures.has_select_for_update_skip_locked   s'    ??++??00G;;r   c                 8    U R                   R                  (       + $ rC   r   r   s    r   has_select_for_update_of)DatabaseFeatures.has_select_for_update_of   s    ??3333r   c                 n    U R                   R                  =(       d    U R                   R                  S:  $ )N)r   r      r$   r   s    r   r3   )DatabaseFeatures.supports_explain_analyze   s0    // 
4??3P3P U
 4
 	
r   c                     1 SknU R                   R                  (       d+  U R                   R                  S:  a  UR                  S5        U$ )N>   JSONTEXTTRADITIONALre   TREE)r   r   r%   add)r   formatss     r   supported_explain_formats*DatabaseFeatures.supported_explain_formats  s@     2//DOO4Q4Q V
 5

 KKr   c                      U R                   S:g  $ )z9
All storage engines except MyISAM support transactions.
rH   rI   r   s    r   supports_transactions&DatabaseFeatures.supports_transactions  s    
 ))X55r   c                 4    U R                   R                  S   $ )Nlower_case_table_namesr:   r   s    r   ignores_table_name_case(DatabaseFeatures.ignores_table_name_case  s    001IJJr   c                 8    U R                   R                  (       + $ rC   r   r   s    r   supports_default_in_lead_lag-DatabaseFeatures.supports_default_in_lead_lag  s     ??3333r   c                 R    U R                   R                  (       a  U R                  $ g)NT)r   r   rk   r   s    r   can_introspect_json_field*DatabaseFeatures.can_introspect_json_field  s    ??++888r   c                     U R                   S:w  a  gU R                  R                  (       a  U R                  R                  S:  $ g)NInnoDBF)r
   r   T)r<   r   r   r%   r   s    r   supports_index_column_ordering/DatabaseFeatures.supports_index_column_ordering$  s8    %%1??++??00G;;r   c                     U R                   R                  (       + =(       a/    U R                  S:g  =(       a    U R                   R                  S:  $ )NrH   r   r      )r   r   r<   r%   r   s    r   supports_expression_indexes,DatabaseFeatures.supports_expression_indexes,  sC     000 <**h6<--;	
r   c                 r    U R                   R                  nU=(       d    U R                   R                  S:  $ )Nr0   r$   r   
is_mariadbs     r   supports_select_intersection-DatabaseFeatures.supports_select_intersection4  s+    __55
HT__::jHHr   r   c                 l    U R                   R                  (       a  U R                   R                  S:  $ g)Nr-   Tr$   r   s    r   can_rename_index!DatabaseFeatures.can_rename_index=  s'    ??++??00J>>r   c                 l    U R                   R                  (       a  gU R                   R                  S:  $ )NTr   r$   r   s    r   supports_expression_defaults-DatabaseFeatures.supports_expression_defaultsC  ri   r   c                 r    U R                   R                  nU=(       a    U R                   R                  S:  $ )N)r
   r   r$   r   s     r   has_native_uuid_field&DatabaseFeatures.has_native_uuid_fieldI  s+    __55
Fdoo;;wFFr   c                 l    U R                   R                  (       a  SU R                   R                  ;  $ g)Nr/   T)r   r   r4   r   s    r   allows_group_by_selected_pks-DatabaseFeatures.allows_group_by_selected_pksN  s'    ??++'t/G/GGGr   )J__name__
__module____qualname____firstlineno__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_templater6   r<   r@   rD   rJ   rV   rZ   propertyoperator
attrgetter can_return_rows_from_bulk_insertr]   ra   rg    supports_table_check_constraintsrk   rn   rq   r3   r}   r   r   r   r   r   r   r   supports_select_differencer   r   r   r   __static_attributes____classcell__)rW   s   @r   r   r      sf    $&+# #' "'%*"(-%481#$(!,0)#( *.' $).&0,0,40  % #'&C#',$(,%)-&  
 
$ /O Ob K K C C 0 0 6 6 
 
 0 0 (0<=($ J J E E ; ;
 (0?@($ ; ;
  
 4 4 
 
 
 
 6 6 K K 4 4  
   
 
 I I "*:;"  
 ; ;
 G G  r   r   )r    django.db.backends.base.featuresr   django.utils.functionalr   r   r   r   r   <module>r      s     A 3K+ Kr   