
    `?i'                     :    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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        Z0 e1 e2jf                  d            Z4e&d        Z5e&d        Z6e&d        Z7 e1 e2jf                  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        ZAe&d        ZBe&d         ZC e1 e2jf                  d!            ZDe&d"        ZEe&d#        ZFe&d$        ZGe&d%        ZH xZIS )&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                 2    | j                   j                  ryy)N)
      )   r      
connectionmysql_is_mariadbselfs    s/home/cursorai/projects/django-cronjob-utils/venv/lib/python3.12/site-packages/django/db/backends/mysql/features.pyminimum_database_versionz)DatabaseFeatures.minimum_database_version?   s    ??++    c                     dddddS )Nutf8mb4_general_ciutf8mb4_esperanto_ciutf8mb4_swedish_ci)cinon_default
swedish_civirtualr   r   s    r   test_collationsz DatabaseFeatures.test_collationsF   s     '1.-	
 	
r   zUTC_TIMESTAMP(6)c                    ddhdhdhh dd}| j                   s|j                  ddhi       | j                  j                  d	k  r|j                  d
dhi       | j                  j                  s|j                  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.z%MariaDB and MySQL >= 8.0.18 specific.z4queries.test_explain.ExplainTests.test_mysql_analyze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)supports_explain_analyzeupdater   mysql_versionr   )r   skipss     r   django_test_skipsz"DatabaseFeatures.django_test_skipsQ   s    ++, N
 W@ !
. ,,LL;N> ??((:5LL%,' //LLPQ 
 r   c                 4    | j                   j                  d   S )zY
        Internal 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   sql_moder   s    r   allows_auto_pk_0z!DatabaseFeatures.allows_auto_pk_0   s     '$//*B*BBBr   c                 .    | j                   j                  S Nr   r   s    r   update_can_self_selectz'DatabaseFeatures.update_can_self_select       ///r   c                      | j                   dk7  S )z-Confirm support for introspected foreign keysMyISAMr-   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   rD   z)DatabaseFeatures.introspected_field_types   s+    
g.
&*.%0
 	
r   c                 .    | j                   j                  S r3   r   r   s    r   can_return_columns_from_insertz/DatabaseFeatures.can_return_columns_from_insert   r5   r   rG   c                 4    | j                   j                  d   S )Nhas_zoneinfo_databaser+   r   s    r   rI   z&DatabaseFeatures.has_zoneinfo_database   s    001HIIr   c                 4    | j                   j                  d   S )Nsql_auto_is_nullr+   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&   r   s    r   !supports_column_check_constraintsz2DatabaseFeatures.supports_column_check_constraints   '    ??++,,
::r   rR   c                 b    | j                   j                  ry| j                   j                  dk\  S rN   rQ   r   s    r    can_introspect_check_constraintsz1DatabaseFeatures.can_introspect_check_constraints   rS   r   c                 0    | j                   j                   S r3   r   r   s    r   has_select_for_update_ofz)DatabaseFeatures.has_select_for_update_of       ??3333r   c                 d    | j                   j                  xs | j                   j                  dk\  S )N)r   r      rQ   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TRADITIONALrO   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.
        r7   r8   r   s    r   supports_transactionsz&DatabaseFeatures.supports_transactions   s    
 ))X55r   c                 4    | j                   j                  d   S )Nlower_case_table_namesr+   r   s    r   ignores_table_name_casez(DatabaseFeatures.ignores_table_name_case   s    001IJJr   c                 0    | j                   j                   S r3   r   r   s    r   supports_default_in_lead_lagz-DatabaseFeatures.supports_default_in_lead_lag   s     ??3333r   c                 H    | j                   j                  r| j                  S y)NT)r   r   rU   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 y)NInnoDBF)r	   r   T)r-   r   r   r&   r   s    r   supports_index_column_orderingz/DatabaseFeatures.supports_index_column_ordering   s8    %%1??++??00G;;r   c                     | j                   j                   xr* | j                  dk7  xr | j                   j                  dk\  S )Nr7   r   r      )r   r   r-   r&   r   s    r   supports_expression_indexesz,DatabaseFeatures.supports_expression_indexes  sC     000 <**h6<--;	
r   c                 h    | j                   j                  }|xs | j                   j                  dk\  S )Nr"   rQ   r   
is_mariadbs     r   supports_select_intersectionz-DatabaseFeatures.supports_select_intersection  s+    __55
HT__::jHHr   rv   c                 b    | j                   j                  ry| j                   j                  dk\  S )NTrp   rQ   r   s    r   supports_expression_defaultsz-DatabaseFeatures.supports_expression_defaults  rS   r   c                 h    | j                   j                  }|xr | j                   j                  dk\  S )N)r	      rQ   rt   s     r   has_native_uuid_fieldz&DatabaseFeatures.has_native_uuid_field  s+    __55
Fdoo;;wFFr   c                 `    | j                   j                  rd| j                   j                  vS y)NONLY_FULL_GROUP_BYT)r   r   r0   r   s    r   allows_group_by_selected_pksz-DatabaseFeatures.allows_group_by_selected_pks  s'    ??++'t/G/GGGr   c                 0    | j                   j                   S r3   r   r   s    r   supports_any_valuez#DatabaseFeatures.supports_any_value%  rX   r   )J__name__
__module____qualname__empty_fetchmany_valuerelated_fields_match_typeallow_sliced_subqueries_with_inhas_select_for_updatehas_select_for_update_nowait!has_select_for_update_skip_locked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_aggregate_order_by_clause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can_rename_index"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_columnssupports_json_negative_indexingr   r   r   test_now_utc_templater(   r-   r1   r4   r9   rD   rG   propertyoperator
attrgetter can_return_rows_from_bulk_insertrI   rL   rR    supports_table_check_constraintsrU   rW   r$   rb   rd   rg   ri   rk   rn   rr   rv   supports_select_differencerx   r{   r~   r   __classcell__)rE   s   @r   r   r      sf    $&+# #' (,%"'%*"(-%481)-&#$(!,0)#( *.' $).&0,0,  % #'&C#',$(,%)-&&+#  
 
 /6 6p 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  
 4 4r   r   )r    django.db.backends.base.featuresr   django.utils.functionalr   r   r   r   r   <module>r      s     A 3`4+ `4r   