Mettre à jour de la référence de la configuration de la connexion

Objets et procédures de la base de données

Les objets de base de données suivants sont créés par le biais de configuration/update_connection_configuration.sql

PUBLIC.UPDATE_CONNECTION_CONFIGURATION(VARIANT connection_configuration)

Procédure de point d’entrée disponible pour le rôle ADMIN. Cette procédure appelle le gestionnaire (handler) Java UpdateConnectionConfigurationHandler.updateConnectionConfiguration.

PUBLIC.UPDATE_CONNECTION_CONFIGURATION_VALIDATE( connection_configuration VARIANT)

Procédure utilisée pour fournir une logique de validation supplémentaire spécifique au connecteur. Par défaut, elle renvoie 'response_code': 'OK'. Elle est appelée par ConnectionConfigurationInputValidator par défaut. Peut être écrasée à la fois en SQL et en Java.

PUBLIC.DRAFT_CONNECTION_CONFIGURATION_INTERNAL( connection_configuration VARIANT)

Procédure utilisée pour fournir une logique supplémentaire spécifique au connecteur. Par défaut, elle renvoie 'response_code': 'OK'. Elle est appelée par ConnectionConfigurationCallback par défaut. Peut être écrasée à la fois en SQL et en Java.

Gestionnaire (handler) personnalisé

Le gestionnaire (handler) et ses éléments internes peuvent être personnalisés selon les deux approches suivantes.

Approche de remplacement de procédure

Les composants suivants peuvent être remplacés à l’aide de SQL.

Gestionnaire (handler)

Pour fournir une implémentation personnalisée de UpdateConnectionConfigurationHandler, la procédure PUBLIC.UPDATE_CONNECTION_CONFIGURATION doit être remplacée. Par exemple :

CREATE OR REPLACE PROCEDURE PUBLIC.UPDATE_CONNECTION_CONFIGURATION(connection_configuration VARIANT)
RETURNS VARIANT
LANGUAGE JAVA
RUNTIME_VERSION = '11'
PACKAGES = ('com.snowflake:snowpark:1.11.0')
IMPORTS = ('/connectors-native-sdk.jar')
HANDLER = 'com.custom.handler.CustomUpdateConnectionConfigurationHandler.updateConnectionConfiguration';

GRANT USAGE ON PROCEDURE PUBLIC.UPDATE_CONNECTION_CONFIGURATION(VARIANT) TO APPLICATION ROLE ADMIN;
Copy

Procédures internes

Les procédures VALIDATE et INTERNAL peuvent également être personnalisées via SQL. Elles peuvent même appeler un autre gestionnaire (handler) Java :

CREATE OR REPLACE PROCEDURE PUBLIC.DRAFT_CONNECTION_CONFIGURATION_INTERNAL(connection_configuration VARIANT)
RETURNS VARIANT
LANGUAGE SQL
EXECUTE AS OWNER
AS
BEGIN
    -- SOME CUSTOM LOGIC BEGIN
    SELECT sysdate();
    -- SOME CUSTOM LOGIC END

    RETURN OBJECT_CONSTRUCT('response_code', 'OK');
END;

CREATE OR REPLACE PROCEDURE PUBLIC.UPDATE_CONNECTION_CONFIGURATION_VALIDATE(connection_configuration VARIANT)
    RETURNS VARIANT
    LANGUAGE JAVA
    RUNTIME_VERSION = '11'
    PACKAGES = ('com.snowflake:snowpark:1.11.0')
    IMPORTS = ('/connectors-native-sdk.jar')
    HANDLER = 'com.custom.handler.CustomConnectionConfigurationInputValidator.validate';
Copy

L’approche du constructeur

UpdateConnectionConfigurationHandler peut être personnalisé à l’aide de UpdateConnectionConfigurationHandlerBuilder. Ce constructeur permet au développeur de fournir des implémentations personnalisées des interfaces suivantes :

  • ConnectionConfigurationInputValidator

  • ConnectionConfigurationCallback

  • DraftConnectionValidator

  • ConnectionConfigurationCallback

  • ConnectionValidator

  • ConnectorErrorHelper

Dans le cas où l’une d’entre elles n’est pas fournie, l’implémentation par défaut fournie par le SDK sera utilisée.

class CustomConnectionConfigurationInputValidator implements ConnectionConfigurationInputValidator {

    @Override
    public ConnectorResponse validate(Variant configuration) {
        // CUSTOM VALIDATION LOGIC
        return ConnectorResponse.success();
    }
}

class CustomHandler {

    // Path to this method needs to be specified in the PUBLIC.UPDATE_CONNECTION_CONFIGURATION procedure using SQL
    public static Variant updateConnectionConfiguration(Session session, Variant configuration) {
        // Using the builder
        var handler = UpdateConnectionConfigurationHandler.builder(session)
            .withInputValidator(new CustomConnectionConfigurationInputValidator())
            .build();
        return handler.updateConnectionConfiguration(configuration).toVariant();
    }
}
Copy