
    Hwg/                     :    d dl Z d dlmZ d dlmZ  G d de      Zy)    N)BaseDatabaseFeatures)cached_propertyc                   `    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ed        Zed        Zd	Zed
        Z ed        Z!ed        Z"ed        Z#ed        Z$e fd       Z%ed        Z& e' e(jR                  d            Z*ed        Z+ed        Z,ed        Z- e' e(jR                  d            Z.ed        Z/ e' e(jR                  d            Z0ed        Z1ed        Z2ed        Z3ed        Z4ed        Z5ed        Z6ed        Z7 e' e(jR                  d            Z8 e' e(jR                  d            Z9ed         Z:ed!        Z;ed"        Z<ed#        Z=ed$        Z>ed%        Z? e' e(jR                  d&            Z@ed'        ZAed(        ZB xZCS ))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                 2    | j                   j                  ryy)N)
      )   
connectionmysql_is_mariadbselfs    X/var/www/horilla/myenv/lib/python3.12/site-packages/django/db/backends/mysql/features.pyminimum_database_versionz)DatabaseFeatures.minimum_database_version9   s    ??++    c                     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_cir   r   mysql_version)r   charsets     r   test_collationsz DatabaseFeatures.test_collations@   st    OO,,--800--;  GI[)%Ym4$I[1
 	
r   zUTC_TIMESTAMP(6)c                 t   ddhddhdhdhddhd	}| j                   j                  r6d
| j                   j                  cxk  rdk  rn n|j                  ddhi       | j                   j                  r6d| j                   j                  cxk  rdk  rn n|j                  ddhi       | j                  s|j                  ddhi       d| j                   j
                  v r|j                  ddhi       | j                   j                  r-| j                   j                  dk\  r|j                  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_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_paramszALTER TABLE ... RENAME COLUMN statement doesn't rename inline constraints on MariaDB 10.5.2+, this is fixed in Django 5.0+ (#34320).zGschema.tests.SchemaTests.test_rename_field_with_check_to_truncated_name)r   r   r!   updatesupports_explain_analyzesql_mode)r   skipss     r   django_test_skipsz"DatabaseFeatures.django_test_skipsT   s   ++, HFE N
 W@
?R )
4 ??++ 1
 OO))	17 -7	17
 LL@EC ??++ 1
 OO))	14 -4	14
 LL@DC ,,LL;N>  4??#;#;;LLOFQ ??++0M0M R
 1

 LL I"	 r   c                 4    | 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   s    r   _mysql_storage_enginez&DatabaseFeatures._mysql_storage_engine   s     001IJJr   c                 2    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   s    r   allows_auto_pk_0z!DatabaseFeatures.allows_auto_pk_0   s     '$//*B*BBBr   c                 d    | j                   j                  xr | j                   j                  dk\  S )N)r	   r%   r(   r    r   s    r   update_can_self_selectz'DatabaseFeatures.update_can_self_select   0    // 
DOO4Q4Q V
 5
 	
r   c                      | j                   dk7  S )z-Confirm support for introspected foreign keysMyISAMr4   r   s    r   can_introspect_foreign_keysz,DatabaseFeatures.can_introspect_foreign_keys   s     ))X55r   c                 *    i t         |   dddddS )N	TextFieldIntegerFieldBigIntegerField	CharField)BinaryFieldBooleanFieldDurationFieldGenericIPAddressField)superintrospected_field_types)r   	__class__s    r   rI   z)DatabaseFeatures.introspected_field_types   s+    
g.
&*.%0
 	
r   c                 d    | j                   j                  xr | j                   j                  dk\  S )N)r	   r'   r   r    r   s    r   can_return_columns_from_insertz/DatabaseFeatures.can_return_columns_from_insert   r:   r   rL   c                 4    | j                   j                  d   S )Nhas_zoneinfo_databaser2   r   s    r   rN   z&DatabaseFeatures.has_zoneinfo_database   s    001HIIr   c                 4    | j                   j                  d   S )Nsql_auto_is_nullr2   r   s    r   is_sql_auto_is_null_enabledz,DatabaseFeatures.is_sql_auto_is_null_enabled   s    001CDDr   c                 b    | j                   j                  ry| j                   j                  dk\  S )NT)r   r   r(   r    r   s    r   supports_over_clausez%DatabaseFeatures.supports_over_clause   '    ??++,,	99r   rS   c                 b    | j                   j                  ry| j                   j                  dk\  S NTr   r      r    r   s    r   !supports_column_check_constraintsz2DatabaseFeatures.supports_column_check_constraints   '    ??++,,
::r   rY   c                 b    | j                   j                  ry| j                   j                  dk\  S rV   r    r   s    r    can_introspect_check_constraintsz1DatabaseFeatures.can_introspect_check_constraints   rZ   r   c                     | j                   j                  r| j                   j                  dk\  S | j                   j                  dk\  S )Nr   r   r      r    r   s    r   !has_select_for_update_skip_lockedz2DatabaseFeatures.has_select_for_update_skip_locked   s9    ??++??00G;;,,	99r   c                 b    | j                   j                  ry| j                   j                  dk\  S )NTr^   r    r   s    r   has_select_for_update_nowaitz-DatabaseFeatures.has_select_for_update_nowait  rT   r   c                 f    | j                   j                   xr | j                   j                  dk\  S )Nr^   r    r   s    r   has_select_for_update_ofz)DatabaseFeatures.has_select_for_update_of  s0     000 ;--:	
r   c                 d    | j                   j                  xs | j                   j                  dk\  S )N)r   r      r    r   s    r   r,   z)DatabaseFeatures.supports_explain_analyze  s0    // 
4??3P3P U
 4
 	
r   c                     h d}| j                   j                  s*| j                   j                  dk\  r|j                  d       |S )N>   JSONTEXTTRADITIONALrW   TREE)r   r   r!   add)r   formatss     r   supported_explain_formatsz*DatabaseFeatures.supported_explain_formats  s@     2//DOO4Q4Q V
 5

 KKr   c                      | j                   dk7  S )zI
        All storage engines except MyISAM support transactions.
        r<   r=   r   s    r   supports_transactionsz&DatabaseFeatures.supports_transactions'  s    
 ))X55r   rp   c                 4    | j                   j                  d   S )Nlower_case_table_namesr2   r   s    r   ignores_table_name_casez(DatabaseFeatures.ignores_table_name_case1  s    001IJJr   c                 0    | j                   j                   S )Nr   r   s    r   supports_default_in_lead_lagz-DatabaseFeatures.supports_default_in_lead_lag5  s     ??3333r   c                 H    | j                   j                  r| j                  S y)NT)r   r   r\   r   s    r   can_introspect_json_fieldz*DatabaseFeatures.can_introspect_json_field:  s    ??++888r   c                     | j                   dk7  ry| j                  j                  r| j                  j                  dk\  S | j                  j                  dk\  S )NInnoDBF)r	   r   r^   )r4   r   r   r!   r   s    r   supports_index_column_orderingz/DatabaseFeatures.supports_index_column_ordering@  sJ    %%1??++??00G;;,,	99r   c                     | j                   j                   xr* | j                  dk7  xr | j                   j                  dk\  S )Nr<   )r   r      )r   r   r4   r!   r   s    r   supports_expression_indexesz,DatabaseFeatures.supports_expression_indexesH  sC     000 <**h6<--;	
r   c                 h    | j                   j                  }|xs | j                   j                  dk\  S )N)r   r      r    )r   
is_mariadbs     r   supports_select_intersectionz-DatabaseFeatures.supports_select_intersectionP  s+    __55
HT__::jHHr   r   c                 b    | j                   j                  r| j                   j                  dk\  S y)Nr&   Tr    r   s    r   can_rename_indexz!DatabaseFeatures.can_rename_indexY  s'    ??++??00J>>r   c                 `    | j                   j                  rd| j                   j                  vS y)Nr*   T)r   r   r-   r   s    r   allows_group_by_selected_pksz-DatabaseFeatures.allows_group_by_selected_pks_  s'    ??++'t/G/GGGr   )D__name__
__module____qualname__empty_fetchmany_value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atomic_transactionscan_clone_databasessupports_commentssupports_comments_inlinesupports_temporal_subtraction%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,create_test_table_with_composite_primary_keysupports_partial_indexescollate_as_index_expression supports_order_by_nulls_modifierorder_by_nulls_firstsupports_logical_xorr   r   r#   test_now_utc_templater/   r4   r7   r9   r>   rI   rL   propertyoperator
attrgetter can_return_rows_from_bulk_insertrN   rQ   rS   #supports_frame_range_fixed_distancerY    supports_table_check_constraintsr\   r`   rb   rd   r,   rn   rp   uses_savepointscan_release_savepointsrs   ru   rw   rz   r}   r   supports_select_differencer   r   __classcell__)rJ   s   @r   r   r      s    $&+# "'%*"(-%481#$(!,0)#(  $0,0,40  % #'',$  
 
" /V Vp K K C C 
 
 6 6 
 
 
 
 (0<=($ J J E E : :
 +323+' ; ;
 (0?@($ ; ;
 : :
 : :
 
 
 
 
 
 
 6 6 2x223JKLO%&9h&9&9:Q&RSK K 4 4  
 : : 
 
 I I "*:;"  
  r   r   )r    django.db.backends.base.featuresr   django.utils.functionalr   r   r   r   r   <module>r      s     A 3\+ \r   