
v^                 @   sF   d  d l  Z  d  d l m Z d  d l m Z Gd d   d e  Z d S)    N)BaseDatabaseFeatures)cached_propertyc               @   s  e  Z d  Z f  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 d d h Z" d Z# e$ d	 d
    Z% e$ d d    Z& e$ d d    Z' e$ d d    Z( e$ d d    Z) e$ d d    Z* e+ e, j- d   Z. e$ d d    Z/ e$ d d    Z0 e$ d d    Z1 e$ d d    Z2 e$ d d    Z3 e$ d  d!    Z4 e$ d" d#    Z5 d$ S)%DatabaseFeaturesFTZIntegerFieldz
        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JSONZTEXTZTRADITIONALc          	   C   s:   |  j  j     } | j d  | j   } Wd QRX| d S)zGInternal method used in Django tests. Don't rely on this from your codezGSELECT ENGINE FROM INFORMATION_SCHEMA.ENGINES WHERE SUPPORT = 'DEFAULT'Nr   )
connectioncursorexecutefetchone)selfr   result r   C/tmp/pip-build-8lau8j11/django/django/db/backends/mysql/features.py_mysql_storage_engine9   s    z&DatabaseFeatures._mysql_storage_enginec             C   s   |  j  d k S)z-Confirm support for introspected foreign keysMyISAM)r   )r	   r   r   r   can_introspect_foreign_keysA   s    z,DatabaseFeatures.can_introspect_foreign_keysc          	   C   s>   |  j  j   ( } | j d  | j   d d  k	 SWd  QRXd  S)Nz6SELECT CONVERT_TZ('2001-01-01 01:00:00', 'UTC', 'UTC')r   )r   r   r   r   )r	   r   r   r   r   has_zoneinfo_databaseF   s    z&DatabaseFeatures.has_zoneinfo_databasec          	   C   sJ   |  j  j   4 } | j d  | j   } | o> | d d k SWd  QRXd  S)NzSELECT @@SQL_AUTO_IS_NULLr      )r   r   r   r   )r	   r   r
   r   r   r   is_sql_auto_is_null_enabledN   s    z,DatabaseFeatures.is_sql_auto_is_null_enabledc             C   s,   |  j  j r |  j  j d k S|  j  j d k S)N
         r   )r   r   )r   r   r   )r   mysql_is_mariadbmysql_version)r	   r   r   r   supports_over_clauseU   s    z%DatabaseFeatures.supports_over_clausec             C   s,   |  j  j r |  j  j d k S|  j  j d k S)	Nr   r   r   r   r      )r   r   r   )r   r   r   )r   r   r   )r	   r   r   r   !supports_column_check_constraints[   s    z2DatabaseFeatures.supports_column_check_constraintsr   c             C   sJ   |  j  j r: |  j  j } | d k r0 | d	 k  p9 | d
 k S|  j  j d k S)Nr   r         r   r   r   )r   r   r   )r   r   )r   r   r   )r   r   r   )r   r   r   )r	   versionr   r   r    can_introspect_check_constraintsc   s    "z1DatabaseFeatures.can_introspect_check_constraintsc             C   s   |  j  j o |  j  j d k S)Nr   r   r   )r   r   r   )r   r   r   )r	   r   r   r   !has_select_for_update_skip_lockedj   s    z2DatabaseFeatures.has_select_for_update_skip_lockedc             C   s,   |  j  j r |  j  j d k S|  j  j d k S)Nr   r   r   r   r   )r   r   r   )r   r   r   )r   r   r   )r	   r   r   r   has_select_for_update_nowaitn   s    z-DatabaseFeatures.has_select_for_update_nowaitc             C   s   |  j  j o |  j  j d k  S)N      )r!   r"   )r   r   r   )r	   r   r   r   needs_explain_extendedt   s    z'DatabaseFeatures.needs_explain_extendedc             C   s   |  j  d k S)zI
        All storage engines except MyISAM support transactions.
        r   )r   )r	   r   r   r   supports_transactionsy   s    z&DatabaseFeatures.supports_transactionsc          	   C   sJ   |  j  j   4 } | j d  | j   } | o> | d d k SWd  QRXd  S)NzSELECT @@LOWER_CASE_TABLE_NAMESr   )r   r   r   r   )r	   r   r
   r   r   r   ignores_table_name_case   s    z(DatabaseFeatures.ignores_table_name_casec             C   s   |  j  j S)N)r   r   )r	   r   r   r   supports_default_in_lead_lag   s    z-DatabaseFeatures.supports_default_in_lead_lagN)6__name__
__module____qualname__Zempty_fetchmany_valueZupdate_can_self_selectZallows_group_by_pkZrelated_fields_match_typeZallow_sliced_subqueries_with_inZhas_select_for_updateZsupports_forward_referencesZsupports_regex_backreferencingZ!supports_date_lookup_using_stringZcan_introspect_autofieldZcan_introspect_binary_fieldZcan_introspect_duration_fieldZ"can_introspect_small_integer_fieldZ%can_introspect_positive_integer_fieldZintrospected_boolean_field_typeZsupports_index_column_orderingZsupports_timezonesZ-requires_explicit_null_ordering_when_groupingZallows_auto_pk_0Zcan_release_savepointsZatomic_transactionsZcan_clone_databasesZsupports_temporal_subtractionZsupports_select_intersectionZsupports_select_differenceZ%supports_slicing_ordering_in_compoundZsupports_index_on_text_fieldZhas_case_insensitive_likeZ(create_test_procedure_without_params_sqlZ(create_test_procedure_with_int_param_sqlZ!db_functions_convert_bytes_to_strZsupported_explain_formatsZsupports_partial_indexesr   r   r   r   r   r   r   propertyoperator
attrgetterZ supports_table_check_constraintsr   r   r    r#   r$   r%   r&   r   r   r   r   r      s^   r   )r+   Z django.db.backends.base.featuresr   Zdjango.utils.functionalr   r   r   r   r   r   <module>   s   