All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.azure.cosmos.CosmosAsyncScripts Maven / Gradle / Ivy

Go to download

This Package contains Microsoft Azure Cosmos SDK (with Reactive Extension Reactor support) for Azure Cosmos DB SQL API

There is a newer version: 4.63.3
Show newest version
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.cosmos;

import com.azure.core.util.Context;
import com.azure.cosmos.implementation.ImplementationBridgeHelpers;
import com.azure.cosmos.implementation.OperationType;
import com.azure.cosmos.implementation.QueryFeedOperationState;
import com.azure.cosmos.implementation.RequestOptions;
import com.azure.cosmos.implementation.ResourceType;
import com.azure.cosmos.implementation.StoredProcedure;
import com.azure.cosmos.implementation.Trigger;
import com.azure.cosmos.implementation.UserDefinedFunction;
import com.azure.cosmos.models.CosmosQueryRequestOptions;
import com.azure.cosmos.models.CosmosStoredProcedureProperties;
import com.azure.cosmos.models.CosmosStoredProcedureRequestOptions;
import com.azure.cosmos.models.CosmosStoredProcedureResponse;
import com.azure.cosmos.models.CosmosTriggerProperties;
import com.azure.cosmos.models.CosmosTriggerResponse;
import com.azure.cosmos.models.CosmosUserDefinedFunctionProperties;
import com.azure.cosmos.models.CosmosUserDefinedFunctionResponse;
import com.azure.cosmos.models.ModelBridgeInternal;
import com.azure.cosmos.models.SqlQuerySpec;
import com.azure.cosmos.util.CosmosPagedFlux;
import com.azure.cosmos.util.UtilBridgeInternal;
import reactor.core.publisher.Mono;

import static com.azure.core.util.FluxUtil.withContext;

/**
 * The type Cosmos async scripts. This contains async methods to operate on cosmos scripts like UDFs, StoredProcedures
 * and Triggers
 */
public class CosmosAsyncScripts {
    private static final ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor =
        ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();

    private static final ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor =
        ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();

    private final CosmosAsyncContainer container;
    private final CosmosAsyncDatabase database;

    CosmosAsyncScripts(CosmosAsyncContainer container) {
        this.container = container;
        this.database = container.getDatabase();
    }
    /* CosmosAsyncStoredProcedure operations */

    /**
     * Creates a cosmos stored procedure.
     * 

* After subscription the operation will be performed. * The {@link Mono} upon successful completion will contain a single cosmos stored procedure response with the * created cosmos stored procedure. * In case of failure the {@link Mono} will error. * * @param properties the cosmos stored procedure properties. * @return an {@link Mono} containing the single cosmos stored procedure resource response or an error. */ public Mono createStoredProcedure(CosmosStoredProcedureProperties properties) { return this.createStoredProcedure(properties, new CosmosStoredProcedureRequestOptions()); } /** * Creates a cosmos stored procedure. *

* After subscription the operation will be performed. * The {@link Mono} upon successful completion will contain a single cosmos stored procedure response with the * created cosmos stored procedure. * In case of failure the {@link Mono} will error. * * @param properties the cosmos stored procedure properties. * @param options the stored procedure request options. * @return an {@link Mono} containing the single cosmos stored procedure resource response or an error. */ public Mono createStoredProcedure( CosmosStoredProcedureProperties properties, CosmosStoredProcedureRequestOptions options) { if (options == null) { options = new CosmosStoredProcedureRequestOptions(); } StoredProcedure sProc = new StoredProcedure(); sProc.setId(properties.getId()); sProc.setBody(properties.getBody()); final CosmosStoredProcedureRequestOptions requestOptions = options; return withContext(context -> createStoredProcedureInternal(sProc, requestOptions, context)); } /** * Reads all cosmos stored procedures in a container. *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the read cosmos stored * procedure properties. * In case of failure the {@link CosmosPagedFlux} will error. * * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the read cosmos stored * procedures * properties or an error. */ public CosmosPagedFlux readAllStoredProcedures() { return readAllStoredProcedures(new CosmosQueryRequestOptions()); } /** * Reads all cosmos stored procedures in a container. *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the read cosmos stored * procedure properties. * In case of failure the {@link CosmosPagedFlux} will error. * * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the read cosmos stored * procedures * properties or an error. */ CosmosPagedFlux readAllStoredProcedures(CosmosQueryRequestOptions options) { return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> { String spanName = "readAllStoredProcedures." + this.container.getId(); CosmosAsyncClient client = this.container.getDatabase().getClient(); CosmosQueryRequestOptions nonNullOptions = options != null ? options : new CosmosQueryRequestOptions(); QueryFeedOperationState state = new QueryFeedOperationState( client, spanName, this.container.getDatabase().getId(), this.container.getId(), ResourceType.StoredProcedure, OperationType.ReadFeed, queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName), nonNullOptions, pagedFluxOptions ); pagedFluxOptions.setFeedOperationState(state); return database.getDocClientWrapper() .readStoredProcedures(container.getLink(), state) .map(response -> feedResponseAccessor.createFeedResponse( ModelBridgeInternal.getCosmosStoredProcedurePropertiesFromV2Results(response.getResults()), response.getResponseHeaders(), response.getCosmosDiagnostics())); }); } /** * Query for stored procedures in a container. *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the obtained stored procedures. * In case of failure the {@link CosmosPagedFlux} will error. * * @param query the the query. * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the obtained stored * procedures or * an error. */ public CosmosPagedFlux queryStoredProcedures( String query, CosmosQueryRequestOptions options) { if (options == null) { options = new CosmosQueryRequestOptions(); } return queryStoredProceduresInternal(new SqlQuerySpec(query), options); } /** * Query for stored procedures in a container. *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the obtained stored procedures. * In case of failure the {@link CosmosPagedFlux} will error. * * @param querySpec the SQL query specification. * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the obtained stored * procedures or * an error. */ public CosmosPagedFlux queryStoredProcedures( SqlQuerySpec querySpec, CosmosQueryRequestOptions options) { if (options == null) { options = new CosmosQueryRequestOptions(); } return queryStoredProceduresInternal(querySpec, options); } /** * Gets a CosmosAsyncStoredProcedure object without making a service call * * @param id id of the stored procedure * @return a cosmos stored procedure */ public CosmosAsyncStoredProcedure getStoredProcedure(String id) { return new CosmosAsyncStoredProcedure(id, this.container); } /* UDF Operations */ /** * Creates a cosmos user defined function. *

* After subscription the operation will be performed. * The {@link Mono} upon successful completion will contain a single cosmos user defined function response. * In case of failure the {@link Mono} will error. * * @param properties the cosmos user defined function properties * @return an {@link Mono} containing the single resource response with the created user defined function or an * error. */ public Mono createUserDefinedFunction( CosmosUserDefinedFunctionProperties properties) { UserDefinedFunction udf = new UserDefinedFunction(); udf.setId(properties.getId()); udf.setBody(properties.getBody()); return withContext(context -> createUserDefinedFunctionInternal(udf, context)); } /** * Reads all cosmos user defined functions in the container *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the read user defined functions. * In case of failure the {@link CosmosPagedFlux} will error. * * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the read user defined * functions or an * error. */ public CosmosPagedFlux readAllUserDefinedFunctions() { return readAllUserDefinedFunctions(new CosmosQueryRequestOptions()); } /** * Reads all cosmos user defined functions in the container *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the read user defined functions. * In case of failure the {@link CosmosPagedFlux} will error. * * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the read user defined * functions or an * error. */ CosmosPagedFlux readAllUserDefinedFunctions(CosmosQueryRequestOptions options) { return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> { String spanName = "readAllUserDefinedFunctions." + this.container.getId(); CosmosAsyncClient client = this.container.getDatabase().getClient(); CosmosQueryRequestOptions nonNullOptions = options != null ? options : new CosmosQueryRequestOptions(); QueryFeedOperationState state = new QueryFeedOperationState( client, spanName, this.container.getDatabase().getId(), this.container.getId(), ResourceType.UserDefinedFunction, OperationType.ReadFeed, queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName), nonNullOptions, pagedFluxOptions ); pagedFluxOptions.setFeedOperationState(state); return database.getDocClientWrapper() .readUserDefinedFunctions(container.getLink(), state) .map(response -> feedResponseAccessor.createFeedResponse( ModelBridgeInternal.getCosmosUserDefinedFunctionPropertiesFromV2Results(response.getResults()), response.getResponseHeaders(), response.getCosmosDiagnostics())); }); } /** * Query for user defined functions in the container. *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the obtained user defined * functions. * In case of failure the {@link CosmosPagedFlux} will error. * * @param query the query. * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the obtained user defined * functions * or an error. */ public CosmosPagedFlux queryUserDefinedFunctions( String query, CosmosQueryRequestOptions options) { if (options == null) { options = new CosmosQueryRequestOptions(); } return queryUserDefinedFunctions(new SqlQuerySpec(query), options); } /** * Query for user defined functions in the container. *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the obtained user defined * functions. * In case of failure the {@link CosmosPagedFlux} will error. * * @param querySpec the SQL query specification. * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the obtained user defined * functions * or an error. */ public CosmosPagedFlux queryUserDefinedFunctions( SqlQuerySpec querySpec, CosmosQueryRequestOptions options) { if (options == null) { options = new CosmosQueryRequestOptions(); } return queryUserDefinedFunctionsInternal(querySpec, options); } /** * Gets a CosmosAsyncUserDefinedFunction object without making a service call * * @param id id of the user defined function * @return a cosmos user defined function */ public CosmosAsyncUserDefinedFunction getUserDefinedFunction(String id) { return new CosmosAsyncUserDefinedFunction(id, this.container); } /* Trigger Operations */ /** * Creates a Cosmos trigger. *

* After subscription the operation will be performed. * The {@link Mono} upon successful completion will contain a cosmos trigger response * In case of failure the {@link Mono} will error. * * @param properties the cosmos trigger properties * @return an {@link Mono} containing the single resource response with the created trigger or an error. */ public Mono createTrigger(CosmosTriggerProperties properties) { return withContext(context -> createTriggerInternal(properties, context)); } /** * Reads all triggers in a container *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the read cosmos trigger * properties. * In case of failure the {@link CosmosPagedFlux} will error. * * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the read cosmos rigger * properties or * an error. */ public CosmosPagedFlux readAllTriggers() { return readAllTriggers(new CosmosQueryRequestOptions()); } /** * Reads all triggers in a container *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the read cosmos trigger * properties. * In case of failure the {@link CosmosPagedFlux} will error. * * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the read cosmos rigger * properties or * an error. */ CosmosPagedFlux readAllTriggers(CosmosQueryRequestOptions options) { return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> { String spanName = "readAllTriggers." + this.container.getId(); CosmosAsyncClient client = this.container.getDatabase().getClient(); CosmosQueryRequestOptions nonNullOptions = options != null ? options : new CosmosQueryRequestOptions(); QueryFeedOperationState state = new QueryFeedOperationState( client, spanName, this.container.getDatabase().getId(), this.container.getId(), ResourceType.Trigger, OperationType.ReadFeed, queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName), nonNullOptions, pagedFluxOptions ); pagedFluxOptions.setFeedOperationState(state); return database.getDocClientWrapper() .readTriggers(container.getLink(), state) .map(response -> feedResponseAccessor.createFeedResponse( ModelBridgeInternal.getCosmosTriggerPropertiesFromV2Results(response.getResults()), response.getResponseHeaders(), response.getCosmosDiagnostics())); }); } /** * Query for triggers in the container *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the obtained triggers. * In case of failure the {@link CosmosPagedFlux} will error. * * @param query the query. * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the obtained triggers or an * error. */ public CosmosPagedFlux queryTriggers(String query, CosmosQueryRequestOptions options) { if (options == null) { options = new CosmosQueryRequestOptions(); } return queryTriggersInternal(false, new SqlQuerySpec(query), options); } /** * Query for triggers in the container *

* After subscription the operation will be performed. * The {@link CosmosPagedFlux} will contain one or several feed response pages of the obtained triggers. * In case of failure the {@link CosmosPagedFlux} will error. * * @param querySpec the SQL query specification. * @param options the query request options. * @return a {@link CosmosPagedFlux} containing one or several feed response pages of the obtained triggers or an * error. */ public CosmosPagedFlux queryTriggers( SqlQuerySpec querySpec, CosmosQueryRequestOptions options) { if (options == null) { options = new CosmosQueryRequestOptions(); } return queryTriggersInternal(true, querySpec, options); } /** * Gets a CosmosAsyncTrigger object without making a service call * * @param id id of the cosmos trigger * @return a cosmos trigger */ public CosmosAsyncTrigger getTrigger(String id) { return new CosmosAsyncTrigger(id, this.container); } private CosmosPagedFlux queryStoredProceduresInternal( SqlQuerySpec querySpec, CosmosQueryRequestOptions options) { return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> { String spanName = "queryStoredProcedures." + this.container.getId(); CosmosAsyncClient client = this.container.getDatabase().getClient(); CosmosQueryRequestOptions nonNullOptions = options != null ? options : new CosmosQueryRequestOptions(); QueryFeedOperationState state = new QueryFeedOperationState( client, spanName, this.container.getDatabase().getId(), this.container.getId(), ResourceType.StoredProcedure, OperationType.Query, queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName), nonNullOptions, pagedFluxOptions ); pagedFluxOptions.setFeedOperationState(state); return database.getDocClientWrapper() .queryStoredProcedures(container.getLink(), querySpec, state) .map(response -> feedResponseAccessor.createFeedResponse( ModelBridgeInternal.getCosmosStoredProcedurePropertiesFromV2Results(response.getResults()), response.getResponseHeaders(), response.getCosmosDiagnostics())); }); } private CosmosPagedFlux queryUserDefinedFunctionsInternal( SqlQuerySpec querySpec, CosmosQueryRequestOptions options) { return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> { String spanName = "queryUserDefinedFunctions." + this.container.getId(); CosmosAsyncClient client = this.container.getDatabase().getClient(); CosmosQueryRequestOptions nonNullOptions = options != null ? options : new CosmosQueryRequestOptions(); QueryFeedOperationState state = new QueryFeedOperationState( client, spanName, this.container.getDatabase().getId(), this.container.getId(), ResourceType.UserDefinedFunction, OperationType.Query, queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName), nonNullOptions, pagedFluxOptions ); pagedFluxOptions.setFeedOperationState(state); return database.getDocClientWrapper() .queryUserDefinedFunctions(container.getLink(), querySpec, state) .map(response -> feedResponseAccessor.createFeedResponse( ModelBridgeInternal.getCosmosUserDefinedFunctionPropertiesFromV2Results(response.getResults()), response.getResponseHeaders(), response.getCosmosDiagnostics())); }); } private CosmosPagedFlux queryTriggersInternal( boolean isParameterised, SqlQuerySpec querySpec, CosmosQueryRequestOptions options) { return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> { String spanName; if (isParameterised) { spanName = "queryTriggers." + this.container.getId() + "." + querySpec.getQueryText(); } else { spanName = "queryTriggers." + this.container.getId(); } CosmosAsyncClient client = this.container.getDatabase().getClient(); CosmosQueryRequestOptions nonNullOptions = options != null ? options : new CosmosQueryRequestOptions(); QueryFeedOperationState state = new QueryFeedOperationState( client, spanName, this.container.getDatabase().getId(), this.container.getId(), ResourceType.Trigger, OperationType.Query, queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName), nonNullOptions, pagedFluxOptions ); pagedFluxOptions.setFeedOperationState(state); return database.getDocClientWrapper() .queryTriggers(container.getLink(), querySpec, state) .map(response -> feedResponseAccessor.createFeedResponse( ModelBridgeInternal.getCosmosTriggerPropertiesFromV2Results(response.getResults()), response.getResponseHeaders(), response.getCosmosDiagnostics())); }); } private Mono createStoredProcedureInternal(StoredProcedure sProc, CosmosStoredProcedureRequestOptions options, Context context) { String spanName = "createStoredProcedure." + container.getId(); RequestOptions nonNullRequestOptions = options != null ? ModelBridgeInternal.toRequestOptions(options) : new RequestOptions(); Mono responseMono = createStoredProcedureInternal(sProc, nonNullRequestOptions); CosmosAsyncClient client = database.getClient(); return client.getDiagnosticsProvider().traceEnabledCosmosResponsePublisher( responseMono, context, spanName, database.getId(), this.container.getId(), client, null, OperationType.Create, ResourceType.StoredProcedure, nonNullRequestOptions); } private Mono createStoredProcedureInternal(StoredProcedure sProc, RequestOptions nonNullRequestOptions) { return database.getDocClientWrapper() .createStoredProcedure( container.getLink(), sProc, nonNullRequestOptions) .map(ModelBridgeInternal::createCosmosStoredProcedureResponse) .single(); } private Mono createUserDefinedFunctionInternal( UserDefinedFunction udf, Context context) { String spanName = "createUserDefinedFunction." + container.getId(); Mono responseMono = createUserDefinedFunctionInternal(udf); CosmosAsyncClient client = database.getClient(); return client.getDiagnosticsProvider().traceEnabledCosmosResponsePublisher( responseMono, context, spanName, database.getId(), this.container.getId(), client, null, OperationType.Create, ResourceType.UserDefinedFunction, null); } private Mono createUserDefinedFunctionInternal( UserDefinedFunction udf) { return database.getDocClientWrapper() .createUserDefinedFunction(container.getLink(), udf, null) .map(ModelBridgeInternal::createCosmosUserDefinedFunctionResponse).single(); } private Mono createTriggerInternal(CosmosTriggerProperties properties, Context context) { String spanName = "createTrigger." + container.getId(); Mono responseMono = createTriggerInternal(properties); CosmosAsyncClient client = database.getClient(); return client.getDiagnosticsProvider().traceEnabledCosmosResponsePublisher( responseMono, context, spanName, database.getId(), this.container.getId(), client, null, OperationType.Create, ResourceType.Trigger, null); } private Mono createTriggerInternal(CosmosTriggerProperties properties) { Trigger trigger = new Trigger(ModelBridgeInternal.getResource(properties).getPropertyBag()); return database.getDocClientWrapper() .createTrigger(container.getLink(), trigger, null) .map(ModelBridgeInternal::createCosmosTriggerResponse) .single(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy