o
    lf/                     @   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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# Z/e'e()d$Z0ed%d& Z1ed'd( Z2ed)d* Z3ed+d, Z4ed-d. Z5ed/d0 Z6ed1d2 Z7e'e()d3Z8e'e()d3Z9ed4d5 Z:ed6d7 Z;ed8d9 Z<ed:d; Z=ed<d= Z>ed>d? Z?e'e()d@Z@edAdB ZAedCdD ZB  ZCS )E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   e/var/www/ticemtrilhas/avaliacao_env/lib/python3.10/site-packages/django/db/backends/mysql/features.pyminimum_database_version9   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      utf8mb3_general_ci_esperanto_ci_swedish_ci)cinon_default
swedish_cir
   r   mysql_version)r   charsetr   r   r   test_collations@   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 | j jro| j jdkro|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   skipsr   r   r   django_test_skipsT   st   



	
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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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   rB      s   z)DatabaseFeatures.introspected_field_typesc                 C   r1   )N)r   r!   r   r   r   r   r   r   can_return_columns_from_insert   r3   z/DatabaseFeatures.can_return_columns_from_insertrE   c                 C   r*   )Nhas_zoneinfo_databaser,   r   r   r   r   rF         z&DatabaseFeatures.has_zoneinfo_databasec                 C   r*   )Nsql_auto_is_nullr,   r   r   r   r   is_sql_auto_is_null_enabled   rG   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_clauserK   c                 C   rJ   NTr   r      r   r   r   r   r   !supports_column_check_constraints   rL   z2DatabaseFeatures.supports_column_check_constraintsrP   c                 C   rJ   rM   r   r   r   r   r    can_introspect_check_constraints   rL   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   rJ   )NTrR   r   r   r   r   r   has_select_for_update_nowait  rL   z-DatabaseFeatures.has_select_for_update_nowaitc                 C   s   | j j o
| j jdkS )NrR   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&     r3   z)DatabaseFeatures.supports_explain_analyzec                 C   s*   h d}| j js| j jdkr|d |S )N>   JSONTEXTTRADITIONALrN   TREE)r
   r   r   add)r   formatsr   r   r   supported_explain_formats  s   
z*DatabaseFeatures.supported_explain_formatsc                 C   r4   )zI
        All storage engines except MyISAM support transactions.
        r5   r6   r   r   r   r   supports_transactions'  s   
z&DatabaseFeatures.supports_transactionsr_   c                 C   r*   )Nlower_case_table_namesr,   r   r   r   r   ignores_table_name_case1  rG   z(DatabaseFeatures.ignores_table_name_casec                 C   s
   | j j S )Nr	   r   r   r   r   supports_default_in_lead_lag5  r8   z-DatabaseFeatures.supports_default_in_lead_lagc                 C   s   | j jr| jS dS )NT)r
   r   rQ   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 )NInnoDBF)r   r   rR   )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 )Nr5   )r   r      )r
   r   r.   r   r   r   r   r   supports_expression_indexesH  s
   

z,DatabaseFeatures.supports_expression_indexesc                 C   s   | j j}|p| j jdkS )N)r   r      r   )r   
is_mariadbr   r   r   supports_select_intersectionP  s   z-DatabaseFeatures.supports_select_intersectionrj   c                 C   s   | j jr
| j jdkS dS )Nr    Tr   r   r   r   r   can_rename_indexY     z!DatabaseFeatures.can_rename_indexc                 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_pks_  rl   z-DatabaseFeatures.allows_group_by_selected_pks)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)   r.   r0   r2   r7   rB   rE   propertyoperator
attrgetter can_return_rows_from_bulk_insertrF   rI   rK   #supports_frame_range_fixed_distancerP    supports_table_check_constraintsrQ   rT   rU   rV   r&   r^   r_   uses_savepointscan_release_savepointsra   rb   rc   re   rg   rj   supports_select_differencerk   rm   __classcell__r   r   rC   r   r      s    


X



	


















r   )r    django.db.backends.base.featuresr   django.utils.functionalr   r   r   r   r   r   <module>   s    