o
    ô<âgê  ã                   @   sP   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 G dd„ deƒZ
dS )é    N)Ú	DataErrorÚInterfaceError)ÚBaseDatabaseFeatures)Úis_psycopg3)Úcached_propertyc                       sx  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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(h d£Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dd	d	d	d
œZ3dZ4dZ5e6dd„ ƒZ7e6dd„ ƒZ8e6dd„ ƒZ9e6dd„ ƒZ:e6‡ fdd„ƒZ;e6dd„ ƒZ<e6dd„ ƒZ=e6dd„ ƒZ>e?e@ Ad¡ƒZBe?e@ Ad¡ƒZCdZDe?e@ Ad¡ƒZE‡  ZFS )ÚDatabaseFeatures)é   Tz°
        CREATE FUNCTION test_procedure () RETURNS void AS $$
        DECLARE
            V_I INTEGER;
        BEGIN
            V_I := 1;
        END;
    $$ LANGUAGE plpgsql;z½
        CREATE FUNCTION test_procedure (P_I INTEGER) RETURNS void AS $$
        DECLARE
            V_I INTEGER;
        BEGIN
            V_I := P_I;
        END;
    $$ LANGUAGE plpgsql;z¸
        CREATE TABLE test_table_composite_pk (
            column_1 INTEGER NOT NULL,
            column_2 INTEGER NOT NULL,
            PRIMARY KEY(column_1, column_2)
        )
    >   ÚXMLÚJSONÚTEXTÚYAMLFÚCzsv-x-icu)ÚdeterministicÚnon_defaultÚ
swedish_ciÚvirtualz(STATEMENT_TIMESTAMP() AT TIME ZONE 'UTC'zINSERT INTO {} DEFAULT VALUESc                 C   sL   dhdhdœ}| j jd  d¡r| dddhi¡ | jr$| d	d
hi¡ |S )NzQindexes.tests.SchemaIndexesNotPostgreSQLTests.test_create_index_ignores_opclassesz2lookup.tests.LookupTests.test_textfield_exact_null)zopclasses are PostgreSQL only.z$PostgreSQL requires casting to text.ÚOPTIONSÚpoolz Pool does implicit health checkszNbackends.base.test_base.ConnectionHealthChecksTests.test_health_checks_enabledz]backends.base.test_base.ConnectionHealthChecksTests.test_set_autocommit_health_checks_enabledz>The actual query cannot be determined for server side bindingsz>backends.base.test_base.ExecuteWrapperTests.test_wrapper_debug)Ú
connectionÚsettings_dictÚgetÚupdateÚuses_server_side_binding)ÚselfÚskips© r   úY/var/www/html/venv/lib/python3.10/site-packages/django/db/backends/postgresql/features.pyÚdjango_test_skipsV   s*   ÿÿû	ýÿÿ
ÿÿÿz"DatabaseFeatures.django_test_skipsc                 C   s   t ƒ }| jr| dh¡ |S )NzOaggregation.tests.AggregateTestCase.test_group_by_nested_expression_with_params)Úsetr   r   )r   Úexpected_failuresr   r   r   Údjango_test_expected_failuresw   s   üÿ	z.DatabaseFeatures.django_test_expected_failuresc                 C   s   | j jd }to| d¡du S )Nr   Úserver_side_bindingT)r   r   r   r   )r   Úoptionsr   r   r   r   †   s   z)DatabaseFeatures.uses_server_side_bindingc                 C   s   t rtdfS tdfS )Nz6PostgreSQL text fields cannot contain NUL (0x00) bytesz6A string literal cannot contain NUL (0x00) characters.)r   r   Ú
ValueError©r   r   r   r   Ú+prohibits_null_characters_in_text_exception‹   s   z<DatabaseFeatures.prohibits_null_characters_in_text_exceptionc                    s   i t ƒ j¥ddddœ¥S )NÚBigIntegerFieldÚIntegerFieldÚSmallIntegerField)ÚPositiveBigIntegerFieldÚPositiveIntegerFieldÚPositiveSmallIntegerField)ÚsuperÚintrospected_field_typesr$   ©Ú	__class__r   r   r-   ’   s   ÿüz)DatabaseFeatures.introspected_field_typesc                 C   ó   | j jdkS )Nià" ©r   Ú
pg_versionr$   r   r   r   Úis_postgresql_14›   ó   z!DatabaseFeatures.is_postgresql_14c                 C   r0   )NiðI r1   r$   r   r   r   Úis_postgresql_15Ÿ   r4   z!DatabaseFeatures.is_postgresql_15c                 C   r0   )Ni q r1   r$   r   r   r   Úis_postgresql_16£   r4   z!DatabaseFeatures.is_postgresql_16r3   r5   )GÚ__name__Ú
__module__Ú__qualname__Úminimum_database_versionÚallows_group_by_selected_pksÚcan_return_columns_from_insertÚ can_return_rows_from_bulk_insertÚhas_real_datatypeÚhas_native_uuid_fieldÚhas_native_duration_fieldÚhas_native_json_fieldÚcan_defer_constraint_checksÚhas_select_for_updateÚhas_select_for_update_nowaitÚhas_select_for_update_ofÚ!has_select_for_update_skip_lockedÚhas_select_for_no_key_updateÚcan_release_savepointsÚsupports_commentsÚsupports_tablespacesÚsupports_transactionsÚ!can_introspect_materialized_viewsÚcan_distinct_on_fieldsÚcan_rollback_ddlÚ+schema_editor_uses_clientside_param_bindingÚsupports_combined_altersÚnulls_order_largestr   Úclosed_cursor_error_classÚgreatest_least_ignores_nullsÚcan_clone_databasesÚsupports_temporal_subtractionÚ%supports_slicing_ordering_in_compoundÚ(create_test_procedure_without_params_sqlÚ(create_test_procedure_with_int_param_sqlÚ,create_test_table_with_composite_primary_keyÚrequires_casted_case_in_updatesÚsupports_over_clauseÚsupports_frame_exclusionÚ4only_supports_unbounded_with_preceding_and_followingÚ supports_aggregate_filter_clauseÚsupported_explain_formatsÚ&supports_deferrable_unique_constraintsÚhas_json_operatorsÚ-json_key_contains_list_matching_requires_listÚsupports_update_conflictsÚ%supports_update_conflicts_with_targetÚsupports_covering_indexesÚ!supports_stored_generated_columnsÚ"supports_virtual_generated_columnsÚcan_rename_indexÚtest_collationsÚtest_now_utc_templateÚinsert_test_table_with_defaultsr   r   r    r   r%   r-   r3   r5   r6   ÚpropertyÚoperatorÚ
attrgetterÚhas_bit_xorÚ supports_covering_spgist_indexesÚsupports_unlimited_charfieldÚ*supports_nulls_distinct_unique_constraintsÚ__classcell__r   r   r.   r   r   	   sš    ü
 





ÿr   )rm   Ú	django.dbr   r   Ú django.db.backends.base.featuresr   Ú)django.db.backends.postgresql.psycopg_anyr   Údjango.utils.functionalr   r   r   r   r   r   Ú<module>   s    