
    Evg.                     B    d dl Z d dlmZ d dlmZ  G d de          ZdS )    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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/j0        d                    Z1e#d             Z2e#d             Z3e#d             Z4 e. e/j0        d                    Z5e#d             Z6e#d             Z7e#d             Z8e#d             Z9e#d             Z:e#d             Z;e#d             Z<e#d             Z=e#d             Z>e#d              Z?e#d!             Z@e#d"             ZA e. e/j0        d#                    ZBe#d$             ZCe#d%             ZDe#d&             ZEe#d'             ZF xZGS )(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                 "    | j         j        rdS dS )N)
      )   r      
connectionmysql_is_mariadbselfs    ^/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/backends/mysql/features.pyminimum_database_versionz)DatabaseFeatures.minimum_database_versionA   s    ?+ 	7:    c                     d}| j         j        r| j         j        dk    s| j         j        s| j         j        dk    rd}| d| d| d| dd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_collationsz DatabaseFeatures.test_collationsH   s    O,	 -880 9 -;;  G)))%444$111!000	
 
 	
r   zUTC_TIMESTAMP(6)c                    ddh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 r|                    ddhi           | j         j        dk     r|                    ddhi           | j         j        s|                    d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_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_skipsz"DatabaseFeatures.django_test_skips]   s   ++, HFE N
 W@     )
 
6 ?+ 
	O)J66LL@EC   , 	LL;N>    4?#;;;LLOFQ   ?(:55LL%,'   / 	LLPQ 
 
 
 r   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   s    r   _mysql_storage_enginez&DatabaseFeatures._mysql_storage_engine   s     01IJJr   c                     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   r1   r   s    r   allows_auto_pk_0z!DatabaseFeatures.allows_auto_pk_0   s     '$/*BBBr   c                     | j         j        S Nr   r   s    r   update_can_self_selectz'DatabaseFeatures.update_can_self_select       //r   c                     | j         dk    S )z-Confirm support for introspected foreign keysMyISAMr8   r   s    r   can_introspect_foreign_keysz,DatabaseFeatures.can_introspect_foreign_keys   s     )X55r   c                 <    i t                      j        dddddS )N	TextFieldIntegerFieldBigIntegerField	CharField)BinaryFieldBooleanFieldDurationFieldGenericIPAddressField)superintrospected_field_types)r   	__class__s    r   rN   z)DatabaseFeatures.introspected_field_types   s7    
gg.
&*.%0
 
 
 	
r   c                     | j         j        S r=   r   r   s    r   can_return_columns_from_insertz/DatabaseFeatures.can_return_columns_from_insert   r?   r   rQ   c                 &    | j         j        d         S )Nhas_zoneinfo_databaser6   r   s    r   rS   z&DatabaseFeatures.has_zoneinfo_database   s    01HIIr   c                 &    | j         j        d         S )Nsql_auto_is_nullr6   r   s    r   is_sql_auto_is_null_enabledz,DatabaseFeatures.is_sql_auto_is_null_enabled   s    01CDDr   c                 >    | j         j        rdS | j         j        dk    S NTr   r      r"   r   s    r   !supports_column_check_constraintsz2DatabaseFeatures.supports_column_check_constraints   $    ?+ 	4,
::r   r[   c                 >    | j         j        rdS | j         j        dk    S rX   r"   r   s    r    can_introspect_check_constraintsz1DatabaseFeatures.can_introspect_check_constraints   r\   r   c                 >    | j         j        r| j         j        dk    S dS )Nr   Tr"   r   s    r   !has_select_for_update_skip_lockedz2DatabaseFeatures.has_select_for_update_skip_locked   s$    ?+ 	<?0G;;tr   c                     | j         j         S r=   r   r   s    r   has_select_for_update_ofz)DatabaseFeatures.has_select_for_update_of   s    ?333r   c                 :    | j         j        p| j         j        dk    S )N)r   r      r"   r   s    r   r0   z)DatabaseFeatures.supports_explain_analyze   s&    / 
4?3P U
 4
 	
r   c                 p    h d}| j         j        s%| j         j        dk    r|                    d           |S )N>   JSONTEXTTRADITIONALrY   TREE)r   r   r#   add)r   formatss     r   supported_explain_formatsz*DatabaseFeatures.supported_explain_formats  sL     211/ 	 DO4Q V
 5
 5

 KKr   c                     | j         dk    S )zI
        All storage engines except MyISAM support transactions.
        rA   rB   r   s    r   supports_transactionsz&DatabaseFeatures.supports_transactions  s    
 )X55r   c                 &    | j         j        d         S )Nlower_case_table_namesr6   r   s    r   ignores_table_name_casez(DatabaseFeatures.ignores_table_name_case  s    01IJJr   c                     | j         j         S r=   r   r   s    r   supports_default_in_lead_lagz-DatabaseFeatures.supports_default_in_lead_lag  s     ?333r   c                 ,    | j         j        r| j        S dS )NT)r   r   r^   r   s    r   can_introspect_json_fieldz*DatabaseFeatures.can_introspect_json_field  s    ?+ 	988tr   c                 X    | j         dk    rdS | j        j        r| j        j        dk    S dS )NInnoDBF)r	   r   T)r8   r   r   r#   r   s    r   supports_index_column_orderingz/DatabaseFeatures.supports_index_column_ordering$  s7    %115?+ 	<?0G;;tr   c                 R    | j         j         o| j        dk    o| j         j        dk    S )NrA   r   r      )r   r   r8   r#   r   s    r   supports_expression_indexesz,DatabaseFeatures.supports_expression_indexes,  s6     00 <*h6<-;	
r   c                 >    | j         j        }|p| j         j        dk    S )Nr-   r"   r   
is_mariadbs     r   supports_select_intersectionz-DatabaseFeatures.supports_select_intersection4  s!    _5
HT_:jHHr   r   c                 >    | j         j        r| j         j        dk    S dS )Nr*   Tr"   r   s    r   can_rename_indexz!DatabaseFeatures.can_rename_index=  s$    ?+ 	??0J>>tr   c                 >    | j         j        rdS | j         j        dk    S )NTrz   r"   r   s    r   supports_expression_defaultsz-DatabaseFeatures.supports_expression_defaultsC  r\   r   c                 >    | j         j        }|o| j         j        dk    S )N)r	      r"   r~   s     r   has_native_uuid_fieldz&DatabaseFeatures.has_native_uuid_fieldI  s!    _5
Fdo;wFFr   c                 :    | j         j        rd| j         j        vS dS )Nr,   T)r   r   r1   r   s    r   allows_group_by_selected_pksz-DatabaseFeatures.allows_group_by_selected_pksN  s%    ?+ 	H't/GGGtr   )H__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,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_templater3   r8   r;   r>   rC   rN   rQ   propertyoperator
attrgetter can_return_rows_from_bulk_insertrS   rV   r[    supports_table_check_constraintsr^   r`   rb   r0   rl   rn   rq   rs   ru   rx   r|   r   supports_select_differencer   r   r   r   __classcell__)rO   s   @r   r   r      ss        $&+# #' "'%*"(-%481#$(!,0)#( *.' $).&0,0,40  % #'&C#',$(,%)-&  _ 
 
 _
$ /O O _Ob K K _K C C _C 0 0 _0 6 6 _6 
 
 
 
 _
 0 0 _0 (0x<==( ($ J J _J E E _E ; ; _;
 (0x?@@( ($ ; ; _;
   _
 4 4 _4 
 
 _
 
 
 _
 6 6 _6 K K _K 4 4 _4   _
   _ 
 
 _
 I I _I "*:;;" "   _
 ; ; _;
 G G _G   _    r   r   )r    django.db.backends.base.featuresr   django.utils.functionalr   r   r   r   r   <module>r      sq     A A A A A A 3 3 3 3 3 3K K K K K+ K K K K Kr   