o
    øÇ[hx+  ã                   @   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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¡ƒZ0e"dd„ ƒZ1e"dd„ ƒZ2e"dd „ ƒZ3e-e. /d!¡ƒZ4e"d"d#„ ƒZ5e"d$d%„ ƒZ6e"d&d'„ ƒZ7e"d(d)„ ƒZ8e"d*d+„ ƒZ9e"d,d-„ ƒZ:e"d.d/„ ƒZ;e"d0d1„ ƒZ<e"d2d3„ ƒZ=e"d4d5„ ƒZ>e"d6d7„ ƒZ?e"d8d9„ ƒZ@e-e. /d:¡ƒZAe"d;d<„ ƒZBe"d=d>„ ƒZCe"d?d@„ ƒZDe"dAdB„ ƒZE‡  ZFS )CÚ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                 C   s   | j jrdS dS )N)é
   é   )é   r   é   ©Ú
connectionÚmysql_is_mariadb©Úselfr   r   úˆ/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/django/db/backends/mysql/features.pyÚminimum_database_version:   s   z)DatabaseFeatures.minimum_database_versionc                 C   s   dddddœS )NZutf8mb4_general_ciZutf8mb4_esperanto_ciZutf8mb4_swedish_ci)ÚciZnon_defaultZ
swedish_ciZvirtualr   r   r   r   r   Útest_collationsA   s
   üz DatabaseFeatures.test_collationszUTC_TIMESTAMP(6)c                 C   sª   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 r8| ddhi¡ | j jdk rF| ddhi¡ | j jsS| 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>   zGupdate.tests.AdvancedTests.test_update_ordered_by_inline_m2m_annotationz@update.tests.AdvancedTests.test_update_ordered_by_m2m_annotationzEupdate.tests.AdvancedTests.test_update_ordered_by_m2m_annotation_desc)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.©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   Úmysql_versionÚupdateÚsupports_explain_analyzeÚsql_mode)r   Úskipsr   r   r   Údjango_test_skipsL   s^   ýÿÿðÿÿÿÿÿÿÿþÿ	ÿþÿ	ýþÿz"DatabaseFeatures.django_test_skipsc                 C   ó   | j jd S )zGInternal method used in Django tests. Don't rely on this from your codeZdefault_storage_engine©r   Z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.
        Z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S ©Nr
   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 )NZ	TextFieldZIntegerFieldZBigIntegerFieldZ	CharField)ZBinaryFieldZBooleanFieldZDurationFieldZGenericIPAddressField)ÚsuperÚintrospected_field_typesr   ©Ú	__class__r   r   r,   °   s   ÿûz)DatabaseFeatures.introspected_field_typesc                 C   r"   r#   r
   r   r   r   r   Úcan_return_columns_from_insertº   r%   z/DatabaseFeatures.can_return_columns_from_insertr/   c                 C   r   )NÚhas_zoneinfo_databaser   r   r   r   r   r0   Â   ó   z&DatabaseFeatures.has_zoneinfo_databasec                 C   r   )NZsql_auto_is_nullr   r   r   r   r   Úis_sql_auto_is_null_enabledÆ   r1   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   r   Ú!supports_column_check_constraintsÊ   ó   z2DatabaseFeatures.supports_column_check_constraintsr8   c                 C   r3   r4   r7   r   r   r   r   Ú can_introspect_check_constraintsÔ   r9   z1DatabaseFeatures.can_introspect_check_constraintsc                 C   ó   | j jr
| j jdkS dS )N)r   é   Tr7   r   r   r   r   Ú!has_select_for_update_skip_lockedÚ   ó   z2DatabaseFeatures.has_select_for_update_skip_lockedc                 C   ó
   | j j S r#   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   é   r7   r   r   r   r   r   ä   s   z)DatabaseFeatures.supports_explain_analyzec                 C   s*   h d£}| j js| j jdkr| d¡ |S )N>   ZTRADITIONALZTEXTÚJSONr5   ZTREE)r   r   r   Úadd)r   Úformatsr   r   r   Úsupported_explain_formatsì   s   
z*DatabaseFeatures.supported_explain_formatsc                 C   r&   )zI
        All storage engines except MyISAM support transactions.
        r'   r(   r   r   r   r   Úsupports_transactionsù   s   
z&DatabaseFeatures.supports_transactionsc                 C   r   )NZlower_case_table_namesr   r   r   r   r   Úignores_table_name_case   r1   z(DatabaseFeatures.ignores_table_name_casec                 C   r?   r#   r
   r   r   r   r   Úsupports_default_in_lead_lag  r*   z-DatabaseFeatures.supports_default_in_lead_lagc                 C   s   | j jr| jS dS )NT)r   r   r:   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 dS )NZInnoDBF)r   r   T)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 )Nr'   ©r   r   é   )r   r   r    r   r   r   r   r   Úsupports_expression_indexes  s
   
ÿ
ýz,DatabaseFeatures.supports_expression_indexesc                 C   s   | j j}|p| j jdkS )Nr   r7   ©r   Z
is_mariadbr   r   r   Úsupports_select_intersection  ó   z-DatabaseFeatures.supports_select_intersectionrO   c                 C   r;   )Nr   Tr7   r   r   r   r   Úcan_rename_index(  r>   z!DatabaseFeatures.can_rename_indexc                 C   r3   )NTrK   r7   r   r   r   r   Úsupports_expression_defaults.  r9   z-DatabaseFeatures.supports_expression_defaultsc                 C   s   | j j}|o| j jdkS )N)r   é   r7   rN   r   r   r   Úhas_native_uuid_field4  rP   z&DatabaseFeatures.has_native_uuid_fieldc                 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_pks9  r>   z-DatabaseFeatures.allows_group_by_selected_pks)GÚ__name__Ú
__module__Ú__qualname__Zempty_fetchmany_valueZrelated_fields_match_typeZallow_sliced_subqueries_with_inZhas_select_for_updateZhas_select_for_update_nowaitZsupports_forward_referencesZsupports_regex_backreferencingZ!supports_date_lookup_using_stringZsupports_timezonesZ-requires_explicit_null_ordering_when_groupingZatomic_transactionsZcan_clone_databasesZsupports_commentsZsupports_comments_inlineZsupports_temporal_subtractionZ%supports_slicing_ordering_in_compoundZsupports_index_on_text_fieldZsupports_over_clauseZ#supports_frame_range_fixed_distanceZsupports_update_conflictsZ"delete_can_self_reference_subqueryZ(create_test_procedure_without_params_sqlZ(create_test_procedure_with_int_param_sqlZsupports_partial_indexesZcollate_as_index_expressionZinsert_test_table_with_defaultsZ supports_order_by_nulls_modifierZorder_by_nulls_firstZsupports_logical_xorZ!supports_stored_generated_columnsZ"supports_virtual_generated_columnsr   r   r   Ztest_now_utc_templater   r    r!   r$   r)   r,   r/   ÚpropertyÚoperatorÚ
attrgetterZ can_return_rows_from_bulk_insertr0   r2   r8   Z supports_table_check_constraintsr:   r=   r@   r   rE   rF   rG   rH   rI   rJ   rM   rO   Zsupports_select_differencerQ   rR   rT   rU   Ú__classcell__r   r   r-   r   r      sÄ    


M



	
ÿ


ÿ











ÿ


r   )rZ   Z django.db.backends.base.featuresr   Zdjango.utils.functionalr   r   r   r   r   r   Ú<module>   s    